From 9f83e2917512aa315445f843b04602b82c46fb6d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 8 Jul 2024 19:20:50 +0200 Subject: [PATCH 001/312] git --- apps/remix-ide/src/app/files/dgitProvider.ts | 99 ++++--- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/src/main.ts | 3 + apps/remixdesktop/src/plugins/appUpdater.ts | 3 - apps/remixdesktop/src/plugins/fsPlugin.ts | 1 - apps/remixdesktop/src/plugins/isoGitPlugin.ts | 242 ++++++++++++------ apps/remixdesktop/src/preload.ts | 9 +- apps/remixdesktop/src/tools/git.ts | 52 +++- apps/remixdesktop/src/types/index.ts | 9 - apps/remixdesktop/tsconfig.json | 24 +- libs/remix-api/src/index.ts | 3 +- .../src/lib/plugins/fileSystem-api.ts | 5 +- libs/remix-api/src/lib/plugins/fs-api.ts | 11 + libs/remix-api/src/lib/plugins/git-api.ts | 43 ++++ .../remix-api/src/lib/plugins/terminal-api.ts | 10 + libs/remix-api/src/lib/remix-api.ts | 8 +- libs/remix-api/src/lib/types/git.ts | 189 ++++++++++++++ libs/remix-git/index.ts | 1 + libs/remix-git/src/index.ts | 42 +++ .../editor/src/lib/remix-plugin-types.ts | 1 - .../components/buttons/sourceControlBase.tsx | 2 +- .../buttons/sourcecontrolbuttons.tsx | 2 +- .../components/github/repositoryselect.tsx | 2 +- .../github/selectandclonerepositories.tsx | 2 +- .../components/navigation/branchedetails.tsx | 2 +- .../git/src/components/navigation/commits.tsx | 2 +- .../components/navigation/remotesdetails.tsx | 2 +- .../git/src/components/panels/branches.tsx | 1 - .../branches/branchdifferencedetails.tsx | 2 +- .../panels/branches/branchdifferences.tsx | 2 +- .../panels/branches/localbranchdetails.tsx | 2 +- .../panels/branches/remotebranchedetails.tsx | 2 +- .../components/panels/commands/pushpull.tsx | 2 +- .../panels/commits/commitdetailsitem.tsx | 2 +- .../src/components/panels/remoteselect.tsx | 2 +- .../src/components/panels/remotesimport.tsx | 2 +- .../sourcecontrol/sourcecontrolitem.tsx | 3 +- .../sourcecontrol/sourcontrolitembuttons.tsx | 2 +- libs/remix-ui/git/src/index.ts | 2 +- libs/remix-ui/git/src/lib/gitactions.ts | 14 +- libs/remix-ui/git/src/lib/listeners.ts | 15 +- libs/remix-ui/git/src/lib/pluginActions.ts | 4 +- libs/remix-ui/git/src/state/actions.ts | 4 +- libs/remix-ui/git/src/state/context.tsx | 9 +- libs/remix-ui/git/src/state/gitpayload.ts | 4 +- libs/remix-ui/git/src/state/gitreducer.tsx | 6 +- libs/remix-ui/git/src/types/index.ts | 215 +--------------- .../workspace/src/lib/actions/workspace.ts | 15 +- 48 files changed, 657 insertions(+), 424 deletions(-) create mode 100644 libs/remix-api/src/lib/plugins/fs-api.ts create mode 100644 libs/remix-api/src/lib/plugins/git-api.ts create mode 100644 libs/remix-api/src/lib/plugins/terminal-api.ts create mode 100644 libs/remix-api/src/lib/types/git.ts create mode 100644 libs/remix-git/index.ts create mode 100644 libs/remix-git/src/index.ts diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 87cb4c3c8c..51d6a7f32d 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -19,10 +19,12 @@ import { Octokit, App } from "octokit" import { OctokitResponse } from '@octokit/types' import { Endpoints } from "@octokit/types" import { IndexedDBStorage } from './filesystems/indexedDB' -import { GitHubUser, branch, commitChange, remote, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInput, rmInput, resolveRefInput, readBlobInput, repositoriesInput, commitInput, branchDifference, compareBranchesInput, initInput, userEmails, checkoutInput } from '@remix-ui/git' +import { GitHubUser, branch, commitChange, remote, userEmails } from '@remix-ui/git' +import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType} from '@remix-api' import { LibraryProfile, StatusEvents } from '@remixproject/plugin-utils' import { ITerminal } from '@remixproject/plugin-api/src/lib/terminal' import { partial } from 'lodash' +import { CustomRemixApi } from '@remix-api' declare global { interface Window { remixFileSystemCallback: IndexedDBStorage; remixFileSystem: any; } @@ -34,11 +36,11 @@ const profile: LibraryProfile = { description: 'Decentralized git provider', icon: 'assets/img/fileManager.webp', version: '0.0.1', - methods: ['init', 'localStorageUsed', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'reset', 'rm', 'lsfiles', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pull', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'version', 'updateSubmodules' + methods: ['init', 'localStorageUsed', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pull', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'version', 'updateSubmodules' , 'getGitHubUser', 'remotebranches', 'remotecommits', 'repositories', 'getCommitChanges', 'compareBranches'], kind: 'file-system' } -class DGitProvider extends Plugin { +class DGitProvider extends Plugin { ipfsconfig: { host: string; port: number; protocol: string; ipfsurl: string } globalIPFSConfig: { host: string; port: number; protocol: string; ipfsurl: string } remixIPFS: { host: string; port: number; protocol: string; ipfsurl: string } @@ -141,7 +143,7 @@ class DGitProvider extends Plugin { } async getCommandUser(input) { - const author = { + const author: author = { name: '', email: '' } @@ -167,7 +169,7 @@ class DGitProvider extends Plugin { return author } - async init(input?: initInput): Promise { + async init(input?: initInputType): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'init', { defaultBranch: (input && input.defaultBranch) || 'main' @@ -192,7 +194,7 @@ class DGitProvider extends Plugin { return version } - async status(cmd): Promise> { + async status(cmd: statusInput): Promise> { if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'status', cmd) @@ -208,7 +210,7 @@ class DGitProvider extends Plugin { return status } - async add(cmd: addInput): Promise { + async add(cmd: addInputType): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'add', cmd) @@ -222,7 +224,7 @@ class DGitProvider extends Plugin { this.emit('add') } - async rm(cmd: rmInput) { + async rm(cmd: rmInputType) { if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'rm', cmd) @@ -236,21 +238,7 @@ class DGitProvider extends Plugin { } } - async reset(cmd) { - - if ((Registry.getInstance().get('platform').api.isDesktop())) { - await this.call('isogit', 'reset', cmd) - } else { - await git.resetIndex({ - ...await this.addIsomorphicGitConfigFS(), - ...cmd - }) - this.emit('rm') - - } - } - - async checkout(cmd: checkoutInput): Promise { + async checkout(cmd: checkoutInputType): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'checkout', cmd) @@ -291,12 +279,11 @@ class DGitProvider extends Plugin { this.emit('checkout') } - async log(cmd: { ref: string }): Promise { + async log(cmd: logInputType): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'log', { ...cmd, - depth: 10 }) return status @@ -310,6 +297,9 @@ class DGitProvider extends Plugin { } async compareBranches({ branch, remote }: compareBranchesInput): Promise { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'compareBranches', { branch, remote }) + } // Get current branch commits const headCommits = await git.log({ ...await this.addIsomorphicGitConfigFS(), @@ -339,6 +329,11 @@ class DGitProvider extends Plugin { } async getCommitChanges(commitHash1: string, commitHash2: string): Promise { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + const result = this.call('isogit', 'getCommitChanges', commitHash1, commitHash2 ) + return result + } + const result: commitChange[] = await git.walk({ ...await this.addIsomorphicGitConfigFS(), trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], @@ -388,14 +383,14 @@ class DGitProvider extends Plugin { return result } - async remotes(config): Promise { + async remotes(): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'remotes', config) + return await this.call('isogit', 'remotes') } let remotes: remote[] = [] try { - remotes = (await git.listRemotes({ ...config ? config : await this.addIsomorphicGitConfigFS() })).map((remote) => { return { name: remote.remote, url: remote.url } } + remotes = (await git.listRemotes({ ...await this.addIsomorphicGitConfigFS() })).map((remote) => { return { name: remote.remote, url: remote.url } } ) } catch (e) { // do nothing @@ -423,15 +418,15 @@ class DGitProvider extends Plugin { return status } - async currentbranch(config: currentBranchInput): Promise { + async currentbranch(input: currentBranchInput): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'currentbranch') + return await this.call('isogit', 'currentbranch', input) } try { const defaultConfig = await this.addIsomorphicGitConfigFS() - const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig + const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig const name = await git.currentBranch(cmd) let remote: remote = undefined try { @@ -463,13 +458,15 @@ class DGitProvider extends Plugin { async branches(config): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'branches') + const branches = await this.call('isogit', 'branches') + console.log(branches) + return branches } try { const defaultConfig = await this.addIsomorphicGitConfigFS() const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig - const remotes = await this.remotes(config) + const remotes = await this.remotes() let branches: branch[] = [] branches = (await git.listBranches(cmd)).map((branch) => { return { remote: undefined, name: branch } }) for (const remote of remotes) { @@ -484,7 +481,7 @@ class DGitProvider extends Plugin { } } - async commit(cmd: commitInput): Promise { + async commit(cmd: commitInputType): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { try { @@ -511,19 +508,6 @@ class DGitProvider extends Plugin { } } - async lsfiles(cmd) { - - if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'lsfiles', cmd) - } - - const filesInStaging = await git.listFiles({ - ...await this.addIsomorphicGitConfigFS(), - ...cmd - }) - return filesInStaging - } - async resolveref(cmd: resolveRefInput): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { @@ -569,7 +553,7 @@ class DGitProvider extends Plugin { async addremote(input: remote): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { - await this.call('isogit', 'addremote', { url: input.url, remote: input.name }) + await this.call('isogit', 'addremote', input) return } await git.addRemote({ ...await this.addIsomorphicGitConfigFS(), url: input.url, remote: input.name }) @@ -577,7 +561,7 @@ class DGitProvider extends Plugin { async delremote(input: remote) { if ((Registry.getInstance().get('platform').api.isDesktop())) { - await this.call('isogit', 'delremote', { remote: input.name }) + await this.call('isogit', 'delremote', input) return } await git.deleteRemote({ ...await this.addIsomorphicGitConfigFS(), remote: input.name }) @@ -608,6 +592,7 @@ class DGitProvider extends Plugin { } catch (e) { this.call('notification', 'alert', { id: 'dgitAlert', + title: 'Error Cloning', message: 'Unexpected error while cloning the repository: \n' + e.toString(), }) } @@ -791,7 +776,10 @@ class DGitProvider extends Plugin { input, } if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'push', cmd) + return await this.call('isogit', 'push', { + ...input, + author: await this.getCommandUser(input), + }) } else { const cmd2 = { @@ -820,7 +808,10 @@ class DGitProvider extends Plugin { } let result if ((Registry.getInstance().get('platform').api.isDesktop())) { - result = await this.call('isogit', 'pull', cmd) + result = await this.call('isogit', 'pull', { + ...input, + author: await this.getCommandUser(input), + }) } else { const cmd2 = { @@ -852,7 +843,10 @@ class DGitProvider extends Plugin { let result if ((Registry.getInstance().get('platform').api.isDesktop())) { - result = await this.call('isogit', 'fetch', cmd) + result = await this.call('isogit', 'fetch', { + ...input, + author: await this.getCommandUser(input), + }) } else { const cmd2 = { ...cmd, @@ -1072,6 +1066,7 @@ class DGitProvider extends Plugin { } async remotecommits(input: remoteCommitsInputType): Promise { + console.log('remotecommits', input) const octokit = new Octokit({ auth: input.token }) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index c6411f2dcd..6e440b2ecb 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -1,7 +1,7 @@ { "name": "remixdesktop", "version": "1.0.7-insiders", - "main": "build/main.js", + "main": "build/apps/remixdesktop/src/main.js", "license": "MIT", "type": "commonjs", "description": "Remix IDE Desktop", diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index 65cd68d61e..d06f3d62f0 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -145,6 +145,9 @@ HelpMenu(commandKeys, execCommand), if (!isE2E || isE2ELocal) Menu.setApplicationMenu(Menu.buildFromTemplate(menu)) +ipcMain.handle('logger', async (...args) => { + console.log('log:', ...args) +}) ipcMain.handle('config:isPackaged', async () => { return isPackaged diff --git a/apps/remixdesktop/src/plugins/appUpdater.ts b/apps/remixdesktop/src/plugins/appUpdater.ts index e7a6ff56d8..7f21fd962c 100644 --- a/apps/remixdesktop/src/plugins/appUpdater.ts +++ b/apps/remixdesktop/src/plugins/appUpdater.ts @@ -78,14 +78,11 @@ const clientProfile: Profile = { class AppUpdaterPluginClient extends ElectronBasePluginClient { constructor(webContentsId: number, profile: Profile) { - console.log('AppUpdaterPluginClient') super(webContentsId, profile) } async onActivation(): Promise { - console.log('onActivation', 'appUpdaterPluginClient') this.onload(async () => { - console.log('onload', 'appUpdaterPluginClient') this.emit('loaded') if(isE2E) return await this.checkForUpdates() diff --git a/apps/remixdesktop/src/plugins/fsPlugin.ts b/apps/remixdesktop/src/plugins/fsPlugin.ts index 0f45727066..bbf96e0856 100644 --- a/apps/remixdesktop/src/plugins/fsPlugin.ts +++ b/apps/remixdesktop/src/plugins/fsPlugin.ts @@ -33,7 +33,6 @@ const getBaseName = (pathName: string): string => { } function onlyUnique(value: recentFolder, index: number, self: recentFolder[]) { - console.log(index, value) return self.findIndex((rc, index) => rc.path === value.path) === index } diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 3aaf610305..4aef5b9f36 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -1,12 +1,11 @@ -import { PluginClient } from "@remixproject/plugin"; import { Profile } from "@remixproject/plugin-utils"; import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron" import fs from 'fs/promises' import git from 'isomorphic-git' -import { dialog } from "electron"; import http from 'isomorphic-git/http/web' import { gitProxy } from "../tools/git"; -import { remote } from "../types"; +import { isoGit } from "@remix-git" +import { branch, branchDifference, branchInputType, cloneInputType, commitChange, commitInputType, compareBranchesInput, currentBranchInput, fetchInputType, initInputType, logInputType, pullInputType, pushInputType, remote, resolveRefInput, statusInput } from "@remix-api"; const profile: Profile = { name: 'isogit', @@ -48,7 +47,7 @@ const clientProfile: Profile = { name: 'isogit', displayName: 'isogit', description: 'isogit plugin', - methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'reset', 'rm', 'lsfiles', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder'] + methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder', 'getCommitChanges', 'compareBranches', 'startClone'] } class IsoGitPluginClient extends ElectronBasePluginClient { @@ -77,8 +76,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } } - async status(cmd: any) { - + async status(cmd: statusInput) { + console.log('status', cmd) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -101,8 +100,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return status } - async log(cmd: any) { - + async log(cmd: logInputType) { + console.log('LOG', cmd) /* we will use isomorphic git for now if(this.gitIsInstalled){ const log = await gitProxy.log(this.workingDir, cmd.ref) @@ -150,28 +149,13 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return rm } - async reset(cmd: any) { - - if (!this.workingDir || this.workingDir === '') { - throw new Error('No working directory') - } - - const reset = await git.resetIndex({ - ...await this.getGitConfig(), - ...cmd - }) - - return reset - } - - - async commit(cmd: any) { + async commit(cmd: commitInputType) { if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - const status = await gitProxy.commit(this.workingDir, cmd.message) + const status = await gitProxy.commit(this.workingDir, cmd) return status } @@ -183,7 +167,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return commit } - async init(input: any) { + async init(input: initInputType) { if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') @@ -194,11 +178,11 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } await git.init({ ...await this.getGitConfig(), - defaultBranch: (input && input.branch) || 'main' + defaultBranch: (input && input.defaultBranch) || 'main' }) } - async branch(cmd: any) { + async branch(cmd: branchInputType) { if (!this.workingDir || this.workingDir === '') { return null } @@ -210,18 +194,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return branch } - async lsfiles(cmd: any) { - if (!this.workingDir || this.workingDir === '') { - return [] - } - const lsfiles = await git.listFiles({ - ...await this.getGitConfig(), - ...cmd - }) - return lsfiles - } - - async resolveref(cmd: any) { + async resolveref(cmd: resolveRefInput) { + console.log('RESOLVE REF', cmd) if (!this.workingDir || this.workingDir === '') { return null } @@ -230,7 +204,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { ...await this.getGitConfig(), ...cmd }) - + console.log('RESOLVE REF', resolveref) return resolveref } @@ -263,38 +237,38 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return checkout } - async push(cmd: any) { + async push(cmd: pushInputType) { if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.push(this.workingDir, cmd.remote, cmd.ref, cmd.remoteRef, cmd.force) + await gitProxy.push(this.workingDir, cmd) } else { - + /* const push = await git.push({ ...await this.getGitConfig(), ...cmd, ...parseInput(cmd.input) }) - return push + return push*/ } } - async pull(cmd: any) { + async pull(cmd: pullInputType) { if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.pull(this.workingDir, cmd.remote, cmd.ref, cmd.remoteRef) + await gitProxy.pull(this.workingDir, cmd) } else { - + /* const pull = await git.pull({ ...await this.getGitConfig(), ...cmd, @@ -302,41 +276,42 @@ class IsoGitPluginClient extends ElectronBasePluginClient { }) return pull - + */ } } - async fetch(cmd: any) { - + async fetch(cmd: fetchInputType) { + console.log('FETCH', cmd) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.fetch(this.workingDir, cmd.remote, cmd.remoteRef) + await gitProxy.fetch(this.workingDir, cmd) } else { - + /* const fetch = await git.fetch({ ...await this.getGitConfig(), ...cmd, ...parseInput(cmd.input) }) - + */ return fetch } } - async clone(cmd: any) { + async clone(cmd: cloneInputType) { if (this.gitIsInstalled) { try { - await gitProxy.clone(cmd.url, cmd.dir) + await gitProxy.clone(cmd) } catch (e) { throw e } } else { try { + /* this.call('terminal' as any, 'log', 'Cloning using builtin git... please wait.') const clone = await git.clone({ ...await this.getGitConfig(), @@ -346,6 +321,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { }) return clone + */ } catch (e) { console.log('CLONE ERROR', e) throw e @@ -353,21 +329,21 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } } - async addremote(cmd: any) { + async addremote(input: remote) { const addremote = await git.addRemote({ ...await this.getGitConfig(), - ...cmd + url: input.url, remote: input.name }) return addremote } - async delremote(cmd: any) { + async delremote(input: remote) { const delremote = await git.deleteRemote({ ...await this.getGitConfig(), - ...cmd + remote: input.name }) return delremote @@ -375,53 +351,83 @@ class IsoGitPluginClient extends ElectronBasePluginClient { - remotes = async () => { + async remotes () { + console.log('REMOTES') if (!this.workingDir || this.workingDir === '') { return [] } let remotes: remote[] = [] - remotes = (await git.listRemotes({ ...await this.getGitConfig() })).map((remote) => { return { name: remote.remote, url: remote.url } } - ) + try { + remotes = (await git.listRemotes({ ...await this.getGitConfig() })).map((remote) => { return { name: remote.remote, url: remote.url } } + ) + } catch (e) { + // do nothing + } + console.log('REMOTES', remotes) return remotes } - async currentbranch() { + async currentbranch(input: currentBranchInput) { + console.log('CURRENT BRANCH', input) if (!this.workingDir || this.workingDir === '') { return '' } + try { const defaultConfig = await this.getGitConfig() - const name = await git.currentBranch(defaultConfig) + console.log(isoGit) + const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig + + const name = await git.currentBranch(cmd) + let remote: remote = undefined + try { + const remoteName = await git.getConfig({ + ...defaultConfig, + path: `branch.${name}.remote` + }) + if (remoteName) { + const remoteUrl = await git.getConfig({ + ...defaultConfig, + path: `remote.${remoteName}.url` + }) + remote = { name: remoteName, url: remoteUrl } + } - return name + } catch (e) { + // do nothing + } + console.log('NAME', name) + console.log('REMOTE', remote) + + return { + remote: remote, + name: name || '' + } } catch (e) { - return '' + return undefined } } - async branches() { + async branches(config: any) { + console.log('BRANCHES') if (!this.workingDir || this.workingDir === '') { return [] } try { - let cmd: any = { ...await this.getGitConfig() } + const defaultConfig = await this.getGitConfig() + const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig const remotes = await this.remotes() - let branches = [] + let branches: branch[] = [] branches = (await git.listBranches(cmd)).map((branch) => { return { remote: undefined, name: branch } }) for (const remote of remotes) { - cmd = { - ...cmd, - remote: remote.name - } - - const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote.name, name: branch } }) + cmd.remote = remote.name + const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) branches = [...branches, ...remotebranches] - } - return branches } catch (e) { + console.log(e) return [] } } @@ -431,6 +437,86 @@ class IsoGitPluginClient extends ElectronBasePluginClient { this.call('filePanel' as any, 'clone') } + async getCommitChanges(commitHash1: string, commitHash2: string): Promise { + const result: commitChange[] = await git.walk({ + ...await this.getGitConfig(), + trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], + map: async function (filepath, [A, B]) { + + if (filepath === '.') { + return + } + try { + if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { + return + } + } catch (e) { + // ignore + } + + // generate ids + const Aoid = A && await A.oid() || undefined + const Boid = B && await B.oid() || undefined + + const commitChange: Partial = { + hashModified: commitHash1, + hashOriginal: commitHash2, + path: filepath, + } + + // determine modification type + if (Aoid !== Boid) { + commitChange.type = "modified" + } + if (Aoid === undefined) { + commitChange.type = "deleted" + } + if (Boid === undefined || !commitHash2) { + commitChange.type = "added" + } + if (Aoid === undefined && Boid === undefined) { + commitChange.type = "unknown" + } + if (commitChange.type) + return commitChange + else + return undefined + }, + }) + + return result + } + + async compareBranches({ branch, remote }: compareBranchesInput): Promise { + + // Get current branch commits + const headCommits = await git.log({ + ...await this.getGitConfig(), + ref: branch.name, + }); + + // Get remote branch commits + const remoteCommits = await git.log({ + ...await this.getGitConfig(), + ref: `${remote.name}/${branch.name}`, + }); + + // Convert arrays of commit objects to sets of commit SHAs + const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); + const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); + + // Filter out commits that are only in the remote branch + const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); + + // filter out commits that are only in the local branch + const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); + + return { + uniqueHeadCommits, + uniqueRemoteCommits, + }; + } + } diff --git a/apps/remixdesktop/src/preload.ts b/apps/remixdesktop/src/preload.ts index 356e262347..50c2fd4e84 100644 --- a/apps/remixdesktop/src/preload.ts +++ b/apps/remixdesktop/src/preload.ts @@ -28,10 +28,17 @@ contextBridge.exposeInMainWorld('electronAPI', { plugins: exposedPLugins.map(name => { return { name, - on: (cb:any) => ipcRenderer.on(`${name}:send`, cb), + on: (cb:any) => { + if(name === 'isogit') console.log('isogit', cb) + ipcRenderer.on(`${name}:send`, cb) + }, send: (message: Partial) => { + //if(name === 'isogit') console.log(name, message) + //if(name === 'isogit') ipcRenderer.invoke(`logger`, name, message) ipcRenderer.send(`${name}:on:${webContentsId}`, message) } } }) + + }) \ No newline at end of file diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index 841ba952b0..5f8676122b 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -1,6 +1,7 @@ import { exec } from 'child_process'; import { CommitObject, ReadCommitResult } from 'isomorphic-git'; import { promisify } from 'util'; +import { cloneInputType, commitInputType, fetchInputType, pullInputType, pushInputType } from "@remix-api"; const execAsync = promisify(exec); const statusTransFormMatrix = (status: string) => { @@ -37,27 +38,56 @@ export const gitProxy = { } }, + async defaultRemoteName(path: string) { + try { + const { stdout } = await execAsync('git remote', { cwd: path }); + const remotes = stdout.trim().split('\n'); + return remotes[0]; + } catch (error) { + throw new Error(`Failed to get the default remote name: ${error.message}`); + } + }, - clone: async (url: string, path: string) => { - const { stdout, stderr } = await execAsync(`git clone ${url} "${path}"`); + clone: async (input: cloneInputType) => { + const { stdout, stderr } = await execAsync(`git clone ${input.url} "${input.dir}"`); }, - async push(path: string, remote: string, src: string, branch: string, force: boolean = false) { - const { stdout, stderr } = await execAsync(`git push ${force ? ' -f' : ''} ${remote} ${src}:${branch}`, { cwd: path }); + async push(path: string, input: pushInputType) { + if(!input.remote || !input.remote.name) { + input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } + } + const { stdout, stderr } = await execAsync(`git push ${input.force ? ' -f' : ''} ${input.remote.name} ${input.ref.name}:${input.remoteRef.name}`, { cwd: path }); }, - async pull(path: string, remote: string, src: string, branch: string) { - const { stdout, stderr } = await execAsync(`git pull ${remote} ${src}:${branch}`, { cwd: path }); + async pull(path: string, input: pullInputType) { + if(!input.remote || !input.remote.name) { + input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } + } + const { stdout, stderr } = await execAsync(`git pull ${input.remote.name} ${input.ref.name}:${input.remoteRef.name}`, { cwd: path }); }, - async fetch(path: string, remote: string, branch: string) { - const { stdout, stderr } = await execAsync(`git fetch ${remote} ${branch}`, { cwd: path }); + async fetch(path: string, input: fetchInputType) { + if(!input.remote || !input.remote.name) { + input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } + } + console.log('fetch', input, path, `git fetch ${input.remote.name} ${(input.ref && input.ref.name) ? input.ref.name : ''}`); + try { + const { stdout, stderr } = await execAsync(`git fetch ${input.remote.name} ${(input.ref && input.ref.name) ? input.ref.name : ''}`, { cwd: path }); + if (stdout) { + console.log('stdout:', stdout); + } + if (stderr) { + console.error('stderr:', stderr); + } + } catch (error) { + console.error('Error during fetch:', error); + } }, - async commit(path: string, message: string) { + async commit(path: string, input: commitInputType) { - await execAsync(`git commit -m '${message}'`, { cwd: path }); + await execAsync(`git commit -m '${input.message}'`, { cwd: path }); const { stdout, stderr } = await execAsync(`git rev-parse HEAD`, { cwd: path }); return stdout; @@ -103,7 +133,7 @@ export const gitProxy = { return 0 }) - + console.log('files', files) return files }, diff --git a/apps/remixdesktop/src/types/index.ts b/apps/remixdesktop/src/types/index.ts index 8c0087b62e..e69de29bb2 100644 --- a/apps/remixdesktop/src/types/index.ts +++ b/apps/remixdesktop/src/types/index.ts @@ -1,9 +0,0 @@ -export type branch = { - name: string - remote: remote -} - -export type remote = { - name: string - url: string -} \ No newline at end of file diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index ac23558de2..66bf3b35e4 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -9,13 +9,29 @@ "noImplicitAny": false, "sourceMap": true, "baseUrl": ".", - "outDir": "build", + "outDir": "./build", "moduleResolution": "node", "resolveJsonModule": true, "paths": { - "*": ["node_modules/*"] + "*": [ + "node_modules/*" + ], + "@remix-api": [ + "../../libs/remix-api/src/lib/types/git.ts" + ], + "@remix-git": [ + "../../libs/remix-git/src/index.ts", + ], }, - "typeRoots": ["src/**/*.d.ts", "node_modules/@types", "test/**/*.d.ts", "../remix-ide-e2e/src/**/*.d.ts"] + "typeRoots": [ + "src/**/*.d.ts", + "node_modules/@types", + "test/**/*.d.ts", + "../remix-ide-e2e/src/**/*.d.ts" + ] }, - "include": ["src/**/*"] + "include": [ + "src/**/*", + "../../libs/remix-git/src/index.ts" + ] } \ No newline at end of file diff --git a/libs/remix-api/src/index.ts b/libs/remix-api/src/index.ts index 71e343fc8a..96515e169f 100644 --- a/libs/remix-api/src/index.ts +++ b/libs/remix-api/src/index.ts @@ -1 +1,2 @@ -export * from './lib/remix-api' \ No newline at end of file +export * from './lib/remix-api' +export * from './lib/types/git' \ No newline at end of file diff --git a/libs/remix-api/src/lib/plugins/fileSystem-api.ts b/libs/remix-api/src/lib/plugins/fileSystem-api.ts index cba69f007e..84210f2f7d 100644 --- a/libs/remix-api/src/lib/plugins/fileSystem-api.ts +++ b/libs/remix-api/src/lib/plugins/fileSystem-api.ts @@ -1,10 +1,13 @@ -import { commitChange } from "@remix-ui/git"; +import { commitChange } from "@remix-api"; import { IFileSystem } from "@remixproject/plugin-api" // Extended interface with 'diff' method export interface IExtendedFileSystem extends IFileSystem { methods: IFileSystem['methods'] & { + /** Compare the differences between two files */ diff(change: commitChange): Promise + refresh(): Promise + hasGitSubmodules(): Promise isGitRepo(): Promise }; } \ No newline at end of file diff --git a/libs/remix-api/src/lib/plugins/fs-api.ts b/libs/remix-api/src/lib/plugins/fs-api.ts new file mode 100644 index 0000000000..3cded01b06 --- /dev/null +++ b/libs/remix-api/src/lib/plugins/fs-api.ts @@ -0,0 +1,11 @@ +import { StatusEvents } from "@remixproject/plugin-utils"; + +export interface IFs { + events: { + workingDirChanged(path: string): Promise, + } & StatusEvents, + methods: { + selectFolder(path?: string, title?: string, button?: string): Promise + openWindow(path?: string): Promise, + } +} \ No newline at end of file diff --git a/libs/remix-api/src/lib/plugins/git-api.ts b/libs/remix-api/src/lib/plugins/git-api.ts new file mode 100644 index 0000000000..228b0ccc07 --- /dev/null +++ b/libs/remix-api/src/lib/plugins/git-api.ts @@ -0,0 +1,43 @@ +import { StatusEvents } from "@remixproject/plugin-utils" +import { ReadBlobResult, ReadCommitResult, StatusRow } from "isomorphic-git" +import { commitChange, repositoriesInput, repository, cloneInputType, branchesInputType, branch, remote, logInputType, remoteCommitsInputType, pagedCommits, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, checkoutInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, commitInputType, statusInput, compareBranchesInput, branchDifference, initInputType, updateSubmodulesInput } from "../types/git" + +export interface IGitApi { + events: { + "checkout": () => void + "clone": () => void + "add": () => void + "rm": () => void + "commit": () => void + "branch": () => void + "init": () => void + } & StatusEvents, + methods: { + getCommitChanges(oid1: string, oid2: string): Promise + repositories(input: repositoriesInput): Promise + clone(input: cloneInputType): Promise + branches(input?: branchesInputType): Promise, + remotes(): Promise, + log(input: logInputType): Promise, + remotecommits(input: remoteCommitsInputType): Promise + fetch(input: fetchInputType): Promise + pull(input: pullInputType): Promise + push(input: pushInputType): Promise + currentbranch(input?: currentBranchInput): Promise + branch(input: branchInputType): Promise + checkout(input: checkoutInputType): Promise + add(input: addInputType): Promise + rm(input: rmInputType): Promise + resolveref(input: resolveRefInput): Promise + readblob(input: readBlobInput): Promise + commit(input: commitInputType): Promise + addremote(input: remote): Promise + delremote(input: remote): Promise + status(input?: statusInput): Promise> + compareBranches(input: compareBranchesInput): Promise + init(input?: initInputType): Promise + updateSubmodules: (input: updateSubmodulesInput) => Promise + version: () => Promise + } +} + diff --git a/libs/remix-api/src/lib/plugins/terminal-api.ts b/libs/remix-api/src/lib/plugins/terminal-api.ts new file mode 100644 index 0000000000..e7fc77bab5 --- /dev/null +++ b/libs/remix-api/src/lib/plugins/terminal-api.ts @@ -0,0 +1,10 @@ +import { ITerminal } from "@remixproject/plugin-api/src/lib/terminal" +import { StatusEvents } from "@remixproject/plugin-utils" + +export interface IExtendedTerminalApi extends ITerminal { + events: { + } & StatusEvents + methods: ITerminal['methods'] & { + logHtml(html: string): void + } +} \ No newline at end of file diff --git a/libs/remix-api/src/lib/remix-api.ts b/libs/remix-api/src/lib/remix-api.ts index 2dff94abdc..c2805a602d 100644 --- a/libs/remix-api/src/lib/remix-api.ts +++ b/libs/remix-api/src/lib/remix-api.ts @@ -1,13 +1,14 @@ -import { IGitApi } from "@remix-ui/git" import { IRemixApi } from "@remixproject/plugin-api" import { StatusEvents } from "@remixproject/plugin-utils" import { IConfigApi } from "./plugins/config-api" import { IFileDecoratorApi } from "./plugins/filedecorator-api" import { IExtendedFileSystem } from "./plugins/fileSystem-api" +import { IFs } from "./plugins/fs-api" +import { IGitApi } from "./plugins/git-api" import { INotificationApi } from "./plugins/notification-api" import { ISettings } from "./plugins/settings-api" +import { IExtendedTerminalApi } from "./plugins/terminal-api" import { IFilePanelApi } from "./plugins/filePanel-api" -import { Plugin } from "@remixproject/engine" export interface ICustomRemixApi extends IRemixApi { dgitApi: IGitApi @@ -16,6 +17,9 @@ export interface ICustomRemixApi extends IRemixApi { settings: ISettings fileDecorator: IFileDecoratorApi fileManager: IExtendedFileSystem + isogit: IGitApi, + terminal: IExtendedTerminalApi + fs: IFs filePanel: IFilePanelApi } diff --git a/libs/remix-api/src/lib/types/git.ts b/libs/remix-api/src/lib/types/git.ts new file mode 100644 index 0000000000..7482e95a1d --- /dev/null +++ b/libs/remix-api/src/lib/types/git.ts @@ -0,0 +1,189 @@ +import { ReadCommitResult } from "isomorphic-git" + +export type branchDifference = { + uniqueHeadCommits: ReadCommitResult[], + uniqueRemoteCommits: ReadCommitResult[], +} + + +export type commitChange = { + type: commitChangeType + path: string, + hashModified: string, + hashOriginal: string, + original?: string, + modified?: string, + readonly?: boolean +} + +export type commitChangeTypes = { + "deleted": "D" + "modified": "M" + "added": "A", + "unknown": "?" +} + +export type pagedCommits = { + page: number, + perPage: number, + total: number, + hasNextPage: boolean, + commits: ReadCommitResult[] +} + +export enum syncStatus { + "sync" = "sync", + "publishBranch" = "publishBranch", + "none" = "none", +} + +export type repository = { + name: string + html_url: string + owner: { + login: string + }, + full_name: string + default_branch: string + id: number + url: string +} + +export type branch = { + name: string + remote: remote +} + +export type remote = { + name: string + url: string +} + +export type remoteBranch = { + name: string +} + +export type commitChangeType = keyof commitChangeTypes + +export type initInputType = { + defaultBranch: string +} + +export type author = { + name: string, + email: string +} + +export type updateSubmodulesInput = { + dir?: string + token?: string +} + +export type remoteCommitsInputType = { + owner: string, repo: string, token: string, branch: string, length: number, page: number +} + +export type compareBranchesInput = { + branch: branch, remote: remote +} + +export type fetchInputType = { + remote: remote, + ref?: branch, + remoteRef?: branch, + depth?: number, + singleBranch?: boolean, + relative?: boolean, + quiet?: boolean + author?: author +} + +export type logInputType = { + ref: string, + depth?: number, +} + +export type pullInputType = { + remote: remote, + ref: branch, + remoteRef?: branch + author?: author +} + +export type pushInputType = { + remote: remote, + ref: branch, + remoteRef?: branch, + force?: boolean, + author?: author +} + +export type branchInputType = { + ref: string, + checkout?: boolean + refresh?: boolean + force?: boolean +} + +export type currentBranchInput = { + fs: any, + dir: string +} + +export type checkoutInputType = { + ref: string, + force?: boolean, + remote?: string + refresh?: boolean + fetch?: boolean +} + +export type addInputType = { + filepath: string | string[] +} + +export type rmInputType = { + filepath: string +} + +export type resolveRefInput = { + ref: string +} + +export type readBlobInput = { + oid: string, + filepath: string +} + +export type commitInputType = { + author: { + name: string, + email: string, + }, + message: string, +} + +export type branchesInputType = { + fs?: any + dir?: string +} + +export interface cloneInputType { + url: string, + branch?: string, + depth?: number, + singleBranch?: boolean + workspaceName?: string + workspaceExists?: boolean + token?: string + dir?: string // where the clone should happen on desktop +} + +export interface repositoriesInput { token: string, page?: number, per_page?: number } + +export interface statusInput { ref: string, filepaths?: string[] } + +export type isoGitConfig = { + fs: any, + dir: string, +} \ No newline at end of file diff --git a/libs/remix-git/index.ts b/libs/remix-git/index.ts new file mode 100644 index 0000000000..ae218b1ee3 --- /dev/null +++ b/libs/remix-git/index.ts @@ -0,0 +1 @@ +export * from './src/index' \ No newline at end of file diff --git a/libs/remix-git/src/index.ts b/libs/remix-git/src/index.ts new file mode 100644 index 0000000000..9ba55884b0 --- /dev/null +++ b/libs/remix-git/src/index.ts @@ -0,0 +1,42 @@ +import { currentBranchInput, isoGitConfig, remote } from "@remix-api" +import git from 'isomorphic-git' + +const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitConfig ) => { + console.log('CURRENT BRANCH', input) + + try { + const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig + + const name = await git.currentBranch(cmd) + let remote: remote = undefined + try { + const remoteName = await git.getConfig({ + ...defaultConfig, + path: `branch.${name}.remote` + }) + if (remoteName) { + const remoteUrl = await git.getConfig({ + ...defaultConfig, + path: `remote.${remoteName}.url` + }) + remote = { name: remoteName, url: remoteUrl } + } + + } catch (e) { + // do nothing + } + console.log('NAME', name) + console.log('REMOTE', remote) + + return { + remote: remote, + name: name || '' + } + } catch (e) { + return undefined + } + } + + export const isoGit = { + currentbranch + } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/remix-plugin-types.ts b/libs/remix-ui/editor/src/lib/remix-plugin-types.ts index 9e55e5b55d..6f605f829a 100644 --- a/libs/remix-ui/editor/src/lib/remix-plugin-types.ts +++ b/libs/remix-ui/editor/src/lib/remix-plugin-types.ts @@ -380,7 +380,6 @@ declare interface IDgitSystem { status(cmd: any): any[]; rm(cmd: any): string; log(cmd: any): any[]; - lsfiles(cmd: any): any[]; readblob(cmd: any): { oid: string, blob: Uint8Array } resolveref(cmd: any): string branch(cmd: any): void diff --git a/libs/remix-ui/git/src/components/buttons/sourceControlBase.tsx b/libs/remix-ui/git/src/components/buttons/sourceControlBase.tsx index 7856059c2c..64d36df050 100644 --- a/libs/remix-ui/git/src/components/buttons/sourceControlBase.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourceControlBase.tsx @@ -5,7 +5,7 @@ import { ReadCommitResult } from "isomorphic-git" import React, { createContext, useEffect, useState } from "react" import { FormattedMessage } from "react-intl" import { gitActionsContext } from "../../state/context" -import { branch, remote } from "../../types" +import { branch, remote } from "@remix-api" import { gitPluginContext } from "../gitui" import GitUIButton from "./gituibutton" diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index b01cc67a40..22879e9a94 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -4,7 +4,7 @@ import { CustomTooltip } from "@remix-ui/helper" import React, { useEffect, useState } from "react" import { FormattedMessage } from "react-intl" import { gitActionsContext } from "../../state/context" -import { branch, remote } from "../../types" +import { branch, remote } from "@remix-api" import { gitPluginContext } from "../gitui" import GitUIButton from "./gituibutton" import { syncStateContext } from "./sourceControlBase" diff --git a/libs/remix-ui/git/src/components/github/repositoryselect.tsx b/libs/remix-ui/git/src/components/github/repositoryselect.tsx index c4f9da7864..6d8aabb91b 100644 --- a/libs/remix-ui/git/src/components/github/repositoryselect.tsx +++ b/libs/remix-ui/git/src/components/github/repositoryselect.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'; import { Button } from 'react-bootstrap'; import Select from 'react-select'; import { gitActionsContext } from '../../state/context'; -import { repository } from '../../types'; +import { repository } from '@remix-api'; import { selectStyles, selectTheme } from '../../types/styles'; import { gitPluginContext } from '../gitui'; import { TokenWarning } from '../panels/tokenWarning'; diff --git a/libs/remix-ui/git/src/components/github/selectandclonerepositories.tsx b/libs/remix-ui/git/src/components/github/selectandclonerepositories.tsx index 6183cccaa4..497f5b6e1f 100644 --- a/libs/remix-ui/git/src/components/github/selectandclonerepositories.tsx +++ b/libs/remix-ui/git/src/components/github/selectandclonerepositories.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from "react"; import { gitActionsContext } from "../../state/context"; -import { repository } from "../../types"; +import { repository } from "@remix-api"; import { gitPluginContext } from "../gitui"; import RepositorySelect from "./repositoryselect"; import { BranchSelect } from "./branchselect"; diff --git a/libs/remix-ui/git/src/components/navigation/branchedetails.tsx b/libs/remix-ui/git/src/components/navigation/branchedetails.tsx index ee3ee88e24..40a40c5b70 100644 --- a/libs/remix-ui/git/src/components/navigation/branchedetails.tsx +++ b/libs/remix-ui/git/src/components/navigation/branchedetails.tsx @@ -2,7 +2,7 @@ import { faCaretUp, faCaretDown, faCaretRight, faArrowUp, faArrowDown, faArrowRo import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import React, { useContext, useEffect } from "react"; import { gitActionsContext } from "../../state/context"; -import { branch } from "../../types"; +import { branch } from "@remix-api"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; diff --git a/libs/remix-ui/git/src/components/navigation/commits.tsx b/libs/remix-ui/git/src/components/navigation/commits.tsx index a3cbcb1d2f..a3c59950e3 100644 --- a/libs/remix-ui/git/src/components/navigation/commits.tsx +++ b/libs/remix-ui/git/src/components/navigation/commits.tsx @@ -4,7 +4,7 @@ import { CustomTooltip } from "@remix-ui/helper"; import React, { useEffect } from "react"; import { FormattedMessage } from "react-intl"; import { pluginActionsContext } from "../../state/context"; -import { branch, remote } from "../../types"; +import { branch, remote } from "@remix-api"; import { SourceControlBase } from "../buttons/sourceControlBase"; import { SourceControlButtons } from "../buttons/sourcecontrolbuttons"; import { gitPluginContext } from "../gitui"; diff --git a/libs/remix-ui/git/src/components/navigation/remotesdetails.tsx b/libs/remix-ui/git/src/components/navigation/remotesdetails.tsx index 89d8955414..5648390c98 100644 --- a/libs/remix-ui/git/src/components/navigation/remotesdetails.tsx +++ b/libs/remix-ui/git/src/components/navigation/remotesdetails.tsx @@ -3,7 +3,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { CustomTooltip } from "@remix-ui/helper"; import React, { useContext, useEffect } from "react"; import { gitActionsContext } from "../../state/context"; -import { branch, remote } from "../../types"; +import { remote } from "@remix-api"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; diff --git a/libs/remix-ui/git/src/components/panels/branches.tsx b/libs/remix-ui/git/src/components/panels/branches.tsx index 503bea1202..2978e56e1b 100644 --- a/libs/remix-ui/git/src/components/panels/branches.tsx +++ b/libs/remix-ui/git/src/components/panels/branches.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState } from "react"; import { Alert } from "react-bootstrap"; import { gitActionsContext } from "../../state/context"; -import { remote } from "../../types"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; import { LocalBranchDetails } from "./branches/localbranchdetails"; diff --git a/libs/remix-ui/git/src/components/panels/branches/branchdifferencedetails.tsx b/libs/remix-ui/git/src/components/panels/branches/branchdifferencedetails.tsx index 62ce46a696..d50ad0d511 100644 --- a/libs/remix-ui/git/src/components/panels/branches/branchdifferencedetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/branchdifferencedetails.tsx @@ -3,7 +3,7 @@ import { Accordion } from "react-bootstrap"; import React, { useEffect, useState } from "react"; import { CommitDetails } from "../commits/commitdetails"; import { CommitsNavigation } from "../../navigation/commits"; -import { branch, remote } from "../../../types"; +import { branch, remote } from "@remix-api"; import { gitActionsContext } from "../../../state/context"; import { gitPluginContext } from "../../gitui"; diff --git a/libs/remix-ui/git/src/components/panels/branches/branchdifferences.tsx b/libs/remix-ui/git/src/components/panels/branches/branchdifferences.tsx index 846d0230d1..86d4584724 100644 --- a/libs/remix-ui/git/src/components/panels/branches/branchdifferences.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/branchdifferences.tsx @@ -1,4 +1,4 @@ -import { branch, remote } from "../../../types"; +import { branch, remote } from "@remix-api"; import React, { useEffect, useState } from "react"; import { gitPluginContext } from "../../gitui"; import { CommitDetails } from "../commits/commitdetails"; diff --git a/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx b/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx index c3fe63e752..6608bd2ff3 100644 --- a/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx @@ -4,7 +4,7 @@ import { Accordion } from "react-bootstrap"; import { CommitDetailsNavigation } from "../../navigation/commitdetails"; import { gitActionsContext } from "../../../state/context"; import { gitPluginContext } from "../../gitui"; -import { branch } from "../../../types"; +import { branch } from "@remix-api"; import { BrancheDetailsNavigation } from "../../navigation/branchedetails"; import { CommitDetailsItems } from "../commits/commitdetailsitem"; import { CommitDetails } from "../commits/commitdetails"; diff --git a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx index 1b21e1eb76..9e4f2ed06b 100644 --- a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx @@ -4,7 +4,7 @@ import { Accordion } from "react-bootstrap"; import { CommitDetailsNavigation } from "../../navigation/commitdetails"; import { gitActionsContext } from "../../../state/context"; import { gitPluginContext } from "../../gitui"; -import { branch } from "../../../types"; +import { branch } from "@remix-api"; import { BrancheDetailsNavigation } from "../../navigation/branchedetails"; import { CommitDetailsItems } from "../commits/commitdetailsitem"; import { CommitDetails } from "../commits/commitdetails"; diff --git a/libs/remix-ui/git/src/components/panels/commands/pushpull.tsx b/libs/remix-ui/git/src/components/panels/commands/pushpull.tsx index fa21eb7d4f..14f522c25f 100644 --- a/libs/remix-ui/git/src/components/panels/commands/pushpull.tsx +++ b/libs/remix-ui/git/src/components/panels/commands/pushpull.tsx @@ -4,7 +4,7 @@ import { gitPluginContext } from "../../gitui"; import { selectStyles, selectTheme } from "../../../types/styles"; import Select, { Options, OptionsOrGroups } from 'react-select' import GitUIButton from "../../buttons/gituibutton"; -import { remote } from "../../../types"; +import { remote } from "@remix-api"; import { relative } from "path"; export const PushPull = () => { diff --git a/libs/remix-ui/git/src/components/panels/commits/commitdetailsitem.tsx b/libs/remix-ui/git/src/components/panels/commits/commitdetailsitem.tsx index 7115347618..fd111b47e6 100644 --- a/libs/remix-ui/git/src/components/panels/commits/commitdetailsitem.tsx +++ b/libs/remix-ui/git/src/components/panels/commits/commitdetailsitem.tsx @@ -1,4 +1,4 @@ -import { branch, commitChange } from "../../../types"; +import { branch, commitChange } from "@remix-api"; import React from "react"; import path from "path"; import { gitActionsContext, pluginActionsContext } from "../../../state/context"; diff --git a/libs/remix-ui/git/src/components/panels/remoteselect.tsx b/libs/remix-ui/git/src/components/panels/remoteselect.tsx index f2eedadfb3..97e2abd64b 100644 --- a/libs/remix-ui/git/src/components/panels/remoteselect.tsx +++ b/libs/remix-ui/git/src/components/panels/remoteselect.tsx @@ -5,7 +5,7 @@ import { gitPluginContext } from "../gitui"; import { default as dateFormat } from "dateformat"; import { RemotesDetailsNavigation } from "../navigation/remotesdetails"; import { Accordion } from "react-bootstrap"; -import { remote } from "../../types"; +import { remote } from "@remix-api"; import { RemoteBranchDetails } from "./branches/remotebranchedetails"; export interface RemoteSelectProps { diff --git a/libs/remix-ui/git/src/components/panels/remotesimport.tsx b/libs/remix-ui/git/src/components/panels/remotesimport.tsx index 646546c1a4..a456de8fe4 100644 --- a/libs/remix-ui/git/src/components/panels/remotesimport.tsx +++ b/libs/remix-ui/git/src/components/panels/remotesimport.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import { Alert, Button } from "react-bootstrap"; import { gitActionsContext } from "../../state/context"; -import { repository } from "../../types"; +import { repository } from "@remix-api"; import { gitPluginContext } from "../gitui"; import Select from 'react-select' import { selectStyles, selectTheme } from "../../types/styles"; diff --git a/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcecontrolitem.tsx b/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcecontrolitem.tsx index 64617b17e1..27f87d1c04 100644 --- a/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcecontrolitem.tsx +++ b/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcecontrolitem.tsx @@ -1,4 +1,4 @@ -import { commitChange, fileStatusResult, sourceControlGroup } from "../../../types"; +import { fileStatusResult, sourceControlGroup } from "../../../types"; import React from "react"; import path from "path"; import { gitActionsContext, pluginActionsContext } from "../../../state/context"; @@ -6,6 +6,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faGlobe } from "@fortawesome/free-solid-svg-icons"; import { SourceControlItemButtons } from "./sourcontrolitembuttons"; import { removeSlash } from "../../../utils"; +import { commitChange } from "@remix-api"; export interface SourceControlItemProps { file: fileStatusResult; diff --git a/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcontrolitembuttons.tsx b/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcontrolitembuttons.tsx index d1ba05ef1f..572180329c 100644 --- a/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcontrolitembuttons.tsx +++ b/libs/remix-ui/git/src/components/panels/sourcecontrol/sourcontrolitembuttons.tsx @@ -1,4 +1,4 @@ -import { commitChange, fileStatusResult, sourceControlGroup } from "../../../types"; +import { fileStatusResult, sourceControlGroup } from "../../../types"; import React from "react"; import path from "path"; import { gitActionsContext, pluginActionsContext } from "../../../state/context"; diff --git a/libs/remix-ui/git/src/index.ts b/libs/remix-ui/git/src/index.ts index 677c174059..57959fe7e1 100644 --- a/libs/remix-ui/git/src/index.ts +++ b/libs/remix-ui/git/src/index.ts @@ -1,4 +1,4 @@ export * from './types' export { GitUI } from './components/gitui' -export { commitChange, commitChangeType, remote, branch } from './types' +export { commitChange, commitChangeType, remote, branch } from '@remix-api' export * from './types/styles' \ No newline at end of file diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 314d9143e5..3362e00d8d 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -1,13 +1,13 @@ import { ReadBlobResult, ReadCommitResult } from "isomorphic-git"; import React from "react"; import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead } from "../state/gitpayload"; -import { GitHubUser, branch, commitChange, gitActionDispatch, statusMatrixType, gitState, branchDifference, remote, gitLog, fileStatusResult, customGitApi, IGitApi, cloneInputType, fetchInputType, pullInputType, pushInputType, checkoutInput, rmInput, addInput, repository, userEmails } from '../types'; +import { GitHubUser, gitActionDispatch, statusMatrixType, gitState, gitLog, fileStatusResult, userEmails } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; import { ModalTypes } from "@remix-ui/app"; import { setFileDecorators } from "./pluginActions"; import { Plugin } from "@remixproject/engine"; -import { CustomRemixApi } from "@remix-api"; +import { addInputType, branch, branchDifference, checkoutInputType, cloneInputType, commitChange, CustomRemixApi, fetchInputType, pullInputType, pushInputType, remote, rmInputType } from "@remix-api"; import { file } from "jszip"; export const fileStatuses = [ @@ -54,7 +54,7 @@ export const getBranches = async () => { } export const getRemotes = async () => { - const remotes: remote[] = await plugin.call('dgitApi', "remotes"); + const remotes: remote[] = await plugin.call('dgitApi', 'remotes'); dispatch(setRemotes(remotes)); } @@ -226,7 +226,7 @@ export const addall = async (files: fileStatusResult[]) => { } } -export const add = async (filepath: addInput) => { +export const add = async (filepath: addInputType) => { try { if (typeof filepath.filepath === "string") { filepath.filepath = removeSlash(filepath.filepath) @@ -252,7 +252,7 @@ const getLastCommmit = async () => { } } -export const rm = async (args: rmInput) => { +export const rm = async (args: rmInputType) => { await plugin.call('dgitApi', 'rm', { filepath: removeSlash(args.filepath), }); @@ -288,7 +288,7 @@ export const checkoutfile = async (filename: string) => { } } -export const checkout = async (cmd: checkoutInput) => { +export const checkout = async (cmd: checkoutInputType) => { await disableCallBacks(); await plugin.call('fileManager', 'closeAllFiles') @@ -705,6 +705,7 @@ export const diff = async (commitChange: commitChange) => { } export const getCommitChanges = async (oid1: string, oid2: string, branch?: branch, remote?: remote) => { + console.log('getCommitChanges', oid1, oid2, branch, remote) try { let log try { @@ -717,6 +718,7 @@ export const getCommitChanges = async (oid1: string, oid2: string, branch?: bran console.log(e, 'log error') } if (log) { + console.log('log', log) const foundCommit = log.find((commit: ReadCommitResult) => commit.oid === oid2) if (!foundCommit && remote) { diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index 66c94bdd8d..871458c8fb 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -65,7 +65,20 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { + loadFileQueue.enqueue(async () => { + loadFiles() + }) + loadFileQueue.enqueue(async () => { + gitlog() + }) + loadFileQueue.enqueue(async () => { + getBranches() + }) + loadFileQueue.enqueue(async () => { + getRemotes() + }) + }) plugin.on("filePanel", "setWorkspace", async (x: any) => { gitDispatch(setCanUseApp(x && !x.isLocalhost && x.name)) loadFileQueue.enqueue(async () => { diff --git a/libs/remix-ui/git/src/lib/pluginActions.ts b/libs/remix-ui/git/src/lib/pluginActions.ts index ece2b3953a..94d9d6bcf5 100644 --- a/libs/remix-ui/git/src/lib/pluginActions.ts +++ b/libs/remix-ui/git/src/lib/pluginActions.ts @@ -1,9 +1,9 @@ -import { commitChange, fileStatusResult, gitActionDispatch, gitState } from "../types" +import { fileStatusResult, gitActionDispatch, gitState } from "../types" import { fileDecoration, fileDecorationType } from "@remix-ui/file-decorators" import { removeSlash } from "../utils" import { getFilesByStatus } from "./fileHelpers" -import { CustomRemixApi } from "@remix-api"; +import { commitChange, CustomRemixApi } from "@remix-api"; import { Plugin } from "@remixproject/engine"; let plugin: Plugin, gitDispatch: React.Dispatch, loaderDispatch: React.Dispatch diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index 4d35aa1b8c..3c2049771d 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -1,6 +1,6 @@ import { ReadCommitResult } from "isomorphic-git" -import { branch, branchDifference, commitChange, fileStatusResult, GitHubUser, gitLog, pagedCommits, remote, remoteBranch, repository, userEmails } from "../types" - +import { fileStatusResult, GitHubUser, gitLog, userEmails } from "../types" +import { branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository } from '@remix-api' export interface ActionPayloadTypes { FILE_STATUS: fileStatusResult[], FILE_STATUS_MERGE: fileStatusResult[] diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index 4608406a7f..ed58ac1a3f 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -1,12 +1,13 @@ +import { branch, addInputType, checkoutInputType, cloneInputType, commitChange, fetchInputType, pullInputType, pushInputType, remote, rmInputType } from "@remix-api" import { ReadCommitResult } from "isomorphic-git" import React from "react" -import { addInput, branch, checkoutInput, cloneInputType, commitChange, fetchInputType, fileStatusResult, gitLog, gitState, pullInputType, pushInputType, remote, rmInput } from "../types" +import { fileStatusResult, gitLog, gitState } from "../types" export interface gitActions { removeRemote(remote: remote): void clone(input: cloneInputType): Promise - add(input: addInput): Promise - rm(input: rmInput): Promise + add(input: addInputType): Promise + rm(input: rmInputType): Promise commit(message: string): Promise addall(files: fileStatusResult[]): Promise push(input: pushInputType): Promise @@ -14,7 +15,7 @@ export interface gitActions { fetch(input: fetchInputType): Promise repositories(): Promise checkoutfile(file: string): Promise - checkout(input: checkoutInput): Promise + checkout(input: checkoutInputType): Promise createBranch(branch: string): Promise remoteBranches(owner: string, repo: string): Promise getCommitChanges(oid1: string, oid2: string, branch?: branch, remote?: remote): Promise diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index c075331d6e..338dbd017a 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -1,6 +1,6 @@ import { ReadCommitResult } from "isomorphic-git" -import { GitHubUser, branch, commitChange, fileStatusResult, remote, pagedCommits, branchDifference, gitLog, repository, userEmails } from "../types" -import { Endpoints } from "@octokit/types" +import { GitHubUser, fileStatusResult, gitLog, userEmails } from "../types" +import { repository, pagedCommits, branch, remote, commitChange, branchDifference } from "@remix-api" export const fileStatus = (files: fileStatusResult[]) => { return { diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 674e1e69a5..1b41ffd43c 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -1,6 +1,6 @@ -import { ReadCommitResult } from "isomorphic-git" -import { allChangedButNotStagedFiles, getFilesByStatus, getFilesWithNotModifiedStatus } from "../lib/fileHelpers" -import { branch, commitChange, defaultGitState, fileStatusResult, gitState, setRemoteBranchCommitsAction, setLocalBranchCommitsAction, setBranchDifferencesAction, setDefaultRemoteAction, setRemotesAction, setUpstreamAction } from "../types" +import { commitChange } from "@remix-api" +import { allChangedButNotStagedFiles, getFilesByStatus } from "../lib/fileHelpers" +import { defaultGitState, fileStatusResult, gitState } from "../types" import { Actions } from "./actions" export const gitReducer = (state: gitState = defaultGitState, action: Actions): gitState => { diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 9ed9a292ed..efe0553066 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -1,156 +1,9 @@ import { Endpoints } from "@octokit/types" -import { IRemixApi } from "@remixproject/plugin-api" -import { LibraryProfile, StatusEvents } from "@remixproject/plugin-utils" -import { CommitObject, ReadBlobResult, ReadCommitResult, StatusRow } from "isomorphic-git" +import { branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository, syncStatus } from "@remix-api" +import { ReadCommitResult } from "isomorphic-git" export type GitHubUser = Partial export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] -export interface IGitApi { - events: { - "checkout": () => void - "clone": () => void - "add": () => void - "rm": () => void - "commit": () => void - "branch": () => void - "init": () => void - } & StatusEvents, - methods: { - getCommitChanges(oid1: string, oid2: string): Promise - repositories(input: repositoriesInput): Promise - clone(input: cloneInputType): Promise - branches(input?: branchesInput): Promise, - remotes(): Promise, - log(cmd: { ref: string }): Promise, - remotecommits(input: remoteCommitsInputType): Promise - fetch(input: fetchInputType): Promise - pull(input: pullInputType): Promise - push(input: pushInputType): Promise - currentbranch(input?: currentBranchInput): Promise - branch(input: branchInputType): Promise - checkout(input: checkoutInput): Promise - add(input: addInput): Promise - rm(input: rmInput): Promise - resolveref(input: resolveRefInput): Promise - readblob(input: readBlobInput): Promise - commit(input: commitInput): Promise - addremote(input: remote): Promise - delremote(input: remote): Promise - status(input?: statusInput): Promise> - compareBranches(input: compareBranchesInput): Promise - init(input?: initInput): Promise - updateSubmodules: (input: updateSubmodulesInput) => Promise - } -} - -export type initInput = { - defaultBranch: string -} - -export type updateSubmodulesInput = { - dir?: string - token?: string -} - -export type remoteCommitsInputType = { - owner: string, repo: string, token: string, branch: string, length: number, page: number -} - -export type compareBranchesInput = { - branch: branch, remote: remote -} - -export type fetchInputType = { - remote: remote, - ref?: branch, - remoteRef?: branch, - depth?: number, - singleBranch?: boolean, - relative?: boolean, - quiet?: boolean -} - -export type pullInputType = { - remote: remote, ref: branch, remoteRef?: branch -} - -export type pushInputType = { - remote: remote, ref: branch, remoteRef?: branch, force?: boolean -} - -export type branchInputType = { - ref: string, - checkout?: boolean - refresh?: boolean - force?: boolean -} - -export type currentBranchInput = { - fs: any, - dir: string -} - -export type checkoutInput = { - ref: string, - force?: boolean, - remote?: string - refresh?: boolean - fetch?: boolean -} - -export type addInput = { - filepath: string | string[] -} - -export type rmInput = { - filepath: string -} - -export type resolveRefInput = { - ref: string -} - -export type readBlobInput = { - oid: string, - filepath: string -} - -export type commitInput = { - author: { - name: string, - email: string, - }, - message: string, -} - -export type branchesInput = { - fs?: any - dir?: string -} - -export interface cloneInputType { - url: string, - branch?: string, - depth?: number, - singleBranch?: boolean - workspaceName?: string - workspaceExists?: boolean - token?: string -} - -export interface repositoriesInput { token: string, page?: number, per_page?: number } - -export interface statusInput { ref: string, filepaths?: string[] } - -export const dGitProfile: LibraryProfile = { - name: 'dgitApi', - methods: ['clone', 'branches', 'remotes', 'getCommitChanges', 'log', 'remotecommits'], -} - -export interface customGitApi extends IRemixApi { - dgit: IGitApi -} - export type gitState = { currentBranch: branch currentHead: string @@ -193,19 +46,6 @@ export type gitLog = { export type remoteBranchIdentifier = `${string}/${string}` -export type branchDifference = { - uniqueHeadCommits: ReadCommitResult[], - uniqueRemoteCommits: ReadCommitResult[], -} - -export type pagedCommits = { - page: number, - perPage: number, - total: number, - hasNextPage: boolean, - commits: ReadCommitResult[] -} - export type loaderState = { branches: boolean remotes: boolean @@ -214,57 +54,6 @@ export type loaderState = { plugin: boolean } -export type commitChangeTypes = { - "deleted": "D" - "modified": "M" - "added": "A", - "unknown": "?" -} - -export enum syncStatus { - "sync" = "sync", - "publishBranch" = "publishBranch", - "none" = "none", -} - -export type commitChangeType = keyof commitChangeTypes - -export type commitChange = { - type: commitChangeType - path: string, - hashModified: string, - hashOriginal: string, - original?: string, - modified?: string, - readonly?: boolean -} - -export type repository = { - name: string - html_url: string - owner: { - login: string - }, - full_name: string - default_branch: string - id: number - url: string -} - -export type branch = { - name: string - remote: remote -} - -export type remote = { - name: string - url: string -} - -export type remoteBranch = { - name: string -} - export const defaultGitState: gitState = { currentBranch: { name: "", remote: { name: "", url: "" } }, currentHead: "", diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index 74b024f98b..ca828cddcb 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -42,10 +42,10 @@ import { ROOT_PATH, slitherYml, solTestYml, tsSolTestYml } from '../utils/consta import { IndexedDBStorage } from '../../../../../../apps/remix-ide/src/app/files/filesystems/indexedDB' import { getUncommittedFiles } from '../utils/gitStatusFilter' import { AppModal, ModalTypes } from '@remix-ui/app' -import { branch, cloneInputType, IGitApi } from '@remix-ui/git' + import * as templates from '@remix-project/remix-ws-templates' import { Plugin } from "@remixproject/engine"; -import { CustomRemixApi } from '@remix-api' +import { CustomRemixApi, branch, cloneInputType } from '@remix-api' declare global { interface Window { @@ -204,6 +204,7 @@ export const createWorkspace = async ( }, 5000) } else if (!isEmpty && !(isGitRepo && createCommit)) await loadWorkspacePreset(workspaceTemplateName, opts) cb && cb(null, workspaceName) + if (workspaceTemplateName === 'semaphore' || workspaceTemplateName === 'hashchecker' || workspaceTemplateName === 'rln') { const isCircomActive = await plugin.call('manager', 'isActive', 'circuit-compiler') if (!isCircomActive) await plugin.call('manager', 'activatePlugin', 'circuit-compiler') @@ -508,6 +509,7 @@ export const switchToWorkspace = async (name: string) => { await plugin.fileProviders.workspace.setWorkspace(name) await plugin.setWorkspace({ name, isLocalhost: false }) const isGitRepo = await plugin.fileManager.isGitRepo() + dispatch(setMode('browser')) dispatch(setCurrentWorkspace({ name, isGitRepo })) dispatch(setReadOnlyMode(false)) @@ -665,10 +667,9 @@ export const cloneRepository = async (url: string) => { dispatch(cloneRepositoryRequest()) promise .then(async () => { - if (!plugin.registry.get('platform').api.isDesktop()) { - const isActive = await plugin.call('manager', 'isActive', 'dgit') - if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') - } + const isActive = await plugin.call('manager', 'isActive', 'dgit') + + if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') await fetchWorkspaceDirectory(ROOT_PATH) const workspacesPath = plugin.fileProviders.workspace.workspacesPath const branches = await getGitRepoBranches(workspacesPath + '/' + repoName) @@ -753,7 +754,7 @@ export const getGitRepoCurrentBranch = async (workspaceName: string) => { } export const showAllBranches = async () => { - if (plugin.registry.get('platform').api.isDesktop()) return + const isActive = await plugin.call('manager', 'isActive', 'dgit') if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') plugin.call('menuicons', 'select', 'dgit') From 576896793f6899f6f29bc0e5d34fdaad9b71f63a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 9 Jul 2024 18:03:33 +0200 Subject: [PATCH 002/312] webpack --- apps/remixdesktop/package.json | 14 +- apps/remixdesktop/webpack.config.js | 40 ++ apps/remixdesktop/yarn.lock | 725 +++++++++++++++++++++++++++- 3 files changed, 767 insertions(+), 12 deletions(-) create mode 100644 apps/remixdesktop/webpack.config.js diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 6e440b2ecb..3aa8a9121c 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -1,7 +1,7 @@ { "name": "remixdesktop", "version": "1.0.7-insiders", - "main": "build/apps/remixdesktop/src/main.js", + "main": "build/main.js", "license": "MIT", "type": "commonjs", "description": "Remix IDE Desktop", @@ -22,9 +22,9 @@ "category": "public.app-category.productivity" }, "scripts": { - "start:dev": "tsc && cp -R node_modules/yarn build/tools/ && cross-env NODE_ENV=development electron --inspect=5858 .", - "start:production": "tsc && && cp -R node_modules/yarn build/tools/ && cross-env NODE_ENV=production electron .", - "dist": "tsc && cp -R node_modules/yarn build/tools/ && electron-builder -p never", + "start:dev": "yarn webpack --config webpack.config.js && electron --inspect=5858 .", + "start:production": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron .", + "dist": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron-builder -p never", "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "postinstall": "electron-builder install-app-deps", @@ -46,7 +46,13 @@ "electron-devtools-installer": "^3.2.0", "nightwatch": "2.3", "selenium-standalone": "^9.3.1", + "ts-loader": "^9.5.1", + "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "^5.1.3", + "webpack": "^5.92.1", + "webpack-cli": "^5.1.4", + "webpack-merge": "^6.0.1", + "webpack-node-externals": "^3.0.0", "yarn": "^1.22.21" }, "dependencies": { diff --git a/apps/remixdesktop/webpack.config.js b/apps/remixdesktop/webpack.config.js new file mode 100644 index 0000000000..4b2c1a5bf8 --- /dev/null +++ b/apps/remixdesktop/webpack.config.js @@ -0,0 +1,40 @@ +const path = require('path'); +const nodeExternals = require('webpack-node-externals'); +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); +const mode = process.env.NODE_ENV || 'development'; +const webpack = require('webpack'); +module.exports = { + mode, + entry: { + main: './src/main.ts', + preload: './src/preload.ts', + }, + target: 'electron-main', + externals: [nodeExternals()], + module: { + rules: [ + { + test: /\.ts$/, + include: /src/, + use: [{ loader: 'ts-loader' }] + } + ] + }, + resolve: { + extensions: ['.ts', '.js'], + plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.json' })] + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || mode) + }) + ], + output: { + path: path.resolve(__dirname, 'build'), + filename: '[name].js' + }, + node: { + __dirname: false, + __filename: false + } +} diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index d39ddaa9dc..fd32d546b3 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -22,6 +22,11 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + "@electron/asar@^3.2.1": version "3.2.8" resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.8.tgz#2ea722f3452583dbd4ffdcc4b4f5dc903f1d8178" @@ -491,6 +496,46 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@malept/cross-spawn-promise@^1.1.0": version "1.1.1" resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" @@ -740,6 +785,27 @@ dependencies: "@types/ms" "*" +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/express-serve-static-core@^4.17.33": version "4.17.41" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" @@ -777,6 +843,11 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/keyv@^3.1.4": version "3.1.4" resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" @@ -918,11 +989,157 @@ https-proxy-agent "^7.0.2" proxy-from-env "^1.1.0" +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + "@xmldom/xmldom@^0.8.8": version "0.8.10" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + abortcontroller-polyfill@^1.7.5: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" @@ -936,6 +1153,16 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + +acorn@^8.7.1, acorn@^8.8.2: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + add@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" @@ -968,12 +1195,12 @@ aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-keywords@^3.4.1: +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1352,6 +1579,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -1381,6 +1615,16 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" +browserslist@^4.21.10: + version "4.23.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== + dependencies: + caniuse-lite "^1.0.30001629" + electron-to-chromium "^1.4.796" + node-releases "^2.0.14" + update-browserslist-db "^1.0.16" + bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1525,6 +1769,11 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-lite@^1.0.30001629: + version "1.0.30001640" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz#32c467d4bf1f1a0faa63fc793c2ba81169e7652f" + integrity sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1580,6 +1829,11 @@ chownr@^2.0.0: resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + chromedriver@116: version "116.0.0" resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-116.0.0.tgz#3f5d07b5427953270461791651d7b68cb6afe9fe" @@ -1685,6 +1939,15 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" @@ -1709,6 +1972,11 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -1716,6 +1984,16 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^5.0.0, commander@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" @@ -2184,6 +2462,11 @@ electron-publish@24.8.1: lazy-val "^1.0.5" mime "^2.5.2" +electron-to-chromium@^1.4.796: + version "1.4.820" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.820.tgz#1195660c157535392a09442540a08ee63fea8c40" + integrity sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg== + electron-updater@^6.1.8: version "6.1.8" resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.1.8.tgz#17637bca165322f4e526b13c99165f43e6f697d8" @@ -2242,6 +2525,14 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: + version "5.17.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" + integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + entities@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -2257,6 +2548,11 @@ envinfo@7.8.1: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +envinfo@^7.7.3: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -2334,6 +2630,11 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -2401,6 +2702,11 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2411,6 +2717,14 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + esniff@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" @@ -2421,6 +2735,23 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -2566,6 +2897,11 @@ events@3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.2.0.tgz" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -2690,6 +3026,11 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" @@ -2711,6 +3052,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" @@ -2741,6 +3089,14 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + fkill@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/fkill/-/fkill-7.2.1.tgz#7036200cd2edd28a6bc40f0defc1e159d9e24e64" @@ -2997,6 +3353,11 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -3102,7 +3463,7 @@ got@^11.8.5, got@^11.8.6: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3197,6 +3558,13 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -3343,6 +3711,14 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -3379,6 +3755,11 @@ internal-slot@^1.0.5: hasown "^2.0.0" side-channel "^1.0.4" +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + ip-regex@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" @@ -3445,6 +3826,13 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" +is-core-module@^2.13.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" + integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== + dependencies: + hasown "^2.0.2" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -3523,6 +3911,13 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-port-reachable@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-3.1.0.tgz#f6668d3bca9c36b07f737c48a8f875ab0653cd2b" @@ -3650,6 +4045,11 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + isomorphic-git@^1.24.2: version "1.24.2" resolved "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.24.2.tgz" @@ -3691,6 +4091,15 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -3718,6 +4127,11 @@ json-buffer@3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -3733,7 +4147,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.0: +json5@^2.2.0, json5@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -3790,6 +4204,11 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + lazy-val@^1.0.4, lazy-val@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" @@ -3802,6 +4221,18 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -4019,12 +4450,20 @@ micro-ftch@^0.3.1: resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== +micromatch@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -4302,6 +4741,11 @@ negotiator@0.6.3: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" @@ -4377,6 +4821,11 @@ node-pty@^0.10.1: dependencies: nan "^2.14.0" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -4507,6 +4956,13 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -4514,6 +4970,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -4521,6 +4984,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + pako@^1.0.10, pako@~1.0.2: version "1.0.11" resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" @@ -4551,6 +5019,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-scurry@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" @@ -4590,7 +5063,12 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picomatch@^2.0.4, picomatch@^2.2.1: +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -4607,6 +5085,13 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + plist@^3.0.4: version "3.0.6" resolved "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz" @@ -4806,6 +5291,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + regenerator-runtime@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" @@ -4856,6 +5348,27 @@ resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" @@ -4956,6 +5469,15 @@ sax@^1.2.4: resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -5034,6 +5556,11 @@ semver@^7.3.2: dependencies: lru-cache "^6.0.0" +semver@^7.3.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -5067,6 +5594,13 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -5137,6 +5671,13 @@ sha.js@^2.4.0, sha.js@^2.4.8, sha.js@^2.4.9: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -5212,7 +5753,7 @@ smart-buffer@^4.0.2: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -source-map-support@^0.5.19: +source-map-support@^0.5.19, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -5225,6 +5766,11 @@ source-map@^0.6.0: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" @@ -5371,6 +5917,11 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -5395,7 +5946,7 @@ sumchecker@^3.0.1: dependencies: debug "^4.1.0" -supports-color@8.1.1: +supports-color@8.1.1, supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -5409,6 +5960,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + swarm-js@^0.1.40: version "0.1.42" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" @@ -5426,6 +5982,11 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + tar-stream@3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" @@ -5495,6 +6056,27 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.26.0: + version "5.31.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4" + integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -5551,6 +6133,35 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" +ts-loader@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + source-map "^0.7.4" + +tsconfig-paths-webpack-plugin@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz#3c6892c5e7319c146eee1e7302ed9e6f2be4f763" + integrity sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^4.1.2" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz" @@ -5706,6 +6317,14 @@ unzip-crx-3@^0.2.0: mkdirp "^0.5.1" yaku "^0.16.6" +update-browserslist-db@^1.0.16: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -5812,6 +6431,14 @@ verror@^1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -6054,6 +6681,83 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" + +webpack-node-externals@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" + integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.92.1: + version "5.92.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.92.1.tgz#eca5c1725b9e189cffbd86e8b6c3c7400efc5788" + integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -6120,6 +6824,11 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wildcard@^2.0.0, wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + workerpool@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" From 4d193a08bc62933b312c975658db84b0ba650602 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 10 Jul 2024 15:14:46 +0200 Subject: [PATCH 003/312] refactor --- apps/remix-ide/src/app/files/dgitProvider.ts | 113 ++-------------- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 116 ++-------------- apps/remixdesktop/tsconfig.json | 3 +- libs/remix-git/index.ts | 2 +- libs/remix-git/src/index.ts | 42 ------ libs/remix-git/src/isogit.ts | 128 ++++++++++++++++++ libs/remix-ui/git/src/lib/gitactions.ts | 2 +- tsconfig.paths.json | 3 + 8 files changed, 153 insertions(+), 256 deletions(-) delete mode 100644 libs/remix-git/src/index.ts create mode 100644 libs/remix-git/src/isogit.ts diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 51d6a7f32d..3f0a510bd2 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -20,11 +20,12 @@ import { OctokitResponse } from '@octokit/types' import { Endpoints } from "@octokit/types" import { IndexedDBStorage } from './filesystems/indexedDB' import { GitHubUser, branch, commitChange, remote, userEmails } from '@remix-ui/git' -import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType} from '@remix-api' +import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType, isoGitConfig} from '@remix-api' import { LibraryProfile, StatusEvents } from '@remixproject/plugin-utils' import { ITerminal } from '@remixproject/plugin-api/src/lib/terminal' import { partial } from 'lodash' import { CustomRemixApi } from '@remix-api' +import { isoGit } from "libs/remix-git/src/isogit" declare global { interface Window { remixFileSystemCallback: IndexedDBStorage; remixFileSystem: any; } @@ -334,53 +335,7 @@ class DGitProvider extends Plugin { return result } - const result: commitChange[] = await git.walk({ - ...await this.addIsomorphicGitConfigFS(), - trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], - map: async function (filepath, [A, B]) { - - if (filepath === '.') { - return - } - try { - if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { - return - } - } catch (e) { - // ignore - } - - // generate ids - const Aoid = A && await A.oid() || undefined - const Boid = B && await B.oid() || undefined - - const commitChange: Partial = { - hashModified: commitHash1, - hashOriginal: commitHash2, - path: filepath, - } - - // determine modification type - if (Aoid !== Boid) { - commitChange.type = "modified" - } - if (Aoid === undefined) { - commitChange.type = "deleted" - } - if (Boid === undefined || !commitHash2) { - commitChange.type = "added" - } - if (Aoid === undefined && Boid === undefined) { - commitChange.type = "unknown" - } - if (commitChange.type) - return commitChange - else - return undefined - }, - }) - - return result + return await isoGit.getCommitChanges(commitHash1, commitHash2, await this.addIsomorphicGitConfigFS()) } async remotes(): Promise { @@ -388,14 +343,7 @@ class DGitProvider extends Plugin { return await this.call('isogit', 'remotes') } - let remotes: remote[] = [] - try { - remotes = (await git.listRemotes({ ...await this.addIsomorphicGitConfigFS() })).map((remote) => { return { name: remote.remote, url: remote.url } } - ) - } catch (e) { - // do nothing - } - return remotes + return await isoGit.remotes(await this.addIsomorphicGitConfigFS()) } async branch(cmd: branchInputType): Promise { @@ -424,61 +372,20 @@ class DGitProvider extends Plugin { return await this.call('isogit', 'currentbranch', input) } - try { - const defaultConfig = await this.addIsomorphicGitConfigFS() - const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig - const name = await git.currentBranch(cmd) - let remote: remote = undefined - try { - const remoteName = await git.getConfig({ - ...defaultConfig, - path: `branch.${name}.remote` - }) - if (remoteName) { - const remoteUrl = await git.getConfig({ - ...defaultConfig, - path: `remote.${remoteName}.url` - }) - remote = { name: remoteName, url: remoteUrl } - } - - } catch (e) { - // do nothing - } - - return { - remote: remote, - name: name || '' - } - } catch (e) { - return undefined - } + const defaultConfig = await this.addIsomorphicGitConfigFS() + return await isoGit.currentbranch(input, defaultConfig) } - async branches(config): Promise { + async branches(config: isoGitConfig): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { const branches = await this.call('isogit', 'branches') console.log(branches) return branches } - - try { - const defaultConfig = await this.addIsomorphicGitConfigFS() - const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig - const remotes = await this.remotes() - let branches: branch[] = [] - branches = (await git.listBranches(cmd)).map((branch) => { return { remote: undefined, name: branch } }) - for (const remote of remotes) { - cmd.remote = remote.name - const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) - branches = [...branches, ...remotebranches] - } - return branches - } catch (e) { - console.log(e) - return [] - } + const defaultConfig = await this.addIsomorphicGitConfigFS() + const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig + return await isoGit.branches(cmd) } async commit(cmd: commitInputType): Promise { diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 4aef5b9f36..ce6c3268ba 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -351,20 +351,13 @@ class IsoGitPluginClient extends ElectronBasePluginClient { - async remotes () { + async remotes() { console.log('REMOTES') if (!this.workingDir || this.workingDir === '') { return [] } - let remotes: remote[] = [] - try { - remotes = (await git.listRemotes({ ...await this.getGitConfig() })).map((remote) => { return { name: remote.remote, url: remote.url } } - ) - } catch (e) { - // do nothing - } - console.log('REMOTES', remotes) - return remotes + const defaultConfig = await this.getGitConfig() + return await isoGit.remotes(defaultConfig) } async currentbranch(input: currentBranchInput) { @@ -372,40 +365,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { if (!this.workingDir || this.workingDir === '') { return '' } - - try { - const defaultConfig = await this.getGitConfig() - console.log(isoGit) - const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig - - const name = await git.currentBranch(cmd) - let remote: remote = undefined - try { - const remoteName = await git.getConfig({ - ...defaultConfig, - path: `branch.${name}.remote` - }) - if (remoteName) { - const remoteUrl = await git.getConfig({ - ...defaultConfig, - path: `remote.${remoteName}.url` - }) - remote = { name: remoteName, url: remoteUrl } - } - - } catch (e) { - // do nothing - } - console.log('NAME', name) - console.log('REMOTE', remote) - - return { - remote: remote, - name: name || '' - } - } catch (e) { - return undefined - } + const defaultConfig = await this.getGitConfig() + return await isoGit.currentbranch(input, defaultConfig) } @@ -414,22 +375,9 @@ class IsoGitPluginClient extends ElectronBasePluginClient { if (!this.workingDir || this.workingDir === '') { return [] } - try { - const defaultConfig = await this.getGitConfig() - const cmd = config ? defaultConfig ? { ...defaultConfig, ...config } : config : defaultConfig - const remotes = await this.remotes() - let branches: branch[] = [] - branches = (await git.listBranches(cmd)).map((branch) => { return { remote: undefined, name: branch } }) - for (const remote of remotes) { - cmd.remote = remote.name - const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) - branches = [...branches, ...remotebranches] - } - return branches - } catch (e) { - console.log(e) - return [] - } + + const defaultConfig = await this.getGitConfig() + return await isoGit.branches(defaultConfig) } @@ -438,53 +386,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async getCommitChanges(commitHash1: string, commitHash2: string): Promise { - const result: commitChange[] = await git.walk({ - ...await this.getGitConfig(), - trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], - map: async function (filepath, [A, B]) { - - if (filepath === '.') { - return - } - try { - if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { - return - } - } catch (e) { - // ignore - } - - // generate ids - const Aoid = A && await A.oid() || undefined - const Boid = B && await B.oid() || undefined - - const commitChange: Partial = { - hashModified: commitHash1, - hashOriginal: commitHash2, - path: filepath, - } - - // determine modification type - if (Aoid !== Boid) { - commitChange.type = "modified" - } - if (Aoid === undefined) { - commitChange.type = "deleted" - } - if (Boid === undefined || !commitHash2) { - commitChange.type = "added" - } - if (Aoid === undefined && Boid === undefined) { - commitChange.type = "unknown" - } - if (commitChange.type) - return commitChange - else - return undefined - }, - }) - - return result + return await isoGit.getCommitChanges(commitHash1, commitHash2, await this.getGitConfig()) } async compareBranches({ branch, remote }: compareBranchesInput): Promise { diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index 66bf3b35e4..871cb5452b 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -20,7 +20,7 @@ "../../libs/remix-api/src/lib/types/git.ts" ], "@remix-git": [ - "../../libs/remix-git/src/index.ts", + "../../libs/remix-git/" ], }, "typeRoots": [ @@ -32,6 +32,5 @@ }, "include": [ "src/**/*", - "../../libs/remix-git/src/index.ts" ] } \ No newline at end of file diff --git a/libs/remix-git/index.ts b/libs/remix-git/index.ts index ae218b1ee3..7285bb292a 100644 --- a/libs/remix-git/index.ts +++ b/libs/remix-git/index.ts @@ -1 +1 @@ -export * from './src/index' \ No newline at end of file +export { isoGit } from './src/isogit' \ No newline at end of file diff --git a/libs/remix-git/src/index.ts b/libs/remix-git/src/index.ts deleted file mode 100644 index 9ba55884b0..0000000000 --- a/libs/remix-git/src/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { currentBranchInput, isoGitConfig, remote } from "@remix-api" -import git from 'isomorphic-git' - -const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitConfig ) => { - console.log('CURRENT BRANCH', input) - - try { - const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig - - const name = await git.currentBranch(cmd) - let remote: remote = undefined - try { - const remoteName = await git.getConfig({ - ...defaultConfig, - path: `branch.${name}.remote` - }) - if (remoteName) { - const remoteUrl = await git.getConfig({ - ...defaultConfig, - path: `remote.${remoteName}.url` - }) - remote = { name: remoteName, url: remoteUrl } - } - - } catch (e) { - // do nothing - } - console.log('NAME', name) - console.log('REMOTE', remote) - - return { - remote: remote, - name: name || '' - } - } catch (e) { - return undefined - } - } - - export const isoGit = { - currentbranch - } \ No newline at end of file diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts new file mode 100644 index 0000000000..44ad3fcb3e --- /dev/null +++ b/libs/remix-git/src/isogit.ts @@ -0,0 +1,128 @@ +import { branch, commitChange, currentBranchInput, isoGitConfig, remote } from "@remix-api" +import git from 'isomorphic-git' + +const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitConfig ) => { + console.log('CURRENT BRANCH', input) + + try { + const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig + + const name = await git.currentBranch(cmd) + let remote: remote = undefined + try { + const remoteName = await git.getConfig({ + ...defaultConfig, + path: `branch.${name}.remote` + }) + if (remoteName) { + const remoteUrl = await git.getConfig({ + ...defaultConfig, + path: `remote.${remoteName}.url` + }) + remote = { name: remoteName, url: remoteUrl } + } + + } catch (e) { + // do nothing + } + console.log('NAME', name) + console.log('REMOTE', remote) + + return { + remote: remote, + name: name || '' + } + } catch (e) { + return undefined + } + } + + const branches = async (defaultConfig: isoGitConfig ) => { + try { + + const remotes = await isoGit.remotes(defaultConfig) + let branches: branch[] = [] + branches = (await git.listBranches(defaultConfig)).map((branch) => { return { remote: undefined, name: branch } }) + for (const remote of remotes) { + const cmd = { + ...defaultConfig, + remote: remote.name + } + const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) + branches = [...branches, ...remotebranches] + } + return branches + } catch (e) { + console.log(e) + return [] + } + } + + const remotes = async(defaultConfig: isoGitConfig) => { + + let remotes: remote[] = [] + try { + remotes = (await git.listRemotes({ ...defaultConfig })).map((remote) => { return { name: remote.remote, url: remote.url } } + ) + } catch (e) { + // do nothing + } + return remotes + } + + const getCommitChanges = async (commitHash1: string, commitHash2: string, defaultConfig: isoGitConfig) => { + const result: commitChange[] = await git.walk({ + ...defaultConfig, + trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], + map: async function (filepath, [A, B]) { + + if (filepath === '.') { + return + } + try { + if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { + return + } + } catch (e) { + // ignore + } + + // generate ids + const Aoid = A && await A.oid() || undefined + const Boid = B && await B.oid() || undefined + + const commitChange: Partial = { + hashModified: commitHash1, + hashOriginal: commitHash2, + path: filepath, + } + + // determine modification type + if (Aoid !== Boid) { + commitChange.type = "modified" + } + if (Aoid === undefined) { + commitChange.type = "deleted" + } + if (Boid === undefined || !commitHash2) { + commitChange.type = "added" + } + if (Aoid === undefined && Boid === undefined) { + commitChange.type = "unknown" + } + if (commitChange.type) + return commitChange + else + return undefined + }, + }) + + return result + } + + export const isoGit = { + currentbranch, + remotes, + branches, + getCommitChanges + } \ No newline at end of file diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 3362e00d8d..d27fe7b3f5 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -48,7 +48,7 @@ export const init = async () => { export const getBranches = async () => { - const branches = await plugin.call('dgitApi', "branches") + const branches = await plugin.call('dgitApi', 'branches') dispatch(setBranches(branches)); } diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 3b4433ee92..83c51dba1b 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -180,6 +180,9 @@ ], "@remix-api": [ "libs/remix-api/src/index.ts" + ], + "@remix-git": [ + "libs/remix-git/src/index.ts" ] } } From ebd1f3660cc2739805a6546ad4e207f74c8e30e8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 11 Jul 2024 10:06:50 +0200 Subject: [PATCH 004/312] disabled panel --- .../src/app/tabs/locales/en/electron.json | 4 +- .../src/app/tabs/locales/en/gitui.json | 3 + .../src/lib/plugins/filePanel-api.ts | 2 +- libs/remix-api/src/lib/plugins/fs-api.ts | 2 + libs/remix-ui/git/src/components/disabled.tsx | 32 +- libs/remix-ui/git/src/components/gitui.tsx | 15 +- libs/remix-ui/git/src/lib/listeners.ts | 23 +- libs/remix-ui/git/src/lib/pluginActions.ts | 7 + libs/remix-ui/git/src/state/actions.ts | 1 + libs/remix-ui/git/src/state/context.tsx | 1 + libs/remix-ui/git/src/state/gitpayload.ts | 7 + libs/remix-ui/git/src/state/gitreducer.tsx | 398 +++++++++--------- libs/remix-ui/git/src/types/index.ts | 13 +- 13 files changed, 291 insertions(+), 217 deletions(-) create mode 100644 apps/remix-ide/src/app/tabs/locales/en/gitui.json diff --git a/apps/remix-ide/src/app/tabs/locales/en/electron.json b/apps/remix-ide/src/app/tabs/locales/en/electron.json index cdf0a75a59..df81245b51 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/electron.json +++ b/apps/remix-ide/src/app/tabs/locales/en/electron.json @@ -1,4 +1,6 @@ { "electron.openFolder": "Open Folder", - "electron.recentFolders": "Recent Folders" + "electron.recentFolders": "Recent Folders", + "electron.gitClone": "Clone a Git Repository", + "electron.openFolderMessage": "In order to use Git features, you can open a folder or clone a repository." } \ No newline at end of file diff --git a/apps/remix-ide/src/app/tabs/locales/en/gitui.json b/apps/remix-ide/src/app/tabs/locales/en/gitui.json new file mode 100644 index 0000000000..eb793ed680 --- /dev/null +++ b/apps/remix-ide/src/app/tabs/locales/en/gitui.json @@ -0,0 +1,3 @@ +{ + "gitui.openFolderMessage": "In order to use Git features, you can open a folder or clone a repository." +} \ No newline at end of file diff --git a/libs/remix-api/src/lib/plugins/filePanel-api.ts b/libs/remix-api/src/lib/plugins/filePanel-api.ts index 02255c26ba..53b0a7170d 100644 --- a/libs/remix-api/src/lib/plugins/filePanel-api.ts +++ b/libs/remix-api/src/lib/plugins/filePanel-api.ts @@ -7,6 +7,6 @@ export interface IFilePanelApi { switchToWorkspace: (workspace: string) => Promise; } & StatusEvents methods: IFilePanel['methods'] & { - + clone: () => Promise; } } diff --git a/libs/remix-api/src/lib/plugins/fs-api.ts b/libs/remix-api/src/lib/plugins/fs-api.ts index 3cded01b06..2488db988d 100644 --- a/libs/remix-api/src/lib/plugins/fs-api.ts +++ b/libs/remix-api/src/lib/plugins/fs-api.ts @@ -7,5 +7,7 @@ export interface IFs { methods: { selectFolder(path?: string, title?: string, button?: string): Promise openWindow(path?: string): Promise, + getWorkingDir(): Promise, + openFolderInSameWindow(path: string): Promise, } } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/disabled.tsx b/libs/remix-ui/git/src/components/disabled.tsx index fbd54d6177..7825ee22df 100644 --- a/libs/remix-ui/git/src/components/disabled.tsx +++ b/libs/remix-ui/git/src/components/disabled.tsx @@ -1,12 +1,30 @@ -import React, { useEffect, useState } from 'react' +import { appPlatformTypes, platformContext } from '@remix-ui/app' +import React, { useEffect, useState, useContext } from 'react' +import { FormattedMessage } from "react-intl" +import { pluginActionsContext } from '../state/context' +import { openCloneDialog, openFolderInSameWindow } from '../lib/pluginActions' export const Disabled = () => { + const platform = useContext(platformContext) + + const openFolderElectron = async (path: string) => { + await openFolderInSameWindow(path) + } - return ( -
- Git is currently disabled.

- If you are using RemixD you can use git on the terminal.

-
- ) + const clone = async () => { + openCloneDialog() + } + return ( + (platform === appPlatformTypes.desktop) ? +
+
+
{ await openFolderElectron(null) }} className='btn btn-primary w-100 my-1'>
+
{ await clone() }} className='btn btn-primary w-100'>
+
+ : +
+ Git is currently disabled.

+ If you are using RemixD you can use git on the terminal.

+
) } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 7bfbc661cf..d3b3f5dd5c 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,7 +1,7 @@ -import React, { useEffect, useReducer, useState } from 'react' +import React, { useEffect, useReducer, useState, useContext } from 'react' import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' -import { openDiff, openFile, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' +import { openDiff, openFile, openFolderInSameWindow, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' import { gitReducer } from '../state/gitreducer' import { defaultGitState, defaultLoaderState, gitState, loaderState } from '../types' @@ -34,6 +34,7 @@ import { Init } from './panels/init' import { CustomRemixApi } from "@remix-api"; import { Plugin } from "@remixproject/engine"; import { Disabled } from './disabled' +import { platformContext } from '@remix-ui/app' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) @@ -51,6 +52,8 @@ export const GitUI = (props: IGitUi) => { const [needsInit, setNeedsInit] = useState(true) const [appLoaded, setAppLoaded] = useState(false) + const platform = useContext(platformContext) + useEffect(() => { plugin.emit('statusChanged', { key: 'loading', @@ -64,7 +67,7 @@ export const GitUI = (props: IGitUi) => { useEffect(() => { if (!appLoaded) return - setCallBacks(plugin, gitDispatch, loaderDispatch, setActivePanel) + setCallBacks(plugin, gitDispatch, loaderDispatch, setActivePanel, platform) setPlugin(plugin, gitDispatch, loaderDispatch) loaderDispatch({ type: 'plugin', payload: true }) @@ -159,11 +162,13 @@ export const GitUI = (props: IGitUi) => { saveToken, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, - showAlert + showAlert, + openFolderInSameWindow } return ( - <>{(!gitState.canUseApp) ? : + <>{(!gitState.canUseApp) ? + :
diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index 871458c8fb..682674e6f5 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -1,12 +1,13 @@ import React from "react"; -import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails } from "../state/gitpayload"; +import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir } from "../state/gitpayload"; import { gitActionDispatch } from "../types"; import { Plugin } from "@remixproject/engine"; import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, gitlog, setPlugin } from "./gitactions"; import { Profile } from "@remixproject/plugin-utils"; import { CustomRemixApi } from "@remix-api"; import { statusChanged } from "./pluginActions"; +import { appPlatformTypes } from "@remix-ui/app"; let plugin: Plugin, gitDispatch: React.Dispatch, loaderDispatch: React.Dispatch, loadFileQueue: AsyncDebouncedQueue let callBackEnabled: boolean = false @@ -20,7 +21,7 @@ class AsyncDebouncedQueue { this.queues = new Map(); } - enqueue(callback: AsyncCallback, customDelay?:number): void { + enqueue(callback: AsyncCallback, customDelay?: number): void { if (this.queues.has(callback)) { clearTimeout(this.queues.get(callback)!.timer); } @@ -34,7 +35,7 @@ class AsyncDebouncedQueue { } } -export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch, loaderDispatcher: React.Dispatch, setAtivePanel: React.Dispatch>) => { +export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch, loaderDispatcher: React.Dispatch, setAtivePanel: React.Dispatch>, platform: appPlatformTypes) => { plugin = viewPlugin gitDispatch = gitDispatcher loaderDispatch = loaderDispatcher @@ -65,7 +66,11 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { + console.log('workingDirChanged', path) + gitDispatcher(setDesktopWorkingDir(path)) + gitDispatch(setCanUseApp(path ? true : false)) loadFileQueue.enqueue(async () => { loadFiles() }) @@ -79,8 +84,17 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitDispatch(setCanUseApp(x && !x.isLocalhost && x.name)) + console.log('setWorkspace', x) + + if(platform == appPlatformTypes.desktop) { + const workingDir = await plugin.call('fs', 'getWorkingDir') + gitDispatch(setCanUseApp(workingDir? true : false)) + }else{ + gitDispatch(setCanUseApp(x && !x.isLocalhost && x.name)) + } + loadFileQueue.enqueue(async () => { loadFiles() }) @@ -95,6 +109,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { gitlog() diff --git a/libs/remix-ui/git/src/lib/pluginActions.ts b/libs/remix-ui/git/src/lib/pluginActions.ts index 94d9d6bcf5..a13f1cca93 100644 --- a/libs/remix-ui/git/src/lib/pluginActions.ts +++ b/libs/remix-ui/git/src/lib/pluginActions.ts @@ -98,3 +98,10 @@ export const clearFileDecorator = async(path: string) => { await plugin.call('fileDecorator', 'clearFileDecorators', path) } +export const openFolderInSameWindow = async (path: string) => { + await plugin.call('fs', 'openFolderInSameWindow', path) +} + +export const openCloneDialog = async () => { + plugin.call('filePanel', 'clone') +} diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index 3c2049771d..ce1134a388 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -42,6 +42,7 @@ export interface ActionPayloadTypes { SET_LOG: gitLog CLEAR_LOG: void SET_USER_EMAILS: userEmails + DESKTOP_SET_WORKING_DIR: string } export interface Action { diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index ed58ac1a3f..f46ae5b7d7 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -55,6 +55,7 @@ export interface pluginActions { token: string }> showAlert({ title, message }:{title: string, message: string}): Promise + openFolderInSameWindow(path: string): Promise } export const pluginActionsContext = React.createContext(null) \ No newline at end of file diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index 338dbd017a..b07b5350aa 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -218,3 +218,10 @@ export const clearLog = () => { type: 'CLEAR_LOG' } } + +export const setDesktopWorkingDir = (dir: string) => { + return { + type: 'DESKTOP_SET_WORKING_DIR', + payload: dir + } +} diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 1b41ffd43c..f9654e4a96 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -6,203 +6,209 @@ import { Actions } from "./actions" export const gitReducer = (state: gitState = defaultGitState, action: Actions): gitState => { switch (action.type) { - case 'FILE_STATUS': - return { - ...state, - fileStatusResult: action.payload, - staged: getFilesByStatus("staged", action.payload), - modified: getFilesByStatus("modified", action.payload), - untracked: getFilesByStatus("untracked", action.payload), - deleted: getFilesByStatus("deleted", action.payload), - allchangesnotstaged: allChangedButNotStagedFiles(action.payload) - } - - case 'FILE_STATUS_MERGE': - action.payload.map((fileStatusResult: fileStatusResult) => { - const file = state.fileStatusResult.find(stateFile => { - return stateFile.filename === fileStatusResult.filename + case 'FILE_STATUS': + return { + ...state, + fileStatusResult: action.payload, + staged: getFilesByStatus("staged", action.payload), + modified: getFilesByStatus("modified", action.payload), + untracked: getFilesByStatus("untracked", action.payload), + deleted: getFilesByStatus("deleted", action.payload), + allchangesnotstaged: allChangedButNotStagedFiles(action.payload) + } + + case 'FILE_STATUS_MERGE': + action.payload.map((fileStatusResult: fileStatusResult) => { + const file = state.fileStatusResult.find(stateFile => { + return stateFile.filename === fileStatusResult.filename + }) + if (file) { + file.status = fileStatusResult.status + file.statusNames = fileStatusResult.statusNames + } + }) + + return { + ...state, + staged: getFilesByStatus("staged", state.fileStatusResult), + modified: getFilesByStatus("modified", state.fileStatusResult), + untracked: getFilesByStatus("untracked", state.fileStatusResult), + deleted: getFilesByStatus("deleted", state.fileStatusResult), + allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) + } + + case 'SET_COMMITS': + return { + ...state, + commits: action.payload, + localCommitCount: action.payload.length + } + + case 'SET_BRANCHES': + return { + ...state, + branches: action.payload + } + + case 'SET_CURRENT_BRANCH': + return { + ...state, + currentBranch: action.payload + } + + case 'SET_CURRENT_HEAD': + return { + ...state, + currentHead: action.payload + } + + case 'SET_CAN_USE_APP': + return { + ...state, + canUseApp: action.payload + } + case 'SET_REPO_NAME': + return { + ...state, + reponame: action.payload + } + case 'SET_LOADING': + return { + ...state, + loading: action.payload + } + + case 'SET_REPOS': + return { + ...state, + repositories: action.payload + } + + case 'SET_REMOTE_BRANCHES': + return { + ...state, + remoteBranches: action.payload + } + + case 'SET_CAN_COMMIT': + return { + ...state, + canCommit: action.payload + } + + case 'SET_REMOTES': + return { + ...state, + remotes: action.payload + } + + case 'SET_UPSTREAM': + return { + ...state, + upstream: action.payload + } + + case 'SET_COMMIT_CHANGES': + + action.payload.forEach((change: commitChange) => { + state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) }) - if (file) { - file.status = fileStatusResult.status - file.statusNames = fileStatusResult.statusNames - } - }) - - return { - ...state, - staged: getFilesByStatus("staged", state.fileStatusResult), - modified: getFilesByStatus("modified", state.fileStatusResult), - untracked: getFilesByStatus("untracked", state.fileStatusResult), - deleted: getFilesByStatus("deleted", state.fileStatusResult), - allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) - } - - case 'SET_COMMITS': - return { - ...state, - commits: action.payload, - localCommitCount: action.payload.length - } - - case 'SET_BRANCHES': - return { - ...state, - branches: action.payload - } - - case 'SET_CURRENT_BRANCH': - return { - ...state, - currentBranch: action.payload - } - - case 'SET_CURRENT_HEAD': - return { - ...state, - currentHead: action.payload - } - - case 'SET_CAN_USE_APP': - return { - ...state, - canUseApp: action.payload - } - case 'SET_REPO_NAME': - return { - ...state, - reponame: action.payload - } - case 'SET_LOADING': - return { - ...state, - loading: action.payload - } - - case 'SET_REPOS': - return { - ...state, - repositories: action.payload - } - - case 'SET_REMOTE_BRANCHES': - return { - ...state, - remoteBranches: action.payload - } - - case 'SET_CAN_COMMIT': - return { - ...state, - canCommit: action.payload - } - - case 'SET_REMOTES': - return { - ...state, - remotes: action.payload - } - - case 'SET_UPSTREAM': - return { - ...state, - upstream: action.payload - } - - case 'SET_COMMIT_CHANGES': - - action.payload.forEach((change: commitChange) => { - state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) - }) - - return { - ...state, - commitChanges: [...state.commitChanges] - } - - case 'RESET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - delete state.remoteBranchCommits[action.payload.branch.name] - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) - } else { - state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_LOCAL_BRANCH_COMMITS': - - state.localBranchCommits[action.payload.branch.name] = action.payload.commits - return { - ...state, - localBranchCommits: { ...state.localBranchCommits } - } - - case 'SET_BRANCH_DIFFERENCES': - - state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference - - return { - ...state, - branchDifferences: { ...state.branchDifferences } - } - - case 'SET_GITHUB_USER': - return { - ...state, - gitHubUser: action.payload - } - - case 'SET_GITHUB_ACCESS_TOKEN': - return { - ...state, - gitHubAccessToken: action.payload - } - - case 'SET_SCOPES': - return { - ...state, - gitHubScopes: action.payload - } - - case 'SET_USER_EMAILS': - return { - ...state, - userEmails: action.payload - } - - case 'SET_DEFAULT_REMOTE': - return { - ...state, - defaultRemote: action.payload - } - - case 'SET_LOG': - if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { - return { - ...state, - log: [...state.log] - } - } - return { - ...state, - log: [...state.log, action.payload] - } - - case 'CLEAR_LOG': - return { - ...state, - log: [] - } + return { + ...state, + commitChanges: [...state.commitChanges] + } + + case 'RESET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + delete state.remoteBranchCommits[action.payload.branch.name] + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) + } else { + state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_LOCAL_BRANCH_COMMITS': + + state.localBranchCommits[action.payload.branch.name] = action.payload.commits + return { + ...state, + localBranchCommits: { ...state.localBranchCommits } + } + + case 'SET_BRANCH_DIFFERENCES': + + state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference + + return { + ...state, + branchDifferences: { ...state.branchDifferences } + } + + case 'SET_GITHUB_USER': + return { + ...state, + gitHubUser: action.payload + } + + case 'SET_GITHUB_ACCESS_TOKEN': + return { + ...state, + gitHubAccessToken: action.payload + } + + case 'SET_SCOPES': + return { + ...state, + gitHubScopes: action.payload + } + + case 'SET_USER_EMAILS': + return { + ...state, + userEmails: action.payload + } + + case 'SET_DEFAULT_REMOTE': + return { + ...state, + defaultRemote: action.payload + } + + case 'SET_LOG': + if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { + return { + ...state, + log: [...state.log] + } + } + return { + ...state, + log: [...state.log, action.payload] + } + + case 'CLEAR_LOG': + return { + ...state, + log: [] + } + + + case 'DESKTOP_SET_WORKING_DIR': + return { + ...state, + desktopWorkingDir: action.payload + } } } \ No newline at end of file diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index efe0553066..b3b4de928d 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -38,6 +38,7 @@ export type gitState = { gitHubScopes: string[] gitHubAccessToken: string log: gitLog[] + desktopWorkingDir?: string } export type gitLog = { type: 'error' | 'warning' | 'info' | 'success', @@ -69,7 +70,7 @@ export const defaultGitState: gitState = { deleted: [], modified: [], allchangesnotstaged: [], - canUseApp: true, + canUseApp: false, loading: false, storageUsed: {}, reponame: "", @@ -87,7 +88,8 @@ export const defaultGitState: gitState = { userEmails: [] as userEmails, gitHubScopes: [], gitHubAccessToken: "", - log: [] + log: [], + desktopWorkingDir: null } export const defaultLoaderState: loaderState = { @@ -222,4 +224,9 @@ export interface clearLogAction { type: string } -export type gitActionDispatch = setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file +export interface setDesktopWorkingDirAction { + type: string, + payload: string +} + +export type gitActionDispatch = setDesktopWorkingDirAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file From 770ea4b1c01bcaa94198e3dfa8f68a55042672b9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 11 Jul 2024 10:37:04 +0200 Subject: [PATCH 005/312] refactor --- apps/remix-ide/src/app/files/dgitProvider.ts | 27 +------------- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 28 +-------------- libs/remix-git/src/isogit.ts | 35 +++++++++++++++++-- 3 files changed, 35 insertions(+), 55 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 3f0a510bd2..41a348f07a 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -301,32 +301,7 @@ class DGitProvider extends Plugin { if ((Registry.getInstance().get('platform').api.isDesktop())) { return await this.call('isogit', 'compareBranches', { branch, remote }) } - // Get current branch commits - const headCommits = await git.log({ - ...await this.addIsomorphicGitConfigFS(), - ref: branch.name, - }); - - // Get remote branch commits - const remoteCommits = await git.log({ - ...await this.addIsomorphicGitConfigFS(), - ref: `${remote.name}/${branch.name}`, - }); - - // Convert arrays of commit objects to sets of commit SHAs - const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); - const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); - - // Filter out commits that are only in the remote branch - const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); - - // filter out commits that are only in the local branch - const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); - - return { - uniqueHeadCommits, - uniqueRemoteCommits, - }; + return await isoGit.compareBranches({ branch, remote }, await this.addIsomorphicGitConfigFS()) } async getCommitChanges(commitHash1: string, commitHash2: string): Promise { diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index ce6c3268ba..bb79ff7d62 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -390,33 +390,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async compareBranches({ branch, remote }: compareBranchesInput): Promise { - - // Get current branch commits - const headCommits = await git.log({ - ...await this.getGitConfig(), - ref: branch.name, - }); - - // Get remote branch commits - const remoteCommits = await git.log({ - ...await this.getGitConfig(), - ref: `${remote.name}/${branch.name}`, - }); - - // Convert arrays of commit objects to sets of commit SHAs - const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); - const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); - - // Filter out commits that are only in the remote branch - const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); - - // filter out commits that are only in the local branch - const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); - - return { - uniqueHeadCommits, - uniqueRemoteCommits, - }; + return await isoGit.compareBranches({ branch, remote }, await this.getGitConfig()) } } diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index 44ad3fcb3e..bd3b608203 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -1,4 +1,4 @@ -import { branch, commitChange, currentBranchInput, isoGitConfig, remote } from "@remix-api" +import { branch, commitChange, compareBranchesInput, currentBranchInput, isoGitConfig, remote } from "@remix-api" import git from 'isomorphic-git' const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitConfig ) => { @@ -120,9 +120,40 @@ const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitCon return result } + const compareBranches = async ({ branch, remote }: compareBranchesInput, defaultConfig: isoGitConfig) => { + + // Get current branch commits + const headCommits = await git.log({ + ...defaultConfig, + ref: branch.name, + }); + + // Get remote branch commits + const remoteCommits = await git.log({ + ...defaultConfig, + ref: `${remote.name}/${branch.name}`, + }); + + // Convert arrays of commit objects to sets of commit SHAs + const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); + const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); + + // Filter out commits that are only in the remote branch + const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); + + // filter out commits that are only in the local branch + const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); + + return { + uniqueHeadCommits, + uniqueRemoteCommits, + }; + } + export const isoGit = { currentbranch, remotes, branches, - getCommitChanges + getCommitChanges, + compareBranches } \ No newline at end of file From dc6039dc147636377f44f7578eb2eba7feb81867 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 10 Jul 2024 13:55:08 +0200 Subject: [PATCH 006/312] show log in github from FE --- .../src/app/tabs/locales/en/filePanel.json | 2 + .../git/src/components/github/devicecode.tsx | 5 +- libs/remix-ui/git/src/components/gitui.tsx | 48 ++++++------- .../components/panels/githubcredentials.tsx | 5 +- .../git/src/components/panels/setup.tsx | 9 +-- libs/remix-ui/git/src/types/index.ts | 7 ++ .../workspace/src/lib/css/file-explorer.css | 4 ++ .../workspace/src/lib/remix-ui-workspace.tsx | 68 ++++++++++++++++++- .../remix-ui/workspace/src/lib/types/index.ts | 4 +- 9 files changed, 114 insertions(+), 38 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index 6932ae3e04..98f4cd70e5 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -142,5 +142,7 @@ "filePanel.movingFolderFailedMsg": "Unexpected error while moving folder: {src}", "filePanel.workspaceActions": "Workspace actions", "filePanel.saveCodeSample": "This code-sample workspace will not be persisted. Click here to save it.", + "filePanel.logInGithub": "Log in to GitHub.", + "filePanel.gitHubLoggedAs": "Logged as {githubuser}", "filePanel.updateSubmodules": "Update all submodules of repository. Click to pull dependencies." } diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index cd611efe4d..583aeb98c0 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -4,8 +4,9 @@ import { gitPluginContext } from "../gitui"; import axios from "axios"; import { CopyToClipboard } from "@remix-ui/clipboard"; import { Card } from "react-bootstrap"; +import { IGitUi } from '../../types' -export const GetDeviceCode = () => { +export const GetDeviceCode = (props: IGitUi) => { const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) const pluginActions = React.useContext(pluginActionsContext) @@ -59,7 +60,6 @@ export const GetDeviceCode = () => { await pluginActions.saveToken(response.access_token) await actions.loadGitHubUserFromToken() } - } const disconnect = async () => { @@ -67,6 +67,7 @@ export const GetDeviceCode = () => { setGitHubResponse(null) await pluginActions.saveToken(null) await actions.loadGitHubUserFromToken() + props.plugin.emit('disconnectFromGithub') } return ( diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 7bfbc661cf..65058f8533 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -31,17 +31,11 @@ import { SourceControl } from './panels/sourcontrol' import { GitHubCredentials } from './panels/githubcredentials' import { Setup } from './panels/setup' import { Init } from './panels/init' -import { CustomRemixApi } from "@remix-api"; -import { Plugin } from "@remixproject/engine"; import { Disabled } from './disabled' - +import { IGitUi } from '../types' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) -interface IGitUi { - plugin: Plugin -} - export const GitUI = (props: IGitUi) => { const plugin = props.plugin const [gitState, gitDispatch] = useReducer(gitReducer, defaultGitState) @@ -59,6 +53,7 @@ export const GitUI = (props: IGitUi) => { }) setTimeout(() => { setAppLoaded(true) + plugin.on('filePanel', 'requestGitHubSignIn' as any, () => setActivePanel('0')) }, 2000) }, []) @@ -171,21 +166,29 @@ export const GitUI = (props: IGitUi) => { - {setup && !needsInit ? : null} + {setup && !needsInit ? : null} {needsInit ? : null} {!setup && !needsInit ? - - - + + + <> + +
+ + +
+
+ + <>
- - + + <> @@ -198,8 +201,8 @@ export const GitUI = (props: IGitUi) => {
- - + + <> @@ -211,23 +214,14 @@ export const GitUI = (props: IGitUi) => {
- - + + <>
- + - <> - -
- - -
-
- - <> diff --git a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx index 300e6797f0..7c8c6cf127 100644 --- a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx +++ b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx @@ -5,8 +5,9 @@ import { CustomTooltip } from "@remix-ui/helper"; import { useIntl, FormattedMessage } from "react-intl"; import { CopyToClipboard } from "@remix-ui/clipboard"; +import { IGitUi } from '../../types' -export const GitHubCredentials = () => { +export const GitHubCredentials = (props: IGitUi) => { const context = React.useContext(gitPluginContext) const pluginactions = React.useContext(pluginActionsContext) const loader = React.useContext(loaderContext) @@ -52,6 +53,7 @@ export const GitHubCredentials = () => { setGithubToken(credentials.token || '') setGithubUsername(credentials.username || '') setGithubEmail(credentials.email || '') + props.plugin.emit('loggedInGithubChanged') } function removeToken(): void { @@ -63,6 +65,7 @@ export const GitHubCredentials = () => { email: '', token: '' }) + props.plugin.emit('disconnectFromGithub') } return ( diff --git a/libs/remix-ui/git/src/components/panels/setup.tsx b/libs/remix-ui/git/src/components/panels/setup.tsx index 42a68014ae..6c3a08f438 100644 --- a/libs/remix-ui/git/src/components/panels/setup.tsx +++ b/libs/remix-ui/git/src/components/panels/setup.tsx @@ -1,8 +1,9 @@ import React, { useEffect, useState } from 'react' import { GetDeviceCode } from '../github/devicecode' import { GitHubCredentials } from './githubcredentials' +import { IGitUi } from '../../types' -export const Setup = () => { +export const Setup = (props: IGitUi) => { const [screen, setScreen] = useState(0) @@ -15,9 +16,9 @@ export const Setup = () => { To ensure that your commits are properly attributed in Git, you need to configure a username and email address. These will be used to identify the author of the commit.
- +
- + ) @@ -28,7 +29,7 @@ export const Setup = () => {
Step 2
To ensure that your commits are properly attributed in Git, you need to configure your username and email address. - +
) diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 9ed9a292ed..03e28a9bb2 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -2,9 +2,16 @@ import { Endpoints } from "@octokit/types" import { IRemixApi } from "@remixproject/plugin-api" import { LibraryProfile, StatusEvents } from "@remixproject/plugin-utils" import { CommitObject, ReadBlobResult, ReadCommitResult, StatusRow } from "isomorphic-git" +import { CustomRemixApi } from "@remix-api"; +import { Plugin } from "@remixproject/engine"; + export type GitHubUser = Partial export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] +export interface IGitUi { + plugin: Plugin +} + export interface IGitApi { events: { "checkout": () => void diff --git a/libs/remix-ui/workspace/src/lib/css/file-explorer.css b/libs/remix-ui/workspace/src/lib/css/file-explorer.css index 16f0ffca51..aff221c205 100644 --- a/libs/remix-ui/workspace/src/lib/css/file-explorer.css +++ b/libs/remix-ui/workspace/src/lib/css/file-explorer.css @@ -69,3 +69,7 @@ ul { .remixui_icons:hover { color: var(--text); } + +.remixui_avatar_user { + border-radius: 50% !important; +} 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 03d807808a..e0df989650 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -17,7 +17,7 @@ import { customAction } from '@remixproject/plugin-api' import { appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' -import { branch } from '@remix-ui/git' +import { branch, GitHubUser, userEmails } from '@remix-ui/git' const _paq = (window._paq = window._paq || []) @@ -72,9 +72,37 @@ export function Workspace() { showContextMenu: false, reservedKeywords: [ROOT_PATH], copyElement: [], - dragStatus: false + dragStatus: false, + loggedInGithub: false, + githubUser: null }) + useEffect(() => { + const run = async () => { + const token = await global.plugin.call('config' as any, 'getAppParameter' as any, 'settings/gist-access-token') + const data: { + user: GitHubUser, + scopes: string[] + emails: userEmails + } = await global.plugin.call('dgitApi' as any, 'getGitHubUser', { token }); + + if (data.user) { + setState((prevState) => { + return { ...prevState, loggedInGithub: true, githubUser: data.user } + }) + } + } + global.plugin.on('dgit', 'disconnectFromGithub', () => { + setState((prevState) => { + return { ...prevState, loggedInGithub: false, githubUser: null } + }) + }) + global.plugin.on('dgit', 'loggedInGithubChanged', () => { + run() + }) + run() + }, []) + useEffect(() => { if (canPaste) { addMenuItems([ @@ -1053,6 +1081,14 @@ export function Workspace() { ) } + + const logInGithub = async () => { + await global.plugin.call('manager', 'activatePlugin', 'dgit') + await global.plugin.call('menuicons', 'select', 'dgit'); + await global.plugin.emit('requestGitHubSignIn'); + _paq.push(['trackEvent', 'Workspace', 'GIT', 'login']) + } + return (
{(platform !== appPlatformTypes.desktop) ? ( diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index aff1b70bd8..34f9df189d 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -6,7 +6,7 @@ import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types' import { ViewPlugin } from '@remixproject/engine-web' import { appPlatformTypes } from '@remix-ui/app' import { Placement } from 'react-bootstrap/esm/Overlay' -import { branch } from '@remix-ui/git' +import { branch, GitHubUser } from '@remix-ui/git' export type action = { name: string, type?: Array, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes } export interface JSONStandardInput { @@ -225,6 +225,8 @@ export interface WorkSpaceState { reservedKeywords: string[] copyElement: CopyElementType[] dragStatus: boolean + loggedInGithub: boolean + githubUser: GitHubUser } export type FileFocusContextType = { From 8b87f11796a95b9a47cf39287fe809305fd692d8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 11 Jul 2024 13:30:20 +0200 Subject: [PATCH 007/312] updateSubmodules --- apps/remix-ide/src/app/files/dgitProvider.ts | 3 +++ apps/remixdesktop/src/plugins/isoGitPlugin.ts | 13 ++++++++++++- apps/remixdesktop/src/tools/git.ts | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 41a348f07a..8dbc8e9376 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -541,6 +541,9 @@ class DGitProvider extends Plugin { } async updateSubmodules(input) { + if ((Registry.getInstance().get('platform').api.isDesktop())) { + return await this.call('isogit', 'updateSubmodules', null) + } try { const currentDir = (input && input.dir) || '' const gitmodules = await this.parseGitmodules(currentDir) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index bb79ff7d62..3272696e77 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -47,7 +47,7 @@ const clientProfile: Profile = { name: 'isogit', displayName: 'isogit', description: 'isogit plugin', - methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder', 'getCommitChanges', 'compareBranches', 'startClone'] + methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder', 'getCommitChanges', 'compareBranches', 'startClone', 'updateSubmodules'] } class IsoGitPluginClient extends ElectronBasePluginClient { @@ -393,6 +393,17 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return await isoGit.compareBranches({ branch, remote }, await this.getGitConfig()) } + async updateSubmodules(input) { + if (this.gitIsInstalled) { + try { + return await gitProxy.updateSubmodules(this.workingDir) + } catch (e) { + throw e + } + } else { + this.call('terminal', 'log', { type: 'error', value: 'Please install git into your OS to use this functionality...' }) + } + } } diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index 5f8676122b..5e062dceac 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -97,6 +97,16 @@ export const gitProxy = { await execAsync(`git init`, { cwd: path }); }, + async updateSubmodules(path: string) { + const { stdout, stderr } = await execAsync(`git submodule update --init --recursive`, { cwd: path }); + if (stdout) { + console.log('stdout:', stdout); + } + if (stderr) { + console.error('stderr:', stderr); + } + }, + status: async (path: string) => { const result = await execAsync('git status --porcelain -uall', { cwd: path }) From 6c35e7904e5d61ca6b69e2fa583621255d15fe2b Mon Sep 17 00:00:00 2001 From: lianahus Date: Thu, 11 Jul 2024 16:33:01 +0200 Subject: [PATCH 008/312] alignment of sign in --- .../workspace/src/lib/remix-ui-workspace.tsx | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) 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 e0df989650..4df07c0634 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -1142,53 +1142,53 @@ export function Workspace() { ) : null} - - - {selectedWorkspace && selectedWorkspace.name === 'code-sample' && } - > - saveSampleCodeWorkspace()} className="far fa-exclamation-triangle text-warning ml-2 align-self-center" aria-hidden="true"> - } - - {selectedWorkspace && selectedWorkspace.isGist && selectedWorkspace.isGist} direction="bottom" icon="far fa-copy"> - - - } - - - { - !state.loggedInGithub && + + + {selectedWorkspace && selectedWorkspace.name === 'code-sample' && } + tooltipText={} > - logInGithub() } className="fa-brands fa-github-alt text-success ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> - - } - - { - !state.loggedInGithub && logInGithub() } className="ml-1 text-success"> Sign in - } + saveSampleCodeWorkspace()} className="far fa-exclamation-triangle text-warning ml-2 align-self-center" aria-hidden="true"> + } - { - state.loggedInGithub && - - + {selectedWorkspace && selectedWorkspace.isGist && selectedWorkspace.isGist} direction="bottom" icon="far fa-copy"> + + } + + { + !state.loggedInGithub && } + > +
+ logInGithub() } className="fa-brands fa-github-alt text-success ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> + logInGithub() } className="ml-1 text-success"> Sign in +
+
+ } + { + state.loggedInGithub && + + + } +
+
{(platform !== appPlatformTypes.desktop) ? ( From 8b946df1867da2228f4373a5648a6c43a18524d5 Mon Sep 17 00:00:00 2001 From: lianahus Date: Thu, 11 Jul 2024 16:34:24 +0200 Subject: [PATCH 009/312] tooltip rename --- apps/remix-ide/src/app/tabs/locales/en/filePanel.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index 98f4cd70e5..affee6c134 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -142,7 +142,7 @@ "filePanel.movingFolderFailedMsg": "Unexpected error while moving folder: {src}", "filePanel.workspaceActions": "Workspace actions", "filePanel.saveCodeSample": "This code-sample workspace will not be persisted. Click here to save it.", - "filePanel.logInGithub": "Log in to GitHub.", - "filePanel.gitHubLoggedAs": "Logged as {githubuser}", + "filePanel.logInGithub": "Sign in to GitHub.", + "filePanel.gitHubLoggedAs": "Signed in as {githubuser}", "filePanel.updateSubmodules": "Update all submodules of repository. Click to pull dependencies." } From 3672ec06963ee8cdbc2bfc8f44559bd51e4c9ff8 Mon Sep 17 00:00:00 2001 From: lianahus Date: Thu, 11 Jul 2024 17:06:53 +0200 Subject: [PATCH 010/312] lint --- .../workspace/src/lib/remix-ui-workspace.tsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) 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 4df07c0634..723061b395 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -90,16 +90,16 @@ export function Workspace() { setState((prevState) => { return { ...prevState, loggedInGithub: true, githubUser: data.user } }) - } + } } - global.plugin.on('dgit', 'disconnectFromGithub', () => { + global.plugin.on('dgit', 'disconnectFromGithub', () => { setState((prevState) => { return { ...prevState, loggedInGithub: false, githubUser: null } }) }) - global.plugin.on('dgit', 'loggedInGithubChanged', () => { + global.plugin.on('dgit', 'loggedInGithubChanged', () => { run() - }) + }) run() }, []) @@ -1164,8 +1164,8 @@ export function Workspace() { } - { - !state.loggedInGithub && logInGithub() } className="ml-1 text-success"> Sign in
- } - { - state.loggedInGithub && - } - + } +
From 2371ab037c1a9cfa8d6af6602e013d714d8e6c70 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 11 Jul 2024 17:40:11 +0200 Subject: [PATCH 011/312] order of priority --- libs/remix-ui/git/src/components/gitui.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 65058f8533..5e0692d882 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -166,8 +166,8 @@ export const GitUI = (props: IGitUi) => { - {setup && !needsInit ? : null} - {needsInit ? : null} + {setup ? : null} + {!setup && needsInit ? : null} {!setup && !needsInit ? From 0ac2809d541853d005a5c6997a5474830f17a09a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jul 2024 13:12:17 +0200 Subject: [PATCH 012/312] refactor --- apps/remix-ide/src/app/files/dgitProvider.ts | 397 ++--------------- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 68 +-- libs/remix-api/src/lib/types/git.ts | 23 +- libs/remix-git/src/isogit.ts | 418 ++++++++++++------ libs/remix-ui/git/src/lib/gitactions.ts | 4 +- libs/remix-ui/git/src/state/actions.ts | 4 +- libs/remix-ui/git/src/state/gitpayload.ts | 4 +- libs/remix-ui/git/src/types/index.ts | 4 +- 8 files changed, 363 insertions(+), 559 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 8dbc8e9376..a3a3a000af 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -4,26 +4,14 @@ import { Plugin } from '@remixproject/engine' import git, { ReadBlobResult, ReadCommitResult, StatusRow } from 'isomorphic-git' -import IpfsHttpClient from 'ipfs-http-client' -import { - saveAs -} from 'file-saver' -import http from 'isomorphic-git/http/web' - -import JSZip from 'jszip' import path from 'path' -import FormData from 'form-data' import axios from 'axios' import { Registry } from '@remix-project/remix-lib' -import { Octokit, App } from "octokit" -import { OctokitResponse } from '@octokit/types' -import { Endpoints } from "@octokit/types" +import { Octokit } from "octokit" import { IndexedDBStorage } from './filesystems/indexedDB' -import { GitHubUser, branch, commitChange, remote, userEmails } from '@remix-ui/git' -import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType, isoGitConfig} from '@remix-api' -import { LibraryProfile, StatusEvents } from '@remixproject/plugin-utils' -import { ITerminal } from '@remixproject/plugin-api/src/lib/terminal' -import { partial } from 'lodash' +import { branch, commitChange, remote } from '@remix-ui/git' +import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType, isoGitFSConfig, GitHubUser, userEmails } from '@remix-api' +import { LibraryProfile } from '@remixproject/plugin-utils' import { CustomRemixApi } from '@remix-api' import { isoGit } from "libs/remix-git/src/isogit" @@ -37,49 +25,17 @@ const profile: LibraryProfile = { description: 'Decentralized git provider', icon: 'assets/img/fileManager.webp', version: '0.0.1', - methods: ['init', 'localStorageUsed', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pull', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'version', 'updateSubmodules' + methods: ['init', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pull', 'version', 'updateSubmodules' , 'getGitHubUser', 'remotebranches', 'remotecommits', 'repositories', 'getCommitChanges', 'compareBranches'], kind: 'file-system' } class DGitProvider extends Plugin { - ipfsconfig: { host: string; port: number; protocol: string; ipfsurl: string } - globalIPFSConfig: { host: string; port: number; protocol: string; ipfsurl: string } - remixIPFS: { host: string; port: number; protocol: string; ipfsurl: string } - ipfsSources: any[] - ipfs: any - filesToSend: any[] constructor() { super(profile) - this.ipfsconfig = { - host: 'jqgt.remixproject.org', - port: 443, - protocol: 'https', - ipfsurl: 'https://jqgt.remixproject.org/ipfs/' - } - this.globalIPFSConfig = { - host: 'ipfs.io', - port: 443, - protocol: 'https', - ipfsurl: 'https://ipfs.io/ipfs/' - } - this.remixIPFS = { - host: 'jqgt.remixproject.org', - port: 443, - protocol: 'https', - ipfsurl: 'https://jqgt.remixproject.org/ipfs/' - } - this.ipfsSources = [this.remixIPFS, this.globalIPFSConfig, this.ipfsconfig] } async addIsomorphicGitConfigFS(dir = '') { - if ((Registry.getInstance().get('platform').api.isDesktop())) { - return { - fs: window.remixFileSystem, - dir: '/' - } - } - const workspace = await this.call('filePanel', 'getCurrentWorkspace') if (!workspace) return @@ -89,61 +45,12 @@ class DGitProvider extends Plugin { } } - async addIsomorphicGitConfig(input) { - - const token = await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') - - let config = { - corsProxy: 'https://corsproxy.remixproject.org/', - http, - onAuth: url => { - url - const auth = { - username: input.token || token, - password: '' - } - return auth - } - } - if (input.url) { - - const url = new URL(input.url) - if (url.hostname.includes('localhost')) { - config = { - ...config, - corsProxy: null - } - } - } - if ((input.remote && input.remote.url)) { - - const url = new URL(input.remote.url) - if (url.hostname.includes('localhost')) { - config = { - ...config, - corsProxy: null, - } - } - } - - if (input.provider && input.provider === 'github') { - config = { - ...config, - corsProxy: 'https://corsproxy.remixproject.org/', - } - } - - if (input.provider && input.provider === 'localhost') { - config = { - ...config, - corsProxy: null - } - } - - return config + async getToken() { + return await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') } - async getCommandUser(input) { + + async getAuthor(input) { const author: author = { name: '', email: '' @@ -306,10 +213,10 @@ class DGitProvider extends Plugin { async getCommitChanges(commitHash1: string, commitHash2: string): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { - const result = this.call('isogit', 'getCommitChanges', commitHash1, commitHash2 ) + const result = this.call('isogit', 'getCommitChanges', commitHash1, commitHash2) return result } - + return await isoGit.getCommitChanges(commitHash1, commitHash2, await this.addIsomorphicGitConfigFS()) } @@ -351,7 +258,7 @@ class DGitProvider extends Plugin { return await isoGit.currentbranch(input, defaultConfig) } - async branches(config: isoGitConfig): Promise { + async branches(config: isoGitFSConfig): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { const branches = await this.call('isogit', 'branches') @@ -416,22 +323,6 @@ class DGitProvider extends Plugin { return readBlobResult } - async setIpfsConfig(config) { - this.ipfsconfig = config - return new Promise((resolve) => { - resolve(this.checkIpfsConfig()) - }) - } - - async checkIpfsConfig(config?) { - this.ipfs = IpfsHttpClient(config || this.ipfsconfig) - try { - await this.ipfs.config.getAll() - return true - } catch (e) { - return false - } - } async addremote(input: remote): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { @@ -449,10 +340,6 @@ class DGitProvider extends Plugin { await git.deleteRemote({ ...await this.addIsomorphicGitConfigFS(), remote: input.name }) } - async localStorageUsed() { - return this.calculateLocalStorage() - } - async clone(input: cloneInputType) { if ((Registry.getInstance().get('platform').api.isDesktop())) { @@ -481,14 +368,13 @@ class DGitProvider extends Plugin { } else { const permission = await this.askUserPermission('clone', 'Import multiple files into your workspaces.') if (!permission) return false - if (parseFloat(this.calculateLocalStorage()) > 10000) throw new Error('The local storage of the browser is full.') if (!input.workspaceExists) await this.call('filePanel', 'createWorkspace', input.workspaceName || `workspace_${Date.now()}`, true) const cmd = { url: input.url, singleBranch: input.singleBranch, ref: input.branch, depth: input.depth || 10, - ...await this.addIsomorphicGitConfig(input), + ...await isoGit.addIsomorphicGitProxyConfig(input, this), ...await this.addIsomorphicGitConfigFS() } this.call('terminal', 'logHtml', `Cloning ${input.url}... please wait...`) @@ -575,10 +461,10 @@ class DGitProvider extends Plugin { url: module.url, singleBranch: true, depth: 1, - ...await this.addIsomorphicGitConfig({ + ...await isoGit.addIsomorphicGitProxyConfig({ ...input, - provider: 'github' - }), + provider: 'github', + }, this), ...await this.addIsomorphicGitConfigFS(dir) } this.call('terminal', 'logHtml', `Cloning submodule ${dir}...`) @@ -602,10 +488,10 @@ class DGitProvider extends Plugin { if (result && result.length) { this.call('terminal', 'logHtml', `Checking out submodule ${dir} to ${result[0]} in directory ${dir}`) await git.fetch({ - ...await this.addIsomorphicGitConfig({ + ...await isoGit.addIsomorphicGitProxyConfig({ ...input, - provider: 'github' - }), + provider: 'github', + }, this), ...await this.addIsomorphicGitConfigFS(dir), singleBranch: true, ref: result[0] @@ -652,61 +538,23 @@ class DGitProvider extends Plugin { async push(input: pushInputType) { - const cmd = { - force: input.force, - ref: input.ref.name, - remoteRef: input.remoteRef && input.remoteRef.name, - remote: input.remote.name, - author: await this.getCommandUser(input), - input, - } if ((Registry.getInstance().get('platform').api.isDesktop())) { - return await this.call('isogit', 'push', { - ...input, - author: await this.getCommandUser(input), - }) + return await this.call('isogit', 'push', input) } else { - - const cmd2 = { - ...cmd, - ...await this.addIsomorphicGitConfig(input), - } - - const result = await git.push({ - ...await this.addIsomorphicGitConfigFS(), - ...cmd2 - }) - + const result = await isoGit.push(input, await this.addIsomorphicGitConfigFS(), this) return result - } } async pull(input: pullInputType) { - const cmd = { - ref: input.ref.name, - remoteRef: input.remoteRef && input.remoteRef.name, - author: await this.getCommandUser(input), - remote: input.remote.name, - input, - } + let result if ((Registry.getInstance().get('platform').api.isDesktop())) { - result = await this.call('isogit', 'pull', { - ...input, - author: await this.getCommandUser(input), - }) + result = await this.call('isogit', 'pull', input) } else { - const cmd2 = { - ...cmd, - ...await this.addIsomorphicGitConfig(input), - } - result = await git.pull({ - ...await this.addIsomorphicGitConfigFS(), - ...cmd2 - }) + result = await isoGit.pull(input, await this.addIsomorphicGitConfigFS(), this) } setTimeout(async () => { await this.call('fileManager', 'refresh') @@ -715,33 +563,15 @@ class DGitProvider extends Plugin { } async fetch(input: fetchInputType) { - const cmd = { - ref: input.ref && input.ref.name, - remoteRef: input.remoteRef && input.remoteRef.name, - author: await this.getCommandUser(input), - remote: input.remote && input.remote.name, - depth: input.depth || 5, - singleBranch: input.singleBranch, - relative: input.relative, - input - } + let result if ((Registry.getInstance().get('platform').api.isDesktop())) { result = await this.call('isogit', 'fetch', { ...input, - author: await this.getCommandUser(input), }) } else { - const cmd2 = { - ...cmd, - ...await this.addIsomorphicGitConfig(input), - } - result = await git.fetch({ - ...await this.addIsomorphicGitConfigFS(), - ...cmd2 - }) - + result = await isoGit.fetch(input, await this.addIsomorphicGitConfigFS(), this) } setTimeout(async () => { @@ -750,162 +580,6 @@ class DGitProvider extends Plugin { return result } - async export(config) { - if (!this.checkIpfsConfig(config)) return false - const workspace = await this.call('filePanel', 'getCurrentWorkspace') - const files = await this.getDirectory('/') - this.filesToSend = [] - for (const file of files) { - const c = await window.remixFileSystem.readFile(`${workspace.absolutePath}/${file}`, null) - const ob = { - path: file, - content: c - } - this.filesToSend.push(ob) - } - const addOptions = { - wrapWithDirectory: true - } - const r = await this.ipfs.add(this.filesToSend, addOptions) - return r.cid.string - } - - async importIPFSFiles(config, cid, workspace) { - const ipfs = IpfsHttpClient(config) - let result = false - try { - const data = ipfs.get(cid, { timeout: 60000 }) - for await (const file of data) { - if (file.path) result = true - file.path = file.path.replace(cid, '') - if (!file.content) { - continue - } - const content = [] - for await (const chunk of file.content) { - content.push(chunk) - } - const dir = path.dirname(file.path) - try { - await this.createDirectories(`${workspace.absolutePath}/${dir}`) - } catch (e) { throw new Error(e) } - try { - await window.remixFileSystem.writeFile(`${workspace.absolutePath}/${file.path}`, Buffer.concat(content) || new Uint8Array(), null) - } catch (e) { throw new Error(e) } - } - } catch (e) { - throw new Error(e) - } - return result - } - - calculateLocalStorage() { - let _lsTotal = 0 - let _xLen; let _x - for (_x in localStorage) { - // eslint-disable-next-line no-prototype-builtins - if (!localStorage.hasOwnProperty(_x)) { - continue - } - _xLen = ((localStorage[_x].length + _x.length) * 2) - _lsTotal += _xLen - } - return (_lsTotal / 1024).toFixed(2) - } - - async import(cmd) { - const permission = await this.askUserPermission('import', 'Import multiple files into your workspaces.') - if (!permission) return false - if (parseFloat(this.calculateLocalStorage()) > 10000) throw new Error('The local storage of the browser is full.') - const cid = cmd.cid - await this.call('filePanel', 'createWorkspace', `workspace_${Date.now()}`, true) - const workspace = await this.call('filePanel', 'getCurrentWorkspace') - let result - if (cmd.local) { - result = await this.importIPFSFiles(this.ipfsconfig, cid, workspace) - } else { - result = await this.importIPFSFiles(this.remixIPFS, cid, workspace) || await this.importIPFSFiles(this.ipfsconfig, cid, workspace) || await this.importIPFSFiles(this.globalIPFSConfig, cid, workspace) - } - setTimeout(async () => { - await this.call('fileManager', 'refresh') - }, 1000) - if (!result) throw new Error(`Cannot pull files from IPFS at ${cid}`) - } - - async getItem(name) { - if (typeof window !== 'undefined') { - return window.localStorage.getItem(name) - } - } - - async setItem(name, content) { - try { - if (typeof window !== 'undefined') { - window.localStorage.setItem(name, content) - } - } catch (e) { - console.log(e) - return false - } - return true - } - - async zip() { - const zip = new JSZip() - const workspace = await this.call('filePanel', 'getCurrentWorkspace') - const files = await this.getDirectory('/') - this.filesToSend = [] - for (const file of files) { - const c = await window.remixFileSystem.readFile(`${workspace.absolutePath}/${file}`, null) - zip.file(file, c) - } - await zip.generateAsync({ - type: 'blob' - }) - .then(function (content) { - saveAs(content, `${workspace.name}.zip`) - }) - } - - async createDirectories(strdirectories) { - const ignore = ['.', '/.', ''] - if (ignore.indexOf(strdirectories) > -1) return false - const directories = strdirectories.split('/') - for (let i = 0; i < directories.length; i++) { - let previouspath = '' - if (i > 0) previouspath = '/' + directories.slice(0, i).join('/') - const finalPath = previouspath + '/' + directories[i] - try { - if (!await window.remixFileSystem.exists(finalPath)) { - await window.remixFileSystem.mkdir(finalPath) - } - } catch (e) { - console.log(e) - } - } - } - - async getDirectory(dir) { - let result = [] - const files = await this.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 this.getDirectory( - `${fi.filename}` - )) - ] - } else { - result = [...result, fi.filename] - } - } - } - return result - } // OCTOKIT FEATURES @@ -1042,23 +716,4 @@ const addSlash = (file) => { return file } -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] -} - module.exports = DGitProvider diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 3272696e77..430928e3ff 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -5,7 +5,7 @@ import git from 'isomorphic-git' import http from 'isomorphic-git/http/web' import { gitProxy } from "../tools/git"; import { isoGit } from "@remix-git" -import { branch, branchDifference, branchInputType, cloneInputType, commitChange, commitInputType, compareBranchesInput, currentBranchInput, fetchInputType, initInputType, logInputType, pullInputType, pushInputType, remote, resolveRefInput, statusInput } from "@remix-api"; +import { branchDifference, branchInputType, cloneInputType, commitChange, commitInputType, compareBranchesInput, currentBranchInput, fetchInputType, initInputType, logInputType, pullInputType, pushInputType, remote, resolveRefInput, statusInput } from "@remix-api"; const profile: Profile = { name: 'isogit', @@ -28,20 +28,6 @@ export class IsoGitPlugin extends ElectronBasePlugin { } } -const parseInput = (input: any) => { - return { - corsProxy: 'https://corsproxy.remixproject.org/', - http, - onAuth: (url: any) => { - url - const auth = { - username: input.token, - password: '' - } - return auth - } - } -} const clientProfile: Profile = { name: 'isogit', @@ -58,10 +44,10 @@ class IsoGitPluginClient extends ElectronBasePluginClient { this.onload(async () => { this.on('fs' as any, 'workingDirChanged', async (path: string) => { this.workingDir = path - this.gitIsInstalled = await gitProxy.version() ? true : false + this.gitIsInstalled = await gitProxy.version() ? true : false }) this.workingDir = await this.call('fs' as any, 'getWorkingDir') - this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false + this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false }) } @@ -102,6 +88,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { async log(cmd: logInputType) { console.log('LOG', cmd) + const token = await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') + console.log('LOG', token) /* we will use isomorphic git for now if(this.gitIsInstalled){ const log = await gitProxy.log(this.workingDir, cmd.ref) @@ -237,66 +225,46 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return checkout } - async push(cmd: pushInputType) { - + async push(input: pushInputType) { + console.log('PUSH', input, this.gitIsInstalled) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.push(this.workingDir, cmd) - + return await gitProxy.push(this.workingDir, input) } else { - /* - const push = await git.push({ - ...await this.getGitConfig(), - ...cmd, - ...parseInput(cmd.input) - }) - return push*/ + const push = await isoGit.push(input, await this.getGitConfig(), this) + return push } } - async pull(cmd: pullInputType) { - + async pull(input: pullInputType) { + console.log('PULL', input) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.pull(this.workingDir, cmd) - + return await gitProxy.pull(this.workingDir, input) } else { - /* - const pull = await git.pull({ - ...await this.getGitConfig(), - ...cmd, - ...parseInput(cmd.input) - }) - + const pull = await isoGit.pull(input, await this.getGitConfig(), this) return pull - */ } } - async fetch(cmd: fetchInputType) { - console.log('FETCH', cmd) + async fetch(input: fetchInputType) { + console.log('FETCH', input) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } if (this.gitIsInstalled) { - await gitProxy.fetch(this.workingDir, cmd) + await gitProxy.fetch(this.workingDir, input) } else { - /* - const fetch = await git.fetch({ - ...await this.getGitConfig(), - ...cmd, - ...parseInput(cmd.input) - }) - */ + const fetch = await isoGit.fetch(input, await this.getGitConfig(), this) return fetch } } diff --git a/libs/remix-api/src/lib/types/git.ts b/libs/remix-api/src/lib/types/git.ts index 7482e95a1d..50d145279b 100644 --- a/libs/remix-api/src/lib/types/git.ts +++ b/libs/remix-api/src/lib/types/git.ts @@ -1,4 +1,5 @@ -import { ReadCommitResult } from "isomorphic-git" +import { Endpoints } from "@octokit/types" +import { AuthCallback, HttpClient, ReadCommitResult } from "isomorphic-git" export type branchDifference = { uniqueHeadCommits: ReadCommitResult[], @@ -71,7 +72,7 @@ export type initInputType = { export type author = { name: string, - email: string + email: string, } export type updateSubmodulesInput = { @@ -96,6 +97,7 @@ export type fetchInputType = { relative?: boolean, quiet?: boolean author?: author + token?: string } export type logInputType = { @@ -108,6 +110,7 @@ export type pullInputType = { ref: branch, remoteRef?: branch author?: author + token?: string } export type pushInputType = { @@ -115,7 +118,8 @@ export type pushInputType = { ref: branch, remoteRef?: branch, force?: boolean, - author?: author + author?: author, + token?: string } export type branchInputType = { @@ -183,7 +187,16 @@ export interface repositoriesInput { token: string, page?: number, per_page?: nu export interface statusInput { ref: string, filepaths?: string[] } -export type isoGitConfig = { +export type isoGitFSConfig = { fs: any, dir: string, -} \ No newline at end of file +} + +export type isoGitProxyConfig = { + corsProxy: string + http: HttpClient + onAuth: AuthCallback +} + +export type GitHubUser = Partial +export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] \ No newline at end of file diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index bd3b608203..6e6b11bf83 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -1,159 +1,329 @@ -import { branch, commitChange, compareBranchesInput, currentBranchInput, isoGitConfig, remote } from "@remix-api" +import { GitHubUser, author, branch, commitChange, compareBranchesInput, currentBranchInput, fetchInputType, isoGitFSConfig, isoGitProxyConfig, pullInputType, pushInputType, remote, userEmails } from "@remix-api" import git from 'isomorphic-git' +import { + Plugin +} from '@remixproject/engine' +import http from 'isomorphic-git/http/web' -const currentbranch = async (input: currentBranchInput, defaultConfig: isoGitConfig ) => { - console.log('CURRENT BRANCH', input) +import { Octokit } from "octokit" +import { ElectronBasePluginClient } from "@remixproject/plugin-electron" +const currentbranch = async (input: currentBranchInput, fsConfig: isoGitFSConfig) => { + console.log('CURRENT BRANCH', input) + try { + const cmd = input ? fsConfig ? { ...fsConfig, ...input } : input : fsConfig + + const name = await git.currentBranch(cmd) + let remote: remote = undefined try { - const cmd = input ? defaultConfig ? { ...defaultConfig, ...input } : input : defaultConfig - - const name = await git.currentBranch(cmd) - let remote: remote = undefined - try { - const remoteName = await git.getConfig({ - ...defaultConfig, - path: `branch.${name}.remote` + const remoteName = await git.getConfig({ + ...fsConfig, + path: `branch.${name}.remote` + }) + if (remoteName) { + const remoteUrl = await git.getConfig({ + ...fsConfig, + path: `remote.${remoteName}.url` }) - if (remoteName) { - const remoteUrl = await git.getConfig({ - ...defaultConfig, - path: `remote.${remoteName}.url` - }) - remote = { name: remoteName, url: remoteUrl } - } + remote = { name: remoteName, url: remoteUrl } + } - } catch (e) { - // do nothing + } catch (e) { + // do nothing + } + console.log('NAME', name) + console.log('REMOTE', remote) + + return { + remote: remote, + name: name || '' + } + } catch (e) { + return undefined + } +} + +const branches = async (fsConfig: isoGitFSConfig) => { + try { + + const remotes = await isoGit.remotes(fsConfig) + let branches: branch[] = [] + branches = (await git.listBranches(fsConfig)).map((branch) => { return { remote: undefined, name: branch } }) + for (const remote of remotes) { + const cmd = { + ...fsConfig, + remote: remote.name } - console.log('NAME', name) - console.log('REMOTE', remote) - - return { - remote: remote, - name: name || '' + const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) + branches = [...branches, ...remotebranches] + } + return branches + } catch (e) { + console.log(e) + return [] + } +} + +const remotes = async (fsConfig: isoGitFSConfig) => { + + let remotes: remote[] = [] + try { + remotes = (await git.listRemotes({ ...fsConfig })).map((remote) => { return { name: remote.remote, url: remote.url } } + ) + } catch (e) { + // do nothing + } + return remotes +} + +const push = async (input: pushInputType, fsConfig: isoGitFSConfig, plugin: Plugin | ElectronBasePluginClient) => { + const cmd = { + force: input.force, + ref: input.ref.name, + remoteRef: input.remoteRef && input.remoteRef.name, + remote: input.remote.name, + author: await getAuthor(input, plugin), + input, + } + + const proxy = await isoGit.addIsomorphicGitProxyConfig(input, plugin) + console.log({ ...fsConfig, ...cmd, ...proxy }) + return await git.push({ ...fsConfig, ...cmd, ...proxy }) +} + +const pull = async (input: pullInputType, fsConfig: isoGitFSConfig, plugin: Plugin | ElectronBasePluginClient) => { + const cmd = { + ref: input.ref.name, + remoteRef: input.remoteRef && input.remoteRef.name, + author: await getAuthor(input, plugin), + remote: input.remote.name, + input, + } + const proxy = await isoGit.addIsomorphicGitProxyConfig(input, plugin) + console.log({ ...fsConfig, ...cmd, ...proxy }) + return await git.pull({ ...fsConfig, ...cmd, ...proxy }) +} + +const fetch = async (input: fetchInputType, fsConfig: isoGitFSConfig, plugin: Plugin | ElectronBasePluginClient) => { + const cmd = { + ref: input.ref && input.ref.name, + remoteRef: input.remoteRef && input.remoteRef.name, + author: await getAuthor(input, plugin), + remote: input.remote && input.remote.name, + depth: input.depth || 5, + singleBranch: input.singleBranch, + relative: input.relative, + input + } + const proxy = await isoGit.addIsomorphicGitProxyConfig(input, plugin) + console.log({ ...fsConfig, ...cmd, ...proxy }) + return await git.fetch({ ...fsConfig, ...cmd, ...proxy }) +} + +const getAuthor = async (input, plugin: any) => { + const author: author = { + name: '', + email: '' + } + if (input && input.name && input.email) { + author.name = input.name + author.email = input.email + } else { + const username = await plugin.call('config' as any, 'getAppParameter', 'settings/github-user-name') + const email = await plugin.call('config' as any, 'getAppParameter', 'settings/github-email') + const token = await plugin.call('config' as any, 'getAppParameter', 'settings/gist-access-token') + if (username && email) { + author.name = username + author.email = email + } else if (token) { + + const gitHubUser = await isoGit.getGitHubUser({ token }) + + if (gitHubUser) { + author.name = gitHubUser.user.login } - } catch (e) { - return undefined } } + return author +} - const branches = async (defaultConfig: isoGitConfig ) => { - try { - const remotes = await isoGit.remotes(defaultConfig) - let branches: branch[] = [] - branches = (await git.listBranches(defaultConfig)).map((branch) => { return { remote: undefined, name: branch } }) - for (const remote of remotes) { - const cmd = { - ...defaultConfig, - remote: remote.name - } - const remotebranches = (await git.listBranches(cmd)).map((branch) => { return { remote: remote, name: branch } }) - branches = [...branches, ...remotebranches] +const getGitHubUser = async (input: { token: string }): Promise<{ + user: GitHubUser, + emails: userEmails, + scopes: string[] +}> => { + try { + const octokit = new Octokit({ + auth: input.token + }) + + const user = await octokit.request('GET /user') + const emails = await octokit.request('GET /user/emails') + + const scopes = user.headers['x-oauth-scopes'] || '' + + console.log('USER', user.data) + + return { + user: user.data, + emails: emails.data, + scopes: scopes && scopes.split(',') + } + } catch (e) { + return null + } +} + +const addIsomorphicGitProxyConfig = async (input: { + url?: string, + remote?: remote, + provider?: 'github' | 'localhost', + token?: string, +}, plugin: any) => { + + const token = await plugin.call('config' as any, 'getAppParameter', 'settings/gist-access-token') + console.log('TOKEN', token) + + let config: isoGitProxyConfig = { + corsProxy: 'https://corsproxy.remixproject.org/', + http, + onAuth: url => { + url + const auth = { + username: input.token || token, + password: '' } - return branches - } catch (e) { - console.log(e) - return [] + return auth } } + if (input.url) { - const remotes = async(defaultConfig: isoGitConfig) => { + const url = new URL(input.url) + if (url.hostname.includes('localhost')) { + config = { + ...config, + corsProxy: null + } + } + } + if ((input.remote && input.remote.url)) { - let remotes: remote[] = [] - try { - remotes = (await git.listRemotes({ ...defaultConfig })).map((remote) => { return { name: remote.remote, url: remote.url } } - ) - } catch (e) { - // do nothing + const url = new URL(input.remote.url) + if (url.hostname.includes('localhost')) { + config = { + ...config, + corsProxy: null, + } + } + } + + if (input.provider && input.provider === 'github') { + config = { + ...config, + corsProxy: 'https://corsproxy.remixproject.org/', } - return remotes } - const getCommitChanges = async (commitHash1: string, commitHash2: string, defaultConfig: isoGitConfig) => { - const result: commitChange[] = await git.walk({ - ...defaultConfig, - trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], - map: async function (filepath, [A, B]) { + if (input.provider && input.provider === 'localhost') { + config = { + ...config, + corsProxy: null + } + } + + return config +} + +const getCommitChanges = async (commitHash1: string, commitHash2: string, fsConfig: isoGitFSConfig) => { + const result: commitChange[] = await git.walk({ + ...fsConfig, + trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })], + map: async function (filepath, [A, B]) { - if (filepath === '.') { + if (filepath === '.') { + return + } + try { + if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { return } - try { - if ((A && await A.type()) === 'tree' || B && (await B.type()) === 'tree') { - return - } - } catch (e) { - // ignore - } + } catch (e) { + // ignore + } - // generate ids - const Aoid = A && await A.oid() || undefined - const Boid = B && await B.oid() || undefined + // generate ids + const Aoid = A && await A.oid() || undefined + const Boid = B && await B.oid() || undefined - const commitChange: Partial = { - hashModified: commitHash1, - hashOriginal: commitHash2, - path: filepath, - } + const commitChange: Partial = { + hashModified: commitHash1, + hashOriginal: commitHash2, + path: filepath, + } - // determine modification type - if (Aoid !== Boid) { - commitChange.type = "modified" - } - if (Aoid === undefined) { - commitChange.type = "deleted" - } - if (Boid === undefined || !commitHash2) { - commitChange.type = "added" - } - if (Aoid === undefined && Boid === undefined) { - commitChange.type = "unknown" - } - if (commitChange.type) - return commitChange - else - return undefined - }, - }) + // determine modification type + if (Aoid !== Boid) { + commitChange.type = "modified" + } + if (Aoid === undefined) { + commitChange.type = "deleted" + } + if (Boid === undefined || !commitHash2) { + commitChange.type = "added" + } + if (Aoid === undefined && Boid === undefined) { + commitChange.type = "unknown" + } + if (commitChange.type) + return commitChange + else + return undefined + }, + }) - return result - } + return result +} - const compareBranches = async ({ branch, remote }: compareBranchesInput, defaultConfig: isoGitConfig) => { +const compareBranches = async ({ branch, remote }: compareBranchesInput, fsConfig: isoGitFSConfig) => { - // Get current branch commits - const headCommits = await git.log({ - ...defaultConfig, - ref: branch.name, - }); + // Get current branch commits + const headCommits = await git.log({ + ...fsConfig, + ref: branch.name, + }); - // Get remote branch commits - const remoteCommits = await git.log({ - ...defaultConfig, - ref: `${remote.name}/${branch.name}`, - }); + // Get remote branch commits + const remoteCommits = await git.log({ + ...fsConfig, + ref: `${remote.name}/${branch.name}`, + }); - // Convert arrays of commit objects to sets of commit SHAs - const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); - const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); + // Convert arrays of commit objects to sets of commit SHAs + const headCommitSHAs = new Set(headCommits.map(commit => commit.oid)); + const remoteCommitSHAs = new Set(remoteCommits.map(commit => commit.oid)); - // Filter out commits that are only in the remote branch - const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); + // Filter out commits that are only in the remote branch + const uniqueRemoteCommits = remoteCommits.filter(commit => !headCommitSHAs.has(commit.oid)); - // filter out commits that are only in the local branch - const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); + // filter out commits that are only in the local branch + const uniqueHeadCommits = headCommits.filter(commit => !remoteCommitSHAs.has(commit.oid)); - return { - uniqueHeadCommits, - uniqueRemoteCommits, - }; - } + return { + uniqueHeadCommits, + uniqueRemoteCommits, + }; +} - export const isoGit = { - currentbranch, - remotes, - branches, - getCommitChanges, - compareBranches - } \ No newline at end of file +export const isoGit = { + currentbranch, + remotes, + branches, + getCommitChanges, + compareBranches, + addIsomorphicGitProxyConfig, + push, + pull, + fetch, + getGitHubUser +} \ No newline at end of file diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index d27fe7b3f5..36651a4da9 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -1,13 +1,13 @@ import { ReadBlobResult, ReadCommitResult } from "isomorphic-git"; import React from "react"; import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead } from "../state/gitpayload"; -import { GitHubUser, gitActionDispatch, statusMatrixType, gitState, gitLog, fileStatusResult, userEmails } from '../types'; +import { gitActionDispatch, statusMatrixType, gitState, gitLog, fileStatusResult } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; import { ModalTypes } from "@remix-ui/app"; import { setFileDecorators } from "./pluginActions"; import { Plugin } from "@remixproject/engine"; -import { addInputType, branch, branchDifference, checkoutInputType, cloneInputType, commitChange, CustomRemixApi, fetchInputType, pullInputType, pushInputType, remote, rmInputType } from "@remix-api"; +import { addInputType, branch, branchDifference, checkoutInputType, cloneInputType, commitChange, CustomRemixApi, fetchInputType, GitHubUser, pullInputType, pushInputType, remote, rmInputType, userEmails } from "@remix-api"; import { file } from "jszip"; export const fileStatuses = [ diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index ce1134a388..94e8a1923b 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -1,6 +1,6 @@ import { ReadCommitResult } from "isomorphic-git" -import { fileStatusResult, GitHubUser, gitLog, userEmails } from "../types" -import { branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository } from '@remix-api' +import { fileStatusResult, gitLog } from "../types" +import { GitHubUser, branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository, userEmails } from '@remix-api' export interface ActionPayloadTypes { FILE_STATUS: fileStatusResult[], FILE_STATUS_MERGE: fileStatusResult[] diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index b07b5350aa..9e8a51dc5a 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -1,6 +1,6 @@ import { ReadCommitResult } from "isomorphic-git" -import { GitHubUser, fileStatusResult, gitLog, userEmails } from "../types" -import { repository, pagedCommits, branch, remote, commitChange, branchDifference } from "@remix-api" +import { fileStatusResult, gitLog } from "../types" +import { repository, pagedCommits, branch, remote, commitChange, branchDifference, GitHubUser, userEmails } from "@remix-api" export const fileStatus = (files: fileStatusResult[]) => { return { diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index b3b4de928d..6b3119a2d2 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -1,8 +1,6 @@ import { Endpoints } from "@octokit/types" -import { branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository, syncStatus } from "@remix-api" +import { GitHubUser, branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository, syncStatus, userEmails } from "@remix-api" import { ReadCommitResult } from "isomorphic-git" -export type GitHubUser = Partial -export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] export type gitState = { currentBranch: branch From 7ab13e2b073b3c217e063f9be628f68a46e28ca7 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jul 2024 13:27:18 +0200 Subject: [PATCH 013/312] octokit --- apps/remixdesktop/package.json | 1 + apps/remixdesktop/yarn.lock | 287 +++++++++++++++++++++++++++++++++ 2 files changed, 288 insertions(+) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 3aa8a9121c..716c665bcb 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -72,6 +72,7 @@ "isomorphic-git": "^1.24.2", "matomo-tracker": "^2.2.4", "node-pty": "^0.10.1", + "octokit": "^4.0.2", "semver": "^7.5.4" }, "optionalDependencies": { diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index fd32d546b3..e1aad0bdd0 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -582,6 +582,222 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@octokit/app@^15.0.0": + version "15.1.0" + resolved "https://registry.yarnpkg.com/@octokit/app/-/app-15.1.0.tgz#b330d8826be088ec8d1d43a59dc27ef57d1232b2" + integrity sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg== + dependencies: + "@octokit/auth-app" "^7.0.0" + "@octokit/auth-unauthenticated" "^6.0.0" + "@octokit/core" "^6.1.2" + "@octokit/oauth-app" "^7.0.0" + "@octokit/plugin-paginate-rest" "^11.0.0" + "@octokit/types" "^13.0.0" + "@octokit/webhooks" "^13.0.0" + +"@octokit/auth-app@^7.0.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-7.1.0.tgz#55a3d3b3b3607b9d375abbe946163dca3a25c2c9" + integrity sha512-cazGaJPSgeZ8NkVYeM/C5l/6IQ5vZnsI8p1aMucadCkt/bndI+q+VqwrlnWbASRmenjOkf1t1RpCKrif53U8gw== + dependencies: + "@octokit/auth-oauth-app" "^8.1.0" + "@octokit/auth-oauth-user" "^5.1.0" + "@octokit/request" "^9.1.1" + "@octokit/request-error" "^6.1.1" + "@octokit/types" "^13.4.1" + lru-cache "^10.0.0" + universal-github-app-jwt "^2.2.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-app@^8.0.0", "@octokit/auth-oauth-app@^8.1.0": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.1.tgz#6204affa6e86f535016799cadf2af9befe5e893c" + integrity sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg== + dependencies: + "@octokit/auth-oauth-device" "^7.0.0" + "@octokit/auth-oauth-user" "^5.0.1" + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-device@^7.0.0", "@octokit/auth-oauth-device@^7.0.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz#7b4f8f97cbcadbe9894d48cde4406dbdef39875a" + integrity sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg== + dependencies: + "@octokit/oauth-methods" "^5.0.0" + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-oauth-user@^5.0.1", "@octokit/auth-oauth-user@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.1.tgz#4f1570c6ee15bb9ddc3dcca83308dcaa159e3848" + integrity sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw== + dependencies: + "@octokit/auth-oauth-device" "^7.0.1" + "@octokit/oauth-methods" "^5.0.0" + "@octokit/request" "^9.0.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/auth-token@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" + integrity sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA== + +"@octokit/auth-unauthenticated@^6.0.0", "@octokit/auth-unauthenticated@^6.0.0-beta.1": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.0.tgz#de0fe923bb06ed93aea526ab99972a98c546d0bf" + integrity sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ== + dependencies: + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.0.0" + +"@octokit/core@^6.0.0", "@octokit/core@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.2.tgz#20442d0a97c411612da206411e356014d1d1bd17" + integrity sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg== + dependencies: + "@octokit/auth-token" "^5.0.0" + "@octokit/graphql" "^8.0.0" + "@octokit/request" "^9.0.0" + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.0.0" + before-after-hook "^3.0.2" + universal-user-agent "^7.0.0" + +"@octokit/endpoint@^10.0.0": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.1.tgz#1a9694e7aef6aa9d854dc78dd062945945869bcc" + integrity sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q== + dependencies: + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.2" + +"@octokit/graphql@^8.0.0": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.1.tgz#3cacab5f2e55d91c733e3bf481d3a3f8a5f639c4" + integrity sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg== + dependencies: + "@octokit/request" "^9.0.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^7.0.0" + +"@octokit/oauth-app@^7.0.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-7.1.3.tgz#a0f256dd185e7c00bfbc3e6bc3c5aad66e42c609" + integrity sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg== + dependencies: + "@octokit/auth-oauth-app" "^8.0.0" + "@octokit/auth-oauth-user" "^5.0.1" + "@octokit/auth-unauthenticated" "^6.0.0-beta.1" + "@octokit/core" "^6.0.0" + "@octokit/oauth-authorization-url" "^7.0.0" + "@octokit/oauth-methods" "^5.0.0" + "@types/aws-lambda" "^8.10.83" + universal-user-agent "^7.0.0" + +"@octokit/oauth-authorization-url@^7.0.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz#0e17c2225eb66b58ec902d02b6f1315ffe9ff04b" + integrity sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA== + +"@octokit/oauth-methods@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-5.1.2.tgz#fd31d2a69f4c91d1abc1ed1814dda5252c697e02" + integrity sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g== + dependencies: + "@octokit/oauth-authorization-url" "^7.0.0" + "@octokit/request" "^9.1.0" + "@octokit/request-error" "^6.1.0" + "@octokit/types" "^13.0.0" + +"@octokit/openapi-types@^22.2.0": + version "22.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" + integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== + +"@octokit/openapi-webhooks-types@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.3.0.tgz#a7a4da00c0f27f7f5708eb3fcebefa08f8d51125" + integrity sha512-vKLsoR4xQxg4Z+6rU/F65ItTUz/EXbD+j/d4mlq2GW8TsA4Tc8Kdma2JTAAJ5hrKWUQzkR/Esn2fjsqiVRYaQg== + +"@octokit/plugin-paginate-graphql@^5.0.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.2.tgz#54e2afef55bb204eb945a891b85a169b9ddad1f8" + integrity sha512-7znSVvlNAOJisCqAnjN1FtEziweOHSjPGAuc5W58NeGNAr/ZB57yCsjQbXDlWsVryA7hHQaEQPcBbJYFawlkyg== + +"@octokit/plugin-paginate-rest@^11.0.0": + version "11.3.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.3.tgz#efc97ba66aae6797e2807a082f99b9cfc0e05aba" + integrity sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA== + dependencies: + "@octokit/types" "^13.5.0" + +"@octokit/plugin-rest-endpoint-methods@^13.0.0": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.4.tgz#543add032d3fe3f5d2839bfd619cf66d85469f01" + integrity sha512-gusyAVgTrPiuXOdfqOySMDztQHv6928PQ3E4dqVGEtOvRXAKRbJR4b1zQyniIT9waqaWk/UDaoJ2dyPr7Bk7Iw== + dependencies: + "@octokit/types" "^13.5.0" + +"@octokit/plugin-retry@^7.0.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-7.1.1.tgz#a84483e4afdd068dd71da81abe206a9e442c1288" + integrity sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw== + dependencies: + "@octokit/request-error" "^6.0.0" + "@octokit/types" "^13.0.0" + bottleneck "^2.15.3" + +"@octokit/plugin-throttling@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz#2700963c6f7e0f62de2158a6d67d1b47c19af3d4" + integrity sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w== + dependencies: + "@octokit/types" "^13.0.0" + bottleneck "^2.15.3" + +"@octokit/request-error@^6.0.0", "@octokit/request-error@^6.0.1", "@octokit/request-error@^6.1.0", "@octokit/request-error@^6.1.1": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.4.tgz#ad96e29148d19edc2ba8009fc2b5a24a36c90f16" + integrity sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg== + dependencies: + "@octokit/types" "^13.0.0" + +"@octokit/request@^9.0.0", "@octokit/request@^9.0.1", "@octokit/request@^9.1.0", "@octokit/request@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.1.1.tgz#e836eb69c0fb4b59b6437af7716ca348a1232a52" + integrity sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw== + dependencies: + "@octokit/endpoint" "^10.0.0" + "@octokit/request-error" "^6.0.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^7.0.2" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.4.1", "@octokit/types@^13.5.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883" + integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ== + dependencies: + "@octokit/openapi-types" "^22.2.0" + +"@octokit/webhooks-methods@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-5.1.0.tgz#13b6c08f89902c1ab0ddf31c6eeeec9c2772cfe6" + integrity sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ== + +"@octokit/webhooks@^13.0.0": + version "13.2.8" + resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-13.2.8.tgz#8d7134870c327e413809c83a11b46e1896a6f0fe" + integrity sha512-nQyf5UDEgIeZB65rXSvK9ep9PkYthbnmXu/VK9AJcMMOvH1UwzcvYNd9DN++HIr8HXwbqB1FAEv5CnNARQEsaQ== + dependencies: + "@octokit/openapi-webhooks-types" "8.3.0" + "@octokit/request-error" "^6.0.1" + "@octokit/webhooks-methods" "^5.0.0" + aggregate-error "^5.0.0" + "@openzeppelin/contracts@^4.7.3": version "4.9.6" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677" @@ -734,6 +950,11 @@ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@types/aws-lambda@^8.10.83": + version "8.10.141" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.141.tgz#f4d2fddf2bda51c4b2885b1abc3d1e9a1d6d2a7a" + integrity sha512-SMWlRBukG9KV8ZNjwemp2AzDibp/czIAeKKTw09nCPbWxVskIxactCJCGOp4y6I1hCMY7T7UGfySvBLXNeUbEw== + "@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": version "5.1.3" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.3.tgz#0857f00da3bf888a26a44b4a477c7819b17dacc5" @@ -1195,6 +1416,14 @@ aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" +aggregate-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-5.0.0.tgz#ffe15045d7521c51c9d618e3d7f37c13f29b3fd3" + integrity sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw== + dependencies: + clean-stack "^5.2.0" + indent-string "^5.0.0" + ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -1476,6 +1705,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +before-after-hook@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" + integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== + bignumber.js@^9.0.0: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" @@ -1550,6 +1784,11 @@ boolean@^3.0.1: resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +bottleneck@^2.15.3: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + boxen@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -1896,6 +2135,13 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-stack@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" + integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== + dependencies: + escape-string-regexp "5.0.0" + cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -2717,6 +2963,11 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -3724,6 +3975,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -4383,6 +4639,11 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== +lru-cache@^10.0.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -4896,6 +5157,22 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" +octokit@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/octokit/-/octokit-4.0.2.tgz#775d68d363cdaec69d7b73d3dc82ae909d30f59b" + integrity sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg== + dependencies: + "@octokit/app" "^15.0.0" + "@octokit/core" "^6.0.0" + "@octokit/oauth-app" "^7.0.0" + "@octokit/plugin-paginate-graphql" "^5.0.0" + "@octokit/plugin-paginate-rest" "^11.0.0" + "@octokit/plugin-rest-endpoint-methods" "^13.0.0" + "@octokit/plugin-retry" "^7.0.0" + "@octokit/plugin-throttling" "^9.0.0" + "@octokit/request-error" "^6.0.0" + "@octokit/types" "^13.0.0" + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -6293,6 +6570,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +universal-github-app-jwt@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz#dc6c8929e76f1996a766ba2a08fb420f73365d77" + integrity sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ== + +universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" + integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" From aeec6c67a64fe17c434356af12e7c411fc908699 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 12 Jul 2024 13:32:02 +0200 Subject: [PATCH 014/312] import fix --- apps/remix-ide/src/app/files/dgitProvider.ts | 8 +------- tsconfig.paths.json | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index a3a3a000af..96e1da82a0 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -13,8 +13,7 @@ import { branch, commitChange, remote } from '@remix-ui/git' import { checkoutInputType, statusInput, logInputType, author, pagedCommits, remoteCommitsInputType, cloneInputType, fetchInputType, pullInputType, pushInputType, currentBranchInput, branchInputType, addInputType, rmInputType, resolveRefInput, readBlobInput, repositoriesInput, commitInputType, branchDifference, compareBranchesInput, initInputType, isoGitFSConfig, GitHubUser, userEmails } from '@remix-api' import { LibraryProfile } from '@remixproject/plugin-utils' import { CustomRemixApi } from '@remix-api' -import { isoGit } from "libs/remix-git/src/isogit" - +import { isoGit } from "@remix-git" declare global { interface Window { remixFileSystemCallback: IndexedDBStorage; remixFileSystem: any; } } @@ -49,7 +48,6 @@ class DGitProvider extends Plugin { return await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') } - async getAuthor(input) { const author: author = { name: '', @@ -323,7 +321,6 @@ class DGitProvider extends Plugin { return readBlobResult } - async addremote(input: remote): Promise { if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'addremote', input) @@ -548,7 +545,6 @@ class DGitProvider extends Plugin { async pull(input: pullInputType) { - let result if ((Registry.getInstance().get('platform').api.isDesktop())) { result = await this.call('isogit', 'pull', input) @@ -564,7 +560,6 @@ class DGitProvider extends Plugin { async fetch(input: fetchInputType) { - let result if ((Registry.getInstance().get('platform').api.isDesktop())) { result = await this.call('isogit', 'fetch', { @@ -580,7 +575,6 @@ class DGitProvider extends Plugin { return result } - // OCTOKIT FEATURES async remotebranches(input: { owner: string, repo: string, token: string, page: number, per_page: number }) { diff --git a/tsconfig.paths.json b/tsconfig.paths.json index 83c51dba1b..823c81e27c 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -182,7 +182,7 @@ "libs/remix-api/src/index.ts" ], "@remix-git": [ - "libs/remix-git/src/index.ts" + "libs/remix-git/" ] } } From 27b4ac3a909d00d3ebc76d716849a56da3b2af83 Mon Sep 17 00:00:00 2001 From: yann300 Date: Fri, 12 Jul 2024 17:13:10 +0200 Subject: [PATCH 015/312] use plugin actions --- .../git/src/components/github/devicecode.tsx | 5 ++--- libs/remix-ui/git/src/components/gitui.tsx | 12 +++++++----- .../git/src/components/panels/githubcredentials.tsx | 7 +++---- libs/remix-ui/git/src/components/panels/setup.tsx | 8 ++++---- libs/remix-ui/git/src/lib/pluginActions.ts | 8 ++++++++ libs/remix-ui/git/src/state/context.tsx | 2 ++ .../workspace/src/lib/remix-ui-workspace.tsx | 2 +- 7 files changed, 27 insertions(+), 17 deletions(-) diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index 583aeb98c0..352a5e0760 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -4,9 +4,8 @@ import { gitPluginContext } from "../gitui"; import axios from "axios"; import { CopyToClipboard } from "@remix-ui/clipboard"; import { Card } from "react-bootstrap"; -import { IGitUi } from '../../types' -export const GetDeviceCode = (props: IGitUi) => { +export const GetDeviceCode = () => { const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) const pluginActions = React.useContext(pluginActionsContext) @@ -67,7 +66,7 @@ export const GetDeviceCode = (props: IGitUi) => { setGitHubResponse(null) await pluginActions.saveToken(null) await actions.loadGitHubUserFromToken() - props.plugin.emit('disconnectFromGithub') + pluginActions.disconnectFromGithub() } return ( diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 5e0692d882..ceb4d0afb2 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useReducer, useState } from 'react' import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' -import { openDiff, openFile, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' +import { openDiff, openFile, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged, disconnectFromGithub, logInGitHub } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' import { gitReducer } from '../state/gitreducer' import { defaultGitState, defaultLoaderState, gitState, loaderState } from '../types' @@ -154,7 +154,9 @@ export const GitUI = (props: IGitUi) => { saveToken, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, - showAlert + showAlert, + disconnectFromGithub, + logInGitHub } return ( @@ -166,16 +168,16 @@ export const GitUI = (props: IGitUi) => { - {setup ? : null} + {setup ? : null} {!setup && needsInit ? : null} {!setup && !needsInit ? <> - +
- +

diff --git a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx index 7c8c6cf127..59b6974f93 100644 --- a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx +++ b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx @@ -5,9 +5,8 @@ import { CustomTooltip } from "@remix-ui/helper"; import { useIntl, FormattedMessage } from "react-intl"; import { CopyToClipboard } from "@remix-ui/clipboard"; -import { IGitUi } from '../../types' -export const GitHubCredentials = (props: IGitUi) => { +export const GitHubCredentials = () => { const context = React.useContext(gitPluginContext) const pluginactions = React.useContext(pluginActionsContext) const loader = React.useContext(loaderContext) @@ -53,7 +52,7 @@ export const GitHubCredentials = (props: IGitUi) => { setGithubToken(credentials.token || '') setGithubUsername(credentials.username || '') setGithubEmail(credentials.email || '') - props.plugin.emit('loggedInGithubChanged') + pluginactions.logInGitHub() } function removeToken(): void { @@ -65,7 +64,7 @@ export const GitHubCredentials = (props: IGitUi) => { email: '', token: '' }) - props.plugin.emit('disconnectFromGithub') + pluginactions.disconnectFromGithub() } return ( diff --git a/libs/remix-ui/git/src/components/panels/setup.tsx b/libs/remix-ui/git/src/components/panels/setup.tsx index 6c3a08f438..e3ac0e1f12 100644 --- a/libs/remix-ui/git/src/components/panels/setup.tsx +++ b/libs/remix-ui/git/src/components/panels/setup.tsx @@ -3,7 +3,7 @@ import { GetDeviceCode } from '../github/devicecode' import { GitHubCredentials } from './githubcredentials' import { IGitUi } from '../../types' -export const Setup = (props: IGitUi) => { +export const Setup = () => { const [screen, setScreen] = useState(0) @@ -16,9 +16,9 @@ export const Setup = (props: IGitUi) => { To ensure that your commits are properly attributed in Git, you need to configure a username and email address. These will be used to identify the author of the commit.
- +
- + ) @@ -29,7 +29,7 @@ export const Setup = (props: IGitUi) => {
Step 2
To ensure that your commits are properly attributed in Git, you need to configure your username and email address. - +
) diff --git a/libs/remix-ui/git/src/lib/pluginActions.ts b/libs/remix-ui/git/src/lib/pluginActions.ts index ece2b3953a..075043aba5 100644 --- a/libs/remix-ui/git/src/lib/pluginActions.ts +++ b/libs/remix-ui/git/src/lib/pluginActions.ts @@ -14,6 +14,14 @@ export const setPlugin = (p: Plugin, gitDispatcher: React.D loaderDispatch = loaderDispatcher } +export const disconnectFromGithub = () => { + plugin.emit('disconnectFromGithub') +} + +export const logInGitHub = () => { + plugin.emit('loggedInGithubChanged') +} + export const statusChanged = (badges: number) => { if (!plugin) return plugin.emit('statusChanged', { diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index 4608406a7f..47d42f3439 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -54,6 +54,8 @@ export interface pluginActions { token: string }> showAlert({ title, message }:{title: string, message: string}): Promise + logInGitHub(): void + disconnectFromGithub(): void } export const pluginActionsContext = React.createContext(null) \ No newline at end of file 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 723061b395..7c5319ce7a 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -92,7 +92,7 @@ export function Workspace() { }) } } - global.plugin.on('dgit', 'disconnectFromGithub', () => { + global.plugin.on('dgit', 'disconnectFromGithubRequest', () => { setState((prevState) => { return { ...prevState, loggedInGithub: false, githubUser: null } }) From b4ee7df0e751cbcaccd6278497281605f3239771 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 12:48:05 +0200 Subject: [PATCH 016/312] add tests --- apps/remix-ide/src/app/files/dgitProvider.ts | 11 +- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 13 +- apps/remixdesktop/src/tools/git.ts | 19 +- apps/remixdesktop/test/lib/git.ts | 195 +++++++ .../test/tests/app/git-ui.test.ts | 187 +++++++ .../test/tests/app/git-ui_2.test.ts | 164 ++++++ .../test/tests/app/git-ui_3.test.ts | 132 +++++ apps/remixdesktop/test/types/index.d.ts | 2 +- apps/remixdesktop/tsconfig.json | 7 +- apps/remixdesktop/yarn.lock | 528 +++++++++++------- libs/remix-ui/git/src/components/disabled.tsx | 8 +- libs/remix-ui/git/src/lib/gitactions.ts | 4 +- libs/remix-ui/git/src/lib/listeners.ts | 13 +- libs/remix-ui/git/src/state/gitreducer.tsx | 405 +++++++------- 15 files changed, 1241 insertions(+), 449 deletions(-) create mode 100644 apps/remixdesktop/test/lib/git.ts create mode 100644 apps/remixdesktop/test/tests/app/git-ui.test.ts create mode 100644 apps/remixdesktop/test/tests/app/git-ui_2.test.ts create mode 100644 apps/remixdesktop/test/tests/app/git-ui_3.test.ts diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 96e1da82a0..5f00c676ec 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -104,7 +104,7 @@ class DGitProvider extends Plugin { if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'status', cmd) - + console.log('STATUS', { ...status }) return status } @@ -112,7 +112,7 @@ class DGitProvider extends Plugin { ...await this.addIsomorphicGitConfigFS(), ...cmd }) - + console.log('STATUS', JSON.stringify(status)) return status } @@ -131,7 +131,7 @@ class DGitProvider extends Plugin { } async rm(cmd: rmInputType) { - + console.log('RM', cmd) if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'rm', cmd) } else { @@ -139,13 +139,12 @@ class DGitProvider extends Plugin { ...await this.addIsomorphicGitConfigFS(), ...cmd }) - this.emit('rm') - } + this.emit('rm') } async checkout(cmd: checkoutInputType): Promise { - + console.log('checkout', cmd) if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'checkout', cmd) } else { diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 716c665bcb..c5a6a1df8a 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -72,7 +72,7 @@ "isomorphic-git": "^1.24.2", "matomo-tracker": "^2.2.4", "node-pty": "^0.10.1", - "octokit": "^4.0.2", + "octokit": "^3.1.2", "semver": "^7.5.4" }, "optionalDependencies": { diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 430928e3ff..afe26685ce 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -90,23 +90,16 @@ class IsoGitPluginClient extends ElectronBasePluginClient { console.log('LOG', cmd) const token = await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') console.log('LOG', token) - /* we will use isomorphic git for now - if(this.gitIsInstalled){ - const log = await gitProxy.log(this.workingDir, cmd.ref) - console.log('LOG', log) - return log - } - */ - + if (this.workingDir === '') { return [] } const log = await git.log({ ...await this.getGitConfig(), - ...cmd + ...cmd, }) - + console.log('LOG', log) return log } diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index 5e062dceac..f32a6426c9 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -10,12 +10,16 @@ const statusTransFormMatrix = (status: string) => { return [0, 2, 0] case 'A ': return [0, 2, 2] + case 'R ': + return [0, 2, 2] case 'M ': return [1, 2, 2] case 'MM': return [1, 2, 3] case ' M': - return [1, 2, 0] + return [1, 2, 1] + case 'AD': + return [0, 0, 3] case ' D': return [1, 0, 1] case 'D ': @@ -57,14 +61,22 @@ export const gitProxy = { if(!input.remote || !input.remote.name) { input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } } - const { stdout, stderr } = await execAsync(`git push ${input.force ? ' -f' : ''} ${input.remote.name} ${input.ref.name}:${input.remoteRef.name}`, { cwd: path }); + let remoteRefString = '' + if(input.remoteRef && !input.remoteRef.name) { + remoteRefString = `:${input.remoteRef.name}` + } + const { stdout, stderr } = await execAsync(`git push ${input.force ? ' -f' : ''} ${input.remote.name}${remoteRefString} ${input.ref.name}`, { cwd: path }); }, async pull(path: string, input: pullInputType) { if(!input.remote || !input.remote.name) { input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } } - const { stdout, stderr } = await execAsync(`git pull ${input.remote.name} ${input.ref.name}:${input.remoteRef.name}`, { cwd: path }); + let remoteRefString = '' + if(input.remoteRef && !input.remoteRef.name) { + remoteRefString = `:${input.remoteRef.name}` + } + const { stdout, stderr } = await execAsync(`git pull ${input.remote.name} ${input.ref.name}${remoteRefString}`, { cwd: path }); }, async fetch(path: string, input: fetchInputType) { @@ -89,6 +101,7 @@ export const gitProxy = { await execAsync(`git commit -m '${input.message}'`, { cwd: path }); const { stdout, stderr } = await execAsync(`git rev-parse HEAD`, { cwd: path }); + console.log('stdout commit:', stdout); return stdout; }, diff --git a/apps/remixdesktop/test/lib/git.ts b/apps/remixdesktop/test/lib/git.ts new file mode 100644 index 0000000000..dc99ef1aa9 --- /dev/null +++ b/apps/remixdesktop/test/lib/git.ts @@ -0,0 +1,195 @@ +import { spawn, ChildProcess } from "child_process" + +export async function getBranches(path: string): Promise { + return new Promise((resolve, reject) => { + const git = spawn('git', ['branch'], { cwd: path }) + let branches = '' + git.stdout.on('data', function (data) { + console.log('stdout git branches', data.toString()) + branches += data.toString() + }) + git.stderr.on('data', function (data) { + console.log('stderr git branches', data.toString()) + reject(data.toString()) + }) + git.on('close', function () { + resolve(branches) + }) + }) +} + +export async function getGitLog(path: string): Promise { + return new Promise((resolve, reject) => { + const git = spawn('git', ['log'], { cwd: path }) + let logs = '' + git.stdout.on('data', function (data) { + logs += data.toString() + }) + git.stderr.on('err', function (data) { + reject(data.toString()) + }) + git.on('close', function () { + resolve(logs) + }) + }) +} + +export async function cloneOnServer(repo: string, path: string) { + console.log('cloning', repo, path) + return new Promise((resolve, reject) => { + const git = spawn('rm -rf bare && git', ['clone', repo], { cwd: path, shell: true, detached: true }); + + git.stdout.on('data', function (data) { + console.log('stdout data cloning', data.toString()); + if (data.toString().includes('done')) { + resolve(git); + } + }); + + git.stderr.on('data', function (data) { + console.log('stderr data cloning', data.toString()); + if (data.toString().includes('into')) { + setTimeout(() => { + resolve(git); + }, 5000) + } + }); + + git.on('error', (error) => { + reject(`Process error: ${error.message}`); + }); + + git.on('exit', (code, signal) => { + if (code !== 0) { + reject(`Process exited with code: ${code} and signal: ${signal}`); + } + }); + }); +} + +export async function onLocalGitRepoAddFile(path: string, file: string) { + console.log('adding file', file) + return new Promise((resolve, reject) => { + const git = spawn('touch', [file], { cwd: path }); + + git.stdout.on('data', function (data) { + console.log('stdout data adding file', data.toString()); + if (data.toString().includes('done')) { + resolve(git); + } + }); + + git.stderr.on('data', function (data) { + console.error('stderr adding file', data.toString()); + reject(data.toString()); + }); + + git.on('error', (error) => { + reject(`Process error: ${error.message}`); + }); + + git.on('exit', (code, signal) => { + if (code !== 0) { + reject(`Process exited with code: ${code} and signal: ${signal}`); + } else { + resolve(git); + } + }); + }); +} + +export async function onLocalGitRepoPush(path: string, branch: string = 'master') { + console.log('pushing', path) + return new Promise((resolve, reject) => { + const git = spawn('git', ['push', 'origin', branch], { cwd: path, shell: true, detached: true }); + + git.stdout.on('data', function (data) { + console.log('stdout data pushing', data.toString()); + if (data.toString().includes('done')) { + resolve(git); + } + }); + + git.stderr.on('data', function (data) { + console.error('stderr data pushing', data.toString()); + if (data.toString().includes(branch)) { + resolve(git); + } + }); + + git.on('error', (error) => { + reject(`Process error: ${error.message}`); + }); + + git.on('exit', (code, signal) => { + if (code !== 0) { + reject(`Process exited with code: ${code} and signal: ${signal}`); + } else { + resolve(git); + } + }); + }); +} + + +export async function createCommitOnLocalServer(path: string, message: string) { + console.log('committing', message, path) + return new Promise((resolve, reject) => { + const git = spawn('git add . && git', ['commit', '-m', message], { cwd: path, shell: true, detached: true }); + + git.stdout.on('data', function (data) { + console.log('data stdout committing', data.toString()); + if (data.toString().includes(message)) { + setTimeout(() => { + resolve(git); + }, 1000) + } + }); + + git.stderr.on('data', function (data) { + console.error('data commiting', data.toString()); + reject(data.toString()); + }); + + git.on('error', (error) => { + console.error('error', error); + reject(`Process error: ${error.message}`); + }); + + git.on('exit', (code, signal) => { + if (code !== 0) { + console.error('exit', code, signal); + reject(`Process exited with code: ${code} and signal: ${signal}`); + } else { + resolve(git); + } + }); + }); +} + + +export async function spawnGitServer(path: string): Promise { + console.log(process.cwd()) + try { + const server = spawn('yarn && sh setup.sh && npx ts-node server.ts', [`${path}`], { cwd: process.cwd() + '/../remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) + console.log('spawned', server.stdout.closed, server.stderr.closed) + return new Promise((resolve, reject) => { + server.stdout.on('data', function (data) { + console.log(data.toString()) + if ( + data.toString().includes('is listening') + || data.toString().includes('address already in use') + ) { + console.log('resolving') + resolve(server) + } + }) + server.stderr.on('err', function (data) { + console.log(data.toString()) + reject(data.toString()) + }) + }) + } catch (e) { + console.log(e) + } +} \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts new file mode 100644 index 0000000000..53139f4df0 --- /dev/null +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -0,0 +1,187 @@ +import { ChildProcess, spawn } from "child_process" +import kill from 'tree-kill' +import { Nightwatch, NightwatchBrowser } from "nightwatch" +import { spawnGitServer, getGitLog, cloneOnServer, onLocalGitRepoAddFile, createCommitOnLocalServer, onLocalGitRepoPush, getBranches } from "../../lib/git" +let gitserver: ChildProcess + +/* +/ uses the git-http-backend package to create a git server ( if needed kill the server: kill -9 $(sudo lsof -t -i:6868) ) +/ GROUP 1: file operations PUSH PULL COMMIT SYNC FETCH CLONE ADD +/ GROUP 2: branch operations CREATE & PUBLISH +/ GROUP 3: file operations rename delete +*/ + +module.exports = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + done() + }, + after: function (browser: NightwatchBrowser) { + browser.perform((done) => { + console.log('kill server', gitserver.pid) + kill(gitserver.pid) + done() + }) + }, + + 'run server #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser.perform(async (done) => { + gitserver = await spawnGitServer('/tmp/') + console.log('working directory', process.cwd()) + done() + }) + }, + + 'clone a repo #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(5000) + .waitForElementVisible('*[data-id="cloneButton"]') + .click('*[data-id="cloneButton"]') + .pause(1000) + .waitForElementVisible('[data-id="fileSystemModalDialogModalBody-react"]') + .click('[data-id="fileSystemModalDialogModalBody-react"]') + .waitForElementVisible('[data-id="modalDialogCustomPromptTextClone"]') + .setValue('*[data-id="modalDialogCustomPromptTextClone"]', 'http://localhost:6868/bare.git') + .click('[data-id="fileSystem-modal-footer-ok-react"]') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .setValue('*[data-id="gitubUsername"]', 'git') + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .click('*[data-id="saveGitHubCredentials"]') + .modalFooterOKClick('github-credentials-error') + + }, + + // GROUP 1 + + 'check file added #group1 #group3': function (browser: NightwatchBrowser) { + browser + .addFile('test.txt', { content: 'hello world' }, 'README.md') + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible({ + selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .pause(1000) + .click('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .setValue('*[data-id="commitMessage"]', 'testcommit') + .click('*[data-id="commitButton"]') + }, + 'look at the commit #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit-ahead"]', + locateStrategy: 'xpath' + }) + }, + 'sync the commit #group1': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .waitForElementVisible('*[data-id="sourcecontrol-panel"]') + .click('*[data-id="sourcecontrol-panel"]') + + .waitForElementVisible('*[data-id="syncButton"]') + .click('*[data-id="syncButton"]') + .pause(2000) + .waitForElementVisible('*[data-id="commitButton"]') + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit-"]', + locateStrategy: 'xpath' + }) + }, + 'check the log #group1': async function (browser: NightwatchBrowser) { + const logs = await getGitLog('/tmp/git/bare.git') + console.log(logs) + browser.assert.ok(logs.includes('testcommit')) + }, + 'change a file #group1': function (browser: NightwatchBrowser) { + browser. + openFile('test.txt'). + pause(1000). + setEditorValue('changes', null) + }, + 'stage changed file #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .click('*[data-id="sourcecontrol-panel"]') + .waitForElementVisible({ + selector: "//*[@data-status='modified-unstaged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .click('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='modified-staged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .setValue('*[data-id="commitMessage"]', 'testcommit2') + .click('*[data-id="commitButton"]') + }, + 'push the commit #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commands-panel"]') + .waitForElementVisible('*[data-id="sourcecontrol-push"]') + .click('*[data-id="sourcecontrol-push"]') + .pause(2000) + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit2-"]', + locateStrategy: 'xpath' + }).pause(2000) + }, + 'check the log for testcommit2 #group1': async function (browser: NightwatchBrowser) { + const logs = await getGitLog('/tmp/git/bare.git') + console.log(logs) + browser.assert.ok(logs.includes('testcommit2')) + }, + 'clone locally and add a file and push #group1': async function (browser: NightwatchBrowser) { + await cloneOnServer('http://localhost:6868/bare.git', '/tmp/') + await onLocalGitRepoAddFile('/tmp/bare/', 'test2.txt') + await createCommitOnLocalServer('/tmp/bare/', 'testlocal') + await onLocalGitRepoPush('/tmp/bare/', 'master') + }, + 'run a git fetch #group1': function (browser: NightwatchBrowser) { + browser + .pause(2000) + .click('*[data-id="commands-panel"]') + .waitForElementVisible('*[data-id="sourcecontrol-fetch-branch"]') + + .click('*[data-id="sourcecontrol-fetch-branch"]') + .pause(2000) + .click('*[data-id="commits-panel"]') + .waitForElementVisible('*[data-id="commits-panel-behind"]') + .click('*[data-id="commits-panel-behind"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testlocal-"]', + locateStrategy: 'xpath' + }) + }, + 'run pull from the header #group1': function (browser: NightwatchBrowser) { + browser. + click('*[data-id="sourcecontrol-button-pull"]') + .waitForElementNotPresent('*[data-id="commits-panel-behind"]') + }, + 'check if the file is added #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest2.txt"]') + }, +} + diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts new file mode 100644 index 0000000000..2187a844d4 --- /dev/null +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -0,0 +1,164 @@ +import { ChildProcess, spawn } from "child_process" +import kill from 'tree-kill' +import { Nightwatch, NightwatchBrowser } from "nightwatch" +import { spawnGitServer, getGitLog, cloneOnServer, onLocalGitRepoAddFile, createCommitOnLocalServer, onLocalGitRepoPush, getBranches } from "../../lib/git" +let gitserver: ChildProcess + +/* +/ uses the git-http-backend package to create a git server ( if needed kill the server: kill -9 $(sudo lsof -t -i:6868) ) +/ GROUP 1: file operations PUSH PULL COMMIT SYNC FETCH CLONE ADD +/ GROUP 2: branch operations CREATE & PUBLISH +/ GROUP 3: file operations rename delete +*/ + +module.exports = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + done() + }, + after: function (browser: NightwatchBrowser) { + browser.perform((done) => { + console.log('kill server', gitserver.pid) + kill(gitserver.pid) + done() + }) + }, + + 'run server #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser.perform(async (done) => { + gitserver = await spawnGitServer('/tmp/') + console.log('working directory', process.cwd()) + done() + }) + }, + + 'clone a repo #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(5000) + .waitForElementVisible('*[data-id="cloneButton"]') + .click('*[data-id="cloneButton"]') + .pause(1000) + .waitForElementVisible('[data-id="fileSystemModalDialogModalBody-react"]') + .click('[data-id="fileSystemModalDialogModalBody-react"]') + .waitForElementVisible('[data-id="modalDialogCustomPromptTextClone"]') + .setValue('*[data-id="modalDialogCustomPromptTextClone"]', 'http://localhost:6868/bare.git') + .click('[data-id="fileSystem-modal-footer-ok-react"]') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .setValue('*[data-id="gitubUsername"]', 'git') + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .click('*[data-id="saveGitHubCredentials"]') + .modalFooterOKClick('github-credentials-error') + + }, + + // GROUP 2 + 'create a branch #group2': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="branches-panel"]') + .waitForElementVisible('*[data-id="newbranchname"]') + .setValue('*[data-id="newbranchname"]', 'testbranch') + .click('*[data-id="sourcecontrol-create-branch"]') + .waitForElementVisible('*[data-id="branches-current-branch-testbranch"]') + .pause(1000) + }, + 'check if the branch is in the filePanel #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .click('[data-id="workspaceGitBranchesDropdown"]') + .expect.element('[data-id="workspaceGit-testbranch"]').text.to.contain('✓ ') + }, + 'publish the branch #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="sourcecontrol-panel"]') + .click('*[data-id="sourcecontrol-panel"]') + .pause(1000) + .click('*[data-id="publishBranchButton"]') + .pause(2000) + .waitForElementNotVisible('*[data-id="publishBranchButton"]') + }, + 'check if the branch is published #group2': async function (browser: NightwatchBrowser) { + const branches = await getBranches('/tmp/git/bare.git') + browser.assert.ok(branches.includes('testbranch')) + }, + 'add file to new branch #group2': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .addFile('test.txt', { content: 'hello world' }, 'README.md') + .clickLaunchIcon('dgit') + .pause(2000) + .waitForElementVisible({ + selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .pause(1000) + .click('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .setValue('*[data-id="commitMessage"]', 'testcommit') + .click('*[data-id="commitButton"]') + .pause(1000) + }, + 'check if the commit is ahead in the branches list #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="branches-panel"]') + .click('*[data-id="branches-panel"]') + .waitForElementVisible('*[data-id="branches-current-branch-testbranch"]') + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='branches-current-branch-testbranch']", + locateStrategy: 'xpath', + suppressNotFoundErrors: true + }) + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='commits-panel-ahead']", + locateStrategy: 'xpath', + suppressNotFoundErrors: true + }) + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='branchdifference-commits-testbranch-ahead']//*[@data-id='commit-summary-testcommit-ahead']", + locateStrategy: 'xpath', + }) + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='branchdifference-commits-testbranch-ahead']//*[@data-id='commit-change-added-test.txt']", + locateStrategy: 'xpath', + }) + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='local-branch-commits-testbranch']//*[@data-id='commit-summary-testcommit-ahead']", + locateStrategy: 'xpath', + }) + .waitForElementVisible({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='local-branch-commits-testbranch']//*[@data-id='commit-change-added-test.txt']", + locateStrategy: 'xpath', + }) + }, + 'switch back to master #group2': function (browser: NightwatchBrowser) { + browser + .click({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='branches-toggle-branch-master']", + locateStrategy: 'xpath', + }) + .waitForElementVisible({ + selector: "//*[@data-id='branches-panel-content']//*[@data-id='branches-toggle-current-branch-master']", + locateStrategy: 'xpath', + }) + }, + 'check if test file is gone #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementNotPresent('*[data-id="treeViewLitreeViewItemtest.txt"]') + } +} + diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts new file mode 100644 index 0000000000..e65b9ef3cf --- /dev/null +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -0,0 +1,132 @@ +import { ChildProcess, spawn } from "child_process" +import kill from 'tree-kill' +import { Nightwatch, NightwatchBrowser } from "nightwatch" +import { spawnGitServer, getGitLog, cloneOnServer, onLocalGitRepoAddFile, createCommitOnLocalServer, onLocalGitRepoPush, getBranches } from "../../lib/git" +let gitserver: ChildProcess + +/* +/ uses the git-http-backend package to create a git server ( if needed kill the server: kill -9 $(sudo lsof -t -i:6868) ) +/ GROUP 1: file operations PUSH PULL COMMIT SYNC FETCH CLONE ADD +/ GROUP 2: branch operations CREATE & PUBLISH +/ GROUP 3: file operations rename delete +*/ + +module.exports = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + done() + }, + after: function (browser: NightwatchBrowser) { + browser.perform((done) => { + console.log('kill server', gitserver.pid) + kill(gitserver.pid) + done() + }) + }, + + 'run server #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser.perform(async (done) => { + gitserver = await spawnGitServer('/tmp/') + console.log('working directory', process.cwd()) + done() + }) + }, + + 'clone a repo #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(5000) + .waitForElementVisible('*[data-id="cloneButton"]') + .click('*[data-id="cloneButton"]') + .pause(1000) + .waitForElementVisible('[data-id="fileSystemModalDialogModalBody-react"]') + .click('[data-id="fileSystemModalDialogModalBody-react"]') + .waitForElementVisible('[data-id="modalDialogCustomPromptTextClone"]') + .setValue('*[data-id="modalDialogCustomPromptTextClone"]', 'http://localhost:6868/bare.git') + .click('[data-id="fileSystem-modal-footer-ok-react"]') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .setValue('*[data-id="gitubUsername"]', 'git') + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .click('*[data-id="saveGitHubCredentials"]') + .modalFooterOKClick('github-credentials-error') + + }, + + 'check file added #group1 #group3': function (browser: NightwatchBrowser) { + browser + .addFile('test.txt', { content: 'hello world' }, 'README.md') + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible({ + selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .pause(1000) + .click('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .setValue('*[data-id="commitMessage"]', 'testcommit') + .click('*[data-id="commitButton"]') + }, + + // group 3 + 'rename a file #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest.txt"]') + .click('*[data-id="treeViewLitreeViewItemtest.txt"]') + .renamePath('test.txt', 'test_rename', 'test_rename.txt') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest_rename.txt"]') + .pause(1000) + }, + 'stage renamed file #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .waitForElementVisible({ + selector: "//*[@data-status='deleted-unstaged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='new-untracked' and @data-file='/test_rename.txt']", + locateStrategy: 'xpath' + }) + .click('*[data-id="sourcecontrol-add-all"]') + .waitForElementVisible({ + selector: "//*[@data-status='added-staged' and @data-file='/test_rename.txt']", + locateStrategy: 'xpath' + }) + }, + 'undo the rename #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="unStageStagedtest_rename.txt"]') + .click('*[data-id="unStageStagedtest_rename.txt"]') + .pause(1000) + .click('*[data-id="unDoStagedtest.txt"]') + .pause(1000) + .waitForElementNotPresent({ + selector: "//*[@data-file='/test.txt']", + locateStrategy: 'xpath' + }) + }, + 'check if file is returned #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest.txt"]') + }, + + + } + diff --git a/apps/remixdesktop/test/types/index.d.ts b/apps/remixdesktop/test/types/index.d.ts index 7208a7c50d..faf3a89d54 100644 --- a/apps/remixdesktop/test/types/index.d.ts +++ b/apps/remixdesktop/test/types/index.d.ts @@ -11,7 +11,7 @@ declare module 'nightwatch' { scrollInto(target: string): NightwatchBrowser testContracts(fileName: string, contractCode: NightwatchContractContent, compiledContractNames: string[]): NightwatchBrowser setEditorValue(value: string, callback?: () => void): NightwatchBrowser - addFile(name: string, content: NightwatchContractContent): NightwatchBrowser + addFile(name: string, content: NightwatchContractContent, readMeFile?: string): NightwatchBrowser verifyContracts(compiledContractNames: string[], opts?: {wait: number; version?: string; runs?: string}): NightwatchBrowser selectAccount(account?: string): NightwatchBrowser clickFunction(fnFullName: string, expectedInput?: NightwatchClickFunctionExpectedInput): NightwatchBrowser diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index 871cb5452b..6f33703305 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -1,12 +1,13 @@ { "compilerOptions": { - "jsx": "react-jsx", - "target": "ES6", + "target": "es6", "allowJs": true, - "module": "commonjs", + "module": "CommonJS", "skipLibCheck": true, "esModuleInterop": true, "noImplicitAny": false, + "allowSyntheticDefaultImports": true, + "isolatedModules": true, "sourceMap": true, "baseUrl": ".", "outDir": "./build", diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index e1aad0bdd0..b96b5cae81 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -582,221 +582,247 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@octokit/app@^15.0.0": - version "15.1.0" - resolved "https://registry.yarnpkg.com/@octokit/app/-/app-15.1.0.tgz#b330d8826be088ec8d1d43a59dc27ef57d1232b2" - integrity sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg== - dependencies: - "@octokit/auth-app" "^7.0.0" - "@octokit/auth-unauthenticated" "^6.0.0" - "@octokit/core" "^6.1.2" - "@octokit/oauth-app" "^7.0.0" - "@octokit/plugin-paginate-rest" "^11.0.0" - "@octokit/types" "^13.0.0" - "@octokit/webhooks" "^13.0.0" - -"@octokit/auth-app@^7.0.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-7.1.0.tgz#55a3d3b3b3607b9d375abbe946163dca3a25c2c9" - integrity sha512-cazGaJPSgeZ8NkVYeM/C5l/6IQ5vZnsI8p1aMucadCkt/bndI+q+VqwrlnWbASRmenjOkf1t1RpCKrif53U8gw== - dependencies: - "@octokit/auth-oauth-app" "^8.1.0" - "@octokit/auth-oauth-user" "^5.1.0" - "@octokit/request" "^9.1.1" - "@octokit/request-error" "^6.1.1" - "@octokit/types" "^13.4.1" +"@octokit/app@^14.0.2": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@octokit/app/-/app-14.1.0.tgz#2d491dc70746773b83f61edf5c56817dd7d3854b" + integrity sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw== + dependencies: + "@octokit/auth-app" "^6.0.0" + "@octokit/auth-unauthenticated" "^5.0.0" + "@octokit/core" "^5.0.0" + "@octokit/oauth-app" "^6.0.0" + "@octokit/plugin-paginate-rest" "^9.0.0" + "@octokit/types" "^12.0.0" + "@octokit/webhooks" "^12.0.4" + +"@octokit/auth-app@^6.0.0": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-6.1.1.tgz#758a5d2e0324c750f7463b10398fd99c52b2eb89" + integrity sha512-VrTtzRpyuT5nYGUWeGWQqH//hqEZDV+/yb6+w5wmWpmmUA1Tx950XsAc2mBBfvusfcdF2E7w8jZ1r1WwvfZ9pA== + dependencies: + "@octokit/auth-oauth-app" "^7.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.1.0" + deprecation "^2.3.1" lru-cache "^10.0.0" - universal-github-app-jwt "^2.2.0" - universal-user-agent "^7.0.0" + universal-github-app-jwt "^1.1.2" + universal-user-agent "^6.0.0" -"@octokit/auth-oauth-app@^8.0.0", "@octokit/auth-oauth-app@^8.1.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.1.tgz#6204affa6e86f535016799cadf2af9befe5e893c" - integrity sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg== +"@octokit/auth-oauth-app@^7.0.0", "@octokit/auth-oauth-app@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz#d0f74e19ebd5a4829cb780c107cedd6c894f20fc" + integrity sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA== dependencies: - "@octokit/auth-oauth-device" "^7.0.0" - "@octokit/auth-oauth-user" "^5.0.1" - "@octokit/request" "^9.0.0" + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.0" + "@types/btoa-lite" "^1.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" -"@octokit/auth-oauth-device@^7.0.0", "@octokit/auth-oauth-device@^7.0.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz#7b4f8f97cbcadbe9894d48cde4406dbdef39875a" - integrity sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg== +"@octokit/auth-oauth-device@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz#f868213a3db05fe27e68d1fc607502a322379dd9" + integrity sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw== dependencies: - "@octokit/oauth-methods" "^5.0.0" - "@octokit/request" "^9.0.0" + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.0" + universal-user-agent "^6.0.0" -"@octokit/auth-oauth-user@^5.0.1", "@octokit/auth-oauth-user@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.1.tgz#4f1570c6ee15bb9ddc3dcca83308dcaa159e3848" - integrity sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw== +"@octokit/auth-oauth-user@^4.0.0", "@octokit/auth-oauth-user@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz#32e5529f8bd961af9839a1f8c6ab0c8ad2184eee" + integrity sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ== dependencies: - "@octokit/auth-oauth-device" "^7.0.1" - "@octokit/oauth-methods" "^5.0.0" - "@octokit/request" "^9.0.1" + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" -"@octokit/auth-token@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" - integrity sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA== +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== -"@octokit/auth-unauthenticated@^6.0.0", "@octokit/auth-unauthenticated@^6.0.0-beta.1": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.0.tgz#de0fe923bb06ed93aea526ab99972a98c546d0bf" - integrity sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ== +"@octokit/auth-unauthenticated@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz#d8032211728333068b2e07b53997c29e59a03507" + integrity sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg== dependencies: - "@octokit/request-error" "^6.0.1" - "@octokit/types" "^13.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^12.0.0" -"@octokit/core@^6.0.0", "@octokit/core@^6.1.2": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.2.tgz#20442d0a97c411612da206411e356014d1d1bd17" - integrity sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg== +"@octokit/core@^5.0.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.0.tgz#ddbeaefc6b44a39834e1bb2e58a49a117672a7ea" + integrity sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg== dependencies: - "@octokit/auth-token" "^5.0.0" - "@octokit/graphql" "^8.0.0" - "@octokit/request" "^9.0.0" - "@octokit/request-error" "^6.0.1" + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" "@octokit/types" "^13.0.0" - before-after-hook "^3.0.2" - universal-user-agent "^7.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" -"@octokit/endpoint@^10.0.0": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.1.tgz#1a9694e7aef6aa9d854dc78dd062945945869bcc" - integrity sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q== +"@octokit/endpoint@^9.0.1": + version "9.0.5" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.5.tgz#e6c0ee684e307614c02fc6ac12274c50da465c44" + integrity sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw== dependencies: - "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.2" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" -"@octokit/graphql@^8.0.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.1.tgz#3cacab5f2e55d91c733e3bf481d3a3f8a5f639c4" - integrity sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg== +"@octokit/graphql@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.0.tgz#9bc1c5de92f026648131f04101cab949eeffe4e0" + integrity sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ== dependencies: - "@octokit/request" "^9.0.0" + "@octokit/request" "^8.3.0" "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.0" - -"@octokit/oauth-app@^7.0.0": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-7.1.3.tgz#a0f256dd185e7c00bfbc3e6bc3c5aad66e42c609" - integrity sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg== - dependencies: - "@octokit/auth-oauth-app" "^8.0.0" - "@octokit/auth-oauth-user" "^5.0.1" - "@octokit/auth-unauthenticated" "^6.0.0-beta.1" - "@octokit/core" "^6.0.0" - "@octokit/oauth-authorization-url" "^7.0.0" - "@octokit/oauth-methods" "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/oauth-app@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-6.1.0.tgz#22c276f6ad2364c6999837bfdd5d9c1092838726" + integrity sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g== + dependencies: + "@octokit/auth-oauth-app" "^7.0.0" + "@octokit/auth-oauth-user" "^4.0.0" + "@octokit/auth-unauthenticated" "^5.0.0" + "@octokit/core" "^5.0.0" + "@octokit/oauth-authorization-url" "^6.0.2" + "@octokit/oauth-methods" "^4.0.0" "@types/aws-lambda" "^8.10.83" - universal-user-agent "^7.0.0" + universal-user-agent "^6.0.0" -"@octokit/oauth-authorization-url@^7.0.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz#0e17c2225eb66b58ec902d02b6f1315ffe9ff04b" - integrity sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA== +"@octokit/oauth-authorization-url@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz#cc82ca29cc5e339c9921672f39f2b3f5c8eb6ef2" + integrity sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA== -"@octokit/oauth-methods@^5.0.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-5.1.2.tgz#fd31d2a69f4c91d1abc1ed1814dda5252c697e02" - integrity sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g== +"@octokit/oauth-methods@^4.0.0", "@octokit/oauth-methods@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz#1403ac9c4d4e277922fddc4c89fa8a782f8f791b" + integrity sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw== dependencies: - "@octokit/oauth-authorization-url" "^7.0.0" - "@octokit/request" "^9.1.0" - "@octokit/request-error" "^6.1.0" + "@octokit/oauth-authorization-url" "^6.0.2" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" "@octokit/types" "^13.0.0" + btoa-lite "^1.0.0" + +"@octokit/openapi-types@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5" + integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== "@octokit/openapi-types@^22.2.0": version "22.2.0" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== -"@octokit/openapi-webhooks-types@8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.3.0.tgz#a7a4da00c0f27f7f5708eb3fcebefa08f8d51125" - integrity sha512-vKLsoR4xQxg4Z+6rU/F65ItTUz/EXbD+j/d4mlq2GW8TsA4Tc8Kdma2JTAAJ5hrKWUQzkR/Esn2fjsqiVRYaQg== - -"@octokit/plugin-paginate-graphql@^5.0.0": - version "5.2.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.2.tgz#54e2afef55bb204eb945a891b85a169b9ddad1f8" - integrity sha512-7znSVvlNAOJisCqAnjN1FtEziweOHSjPGAuc5W58NeGNAr/ZB57yCsjQbXDlWsVryA7hHQaEQPcBbJYFawlkyg== +"@octokit/plugin-paginate-graphql@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz#9c0b1145b93a2b8635943f497c127969d54512fc" + integrity sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A== -"@octokit/plugin-paginate-rest@^11.0.0": - version "11.3.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.3.tgz#efc97ba66aae6797e2807a082f99b9cfc0e05aba" - integrity sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA== +"@octokit/plugin-paginate-rest@11.3.1": + version "11.3.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz#fe92d04b49f134165d6fbb716e765c2f313ad364" + integrity sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g== dependencies: "@octokit/types" "^13.5.0" -"@octokit/plugin-rest-endpoint-methods@^13.0.0": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.4.tgz#543add032d3fe3f5d2839bfd619cf66d85469f01" - integrity sha512-gusyAVgTrPiuXOdfqOySMDztQHv6928PQ3E4dqVGEtOvRXAKRbJR4b1zQyniIT9waqaWk/UDaoJ2dyPr7Bk7Iw== +"@octokit/plugin-paginate-rest@^9.0.0": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz#2e2a2f0f52c9a4b1da1a3aa17dabe3c459b9e401" + integrity sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw== + dependencies: + "@octokit/types" "^12.6.0" + +"@octokit/plugin-rest-endpoint-methods@13.2.2": + version "13.2.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz#af8e5dd2cddfea576f92ffaf9cb84659f302a638" + integrity sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA== dependencies: "@octokit/types" "^13.5.0" -"@octokit/plugin-retry@^7.0.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-7.1.1.tgz#a84483e4afdd068dd71da81abe206a9e442c1288" - integrity sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw== +"@octokit/plugin-retry@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz#3257404f7cc418e1c1f13a7f2012c1db848b7693" + integrity sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog== dependencies: - "@octokit/request-error" "^6.0.0" - "@octokit/types" "^13.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^12.0.0" bottleneck "^2.15.3" -"@octokit/plugin-throttling@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz#2700963c6f7e0f62de2158a6d67d1b47c19af3d4" - integrity sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w== +"@octokit/plugin-throttling@^8.0.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz#9ec3ea2e37b92fac63f06911d0c8141b46dc4941" + integrity sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ== dependencies: - "@octokit/types" "^13.0.0" + "@octokit/types" "^12.2.0" bottleneck "^2.15.3" -"@octokit/request-error@^6.0.0", "@octokit/request-error@^6.0.1", "@octokit/request-error@^6.1.0", "@octokit/request-error@^6.1.1": - version "6.1.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.4.tgz#ad96e29148d19edc2ba8009fc2b5a24a36c90f16" - integrity sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg== +"@octokit/request-error@^5.0.0", "@octokit/request-error@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.0.tgz#ee4138538d08c81a60be3f320cd71063064a3b30" + integrity sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q== dependencies: - "@octokit/types" "^13.0.0" + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" -"@octokit/request@^9.0.0", "@octokit/request@^9.0.1", "@octokit/request@^9.1.0", "@octokit/request@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.1.1.tgz#e836eb69c0fb4b59b6437af7716ca348a1232a52" - integrity sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw== +"@octokit/request@^8.3.0", "@octokit/request@^8.3.1": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.0.tgz#7f4b7b1daa3d1f48c0977ad8fffa2c18adef8974" + integrity sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw== dependencies: - "@octokit/endpoint" "^10.0.0" - "@octokit/request-error" "^6.0.1" + "@octokit/endpoint" "^9.0.1" + "@octokit/request-error" "^5.1.0" "@octokit/types" "^13.1.0" - universal-user-agent "^7.0.2" + universal-user-agent "^6.0.0" + +"@octokit/types@^12.0.0", "@octokit/types@^12.2.0", "@octokit/types@^12.6.0": + version "12.6.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2" + integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== + dependencies: + "@octokit/openapi-types" "^20.0.0" -"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.4.1", "@octokit/types@^13.5.0": +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.5.0": version "13.5.0" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883" integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ== dependencies: "@octokit/openapi-types" "^22.2.0" -"@octokit/webhooks-methods@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-5.1.0.tgz#13b6c08f89902c1ab0ddf31c6eeeec9c2772cfe6" - integrity sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ== - -"@octokit/webhooks@^13.0.0": - version "13.2.8" - resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-13.2.8.tgz#8d7134870c327e413809c83a11b46e1896a6f0fe" - integrity sha512-nQyf5UDEgIeZB65rXSvK9ep9PkYthbnmXu/VK9AJcMMOvH1UwzcvYNd9DN++HIr8HXwbqB1FAEv5CnNARQEsaQ== - dependencies: - "@octokit/openapi-webhooks-types" "8.3.0" - "@octokit/request-error" "^6.0.1" - "@octokit/webhooks-methods" "^5.0.0" - aggregate-error "^5.0.0" +"@octokit/webhooks-methods@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz#681a6c86c9b21d4ec9e29108fb053ae7512be033" + integrity sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ== + +"@octokit/webhooks-types@7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz#7ed15c75908683a34e0079c80f261fe568b87395" + integrity sha512-FE2V+QZ2UYlh+9wWd5BPLNXG+J/XUD/PPq0ovS+nCcGX4+3qVbi3jYOmCTW48hg9SBBLtInx9+o7fFt4H5iP0Q== + +"@octokit/webhooks@^12.0.4": + version "12.2.0" + resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-12.2.0.tgz#ea1ee2d9d9c5a4b7b53ff8bc64a9feb0dac94161" + integrity sha512-CyuLJ0/P7bKZ+kIYw+fnkeVdhUzNuDKgNSI7pU/m7Nod0T7kP+s4s2f0pNmG9HL8/RZN1S0ZWTDll3VTMrFLAw== + dependencies: + "@octokit/request-error" "^5.0.0" + "@octokit/webhooks-methods" "^4.1.0" + "@octokit/webhooks-types" "7.4.0" + aggregate-error "^3.1.0" "@openzeppelin/contracts@^4.7.3": version "4.9.6" @@ -970,6 +996,11 @@ "@types/connect" "*" "@types/node" "*" +"@types/btoa-lite@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" + integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== + "@types/byline@^4.2.35": version "4.2.35" resolved "https://registry.npmjs.org/@types/byline/-/byline-4.2.35.tgz" @@ -1069,6 +1100,13 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/jsonwebtoken@^9.0.0": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz#d1af3544d99ad992fb6681bbe60676e06b032bd3" + integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw== + dependencies: + "@types/node" "*" + "@types/keyv@^3.1.4": version "3.1.4" resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" @@ -1416,14 +1454,6 @@ aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" -aggregate-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-5.0.0.tgz#ffe15045d7521c51c9d618e3d7f37c13f29b3fd3" - integrity sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw== - dependencies: - clean-stack "^5.2.0" - indent-string "^5.0.0" - ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -1705,10 +1735,10 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -before-after-hook@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" - integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== bignumber.js@^9.0.0: version "9.1.2" @@ -1880,11 +1910,21 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" @@ -2135,13 +2175,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-stack@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" - integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== - dependencies: - escape-string-regexp "5.0.0" - cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -2550,6 +2583,11 @@ depd@2.0.0: resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -2649,6 +2687,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2963,11 +3008,6 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -3975,11 +4015,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -4424,6 +4459,22 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -4444,6 +4495,23 @@ jszip@^3.1.0, jszip@^3.10.0: readable-stream "~2.3.6" setimmediate "^1.0.5" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + keccak@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" @@ -4575,6 +4643,11 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -4585,11 +4658,36 @@ lodash.isarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -4609,6 +4707,11 @@ lodash.merge@4.6.2, lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash@^4.17.15: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" @@ -4937,7 +5040,7 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5157,20 +5260,20 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" -octokit@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/octokit/-/octokit-4.0.2.tgz#775d68d363cdaec69d7b73d3dc82ae909d30f59b" - integrity sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg== - dependencies: - "@octokit/app" "^15.0.0" - "@octokit/core" "^6.0.0" - "@octokit/oauth-app" "^7.0.0" - "@octokit/plugin-paginate-graphql" "^5.0.0" - "@octokit/plugin-paginate-rest" "^11.0.0" - "@octokit/plugin-rest-endpoint-methods" "^13.0.0" - "@octokit/plugin-retry" "^7.0.0" - "@octokit/plugin-throttling" "^9.0.0" - "@octokit/request-error" "^6.0.0" +octokit@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/octokit/-/octokit-3.2.1.tgz#d376ca3b12a61c58da02a93c491d2e627069b194" + integrity sha512-u+XuSejhe3NdIvty3Jod00JvTdAE/0/+XbhIDhefHbu+2OcTRHd80aCiH6TX19ZybJmwPQBKFQmHGxp0i9mJrg== + dependencies: + "@octokit/app" "^14.0.2" + "@octokit/core" "^5.0.0" + "@octokit/oauth-app" "^6.0.0" + "@octokit/plugin-paginate-graphql" "^4.0.0" + "@octokit/plugin-paginate-rest" "11.3.1" + "@octokit/plugin-rest-endpoint-methods" "13.2.2" + "@octokit/plugin-retry" "^6.0.0" + "@octokit/plugin-throttling" "^8.0.0" + "@octokit/request-error" "^5.0.0" "@octokit/types" "^13.0.0" on-finished@2.4.1: @@ -6570,15 +6673,18 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -universal-github-app-jwt@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz#dc6c8929e76f1996a766ba2a08fb420f73365d77" - integrity sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ== +universal-github-app-jwt@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz#8c1867a394d7d9d42cda34f11d1bcb023797d8df" + integrity sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA== + dependencies: + "@types/jsonwebtoken" "^9.0.0" + jsonwebtoken "^9.0.2" -universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" - integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== universalify@^0.1.0: version "0.1.2" diff --git a/libs/remix-ui/git/src/components/disabled.tsx b/libs/remix-ui/git/src/components/disabled.tsx index 7825ee22df..fc22116a36 100644 --- a/libs/remix-ui/git/src/components/disabled.tsx +++ b/libs/remix-ui/git/src/components/disabled.tsx @@ -6,7 +6,7 @@ import { openCloneDialog, openFolderInSameWindow } from '../lib/pluginActions' export const Disabled = () => { const platform = useContext(platformContext) - + const openFolderElectron = async (path: string) => { await openFolderInSameWindow(path) } @@ -18,9 +18,9 @@ export const Disabled = () => { return ( (platform === appPlatformTypes.desktop) ?
-
-
{ await openFolderElectron(null) }} className='btn btn-primary w-100 my-1'>
-
{ await clone() }} className='btn btn-primary w-100'>
+
+
{ await openFolderElectron(null) }} className='btn btn-primary w-100 my-1'>
+
{ await clone() }} className='btn btn-primary w-100'>
:
diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 36651a4da9..88c8cac595 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -21,7 +21,7 @@ export const fileStatuses = [ ["deleted,unstaged", 1, 0, 1], // deleted, unstaged ["deleted,staged", 1, 0, 0], ["unmodified", 1, 1, 3], - ["deleted,not in git", 0, 0, 3], + ["added,deleted", 0, 0, 3], ["unstaged,modified", 1, 2, 0] ]; @@ -90,7 +90,7 @@ export const getCommits = async () => { "log", { ref: "HEAD" } ); - + console.log('commits', commits) return commits; } catch (e) { return []; diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index 682674e6f5..392e5b211b 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -87,13 +87,13 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { console.log('setWorkspace', x) - - if(platform == appPlatformTypes.desktop) { + + if (platform == appPlatformTypes.desktop) { const workingDir = await plugin.call('fs', 'getWorkingDir') gitDispatch(setCanUseApp(workingDir? true : false)) - }else{ + } else { gitDispatch(setCanUseApp(x && !x.isLocalhost && x.name)) - } + } loadFileQueue.enqueue(async () => { loadFiles() @@ -109,7 +109,6 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { gitlog() @@ -138,6 +137,10 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { + console.log('commit') + loadFileQueue.enqueue(async () => { + loadFiles() + }, 10) loadFileQueue.enqueue(async () => { gitlog() }, 10) diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index f9654e4a96..3a488d3a12 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -6,209 +6,208 @@ import { Actions } from "./actions" export const gitReducer = (state: gitState = defaultGitState, action: Actions): gitState => { switch (action.type) { - case 'FILE_STATUS': - return { - ...state, - fileStatusResult: action.payload, - staged: getFilesByStatus("staged", action.payload), - modified: getFilesByStatus("modified", action.payload), - untracked: getFilesByStatus("untracked", action.payload), - deleted: getFilesByStatus("deleted", action.payload), - allchangesnotstaged: allChangedButNotStagedFiles(action.payload) - } - - case 'FILE_STATUS_MERGE': - action.payload.map((fileStatusResult: fileStatusResult) => { - const file = state.fileStatusResult.find(stateFile => { - return stateFile.filename === fileStatusResult.filename - }) - if (file) { - file.status = fileStatusResult.status - file.statusNames = fileStatusResult.statusNames - } - }) - - return { - ...state, - staged: getFilesByStatus("staged", state.fileStatusResult), - modified: getFilesByStatus("modified", state.fileStatusResult), - untracked: getFilesByStatus("untracked", state.fileStatusResult), - deleted: getFilesByStatus("deleted", state.fileStatusResult), - allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) - } - - case 'SET_COMMITS': - return { - ...state, - commits: action.payload, - localCommitCount: action.payload.length - } - - case 'SET_BRANCHES': - return { - ...state, - branches: action.payload - } - - case 'SET_CURRENT_BRANCH': - return { - ...state, - currentBranch: action.payload - } - - case 'SET_CURRENT_HEAD': - return { - ...state, - currentHead: action.payload - } - - case 'SET_CAN_USE_APP': - return { - ...state, - canUseApp: action.payload - } - case 'SET_REPO_NAME': - return { - ...state, - reponame: action.payload - } - case 'SET_LOADING': - return { - ...state, - loading: action.payload - } - - case 'SET_REPOS': - return { - ...state, - repositories: action.payload - } - - case 'SET_REMOTE_BRANCHES': - return { - ...state, - remoteBranches: action.payload - } - - case 'SET_CAN_COMMIT': - return { - ...state, - canCommit: action.payload - } - - case 'SET_REMOTES': - return { - ...state, - remotes: action.payload - } - - case 'SET_UPSTREAM': - return { - ...state, - upstream: action.payload - } - - case 'SET_COMMIT_CHANGES': - - action.payload.forEach((change: commitChange) => { - state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) + case 'FILE_STATUS': + return { + ...state, + fileStatusResult: action.payload, + staged: getFilesByStatus("staged", action.payload), + modified: getFilesByStatus("modified", action.payload), + untracked: getFilesByStatus("untracked", action.payload), + deleted: getFilesByStatus("deleted", action.payload), + allchangesnotstaged: allChangedButNotStagedFiles(action.payload) + } + + case 'FILE_STATUS_MERGE': + action.payload.map((fileStatusResult: fileStatusResult) => { + const file = state.fileStatusResult.find(stateFile => { + return stateFile.filename === fileStatusResult.filename }) - - return { - ...state, - commitChanges: [...state.commitChanges] - } - - case 'RESET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - delete state.remoteBranchCommits[action.payload.branch.name] - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) - } else { - state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_LOCAL_BRANCH_COMMITS': - - state.localBranchCommits[action.payload.branch.name] = action.payload.commits - return { - ...state, - localBranchCommits: { ...state.localBranchCommits } - } - - case 'SET_BRANCH_DIFFERENCES': - - state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference - - return { - ...state, - branchDifferences: { ...state.branchDifferences } - } - - case 'SET_GITHUB_USER': - return { - ...state, - gitHubUser: action.payload - } - - case 'SET_GITHUB_ACCESS_TOKEN': - return { - ...state, - gitHubAccessToken: action.payload - } - - case 'SET_SCOPES': - return { - ...state, - gitHubScopes: action.payload - } - - case 'SET_USER_EMAILS': - return { - ...state, - userEmails: action.payload - } - - case 'SET_DEFAULT_REMOTE': - return { - ...state, - defaultRemote: action.payload - } - - case 'SET_LOG': - if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { - return { - ...state, - log: [...state.log] - } - } - return { - ...state, - log: [...state.log, action.payload] - } - - case 'CLEAR_LOG': - return { - ...state, - log: [] - } - - - case 'DESKTOP_SET_WORKING_DIR': - return { - ...state, - desktopWorkingDir: action.payload - } + if (file) { + file.status = fileStatusResult.status + file.statusNames = fileStatusResult.statusNames + } + }) + + return { + ...state, + staged: getFilesByStatus("staged", state.fileStatusResult), + modified: getFilesByStatus("modified", state.fileStatusResult), + untracked: getFilesByStatus("untracked", state.fileStatusResult), + deleted: getFilesByStatus("deleted", state.fileStatusResult), + allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) + } + + case 'SET_COMMITS': + return { + ...state, + commits: action.payload, + localCommitCount: action.payload.length + } + + case 'SET_BRANCHES': + return { + ...state, + branches: action.payload + } + + case 'SET_CURRENT_BRANCH': + return { + ...state, + currentBranch: action.payload + } + + case 'SET_CURRENT_HEAD': + return { + ...state, + currentHead: action.payload + } + + case 'SET_CAN_USE_APP': + return { + ...state, + canUseApp: action.payload + } + case 'SET_REPO_NAME': + return { + ...state, + reponame: action.payload + } + case 'SET_LOADING': + return { + ...state, + loading: action.payload + } + + case 'SET_REPOS': + return { + ...state, + repositories: action.payload + } + + case 'SET_REMOTE_BRANCHES': + return { + ...state, + remoteBranches: action.payload + } + + case 'SET_CAN_COMMIT': + return { + ...state, + canCommit: action.payload + } + + case 'SET_REMOTES': + return { + ...state, + remotes: action.payload + } + + case 'SET_UPSTREAM': + return { + ...state, + upstream: action.payload + } + + case 'SET_COMMIT_CHANGES': + + action.payload.forEach((change: commitChange) => { + state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) + }) + + return { + ...state, + commitChanges: [...state.commitChanges] + } + + case 'RESET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + delete state.remoteBranchCommits[action.payload.branch.name] + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) + } else { + state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_LOCAL_BRANCH_COMMITS': + + state.localBranchCommits[action.payload.branch.name] = action.payload.commits + return { + ...state, + localBranchCommits: { ...state.localBranchCommits } + } + + case 'SET_BRANCH_DIFFERENCES': + + state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference + + return { + ...state, + branchDifferences: { ...state.branchDifferences } + } + + case 'SET_GITHUB_USER': + return { + ...state, + gitHubUser: action.payload + } + + case 'SET_GITHUB_ACCESS_TOKEN': + return { + ...state, + gitHubAccessToken: action.payload + } + + case 'SET_SCOPES': + return { + ...state, + gitHubScopes: action.payload + } + + case 'SET_USER_EMAILS': + return { + ...state, + userEmails: action.payload + } + + case 'SET_DEFAULT_REMOTE': + return { + ...state, + defaultRemote: action.payload + } + + case 'SET_LOG': + if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { + return { + ...state, + log: [...state.log] + } + } + return { + ...state, + log: [...state.log, action.payload] + } + + case 'CLEAR_LOG': + return { + ...state, + log: [] + } + + case 'DESKTOP_SET_WORKING_DIR': + return { + ...state, + desktopWorkingDir: action.payload + } } } \ No newline at end of file From 2fa11a570e2592d513614d8a5b804bbefb8fd4c0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 12:51:47 +0200 Subject: [PATCH 017/312] linux tests --- .../test/tests/app/git-ui.test.ts | 14 +++++++----- .../test/tests/app/git-ui_2.test.ts | 11 ++++++---- .../test/tests/app/git-ui_3.test.ts | 22 +++++++++---------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 53139f4df0..85cdbf8693 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -11,7 +11,7 @@ let gitserver: ChildProcess / GROUP 3: file operations rename delete */ -module.exports = { +const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { done() }, @@ -47,8 +47,8 @@ module.exports = { .windowHandles(function (result) { console.log(result.value) browser.switchWindow(result.value[1]) - .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') - }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { @@ -58,7 +58,7 @@ module.exports = { .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') - + }, // GROUP 1 @@ -95,7 +95,7 @@ module.exports = { .pause(1000) .waitForElementVisible('*[data-id="sourcecontrol-panel"]') .click('*[data-id="sourcecontrol-panel"]') - + .waitForElementVisible('*[data-id="syncButton"]') .click('*[data-id="syncButton"]') .pause(2000) @@ -185,3 +185,7 @@ module.exports = { }, } +module.exports = { + ...process.platform.startsWith('linux') ? tests : {} +} + diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 2187a844d4..7a176fee3e 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -11,7 +11,7 @@ let gitserver: ChildProcess / GROUP 3: file operations rename delete */ -module.exports = { +const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { done() }, @@ -47,8 +47,8 @@ module.exports = { .windowHandles(function (result) { console.log(result.value) browser.switchWindow(result.value[1]) - .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') - }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { @@ -58,7 +58,7 @@ module.exports = { .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') - + }, // GROUP 2 @@ -162,3 +162,6 @@ module.exports = { } } +module.exports = { + ...process.platform.startsWith('linux') ? tests : {} +} \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index e65b9ef3cf..69478a795a 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -11,7 +11,7 @@ let gitserver: ChildProcess / GROUP 3: file operations rename delete */ -module.exports = { +const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { done() }, @@ -47,8 +47,8 @@ module.exports = { .windowHandles(function (result) { console.log(result.value) browser.switchWindow(result.value[1]) - .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') - }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { @@ -58,7 +58,7 @@ module.exports = { .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') - + }, 'check file added #group1 #group3': function (browser: NightwatchBrowser) { @@ -67,12 +67,7 @@ module.exports = { .clickLaunchIcon('dgit') .pause(1000) .waitForElementVisible({ - selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", - locateStrategy: 'xpath' - }) - .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') - .pause(1000) - .click('*[data-id="addToGitChangestest.txt"]') + selector:module.exportsa-id="addToGitChangestest.txt"]') .waitForElementVisible({ selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", locateStrategy: 'xpath' @@ -80,7 +75,7 @@ module.exports = { .setValue('*[data-id="commitMessage"]', 'testcommit') .click('*[data-id="commitButton"]') }, - + // group 3 'rename a file #group3': function (browser: NightwatchBrowser) { browser @@ -128,5 +123,8 @@ module.exports = { }, - } +} +module.exports = { + ...process.platform.startsWith('linux') ? tests : {} +} From 772544ced688c4ecb197aac5f14b47abf0553105 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 12:53:35 +0200 Subject: [PATCH 018/312] test3 --- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 69478a795a..b6fa4fa969 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -67,7 +67,12 @@ const tests = { .clickLaunchIcon('dgit') .pause(1000) .waitForElementVisible({ - selector:module.exportsa-id="addToGitChangestest.txt"]') + selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .pause(1000) + .click('*[data-id="addToGitChangestest.txt"]') .waitForElementVisible({ selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", locateStrategy: 'xpath' From aa0d1740ccfcfe109399dabf8d4641cc56703f8d Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 14:26:02 +0200 Subject: [PATCH 019/312] run builtin --- apps/remix-ide/src/app/files/dgitProvider.ts | 20 +- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/run_ci_test.sh | 2 +- apps/remixdesktop/run_git_ui_isogit_tests.sh | 6 + apps/remixdesktop/src/plugins/isoGitPlugin.ts | 15 +- .../test/tests/app/git-ui.test.ts | 2 + .../test/tests/app/git-ui_2.test.ts | 2 + .../test/tests/app/git-ui_3.test.ts | 2 + apps/remixdesktop/test/tests/app/git.test.ts | 1 + libs/remix-git/src/isogit.ts | 18 +- libs/remix-ui/git/src/components/gitui.tsx | 3 + .../git/src/components/panels/version.tsx | 10 + libs/remix-ui/git/src/lib/listeners.ts | 8 +- libs/remix-ui/git/src/state/actions.ts | 1 + libs/remix-ui/git/src/state/gitpayload.ts | 7 + libs/remix-ui/git/src/state/gitreducer.tsx | 412 +++++++++--------- libs/remix-ui/git/src/types/index.ts | 4 +- 17 files changed, 282 insertions(+), 233 deletions(-) create mode 100755 apps/remixdesktop/run_git_ui_isogit_tests.sh create mode 100644 libs/remix-ui/git/src/components/panels/version.tsx diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 5f00c676ec..1ab897f11d 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -339,21 +339,13 @@ class DGitProvider extends Plugin { async clone(input: cloneInputType) { if ((Registry.getInstance().get('platform').api.isDesktop())) { - const folder = await this.call('fs', 'selectFolder', null, 'Select or create a folder to clone the repository in', 'Select as Repository Destination') - if (!folder) return false - const cmd = { - url: input.url, - singleBranch: input.singleBranch, - ref: input.branch, - depth: input.depth || 10, - dir: folder, - input - } - this.call('terminal', 'logHtml', `Cloning ${input.url}... please wait...`) try { - const result = await this.call('isogit', 'clone', cmd) - this.call('fs', 'openWindow', folder) - return result + const folder = await this.call('fs', 'selectFolder', null, 'Select or create a folder to clone the repository in', 'Select as Repository Destination') + if (!folder) return false + input.dir = folder + input.depth = input.depth || 10 + const result = await this.call('isogit', 'clone', input) + this.call('fs' as any, 'openWindow', folder) } catch (e) { this.call('notification', 'alert', { id: 'dgitAlert', diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index c5a6a1df8a..ce5f6aa51c 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -29,7 +29,7 @@ "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "postinstall": "electron-builder install-app-deps", "test": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js", - "test:isogit": "yarn run test --useIsoGit --test build-e2e/remixdesktop/test/tests/app/git.test.js", + "test:isogit": "yarn run test --useIsoGit", "test:offline": "yarn run test --useOffline --test build-e2e/remixdesktop/test/tests/app/offline.test.js", "build:e2e": "tsc -p tsconfig.e2e.json" }, diff --git a/apps/remixdesktop/run_ci_test.sh b/apps/remixdesktop/run_ci_test.sh index 3020b0daf1..d169985146 100755 --- a/apps/remixdesktop/run_ci_test.sh +++ b/apps/remixdesktop/run_ci_test.sh @@ -8,7 +8,7 @@ for TESTFILE in $TESTFILES; do done if [ "$CIRCLE_NODE_INDEX" -eq 0 ]; then - yarn test:isogit + sh ./run_git_ui_isogit_tests.sh elif [ "$CIRCLE_NODE_INDEX" -eq 1 ]; then yarn test:offline fi diff --git a/apps/remixdesktop/run_git_ui_isogit_tests.sh b/apps/remixdesktop/run_git_ui_isogit_tests.sh new file mode 100755 index 0000000000..9333aa2498 --- /dev/null +++ b/apps/remixdesktop/run_git_ui_isogit_tests.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for testfile in build-e2e/remixdesktop/test/tests/app/git*.js +do + yarn test:isogit --test $testfile +done \ No newline at end of file diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index afe26685ce..a3e638a116 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -44,7 +44,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { this.onload(async () => { this.on('fs' as any, 'workingDirChanged', async (path: string) => { this.workingDir = path - this.gitIsInstalled = await gitProxy.version() ? true : false + this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false }) this.workingDir = await this.call('fs' as any, 'getWorkingDir') this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false @@ -52,7 +52,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async version() { - return gitProxy.version() + return this.gitIsInstalled? gitProxy.version(): 'built-in' } async getGitConfig() { @@ -266,23 +266,16 @@ class IsoGitPluginClient extends ElectronBasePluginClient { if (this.gitIsInstalled) { try { + this.call('terminal' as any, 'log', 'Cloning using git... please wait.') await gitProxy.clone(cmd) } catch (e) { throw e } } else { try { - /* this.call('terminal' as any, 'log', 'Cloning using builtin git... please wait.') - const clone = await git.clone({ - ...await this.getGitConfig(), - ...cmd, - ...parseInput(cmd.input), - dir: cmd.dir || this.workingDir - }) - + const clone = await isoGit.clone(cmd, await this.getGitConfig(), this) return clone - */ } catch (e) { console.log('CLONE ERROR', e) throw e diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 85cdbf8693..092f6cad57 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -13,6 +13,7 @@ let gitserver: ChildProcess const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() done() }, after: function (browser: NightwatchBrowser) { @@ -48,6 +49,7 @@ const tests = { console.log(result.value) browser.switchWindow(result.value[1]) .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + .hideToolTips() }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 7a176fee3e..34e2fcc694 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -13,6 +13,7 @@ let gitserver: ChildProcess const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() done() }, after: function (browser: NightwatchBrowser) { @@ -48,6 +49,7 @@ const tests = { console.log(result.value) browser.switchWindow(result.value[1]) .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + .hideToolTips() }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index b6fa4fa969..42a401012a 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -13,6 +13,7 @@ let gitserver: ChildProcess const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() done() }, after: function (browser: NightwatchBrowser) { @@ -48,6 +49,7 @@ const tests = { console.log(result.value) browser.switchWindow(result.value[1]) .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + .hideToolTips() }) .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, diff --git a/apps/remixdesktop/test/tests/app/git.test.ts b/apps/remixdesktop/test/tests/app/git.test.ts index 9cc26be3d0..d52e3464e1 100644 --- a/apps/remixdesktop/test/tests/app/git.test.ts +++ b/apps/remixdesktop/test/tests/app/git.test.ts @@ -23,6 +23,7 @@ module.exports = { browser.switchWindow(result.value[1]) .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') }) + .pause() .end() } } \ No newline at end of file diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index 6e6b11bf83..c53073c4db 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -1,4 +1,4 @@ -import { GitHubUser, author, branch, commitChange, compareBranchesInput, currentBranchInput, fetchInputType, isoGitFSConfig, isoGitProxyConfig, pullInputType, pushInputType, remote, userEmails } from "@remix-api" +import { GitHubUser, author, branch, cloneInputType, commitChange, compareBranchesInput, currentBranchInput, fetchInputType, isoGitFSConfig, isoGitProxyConfig, pullInputType, pushInputType, remote, userEmails } from "@remix-api" import git from 'isomorphic-git' import { Plugin @@ -120,6 +120,19 @@ const fetch = async (input: fetchInputType, fsConfig: isoGitFSConfig, plugin: Pl return await git.fetch({ ...fsConfig, ...cmd, ...proxy }) } +const clone = async (input: cloneInputType, fsConfig: isoGitFSConfig, plugin: Plugin | ElectronBasePluginClient) => { + const proxy = await isoGit.addIsomorphicGitProxyConfig(input, plugin) + const cmd = { + url: input.url, + singleBranch: input.singleBranch, + ref: input.branch, + depth: input.depth || 10, + dir: input.dir, + input + } + await git.clone({ ...fsConfig, ...cmd, ...proxy }) +} + const getAuthor = async (input, plugin: any) => { const author: author = { name: '', @@ -325,5 +338,6 @@ export const isoGit = { push, pull, fetch, - getGitHubUser + getGitHubUser, + clone } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index d3b3f5dd5c..dd26b41e8e 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -35,6 +35,7 @@ import { CustomRemixApi } from "@remix-api"; import { Plugin } from "@remixproject/engine"; import { Disabled } from './disabled' import { platformContext } from '@remix-ui/app' +import { Version } from './panels/version' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) @@ -179,6 +180,7 @@ export const GitUI = (props: IGitUi) => { {setup && !needsInit ? : null} {needsInit ? : null} {!setup && !needsInit ? + <> @@ -239,6 +241,7 @@ export const GitUI = (props: IGitUi) => { + : null} diff --git a/libs/remix-ui/git/src/components/panels/version.tsx b/libs/remix-ui/git/src/components/panels/version.tsx new file mode 100644 index 0000000000..be8d1168d3 --- /dev/null +++ b/libs/remix-ui/git/src/components/panels/version.tsx @@ -0,0 +1,10 @@ +import React, { useEffect, useState } from 'react' +import { gitPluginContext } from '../gitui' +export const Version = () => { + const context = React.useContext(gitPluginContext) + return ( +
+

{context.version.includes('version') ? context.version : `Git version: ${context.version}` }

+
+ ) +} \ No newline at end of file diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index 392e5b211b..f6384873d7 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -1,6 +1,6 @@ import React from "react"; -import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir } from "../state/gitpayload"; +import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir, setVersion } from "../state/gitpayload"; import { gitActionDispatch } from "../types"; import { Plugin } from "@remixproject/engine"; import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, gitlog, setPlugin } from "./gitactions"; @@ -71,6 +71,9 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFiles() }) @@ -91,6 +94,9 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index 9e8a51dc5a..da6aef53b8 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -225,3 +225,10 @@ export const setDesktopWorkingDir = (dir: string) => { payload: dir } } + +export const setVersion = (version: string) => { + return { + type: 'SET_VERSION', + payload: version + } +} diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 3a488d3a12..2821f564c2 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -6,208 +6,216 @@ import { Actions } from "./actions" export const gitReducer = (state: gitState = defaultGitState, action: Actions): gitState => { switch (action.type) { - case 'FILE_STATUS': - return { - ...state, - fileStatusResult: action.payload, - staged: getFilesByStatus("staged", action.payload), - modified: getFilesByStatus("modified", action.payload), - untracked: getFilesByStatus("untracked", action.payload), - deleted: getFilesByStatus("deleted", action.payload), - allchangesnotstaged: allChangedButNotStagedFiles(action.payload) - } - - case 'FILE_STATUS_MERGE': - action.payload.map((fileStatusResult: fileStatusResult) => { - const file = state.fileStatusResult.find(stateFile => { - return stateFile.filename === fileStatusResult.filename + case 'FILE_STATUS': + return { + ...state, + fileStatusResult: action.payload, + staged: getFilesByStatus("staged", action.payload), + modified: getFilesByStatus("modified", action.payload), + untracked: getFilesByStatus("untracked", action.payload), + deleted: getFilesByStatus("deleted", action.payload), + allchangesnotstaged: allChangedButNotStagedFiles(action.payload) + } + + case 'FILE_STATUS_MERGE': + action.payload.map((fileStatusResult: fileStatusResult) => { + const file = state.fileStatusResult.find(stateFile => { + return stateFile.filename === fileStatusResult.filename + }) + if (file) { + file.status = fileStatusResult.status + file.statusNames = fileStatusResult.statusNames + } }) - if (file) { - file.status = fileStatusResult.status - file.statusNames = fileStatusResult.statusNames - } - }) - - return { - ...state, - staged: getFilesByStatus("staged", state.fileStatusResult), - modified: getFilesByStatus("modified", state.fileStatusResult), - untracked: getFilesByStatus("untracked", state.fileStatusResult), - deleted: getFilesByStatus("deleted", state.fileStatusResult), - allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) - } - - case 'SET_COMMITS': - return { - ...state, - commits: action.payload, - localCommitCount: action.payload.length - } - - case 'SET_BRANCHES': - return { - ...state, - branches: action.payload - } - - case 'SET_CURRENT_BRANCH': - return { - ...state, - currentBranch: action.payload - } - - case 'SET_CURRENT_HEAD': - return { - ...state, - currentHead: action.payload - } - - case 'SET_CAN_USE_APP': - return { - ...state, - canUseApp: action.payload - } - case 'SET_REPO_NAME': - return { - ...state, - reponame: action.payload - } - case 'SET_LOADING': - return { - ...state, - loading: action.payload - } - - case 'SET_REPOS': - return { - ...state, - repositories: action.payload - } - - case 'SET_REMOTE_BRANCHES': - return { - ...state, - remoteBranches: action.payload - } - - case 'SET_CAN_COMMIT': - return { - ...state, - canCommit: action.payload - } - - case 'SET_REMOTES': - return { - ...state, - remotes: action.payload - } - - case 'SET_UPSTREAM': - return { - ...state, - upstream: action.payload - } - - case 'SET_COMMIT_CHANGES': - - action.payload.forEach((change: commitChange) => { - state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) - }) - - return { - ...state, - commitChanges: [...state.commitChanges] - } - - case 'RESET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - delete state.remoteBranchCommits[action.payload.branch.name] - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) - } else { - state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_LOCAL_BRANCH_COMMITS': - - state.localBranchCommits[action.payload.branch.name] = action.payload.commits - return { - ...state, - localBranchCommits: { ...state.localBranchCommits } - } - - case 'SET_BRANCH_DIFFERENCES': - - state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference - - return { - ...state, - branchDifferences: { ...state.branchDifferences } - } - - case 'SET_GITHUB_USER': - return { - ...state, - gitHubUser: action.payload - } - - case 'SET_GITHUB_ACCESS_TOKEN': - return { - ...state, - gitHubAccessToken: action.payload - } - - case 'SET_SCOPES': - return { - ...state, - gitHubScopes: action.payload - } - - case 'SET_USER_EMAILS': - return { - ...state, - userEmails: action.payload - } - - case 'SET_DEFAULT_REMOTE': - return { - ...state, - defaultRemote: action.payload - } - - case 'SET_LOG': - if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { - return { - ...state, - log: [...state.log] - } - } - return { - ...state, - log: [...state.log, action.payload] - } - - case 'CLEAR_LOG': - return { - ...state, - log: [] - } - - case 'DESKTOP_SET_WORKING_DIR': - return { - ...state, - desktopWorkingDir: action.payload - } + + return { + ...state, + staged: getFilesByStatus("staged", state.fileStatusResult), + modified: getFilesByStatus("modified", state.fileStatusResult), + untracked: getFilesByStatus("untracked", state.fileStatusResult), + deleted: getFilesByStatus("deleted", state.fileStatusResult), + allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) + } + + case 'SET_COMMITS': + return { + ...state, + commits: action.payload, + localCommitCount: action.payload.length + } + + case 'SET_BRANCHES': + return { + ...state, + branches: action.payload + } + + case 'SET_CURRENT_BRANCH': + return { + ...state, + currentBranch: action.payload + } + + case 'SET_CURRENT_HEAD': + return { + ...state, + currentHead: action.payload + } + + case 'SET_CAN_USE_APP': + return { + ...state, + canUseApp: action.payload + } + case 'SET_REPO_NAME': + return { + ...state, + reponame: action.payload + } + case 'SET_LOADING': + return { + ...state, + loading: action.payload + } + + case 'SET_REPOS': + return { + ...state, + repositories: action.payload + } + + case 'SET_REMOTE_BRANCHES': + return { + ...state, + remoteBranches: action.payload + } + + case 'SET_CAN_COMMIT': + return { + ...state, + canCommit: action.payload + } + + case 'SET_REMOTES': + return { + ...state, + remotes: action.payload + } + + case 'SET_UPSTREAM': + return { + ...state, + upstream: action.payload + } + + case 'SET_COMMIT_CHANGES': + + action.payload.forEach((change: commitChange) => { + state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) + }) + + return { + ...state, + commitChanges: [...state.commitChanges] + } + + case 'RESET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + delete state.remoteBranchCommits[action.payload.branch.name] + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) + } else { + state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_LOCAL_BRANCH_COMMITS': + + state.localBranchCommits[action.payload.branch.name] = action.payload.commits + return { + ...state, + localBranchCommits: { ...state.localBranchCommits } + } + + case 'SET_BRANCH_DIFFERENCES': + + state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference + + return { + ...state, + branchDifferences: { ...state.branchDifferences } + } + + case 'SET_GITHUB_USER': + return { + ...state, + gitHubUser: action.payload + } + + case 'SET_GITHUB_ACCESS_TOKEN': + return { + ...state, + gitHubAccessToken: action.payload + } + + case 'SET_SCOPES': + return { + ...state, + gitHubScopes: action.payload + } + + case 'SET_USER_EMAILS': + return { + ...state, + userEmails: action.payload + } + + case 'SET_DEFAULT_REMOTE': + return { + ...state, + defaultRemote: action.payload + } + + case 'SET_LOG': + if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { + return { + ...state, + log: [...state.log] + } + } + return { + ...state, + log: [...state.log, action.payload] + } + + case 'CLEAR_LOG': + return { + ...state, + log: [] + } + + case 'DESKTOP_SET_WORKING_DIR': + return { + ...state, + desktopWorkingDir: action.payload + } + + + case 'SET_VERSION': + return { + ...state, + version: action.payload + } + } } \ No newline at end of file diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 6b3119a2d2..2f407ef77a 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -37,6 +37,7 @@ export type gitState = { gitHubAccessToken: string log: gitLog[] desktopWorkingDir?: string + version: string } export type gitLog = { type: 'error' | 'warning' | 'info' | 'success', @@ -87,7 +88,8 @@ export const defaultGitState: gitState = { gitHubScopes: [], gitHubAccessToken: "", log: [], - desktopWorkingDir: null + desktopWorkingDir: null, + version: "" } export const defaultLoaderState: loaderState = { From 7f35297e7279ad391659de10158aac108f7d22d4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 14:26:57 +0200 Subject: [PATCH 020/312] add dep --- apps/remixdesktop/package.json | 1 + apps/remixdesktop/yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index ce5f6aa51c..c4392cbb16 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -46,6 +46,7 @@ "electron-devtools-installer": "^3.2.0", "nightwatch": "2.3", "selenium-standalone": "^9.3.1", + "tree-kill": "^1.2.2", "ts-loader": "^9.5.1", "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "^5.1.3", diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index b96b5cae81..fb390241f1 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -6506,6 +6506,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" From 9cf071a1fe33e579559bf91bb82e29f6f5f04810 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 14:41:25 +0200 Subject: [PATCH 021/312] rename button --- libs/remix-ui/git/src/components/disabled.tsx | 2 +- libs/remix-ui/git/src/components/gitui.tsx | 122 ++--- .../git/src/components/panels/version.tsx | 12 +- libs/remix-ui/git/src/state/gitreducer.tsx | 417 +++++++++--------- 4 files changed, 276 insertions(+), 277 deletions(-) diff --git a/libs/remix-ui/git/src/components/disabled.tsx b/libs/remix-ui/git/src/components/disabled.tsx index fc22116a36..1f03413be9 100644 --- a/libs/remix-ui/git/src/components/disabled.tsx +++ b/libs/remix-ui/git/src/components/disabled.tsx @@ -19,7 +19,7 @@ export const Disabled = () => { (platform === appPlatformTypes.desktop) ?
-
{ await openFolderElectron(null) }} className='btn btn-primary w-100 my-1'>
+
{ await openFolderElectron(null) }} className='btn btn-primary w-100 my-1'>
{ await clone() }} className='btn btn-primary w-100'>
: diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index dd26b41e8e..9a4289b1d5 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -181,67 +181,67 @@ export const GitUI = (props: IGitUi) => { {needsInit ? : null} {!setup && !needsInit ? <> - - - - - <> - - - - -
- - - <> - - - -
- - - <> - - - -
- - - <> - - -
- - - <> - - - -
- - - <> - - -
- - - <> - -
- - -
-
- - - <> - - - - -
- + + + + + <> + + + + +
+ + + <> + + + +
+ + + <> + + + +
+ + + <> + + +
+ + + <> + + + +
+ + + <> + + +
+ + + <> + +
+ + +
+
+ + + <> + + + + +
+ : null} diff --git a/libs/remix-ui/git/src/components/panels/version.tsx b/libs/remix-ui/git/src/components/panels/version.tsx index be8d1168d3..ccfef84ac9 100644 --- a/libs/remix-ui/git/src/components/panels/version.tsx +++ b/libs/remix-ui/git/src/components/panels/version.tsx @@ -1,10 +1,10 @@ import React, { useEffect, useState } from 'react' import { gitPluginContext } from '../gitui' export const Version = () => { - const context = React.useContext(gitPluginContext) - return ( -
-

{context.version.includes('version') ? context.version : `Git version: ${context.version}` }

-
- ) + const context = React.useContext(gitPluginContext) + return ( +
+

{context.version.includes('version') ? context.version : `Git version: ${context.version}` }

+
+ ) } \ No newline at end of file diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 2821f564c2..21c3e5f9b4 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -6,216 +6,215 @@ import { Actions } from "./actions" export const gitReducer = (state: gitState = defaultGitState, action: Actions): gitState => { switch (action.type) { - case 'FILE_STATUS': - return { - ...state, - fileStatusResult: action.payload, - staged: getFilesByStatus("staged", action.payload), - modified: getFilesByStatus("modified", action.payload), - untracked: getFilesByStatus("untracked", action.payload), - deleted: getFilesByStatus("deleted", action.payload), - allchangesnotstaged: allChangedButNotStagedFiles(action.payload) - } - - case 'FILE_STATUS_MERGE': - action.payload.map((fileStatusResult: fileStatusResult) => { - const file = state.fileStatusResult.find(stateFile => { - return stateFile.filename === fileStatusResult.filename - }) - if (file) { - file.status = fileStatusResult.status - file.statusNames = fileStatusResult.statusNames - } - }) - - return { - ...state, - staged: getFilesByStatus("staged", state.fileStatusResult), - modified: getFilesByStatus("modified", state.fileStatusResult), - untracked: getFilesByStatus("untracked", state.fileStatusResult), - deleted: getFilesByStatus("deleted", state.fileStatusResult), - allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) - } - - case 'SET_COMMITS': - return { - ...state, - commits: action.payload, - localCommitCount: action.payload.length - } - - case 'SET_BRANCHES': - return { - ...state, - branches: action.payload - } - - case 'SET_CURRENT_BRANCH': - return { - ...state, - currentBranch: action.payload - } - - case 'SET_CURRENT_HEAD': - return { - ...state, - currentHead: action.payload - } - - case 'SET_CAN_USE_APP': - return { - ...state, - canUseApp: action.payload - } - case 'SET_REPO_NAME': - return { - ...state, - reponame: action.payload - } - case 'SET_LOADING': - return { - ...state, - loading: action.payload - } - - case 'SET_REPOS': - return { - ...state, - repositories: action.payload - } - - case 'SET_REMOTE_BRANCHES': - return { - ...state, - remoteBranches: action.payload - } - - case 'SET_CAN_COMMIT': - return { - ...state, - canCommit: action.payload - } - - case 'SET_REMOTES': - return { - ...state, - remotes: action.payload - } - - case 'SET_UPSTREAM': - return { - ...state, - upstream: action.payload - } - - case 'SET_COMMIT_CHANGES': - - action.payload.forEach((change: commitChange) => { - state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) + case 'FILE_STATUS': + return { + ...state, + fileStatusResult: action.payload, + staged: getFilesByStatus("staged", action.payload), + modified: getFilesByStatus("modified", action.payload), + untracked: getFilesByStatus("untracked", action.payload), + deleted: getFilesByStatus("deleted", action.payload), + allchangesnotstaged: allChangedButNotStagedFiles(action.payload) + } + + case 'FILE_STATUS_MERGE': + action.payload.map((fileStatusResult: fileStatusResult) => { + const file = state.fileStatusResult.find(stateFile => { + return stateFile.filename === fileStatusResult.filename }) - - return { - ...state, - commitChanges: [...state.commitChanges] - } - - case 'RESET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - delete state.remoteBranchCommits[action.payload.branch.name] - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_REMOTE_BRANCH_COMMITS': - if (state.remoteBranchCommits[action.payload.branch.name]) { - state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) - } else { - state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits - } - return { - ...state, - remoteBranchCommits: { ...state.remoteBranchCommits } - } - - case 'SET_LOCAL_BRANCH_COMMITS': - - state.localBranchCommits[action.payload.branch.name] = action.payload.commits - return { - ...state, - localBranchCommits: { ...state.localBranchCommits } - } - - case 'SET_BRANCH_DIFFERENCES': - - state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference - - return { - ...state, - branchDifferences: { ...state.branchDifferences } - } - - case 'SET_GITHUB_USER': - return { - ...state, - gitHubUser: action.payload - } - - case 'SET_GITHUB_ACCESS_TOKEN': - return { - ...state, - gitHubAccessToken: action.payload - } - - case 'SET_SCOPES': - return { - ...state, - gitHubScopes: action.payload - } - - case 'SET_USER_EMAILS': - return { - ...state, - userEmails: action.payload - } - - case 'SET_DEFAULT_REMOTE': - return { - ...state, - defaultRemote: action.payload - } - - case 'SET_LOG': - if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { - return { - ...state, - log: [...state.log] - } - } - return { - ...state, - log: [...state.log, action.payload] - } - - case 'CLEAR_LOG': - return { - ...state, - log: [] - } - - case 'DESKTOP_SET_WORKING_DIR': - return { - ...state, - desktopWorkingDir: action.payload - } - - - case 'SET_VERSION': - return { - ...state, - version: action.payload - } + if (file) { + file.status = fileStatusResult.status + file.statusNames = fileStatusResult.statusNames + } + }) + + return { + ...state, + staged: getFilesByStatus("staged", state.fileStatusResult), + modified: getFilesByStatus("modified", state.fileStatusResult), + untracked: getFilesByStatus("untracked", state.fileStatusResult), + deleted: getFilesByStatus("deleted", state.fileStatusResult), + allchangesnotstaged: allChangedButNotStagedFiles(state.fileStatusResult) + } + + case 'SET_COMMITS': + return { + ...state, + commits: action.payload, + localCommitCount: action.payload.length + } + + case 'SET_BRANCHES': + return { + ...state, + branches: action.payload + } + + case 'SET_CURRENT_BRANCH': + return { + ...state, + currentBranch: action.payload + } + + case 'SET_CURRENT_HEAD': + return { + ...state, + currentHead: action.payload + } + + case 'SET_CAN_USE_APP': + return { + ...state, + canUseApp: action.payload + } + case 'SET_REPO_NAME': + return { + ...state, + reponame: action.payload + } + case 'SET_LOADING': + return { + ...state, + loading: action.payload + } + + case 'SET_REPOS': + return { + ...state, + repositories: action.payload + } + + case 'SET_REMOTE_BRANCHES': + return { + ...state, + remoteBranches: action.payload + } + + case 'SET_CAN_COMMIT': + return { + ...state, + canCommit: action.payload + } + + case 'SET_REMOTES': + return { + ...state, + remotes: action.payload + } + + case 'SET_UPSTREAM': + return { + ...state, + upstream: action.payload + } + + case 'SET_COMMIT_CHANGES': + + action.payload.forEach((change: commitChange) => { + state.commitChanges.find((c) => c.hashModified === change.hashModified && c.hashOriginal === change.hashOriginal && c.path === change.path) ? null : state.commitChanges.push(change) + }) + + return { + ...state, + commitChanges: [...state.commitChanges] + } + + case 'RESET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + delete state.remoteBranchCommits[action.payload.branch.name] + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_REMOTE_BRANCH_COMMITS': + if (state.remoteBranchCommits[action.payload.branch.name]) { + state.remoteBranchCommits[action.payload.branch.name].push(...action.payload.commits) + } else { + state.remoteBranchCommits[action.payload.branch.name] = action.payload.commits + } + return { + ...state, + remoteBranchCommits: { ...state.remoteBranchCommits } + } + + case 'SET_LOCAL_BRANCH_COMMITS': + + state.localBranchCommits[action.payload.branch.name] = action.payload.commits + return { + ...state, + localBranchCommits: { ...state.localBranchCommits } + } + + case 'SET_BRANCH_DIFFERENCES': + + state.branchDifferences[`${action.payload.remote.name}/${action.payload.branch.name}`] = action.payload.branchDifference + + return { + ...state, + branchDifferences: { ...state.branchDifferences } + } + + case 'SET_GITHUB_USER': + return { + ...state, + gitHubUser: action.payload + } + + case 'SET_GITHUB_ACCESS_TOKEN': + return { + ...state, + gitHubAccessToken: action.payload + } + + case 'SET_SCOPES': + return { + ...state, + gitHubScopes: action.payload + } + + case 'SET_USER_EMAILS': + return { + ...state, + userEmails: action.payload + } + + case 'SET_DEFAULT_REMOTE': + return { + ...state, + defaultRemote: action.payload + } + + case 'SET_LOG': + if (state.log.length > 0 && state.log[[...state.log].length - 1].message === action.payload.message) { + return { + ...state, + log: [...state.log] + } + } + return { + ...state, + log: [...state.log, action.payload] + } + + case 'CLEAR_LOG': + return { + ...state, + log: [] + } + + case 'DESKTOP_SET_WORKING_DIR': + return { + ...state, + desktopWorkingDir: action.payload + } + + case 'SET_VERSION': + return { + ...state, + version: action.payload + } } } \ No newline at end of file From 011f032c692c627950b32ca78e44820e9fbdba28 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jul 2024 14:53:42 +0200 Subject: [PATCH 022/312] rm pause --- apps/remixdesktop/test/tests/app/git.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/remixdesktop/test/tests/app/git.test.ts b/apps/remixdesktop/test/tests/app/git.test.ts index d52e3464e1..9cc26be3d0 100644 --- a/apps/remixdesktop/test/tests/app/git.test.ts +++ b/apps/remixdesktop/test/tests/app/git.test.ts @@ -23,7 +23,6 @@ module.exports = { browser.switchWindow(result.value[1]) .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') }) - .pause() .end() } } \ No newline at end of file From 022b486b79dc5675c020968d4940a89c5a172f3b Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 14 Jul 2024 09:49:28 +0200 Subject: [PATCH 023/312] run isogot tests on other OS --- apps/remixdesktop/test/tests/app/git-ui.test.ts | 4 ++-- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 3 ++- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 092f6cad57..9977a7a656 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -186,8 +186,8 @@ const tests = { .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest2.txt"]') }, } - +const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') ? tests : {} + ...process.platform.startsWith('linux') || useIsoGit ? tests : {} } diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 34e2fcc694..690d408cb2 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -164,6 +164,7 @@ const tests = { } } +const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') ? tests : {} + ...process.platform.startsWith('linux') || useIsoGit ? tests : {} } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 42a401012a..6032bb3660 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -132,6 +132,7 @@ const tests = { } +const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') ? tests : {} + ...process.platform.startsWith('linux') || useIsoGit ? tests : {} } From dc436b0dbea1edd1e484c49de63629cd09038424 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 15 Jul 2024 09:53:59 +0200 Subject: [PATCH 024/312] debugging --- apps/remix-ide/src/app/files/dgitProvider.ts | 7 ++++--- apps/remix-ide/src/remixEngine.js | 2 +- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 11 ++++++++++- libs/remix-git/src/isogit.ts | 3 ++- libs/remix-ui/git/src/lib/gitactions.ts | 9 +++++++++ 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 1ab897f11d..b80c6c4a20 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -101,7 +101,7 @@ class DGitProvider extends Plugin { } async status(cmd: statusInput): Promise> { - + console.log('status', cmd) if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'status', cmd) console.log('STATUS', { ...status }) @@ -185,12 +185,12 @@ class DGitProvider extends Plugin { } async log(cmd: logInputType): Promise { - + console.log('LOG', cmd) if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'log', { ...cmd, }) - + console.log('LOG END', status) return status } @@ -198,6 +198,7 @@ class DGitProvider extends Plugin { ...await this.addIsomorphicGitConfigFS(), ...cmd, }) + console.log('LOG END', status) return status } diff --git a/apps/remix-ide/src/remixEngine.js b/apps/remix-ide/src/remixEngine.js index 4806f3719a..ba321480ed 100644 --- a/apps/remix-ide/src/remixEngine.js +++ b/apps/remix-ide/src/remixEngine.js @@ -10,7 +10,7 @@ export class RemixEngine extends Engine { setPluginOption ({ name, kind }) { if (kind === 'provider') return { queueTimeout: 60000 * 2 } if (name === 'LearnEth') return { queueTimeout: 60000 } - if (name === 'dgitApi') return { queueTimeout: 60000 * 4 } + if (name === 'dgitApi') return { queueTimeout: 2000 } if (name === 'slither') return { queueTimeout: 60000 * 4 } // Requires when a solc version is installed if (name === 'hardhat') return { queueTimeout: 60000 * 4 } if (name === 'truffle') return { queueTimeout: 60000 * 4 } diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index a3e638a116..05e9f0efdd 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -95,11 +95,20 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return [] } + const logCount = await git.log({ + ...await this.getGitConfig(), + ...cmd, + depth: 100 + }) + + console.log('LOG-COUNT', logCount.length) + const log = await git.log({ ...await this.getGitConfig(), ...cmd, + depth: 10 }) - console.log('LOG', log) + console.log('LOG') return log } diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index c53073c4db..d7b0e0eb60 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -299,17 +299,18 @@ const getCommitChanges = async (commitHash1: string, commitHash2: string, fsConf } const compareBranches = async ({ branch, remote }: compareBranchesInput, fsConfig: isoGitFSConfig) => { - // Get current branch commits const headCommits = await git.log({ ...fsConfig, ref: branch.name, + depth: 10, }); // Get remote branch commits const remoteCommits = await git.log({ ...fsConfig, ref: `${remote.name}/${branch.name}`, + depth: 10, }); // Convert arrays of commit objects to sets of commit SHAs diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 88c8cac595..d2c19af89b 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -64,6 +64,7 @@ export const setUpstreamRemote = async (remote: remote) => { } export const getFileStatusMatrix = async (filepaths: string[]) => { + console.log('getFileStatusMatrix', filepaths) dispatch(setLoading(true)) const fileStatusResult = await statusMatrix(filepaths); fileStatusResult.map((m) => { @@ -79,6 +80,7 @@ export const getFileStatusMatrix = async (filepaths: string[]) => { dispatch(fileStatusMerge(fileStatusResult)) setFileDecorators(fileStatusResult) } + console.log('getFileStatusMatrix end') dispatch(setLoading(false)) } @@ -98,6 +100,7 @@ export const getCommits = async () => { } export const gitlog = async () => { + console.log('gitlog start') dispatch(setLoading(true)) let commits = [] try { @@ -107,6 +110,7 @@ export const gitlog = async () => { dispatch(setCommits(commits)) await showCurrentBranch() dispatch(setLoading(false)) + console.log('gitlog end') } export const showCurrentBranch = async () => { @@ -503,6 +507,7 @@ export const remoteBranches = async (owner: string, repo: string) => { } export const remoteCommits = async (url: string, branch: string, length: number) => { + console.log('get remote commits') const urlParts = url.split("/"); // check if it's github @@ -642,7 +647,9 @@ export const loadGitHubUserFromToken = async () => { } export const statusMatrix = async (filepaths: string[]) => { + console.log('calling status') const matrix = await plugin.call('dgitApi', 'status', { ref: "HEAD", filepaths: filepaths || ['.']}); + console.log('calling status end') const result = (matrix || []).map((x) => { return { filename: `/${x.shift()}`, @@ -755,6 +762,7 @@ async function getRepoDetails(url: string) { } export const fetchBranch = async (branch: branch, page: number) => { + console.log('fetch branch') if (!branch.remote || !branch.remote.url) return const token = await tokenWarning(); if (page == 1) { @@ -774,6 +782,7 @@ export const fetchBranch = async (branch: branch, page: number) => { } export const getBranchDifferences = async (branch: branch, remote: remote, state: gitState) => { + console.log('get branch diff') if (!remote && state) { if (state.defaultRemote) { remote = state.defaultRemote From 311d9620db28a9ddf789e505c6b1e89adeda98df Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 08:53:52 +0200 Subject: [PATCH 025/312] branch fix --- libs/remix-ui/git/src/components/navigation/commitdetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/git/src/components/navigation/commitdetails.tsx b/libs/remix-ui/git/src/components/navigation/commitdetails.tsx index 2e49875f52..8848aae460 100644 --- a/libs/remix-ui/git/src/components/navigation/commitdetails.tsx +++ b/libs/remix-ui/git/src/components/navigation/commitdetails.tsx @@ -3,7 +3,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import React, { useContext, useEffect } from "react"; import { CommitSummary } from "../panels/commits/commitsummary"; import { ReadCommitResult } from "isomorphic-git" -import { branch } from "../../types"; +import { branch } from "@remix-api"; interface CommitDetailsNavigationProps { commit: ReadCommitResult, From 9e51bc40ba0bf02a05098e93e043308a903c9358 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 09:04:36 +0200 Subject: [PATCH 026/312] lint --- libs/remix-ui/git/src/components/gitui.tsx | 114 ++++++++++----------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 814ad4cdd8..dafe1c4c3f 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -187,66 +187,66 @@ export const GitUI = (props: IGitUi) => { {needsInit ? : null} {!setup && !needsInit ? <> - + - -
- - -
-
+ +
+ + +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+
+
+
+ + +
+
- - -
- -
-
-
- - -
- -
-
-
- - -
- -
-
-
- - -
- -
-
-
- - -
-
-
-
- - -
- -
- -
-
-
- - -
- -
-
+ +
+
+
+ + +
+ +
+
-
+ : null} From 1e808ffa7026f864be2e4617bc2d32b313ce9be1 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 09:19:09 +0200 Subject: [PATCH 027/312] fix test --- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 690d408cb2..a13e700469 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -76,7 +76,9 @@ const tests = { 'check if the branch is in the filePanel #group2': function (browser: NightwatchBrowser) { browser .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="workspaceGitBranchesDropdown"]') .click('[data-id="workspaceGitBranchesDropdown"]') + .waitForElementVisible('*[data-id="workspaceGit-testbranch"]') .expect.element('[data-id="workspaceGit-testbranch"]').text.to.contain('✓ ') }, 'publish the branch #group2': function (browser: NightwatchBrowser) { From 3c2886f4a416c8b14c54c463165ca37e97a7fe76 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 09:20:59 +0200 Subject: [PATCH 028/312] fix test --- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index a13e700469..69d47f64b0 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -76,6 +76,7 @@ const tests = { 'check if the branch is in the filePanel #group2': function (browser: NightwatchBrowser) { browser .clickLaunchIcon('filePanel') + .pause(1000) .waitForElementVisible('*[data-id="workspaceGitBranchesDropdown"]') .click('[data-id="workspaceGitBranchesDropdown"]') .waitForElementVisible('*[data-id="workspaceGit-testbranch"]') From 29504eeaa2fa4000de4f015acb448664ec0a84f3 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 11:00:40 +0200 Subject: [PATCH 029/312] add new test --- apps/remixdesktop/test/lib/git.ts | 4 +- .../test/tests/app/git-ui_4.test.ts | 189 ++++++++++++++++++ 2 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 apps/remixdesktop/test/tests/app/git-ui_4.test.ts diff --git a/apps/remixdesktop/test/lib/git.ts b/apps/remixdesktop/test/lib/git.ts index dc99ef1aa9..2a04570819 100644 --- a/apps/remixdesktop/test/lib/git.ts +++ b/apps/remixdesktop/test/lib/git.ts @@ -34,10 +34,10 @@ export async function getGitLog(path: string): Promise { }) } -export async function cloneOnServer(repo: string, path: string) { +export async function cloneOnServer(repo: string, path: string, name: string = 'bare') { console.log('cloning', repo, path) return new Promise((resolve, reject) => { - const git = spawn('rm -rf bare && git', ['clone', repo], { cwd: path, shell: true, detached: true }); + const git = spawn(`rm -rf ${name} && git`, ['clone', repo], { cwd: path, shell: true, detached: true }); git.stdout.on('data', function (data) { console.log('stdout data cloning', data.toString()); diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts new file mode 100644 index 0000000000..00c2afa35e --- /dev/null +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -0,0 +1,189 @@ +import { ChildProcess, spawn } from "child_process" +import kill from 'tree-kill' +import { Nightwatch, NightwatchBrowser } from "nightwatch" +import { spawnGitServer, getGitLog, cloneOnServer, onLocalGitRepoAddFile, createCommitOnLocalServer, onLocalGitRepoPush, getBranches } from "../../lib/git" +let gitserver: ChildProcess + +/* +/ uses the git-http-backend package to create a git server ( if needed kill the server: kill -9 $(sudo lsof -t -i:6868) ) +/ GROUP 1: file operations PUSH PULL COMMIT SYNC FETCH CLONE ADD +/ GROUP 2: branch operations CREATE & PUBLISH +/ GROUP 3: file operations rename delete +*/ + +const tests = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() + done() + }, + after: function (browser: NightwatchBrowser) { + browser.perform((done) => { + console.log('kill server', gitserver.pid) + kill(gitserver.pid) + done() + }) + }, + + 'run server #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser.perform(async (done) => { + gitserver = await spawnGitServer('/tmp/') + console.log('working directory', process.cwd()) + done() + }) + }, + + 'clone a repo #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(5000) + .waitForElementVisible('*[data-id="cloneButton"]') + .click('*[data-id="cloneButton"]') + .pause(1000) + .waitForElementVisible('[data-id="fileSystemModalDialogModalBody-react"]') + .click('[data-id="fileSystemModalDialogModalBody-react"]') + .waitForElementVisible('[data-id="modalDialogCustomPromptTextClone"]') + .setValue('*[data-id="modalDialogCustomPromptTextClone"]', 'http://localhost:6868/bare.git') + .click('[data-id="fileSystem-modal-footer-ok-react"]') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + .hideToolTips() + }) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .setValue('*[data-id="gitubUsername"]', 'git') + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .click('*[data-id="saveGitHubCredentials"]') + .modalFooterOKClick('github-credentials-error') + + }, + + // GROUP 1 + + 'check file added #group1 #group3': function (browser: NightwatchBrowser) { + browser + .addFile('test.txt', { content: 'hello world' }, 'README.md') + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible({ + selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .waitForElementVisible('*[data-id="addToGitChangestest.txt"]') + .pause(1000) + .click('*[data-id="addToGitChangestest.txt"]') + .waitForElementVisible({ + selector: "//*[@data-status='added-staged' and @data-file='/test.txt']", + locateStrategy: 'xpath' + }) + .setValue('*[data-id="commitMessage"]', 'testcommit') + .click('*[data-id="commitButton"]') + }, + 'look at the commit #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit-ahead"]', + locateStrategy: 'xpath' + }) + }, + 'add second remote #group4': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .click('*[data-id="remotes-panel"]') + .waitForElementVisible('*[data-id="add-manual-remoteurl"]') + .setValue('*[data-id="add-manual-remoteurl"]', 'http://localhost:6868/bare2.git') + .waitForElementVisible('*[data-id="add-manual-remotename"]') + .setValue('*[data-id="add-manual-remotename"]', 'origin2') + .waitForElementVisible('*[data-id="add-manual-remotebtn"]') + .click('*[data-id="add-manual-remotebtn"]') + }, + 'check the buttons #group4': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="default-remote-check-origin"]') + .waitForElementVisible('*[data-id="set-as-default-origin2"]') + }, + 'check the commands #group4': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'origin')]", + locateStrategy: 'xpath' + }) + }, + 'switch to origin2 #group4': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="remotes-panel"]') + .waitForElementVisible('*[data-id="set-as-default-origin2"]') + .click('*[data-id="set-as-default-origin2"]') + }, + 'check the commands for origin2 #group4': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'origin2')]", + locateStrategy: 'xpath' + }) + }, + 'sync the commit #group4': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .waitForElementVisible('*[data-id="sourcecontrol-panel"]') + .click('*[data-id="sourcecontrol-panel"]') + .waitForElementVisible('*[data-id="syncButton"]') + .click('*[data-id="syncButton"]') + .waitForElementVisible('*[data-id="commitButton"]') + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit-"]', + locateStrategy: 'xpath' + }) + }, + 'check the log #group4': async function (browser: NightwatchBrowser) { + const logs = await getGitLog('/tmp/git/bare2.git') + console.log(logs) + browser.assert.ok(logs.includes('testcommit')) + const logs2 = await getGitLog('/tmp/git/bare.git') + console.log(logs2) + console.log(logs2.includes('testcommit3')) + browser.assert.ok(logs2.includes('testcommit3')) + }, + 'switch to origin #group4': function (browser: NightwatchBrowser) { + browser + .pause(5000) + .click('*[data-id="remotes-panel"]') + .waitForElementVisible('*[data-id="set-as-default-origin"]') + .click('*[data-id="set-as-default-origin"]') + }, + 'check the commands for origin #group4': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'origin')]", + locateStrategy: 'xpath' + }) + }, + 'check the commit ahead #group4': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .waitForElementVisible('*[data-id="sourcecontrol-panel"]') + .click('*[data-id="sourcecontrol-panel"]') + .waitForElementVisible('*[data-id="syncButton"]') + // do not sync + .click('*[data-id="commits-panel"]') + .waitForElementPresent({ + selector: '//*[@data-id="commit-summary-testcommit-ahead"]', + locateStrategy: 'xpath' + }) + }, +} + +const useIsoGit = process.argv.includes('--useIsoGit'); +module.exports = { + ...process.platform.startsWith('linux') || useIsoGit ? tests : {} +} \ No newline at end of file From e443a7bbb1db528384139e94bd89fb6c6ad1cf39 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 15:27:54 +0200 Subject: [PATCH 030/312] page branches --- .../git/src/components/panels/branches.tsx | 54 +++++++++++++++---- .../git/src/components/panels/commits.tsx | 2 +- .../src/components/panels/remoteselect.tsx | 33 +++++++++--- 3 files changed, 73 insertions(+), 16 deletions(-) diff --git a/libs/remix-ui/git/src/components/panels/branches.tsx b/libs/remix-ui/git/src/components/panels/branches.tsx index f42ad292a4..4e92dc1755 100644 --- a/libs/remix-ui/git/src/components/panels/branches.tsx +++ b/libs/remix-ui/git/src/components/panels/branches.tsx @@ -1,5 +1,4 @@ import React, { useEffect, useState } from "react"; -import { Alert } from "react-bootstrap"; import { gitActionsContext } from "../../state/context"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; @@ -7,39 +6,76 @@ import { LocalBranchDetails } from "./branches/localbranchdetails"; import { RemoteBranchDetails } from "./branches/remotebranchedetails"; import { faSync } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { branch } from "@remix-api"; + +const pageLength = 5; export const Branches = () => { const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) + const [localBranchPage, setLocalBranchPage] = useState(1); + const [remoteBranchPage, setRemoteBranchPage] = useState(1); const [newBranch, setNewBranch] = useState({ value: "" }); + const [localBranches, setLocalBranches] = useState([]); + const [remoteBranches, setRemoteBranches] = useState([]); + const [currentBranch, setCurrentBranch] = useState(null); const handleChange = (e: React.ChangeEvent) => { setNewBranch({ value: e.currentTarget.value }); }; + useEffect(() => { + if (context.branches) { + + if (context.currentBranch && context.currentBranch.name !== '') { + setCurrentBranch(context.branches.filter((branch, index) => !branch.remote && branch.name === context.currentBranch.name)[0]); + setLocalBranches(context.branches.filter((branch, index) => !branch.remote && branch.name !== context.currentBranch.name)); + } else { + setLocalBranches(context.branches.filter((branch, index) => !branch.remote)); + } + if (context.upstream) { + setRemoteBranches(context.branches.filter((branch, index) => branch.remote && branch.remote.name === context.upstream.name)); + } else { + setRemoteBranches([]); + } + } else { + setLocalBranches([]); + setRemoteBranches([]); + } + }, [context.branches, context.defaultRemote, context.upstream, context.currentBranch]); + return ( <>
{context.branches && context.branches.length ?
- - {context.branches && context.branches.filter((branch, index) => !branch.remote).map((branch, index) => { +
{localBranches.length}
+ {currentBranch && } + {context.branches && localBranches.slice(0, localBranchPage * pageLength).map((branch, index) => { return ( ); })} + {context.branches && localBranches.length > localBranchPage * pageLength && { + setLocalBranchPage(localBranchPage + 1) + }}>Show more}

{context.upstream ? <>
- - {context.branches && context.branches.filter((branch, index) => branch.remote && branch.remote.name === context.upstream.name).map((branch, index) => { - return ( - - ); - })} +
{remoteBranches.length}
+ {context.branches && remoteBranches + .slice(0, remoteBranchPage * pageLength) + .map((branch, index) => { + return ( + + ); + })} + {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { + setRemoteBranchPage(remoteBranchPage + 1); + }}>Show more

} { await actions.fetch({ remote: context.upstream diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index 8fa50a9d99..7df8b8a96b 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -49,7 +49,7 @@ export const Commits = () => { {context.commits && context.commits.length ? <>
- {context.commits && context.commits.map((commit, index) => { + {context.commits && context.commits.slice(0,5).map((commit, index) => { return ( ); diff --git a/libs/remix-ui/git/src/components/panels/remoteselect.tsx b/libs/remix-ui/git/src/components/panels/remoteselect.tsx index 15794bf646..1111a84172 100644 --- a/libs/remix-ui/git/src/components/panels/remoteselect.tsx +++ b/libs/remix-ui/git/src/components/panels/remoteselect.tsx @@ -1,4 +1,3 @@ -import { branch, checkout, ReadCommitResult } from "isomorphic-git"; import React, { useEffect, useState } from "react"; import { gitActionsContext } from "../../state/context"; import { gitPluginContext } from "../gitui"; @@ -10,33 +9,55 @@ import { RemoteBranchDetails } from "./branches/remotebranchedetails"; import GitUIButton from "../buttons/gituibutton"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faSync } from "@fortawesome/free-solid-svg-icons"; +import { branch } from "@remix-api"; export interface RemoteSelectProps { remote: remote openDefault: boolean } +const pageLength = 5; + export const Remoteselect = (props: RemoteSelectProps) => { const { remote, openDefault } = props; const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) const [activePanel, setActivePanel] = useState(""); + const [remoteBranchPage, setRemoteBranchPage] = useState(1); + const [remoteBranches, setRemoteBranches] = useState([]); useEffect(() => { setActivePanel(openDefault ? "0" : "") }, [openDefault]) + useEffect(() => { + if (context.branches) { + if (remote && remote.name) { + setRemoteBranches(context.branches.filter((branch, index) => branch.remote && branch.remote.name === remote.name)) + } else { + setRemoteBranches([]); + } + } else { + setRemoteBranches([]); + } + }, [context.branches, context.defaultRemote, context.upstream, remote]); + return ( <> <> - {context.branches && context.branches.filter((branch, index) => branch.remote && branch.remote.name === remote.name).map((branch, index) => { - return ( - - ); - })} + {context.branches && remoteBranches + .slice(0, remoteBranchPage * pageLength) + .map((branch, index) => { + return ( + + ); + })} + {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { + setRemoteBranchPage(remoteBranchPage + 1); + }}>Show more

} { await actions.fetch({ remote From 1327f10732441929357c2cc3a8c4b316bd1c1f64 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 17:17:48 +0200 Subject: [PATCH 031/312] commits paging --- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 10 +-------- .../buttons/sourcecontrolbuttons.tsx | 4 ++-- libs/remix-ui/git/src/components/gitui.tsx | 10 +++++++-- .../git/src/components/panels/commits.tsx | 11 +++++----- libs/remix-ui/git/src/lib/gitactions.ts | 22 ++++++++++++------- libs/remix-ui/git/src/lib/listeners.ts | 14 ++++++------ libs/remix-ui/git/src/state/actions.ts | 2 ++ libs/remix-ui/git/src/state/context.tsx | 3 ++- libs/remix-ui/git/src/state/gitpayload.ts | 14 ++++++++++++ libs/remix-ui/git/src/state/gitreducer.tsx | 13 ++++++++++- libs/remix-ui/git/src/types/index.ts | 13 +++++++++-- 11 files changed, 78 insertions(+), 38 deletions(-) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 05e9f0efdd..886eeb531e 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -95,18 +95,10 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return [] } - const logCount = await git.log({ - ...await this.getGitConfig(), - ...cmd, - depth: 100 - }) - - console.log('LOG-COUNT', logCount.length) - const log = await git.log({ ...await this.getGitConfig(), ...cmd, - depth: 10 + depth: cmd.depth || 10 }) console.log('LOG') return log diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index c8273914bc..0f0300ae49 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -5,7 +5,7 @@ import React, { useEffect, useState } from "react" import { FormattedMessage } from "react-intl" import { gitActionsContext } from "../../state/context" import { branch, remote } from "@remix-api" -import { gitMatomoEventTypes } from "../../types" +import { defaultGitState, gitMatomoEventTypes } from "../../types" import { gitPluginContext } from "../gitui" import GitUIButton from "./gituibutton" import { syncStateContext } from "./sourceControlBase" @@ -55,7 +55,7 @@ export const SourceControlButtons = () => { const refresh = async() => { await sendToMatomo(gitMatomoEventTypes.REFRESH) await actions.getFileStatusMatrix(null) - await actions.gitlog() + actions.setStateGitLogCount(defaultGitState.gitLogCount) } const buttonsDisabled = () => { diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index dafe1c4c3f..21fce4a1bd 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useReducer, useState, useContext } from 'react' -import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' +import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog, setStateGitLogCount } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' import { openDiff, openFile, openFolderInSameWindow, sendToMatomo, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' @@ -74,6 +74,11 @@ export const GitUI = (props: IGitUi) => { }, [appLoaded]) + useEffect(() => { + if (!appLoaded) return + gitlog(gitState.gitLogCount) + }, [gitState.timestamp, gitState.gitLogCount]) + useEffect(() => { if (!appLoaded) return async function checkconfig() { @@ -159,7 +164,8 @@ export const GitUI = (props: IGitUi) => { clearGitLog, getFileStatusMatrix, gitlog, - init + init, + setStateGitLogCount } const pluginActionsProviderValue = { diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index 7df8b8a96b..a7ed6d42e8 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -1,12 +1,10 @@ -import { checkout, ReadCommitResult } from "isomorphic-git"; +import { ReadCommitResult } from "isomorphic-git"; import React from "react"; import { gitActionsContext } from "../../state/context"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; -import LoaderIndicator from "../navigation/loaderindicator"; import { BranchDifferences } from "./branches/branchdifferences"; import { CommitDetails } from "./commits/commitdetails"; -import { CommitSummary } from "./commits/commitsummary"; export const Commits = () => { const [hasNextPage, setHasNextPage] = React.useState(true) @@ -22,14 +20,15 @@ export const Commits = () => { }; const loadNextPage = () => { + actions.setStateGitLogCount(context.gitLogCount + 5) actions.fetch({ remote: null, ref: context.currentBranch, relative: true, depth: 5, - singleBranch: true + singleBranch: true, + quiet: true }) - } const getRemote = () => { @@ -49,7 +48,7 @@ export const Commits = () => { {context.commits && context.commits.length ? <>
- {context.commits && context.commits.slice(0,5).map((commit, index) => { + {context.commits && context.commits.map((commit, index) => { return ( ); diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 9962d72754..d932933056 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -1,6 +1,6 @@ import { ReadBlobResult, ReadCommitResult } from "isomorphic-git"; import React from "react"; -import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences } from "../state/gitpayload"; +import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences, setTimestamp, setGitLogCount } from "../state/gitpayload"; import { gitActionDispatch, statusMatrixType, gitState, gitLog, fileStatusResult, storage, gitMatomoEventTypes } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; @@ -41,7 +41,7 @@ export const setPlugin = (p: Plugin, dispatcher: React.Dispatch { await sendToMatomo(gitMatomoEventTypes.INIT) await plugin.call('dgitApi', "init"); - await gitlog(); + dispatch(setTimestamp(Date.now())) await getBranches(); } @@ -83,13 +83,13 @@ export const getFileStatusMatrix = async (filepaths: string[]) => { dispatch(setLoading(false)) } -export const getCommits = async () => { +export const getCommits = async (depth: number) => { try { const commits: ReadCommitResult[] = await plugin.call( 'dgitApi', "log", - { ref: "HEAD" } + { ref: "HEAD", depth: depth } ); console.log('commits', commits) return commits; @@ -98,12 +98,12 @@ export const getCommits = async () => { } } -export const gitlog = async () => { +export const gitlog = async (depth: number) => { console.log('gitlog start') dispatch(setLoading(true)) let commits = [] try { - commits = await getCommits() + commits = await getCommits(depth) } catch (e) { } dispatch(setCommits(commits)) @@ -112,6 +112,10 @@ export const gitlog = async () => { console.log('gitlog end') } +export const setStateGitLogCount = async (count: number) => { + dispatch(setGitLogCount(count)) +} + export const showCurrentBranch = async () => { try { const branch = await currentBranch(); @@ -346,7 +350,7 @@ export const fetch = async (input: fetchInputType) => { try { await plugin.call('dgitApi', 'fetch', input); if (!input.quiet) { - await gitlog() + dispatch(setTimestamp(Date.now())) await getBranches() } } catch (e: any) { @@ -363,7 +367,7 @@ export const pull = async (input: pullInputType) => { await disableCallBacks() try { await plugin.call('dgitApi', 'pull', input) - await gitlog() + dispatch(setTimestamp(Date.now())) } catch (e: any) { console.log(e) await parseError(e) @@ -397,6 +401,8 @@ const tokenWarning = async () => { const parseError = async (e: any) => { console.trace(e) + if(!e.message) return + // if message conttains 401 Unauthorized, show token warning if (e.message.includes('401')) { await sendToMatomo(gitMatomoEventTypes.ERROR, ['401']) diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index b4a93a6cc8..4b11b0adae 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -1,6 +1,6 @@ import React from "react"; -import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir, setVersion } from "../state/gitpayload"; +import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setDesktopWorkingDir, setVersion, setTimestamp } from "../state/gitpayload"; import { gitActionDispatch, gitUIPanels, storage } from "../types"; import { Plugin } from "@remixproject/engine"; import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, gitlog, setPlugin, setStorage } from "./gitactions"; @@ -78,7 +78,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -105,7 +105,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -117,7 +117,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -148,7 +148,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }, 10) loadFileQueue.enqueue(async () => { getBranches() @@ -160,7 +160,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -182,7 +182,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) }) plugin.on('manager', 'pluginActivated', async (p: Profile) => { diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index c596727901..4cd9de59e0 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -48,6 +48,8 @@ export interface ActionPayloadTypes { DESKTOP_SET_WORKING_DIR: string SET_VERSION: string SET_STORAGE: storage + SET_TIMESTAMP: number + SET_GIT_LOG_COUNT: number } export interface Action { diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index f46ae5b7d7..ff59a40d91 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -32,8 +32,9 @@ export interface gitActions { sendToGitLog: (message: gitLog) => Promise clearGitLog: () => Promise getFileStatusMatrix(filespaths:[]): Promise - gitlog(): Promise + gitlog(depth: number): Promise init(): Promise + setStateGitLogCount(count: number): Promise } export const gitActionsContext = React.createContext(null) diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index 9b6a0b19f8..36fc1f837d 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -246,3 +246,17 @@ export const setStoragePayload = (storage: storage) => { payload: storage } } + +export const setTimestamp = (timestamp: number) => { + return { + type: 'SET_TIMESTAMP', + payload: timestamp + } +} + +export const setGitLogCount = (count: number) => { + return { + type: 'SET_GIT_LOG_COUNT', + payload: count + } +} diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 088ea9db9f..d9db9437d5 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -226,6 +226,17 @@ export const gitReducer = (state: gitState = defaultGitState, action: Actions): ...state, storage: action.payload } - + case 'SET_TIMESTAMP': + return { + ...state, + timestamp: action.payload + } + + case 'SET_GIT_LOG_COUNT': + return { + ...state, + gitLogCount: action.payload + } } + } diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 6c3d35c32e..1f46be0f12 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -38,6 +38,8 @@ export type gitState = { log: gitLog[] desktopWorkingDir?: string version: string + timestamp: number + gitLogCount: number } export type gitLog = { type: 'error' | 'warning' | 'info' | 'success', @@ -95,7 +97,9 @@ export const defaultGitState: gitState = { gitHubAccessToken: "", log: [], desktopWorkingDir: null, - version: "" + version: "", + timestamp: 0, + gitLogCount: 22 } export const defaultLoaderState: loaderState = { @@ -290,4 +294,9 @@ export interface setDesktopWorkingDirAction { payload: string } -export type gitActionDispatch = setDesktopWorkingDirAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file +export interface setTimeStampAction { + type: string, + payload: number +} + +export type gitActionDispatch = setTimeStampAction |setDesktopWorkingDirAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file From 97157e64f328b60f89429711d74a9feb40ff62ab Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 21 Aug 2024 13:38:03 +0200 Subject: [PATCH 032/312] linting --- libs/remix-ui/git/src/components/gitui.tsx | 2 +- libs/remix-ui/git/src/types/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index abe0f3286c..11462b01ec 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -186,7 +186,7 @@ export const GitUI = (props: IGitUi) => {
-
+
diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 3095615cb6..4f304850e4 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -388,7 +388,7 @@ export enum gitUIPanels { BRANCHES = '3', COMMITS = '4', CLONE = '5', - REMOTES = '6', + REMOTES = '6', LOG = '7' } From 1ed9a0be72be483e0b546116ef393a8a3c1c602c Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 21 Aug 2024 13:50:51 +0200 Subject: [PATCH 033/312] fix tests --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 5 +++-- apps/remix-ide-e2e/src/tests/dgit_local.test.ts | 5 +++-- apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index da38485359..445bae9231 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -16,8 +16,9 @@ module.exports = { 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - .waitForElementVisible('*[data-id="initgit-btn"]') - .click('*[data-id="initgit-btn"]') + // .waitForElementVisible('*[data-id="initgit-btn"]') + // .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="githubToken"]') .setValue('*[data-id="githubToken"]', process.env.dgit_token) .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index fc0ec93f98..9e79bf3920 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -34,8 +34,9 @@ module.exports = { 'Update settings for git #group1 #group2 #group3 #group4': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - .waitForElementVisible('*[data-id="initgit-btn"]') - .click('*[data-id="initgit-btn"]') + // .waitForElementVisible('*[data-id="initgit-btn"]') + // .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index 0661eb31ee..c25da43ef7 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -421,8 +421,9 @@ module.exports = { 'Update settings for git #group5': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - .waitForElementVisible('*[data-id="initgit-btn"]') - .click('*[data-id="initgit-btn"]') + // .waitForElementVisible('*[data-id="initgit-btn"]') + // .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') From 7508a1d9765fc1fd0a4605f3643e992e96ec48d3 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 21 Aug 2024 14:05:09 +0200 Subject: [PATCH 034/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 5 ++--- apps/remix-ide-e2e/src/tests/dgit_local.test.ts | 5 ++--- apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 5 ++--- libs/remix-ui/git/src/components/gitui.tsx | 4 ++-- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 445bae9231..da38485359 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -16,9 +16,8 @@ module.exports = { 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - // .waitForElementVisible('*[data-id="initgit-btn"]') - // .click('*[data-id="initgit-btn"]') - .waitForElementVisible('*[data-id="githubToken"]') + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') .setValue('*[data-id="githubToken"]', process.env.dgit_token) .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index 9e79bf3920..fc0ec93f98 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -34,9 +34,8 @@ module.exports = { 'Update settings for git #group1 #group2 #group3 #group4': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - // .waitForElementVisible('*[data-id="initgit-btn"]') - // .click('*[data-id="initgit-btn"]') - .waitForElementVisible('*[data-id="gitubUsername"]') + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index c25da43ef7..0661eb31ee 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -421,9 +421,8 @@ module.exports = { 'Update settings for git #group5': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') - // .waitForElementVisible('*[data-id="initgit-btn"]') - // .click('*[data-id="initgit-btn"]') - .waitForElementVisible('*[data-id="gitubUsername"]') + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 11462b01ec..6ee3808f71 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -174,8 +174,8 @@ export const GitUI = (props: IGitUi) => { - {setup ? : null} - {!setup && needsInit ? : null} + {setup && !needsInit ? : null} + {needsInit ? : null} {!setup && !needsInit ? From d1613318c39baacfcfb7569e642d02d9ec206a01 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 21 Aug 2024 14:36:28 +0200 Subject: [PATCH 035/312] fix tests --- libs/remix-ui/git/src/components/gitui.tsx | 20 ++++++++++---------- libs/remix-ui/git/src/types/index.ts | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 6ee3808f71..381327e32d 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -52,7 +52,7 @@ export const GitUI = (props: IGitUi) => { }) setTimeout(() => { setAppLoaded(true) - plugin.on('filePanel', 'requestGitHubSignIn' as any, () => setActivePanel('0')) + plugin.on('filePanel', 'requestGitHubSignIn' as any, () => setActivePanel('7')) }, 2000) }, []) @@ -178,15 +178,6 @@ export const GitUI = (props: IGitUi) => { {needsInit ? : null} {!setup && !needsInit ? - - -
- -
- -
-
-
@@ -229,6 +220,15 @@ export const GitUI = (props: IGitUi) => {

+ + +
+ +
+ +
+
+
diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 4f304850e4..3f70103838 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -382,14 +382,14 @@ export enum gitMatomoEventTypes { } export enum gitUIPanels { - GITHUB = '0', - SOURCECONTROL = '1', - COMMANDS = '2', - BRANCHES = '3', - COMMITS = '4', - CLONE = '5', - REMOTES = '6', - LOG = '7' + SOURCECONTROL = '0', + COMMANDS = '1', + BRANCHES = '2', + COMMITS = '3', + CLONE = '4', + REMOTES = '5', + GITHUB = '7', + LOG = '6' } export interface fileStatusAction { From 19a7a78f995ca238a7014242fa69c31152e0b663 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 21 Aug 2024 16:36:25 +0200 Subject: [PATCH 036/312] update init form --- libs/remix-ui/git/src/components/gitui.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 381327e32d..cd2439fa7b 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -174,8 +174,8 @@ export const GitUI = (props: IGitUi) => { - {setup && !needsInit ? : null} - {needsInit ? : null} + {setup ? : null} + {setup && needsInit ? : null} {!setup && !needsInit ? From 55c15edb52b61df66158589d21a296b920db82dd Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 22 Aug 2024 09:10:05 +0200 Subject: [PATCH 037/312] fix test --- libs/remix-ui/git/src/components/gitui.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index cd2439fa7b..eb992e60c4 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -173,9 +173,8 @@ export const GitUI = (props: IGitUi) => { - {setup ? : null} - {setup && needsInit ? : null} + {needsInit ? : null} {!setup && !needsInit ? From 8c218e28c381deff61d38d03c4b8dd0c2e0fbfd7 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 22 Aug 2024 13:09:13 +0200 Subject: [PATCH 038/312] show disconnect if connect fails --- libs/remix-ui/git/src/components/github/devicecode.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index 5b521c1118..20281da15e 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -64,6 +64,7 @@ export const GetDeviceCode = () => { await actions.loadGitHubUserFromToken() } else { await sendToMatomo(gitMatomoEventTypes.CONNECTTOGITHUBFAIL) + pluginActions.disconnectFromGithub() } } From 00dc873319f764c04d3a61e73edd82467c90a88c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 22 Aug 2024 16:32:00 +0200 Subject: [PATCH 039/312] fix init --- libs/remix-ui/git/src/components/gitui.tsx | 2 ++ libs/remix-ui/git/src/components/panels/init.tsx | 3 --- libs/remix-ui/git/src/components/panels/setup.tsx | 2 -- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index eb992e60c4..b177d069b7 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -175,6 +175,8 @@ export const GitUI = (props: IGitUi) => { {setup ? : null} {needsInit ? : null} + {setup || needsInit ? <>
CLONE
+ : null} {!setup && !needsInit ? diff --git a/libs/remix-ui/git/src/components/panels/init.tsx b/libs/remix-ui/git/src/components/panels/init.tsx index 37969cfb0b..37996deddd 100644 --- a/libs/remix-ui/git/src/components/panels/init.tsx +++ b/libs/remix-ui/git/src/components/panels/init.tsx @@ -27,9 +27,6 @@ export const Init = () => { >
-
-
CLONE
- ) } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/panels/setup.tsx b/libs/remix-ui/git/src/components/panels/setup.tsx index 71b35f1499..981b0926c4 100644 --- a/libs/remix-ui/git/src/components/panels/setup.tsx +++ b/libs/remix-ui/git/src/components/panels/setup.tsx @@ -20,8 +20,6 @@ export const Setup = () => {
-
CLONE
- ) } else if (screen === 1) { From 5524b5e4122e28545f4b59c343969ff80885df40 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 11:16:01 +0200 Subject: [PATCH 040/312] refactor --- .../app/src/lib/remix-app/actions/app.ts | 25 +++++++++++ .../app/src/lib/remix-app/context/context.tsx | 5 ++- .../app/src/lib/remix-app/interface/index.ts | 5 +++ .../app/src/lib/remix-app/reducer/app.ts | 13 ++++++ .../app/src/lib/remix-app/remix-app.tsx | 11 ++++- .../app/src/lib/remix-app/state/app.ts | 6 +++ libs/remix-ui/git/src/components/gitui.tsx | 10 ++--- libs/remix-ui/git/src/lib/gitactions.ts | 11 ++++- libs/remix-ui/git/src/lib/listeners.ts | 5 ++- .../workspace/src/lib/remix-ui-workspace.tsx | 43 +++++-------------- .../remix-ui/workspace/src/lib/types/index.ts | 2 - 11 files changed, 88 insertions(+), 48 deletions(-) create mode 100644 libs/remix-ui/app/src/lib/remix-app/actions/app.ts create mode 100644 libs/remix-ui/app/src/lib/remix-app/reducer/app.ts create mode 100644 libs/remix-ui/app/src/lib/remix-app/state/app.ts diff --git a/libs/remix-ui/app/src/lib/remix-app/actions/app.ts b/libs/remix-ui/app/src/lib/remix-app/actions/app.ts new file mode 100644 index 0000000000..20932eef6c --- /dev/null +++ b/libs/remix-ui/app/src/lib/remix-app/actions/app.ts @@ -0,0 +1,25 @@ +import { GitHubUser } from '@remix-ui/git'; +import { AppModal } from '../interface' + +type ActionMap = { + [Key in keyof M]: M[Key] extends undefined + ? { + type: Key; + } + : { + type: Key; + payload: M[Key]; + } +} + +export const enum appActionTypes { + setGitHubUser = 'SET_GITHUB_USER', +} + +type AppPayload = { + [appActionTypes.setGitHubUser]: GitHubUser +} + +export type AppAction = ActionMap[keyof ActionMap< + AppPayload +>] diff --git a/libs/remix-ui/app/src/lib/remix-app/context/context.tsx b/libs/remix-ui/app/src/lib/remix-app/context/context.tsx index 9fcf53d4a7..8f3fd119ed 100644 --- a/libs/remix-ui/app/src/lib/remix-app/context/context.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/context/context.tsx @@ -1,6 +1,7 @@ import React from 'react' -import { AlertModal, AppModal } from '../interface' +import { AlertModal, AppModal, AppState } from '../interface' import { ModalInitialState } from '../state/modals' +import { AppAction } from '../actions/app' export type appProviderContextType = { settings: any, @@ -8,6 +9,8 @@ export type appProviderContextType = { showEnter: boolean, appManager: any modal: any + appState: AppState + appStateDispatch: React.Dispatch } export enum appPlatformTypes { diff --git a/libs/remix-ui/app/src/lib/remix-app/interface/index.ts b/libs/remix-ui/app/src/lib/remix-app/interface/index.ts index 5dacecdf4d..dc6e453edc 100644 --- a/libs/remix-ui/app/src/lib/remix-app/interface/index.ts +++ b/libs/remix-ui/app/src/lib/remix-app/interface/index.ts @@ -1,3 +1,4 @@ +import { GitHubUser } from '@remix-ui/git' import { ModalTypes } from '../types' export type ValidationResult = { @@ -45,3 +46,7 @@ export interface forceChoiceModal { message: string | JSX.Element, } +export interface AppState { + gitHubUser: GitHubUser +} + diff --git a/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts b/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts new file mode 100644 index 0000000000..4bd804885f --- /dev/null +++ b/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts @@ -0,0 +1,13 @@ +import { AppAction, appActionTypes } from "../actions/app"; +import { AppState } from "../interface"; + +export const appReducer = (state: AppState, action: AppAction): AppState => { + switch (action.type) { + case appActionTypes.setGitHubUser:{ + return { + ...state, + gitHubUser: action.payload + } + } + } +} \ No newline at end of file diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 24c42a4318..07e57d5051 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react' +import React, { useEffect, useReducer, useRef, useState } from 'react' import './style/remix-app.css' import { RemixUIMainPanel } from '@remix-ui/panel' import MatomoDialog from './components/modals/matomo' @@ -12,6 +12,9 @@ import { appProviderContextType, onLineContext, platformContext } from './contex import { FormattedMessage, IntlProvider } from 'react-intl' import { CustomTooltip } from '@remix-ui/helper' import { UsageTypes } from './types' +import { AppState } from './interface' +import { appReducer } from './reducer/app' +import { appInitialState } from './state/app' declare global { interface Window { @@ -40,6 +43,8 @@ const RemixApp = (props: IRemixAppUi) => { const sidePanelRef = useRef(null) const pinnedPanelRef = useRef(null) + const [appState, appStateDispatch] = useReducer(appReducer, appInitialState) + useEffect(() => { async function activateApp() { props.app.themeModule.initTheme(() => { @@ -133,7 +138,9 @@ const RemixApp = (props: IRemixAppUi) => { showMatamo: props.app.showMatamo, appManager: props.app.appManager, showEnter: props.app.showEnter, - modal: props.app.notification + modal: props.app.notification, + appState: appState, + appStateDispatch: appStateDispatch } const handleUserChosenType = async (type) => { diff --git a/libs/remix-ui/app/src/lib/remix-app/state/app.ts b/libs/remix-ui/app/src/lib/remix-app/state/app.ts new file mode 100644 index 0000000000..60e763a76c --- /dev/null +++ b/libs/remix-ui/app/src/lib/remix-app/state/app.ts @@ -0,0 +1,6 @@ +import { GitHubUser } from "@remix-ui/git"; +import { AppState } from "../interface"; + +export const appInitialState: AppState = { + gitHubUser: {} as GitHubUser, +} \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index b177d069b7..a9173e6504 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useReducer, useState } from 'react' +import React, { useContext, useEffect, useReducer, useState } from 'react' import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' import { openDiff, openFile, saveToken, sendToMatomo, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged, disconnectFromGithub, logInGitHub } from '../lib/pluginActions' @@ -32,6 +32,7 @@ import { Setup } from './panels/setup' import { Init } from './panels/init' import { Disabled } from './disabled' import { IGitUi } from '../types' +import { AppContext } from '@remix-ui/app' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) @@ -43,6 +44,7 @@ export const GitUI = (props: IGitUi) => { const [setup, setSetup] = useState(false) const [needsInit, setNeedsInit] = useState(true) const [appLoaded, setAppLoaded] = useState(false) + const appContext = useContext(AppContext) useEffect(() => { plugin.emit('statusChanged', { @@ -50,15 +52,11 @@ export const GitUI = (props: IGitUi) => { type: 'info', title: 'Loading Git Plugin' }) - setTimeout(() => { - setAppLoaded(true) - plugin.on('filePanel', 'requestGitHubSignIn' as any, () => setActivePanel('7')) - }, 2000) }, []) useEffect(() => { if (!appLoaded) return - setCallBacks(plugin, gitDispatch, loaderDispatch, setActivePanel) + setCallBacks(plugin, gitDispatch, appContext.appStateDispatch, loaderDispatch, setActivePanel) setPlugin(plugin, gitDispatch, loaderDispatch) loaderDispatch({ type: 'plugin', payload: true }) diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 1805289dfc..a4a6317adc 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -8,6 +8,8 @@ import { ModalTypes } from "@remix-ui/app"; import { sendToMatomo, setFileDecorators } from "./pluginActions"; import { Plugin } from "@remixproject/engine"; import { CustomRemixApi } from "@remix-api"; +import { AppAction, appActionTypes } from "libs/remix-ui/app/src/lib/remix-app/actions/app"; +import { app } from "electron"; export const fileStatuses = [ ["new,untracked", 0, 2, 0], // new, untracked @@ -31,11 +33,12 @@ const statusmatrix: statusMatrixType[] = fileStatuses.map((x: any) => { }; }); -let plugin: Plugin, dispatch: React.Dispatch +let plugin: Plugin, dispatch: React.Dispatch, appDispatcher: React.Dispatch -export const setPlugin = (p: Plugin, dispatcher: React.Dispatch) => { +export const setPlugin = (p: Plugin, dispatcher: React.Dispatch, appDispatch: React.Dispatch) => { plugin = p dispatch = dispatcher + appDispatcher = appDispatch } export const init = async () => { @@ -572,6 +575,7 @@ export const saveGitHubCredentials = async (credentials: { username: string, ema dispatch(setGitHubUser({ login: credentials.username, })) + appDispatcher({ type: appActionTypes.setGitHubUser, payload: { login: credentials.username } }) dispatch(setUserEmails([{ email: credentials.email, primary: true, @@ -631,6 +635,7 @@ export const loadGitHubUserFromToken = async () => { if (data.user && data.user.login && (storedUsername !== data.user.login)) await plugin.call('config', 'setAppParameter', 'settings/github-user-name', data.user.login) dispatch(setGitHubUser(data.user)) + appDispatcher({ type: appActionTypes.setGitHubUser, payload: data.user }) dispatch(setScopes(data.scopes)) dispatch(setUserEmails(data.emails)) sendToGitLog({ @@ -646,6 +651,7 @@ export const loadGitHubUserFromToken = async () => { message: `Please check your GitHub token in the GitHub settings.` }) dispatch(setGitHubUser(null)) + appDispatcher({ type: appActionTypes.setGitHubUser, payload: null }) return false } } else { @@ -654,6 +660,7 @@ export const loadGitHubUserFromToken = async () => { message: `Please check your GitHub token in the GitHub settings.` }) dispatch(setGitHubUser(null)) + appDispatcher({ type: appActionTypes.setGitHubUser, payload: null }) return false } } catch (e) { diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index a873b303f7..c18274c9d7 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -7,6 +7,7 @@ import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, import { Profile } from "@remixproject/plugin-utils"; import { CustomRemixApi } from "@remix-api"; import { statusChanged } from "./pluginActions"; +import { AppAction } from "libs/remix-ui/app/src/lib/remix-app/actions/app"; let plugin: Plugin, gitDispatch: React.Dispatch, loaderDispatch: React.Dispatch, loadFileQueue: AsyncDebouncedQueue let callBackEnabled: boolean = false @@ -34,13 +35,13 @@ class AsyncDebouncedQueue { } } -export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch, loaderDispatcher: React.Dispatch, setAtivePanel: React.Dispatch>) => { +export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch, appDispatcher: React.Dispatch, loaderDispatcher: React.Dispatch, setAtivePanel: React.Dispatch>) => { plugin = viewPlugin gitDispatch = gitDispatcher loaderDispatch = loaderDispatcher loadFileQueue = new AsyncDebouncedQueue() - setPlugin(viewPlugin, gitDispatcher) + setPlugin(viewPlugin, gitDispatcher, appDispatcher) plugin.on("fileManager", "fileSaved", async (file: string) => { loadFileQueue.enqueue(async () => { 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 e2829f5e25..ad10b7a0b8 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -14,10 +14,10 @@ import { MenuItems, WorkSpaceState, WorkspaceMetadata } from './types' import { contextMenuActions } from './utils' import FileExplorerContextMenu from './components/file-explorer-context-menu' import { customAction } from '@remixproject/plugin-api' -import { appPlatformTypes, platformContext } from '@remix-ui/app' +import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' -import { branch, GitHubUser, userEmails } from '@remix-ui/git' +import { branch, GitHubUser, gitUIPanels, userEmails } from '@remix-ui/git' const _paq = (window._paq = window._paq || []) @@ -49,6 +49,8 @@ export function Workspace() { const [canPaste, setCanPaste] = useState(false) + const appContext = useContext(AppContext) + const [state, setState] = useState({ ctrlKey: false, cutShortcut: false, @@ -73,34 +75,10 @@ export function Workspace() { reservedKeywords: [ROOT_PATH], copyElement: [], dragStatus: false, - loggedInGithub: false, - githubUser: null }) useEffect(() => { - const run = async () => { - const token = await global.plugin.call('config' as any, 'getAppParameter' as any, 'settings/gist-access-token') - const data: { - user: GitHubUser, - scopes: string[] - emails: userEmails - } = await global.plugin.call('dgitApi' as any, 'getGitHubUser', { token }); - - if (data.user) { - setState((prevState) => { - return { ...prevState, loggedInGithub: true, githubUser: data.user } - }) - } - } - global.plugin.on('dgit', 'disconnectFromGithubRequest', () => { - setState((prevState) => { - return { ...prevState, loggedInGithub: false, githubUser: null } - }) - }) - global.plugin.on('dgit', 'loggedInGithubChanged', () => { - run() - }) - run() + }, []) useEffect(() => { @@ -916,9 +894,8 @@ export function Workspace() { } const logInGithub = async () => { - await global.plugin.call('manager', 'activatePlugin', 'dgit') await global.plugin.call('menuicons', 'select', 'dgit'); - await global.plugin.emit('requestGitHubSignIn'); + await global.plugin.call('dgit', 'open', gitUIPanels.GITHUB) _paq.push(['trackEvent', 'Workspace', 'GIT', 'login']) } @@ -994,7 +971,7 @@ export function Workspace() { { - !state.loggedInGithub && } { - state.loggedInGithub && - + } diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index 58276a5def..32e4d05d98 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -241,8 +241,6 @@ export interface WorkSpaceState { reservedKeywords: string[] copyElement: CopyElementType[] dragStatus: boolean - loggedInGithub: boolean - githubUser: GitHubUser } export type FileFocusContextType = { From 14af8f4b00a2221faa4c3c960847bce79e1cc6e1 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 11:34:08 +0200 Subject: [PATCH 041/312] add event --- libs/remix-ui/git/src/components/gitui.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index a9173e6504..a0067a2b6a 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -52,6 +52,9 @@ export const GitUI = (props: IGitUi) => { type: 'info', title: 'Loading Git Plugin' }) + setTimeout(() => { + setAppLoaded(true) + }, 2000) }, []) useEffect(() => { From f3c0b80e3e5b33734fa5e42574b9ab1c20a8a28c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 12:13:50 +0200 Subject: [PATCH 042/312] refactor --- libs/remix-ui/git/src/components/gitui.tsx | 65 +++++++++++----------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index a0067a2b6a..98fa99616f 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -5,7 +5,7 @@ import { openDiff, openFile, saveToken, sendToMatomo, setModifiedDecorator, setP import { gitActionsContext, pluginActionsContext } from '../state/context' import { gitReducer } from '../state/gitreducer' import { defaultGitState, defaultLoaderState, gitMatomoEventTypes, gitState, gitUIPanels, loaderState } from '../types' -import { Accordion } from "react-bootstrap"; +import { Accordion, Button } from "react-bootstrap"; import { CommitMessage } from './buttons/commitmessage' import { Commits } from './panels/commits' import { Branches } from './panels/branches' @@ -52,8 +52,8 @@ export const GitUI = (props: IGitUi) => { type: 'info', title: 'Loading Git Plugin' }) - setTimeout(() => { - setAppLoaded(true) + setTimeout(() => { + setAppLoaded(true) }, 2000) }, []) @@ -72,6 +72,7 @@ export const GitUI = (props: IGitUi) => { const username = await plugin.call('settings', 'get', 'settings/github-user-name') const email = await plugin.call('settings', 'get', 'settings/github-email') const token = await plugin.call('settings', 'get', 'settings/gist-access-token') + console.log('token', token, username, email) setSetup(!(username && email)) } @@ -174,12 +175,8 @@ export const GitUI = (props: IGitUi) => { - {setup ? : null} - {needsInit ? : null} - {setup || needsInit ? <>
CLONE
- : null} - {!setup && !needsInit ? - + + {!setup && !needsInit ? <>
@@ -216,30 +213,32 @@ export const GitUI = (props: IGitUi) => {

- - -
-
-
-
- - -
- -
- -
-
-
- - -
- -
-
- -
- : null} + : null} + {needsInit ? <> + : null} + + +
+
+
+
+ + + +
+ +
+ +
+
+
+ + +
+ +
+
+
From 3eb7555bde42e3473e531f81a2c8b98ca4c4d7bd Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 12:38:51 +0200 Subject: [PATCH 043/312] update test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 3 +++ apps/remix-ide-e2e/src/tests/dgit_local.test.ts | 3 +++ apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 3 +++ 3 files changed, 9 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index da38485359..a85269c572 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -18,6 +18,9 @@ module.exports = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="githubToken"]', process.env.dgit_token) .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index fc0ec93f98..961070c893 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -36,6 +36,9 @@ module.exports = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index 0661eb31ee..028551bba5 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -423,6 +423,9 @@ module.exports = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') From 4ba33316fdb3db420a4dde49e58a7fb1d9bee669 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:22:40 +0200 Subject: [PATCH 044/312] refactor --- apps/remix-ide/src/app/files/dgitProvider.ts | 11 +++- .../src/app/tabs/locales/en/git.json | 3 +- libs/remix-ui/git/src/components/gitui.tsx | 1 + .../components/panels/githubcredentials.tsx | 2 +- .../git/src/components/panels/setup.tsx | 54 ++++++++----------- libs/remix-ui/git/src/lib/gitactions.ts | 3 +- libs/remix-ui/git/src/types/index.ts | 5 +- .../workspace/src/lib/remix-ui-workspace.tsx | 4 +- 8 files changed, 45 insertions(+), 38 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 87cb4c3c8c..f81d80859b 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -1060,9 +1060,18 @@ class DGitProvider extends Plugin { const emails = await octokit.request('GET /user/emails') const scopes = user.headers['x-oauth-scopes'] || '' + console.log(scopes) + + const scopesArr = scopes.split(',').map(scope => scope.trim()) return { - user: user.data, + user: {...user.data, isConnected: + scopes + && scopesArr.includes('repo') + && scopesArr.includes('read:user') + && scopesArr.includes('user:email') + && scopesArr.includes('gist') + }, emails: emails.data, scopes: scopes && scopes.split(',') } diff --git a/apps/remix-ide/src/app/tabs/locales/en/git.json b/apps/remix-ide/src/app/tabs/locales/en/git.json index c5f4fa6a09..ea64a5b02d 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/git.json +++ b/apps/remix-ide/src/app/tabs/locales/en/git.json @@ -16,5 +16,6 @@ "git.unstageall": "unstage all", "git.stageall": "stage all", "git.noremote": "this repo has no remotes", - "git.init": "Initialize repository" + "git.init": "Initialize repository", + "git.setup": "Setup git" } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 98fa99616f..0fd8afc0e4 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -175,6 +175,7 @@ export const GitUI = (props: IGitUi) => { + {setup ? : null} {!setup && !needsInit ? <> diff --git a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx index a81420e28b..e6b8da65d8 100644 --- a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx +++ b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx @@ -22,7 +22,7 @@ export const GitHubCredentials = () => { useEffect(() => { refresh() if (context.gitHubUser) { - setScopeWarning(!(context.gitHubScopes && context.gitHubScopes.length > 0)) + setScopeWarning(!context.gitHubUser.isConnected) } else { setScopeWarning(false) } diff --git a/libs/remix-ui/git/src/components/panels/setup.tsx b/libs/remix-ui/git/src/components/panels/setup.tsx index 981b0926c4..38e7953f3d 100644 --- a/libs/remix-ui/git/src/components/panels/setup.tsx +++ b/libs/remix-ui/git/src/components/panels/setup.tsx @@ -1,37 +1,29 @@ import React, { useEffect, useState } from 'react' -import { GetDeviceCode } from '../github/devicecode' -import { GitHubCredentials } from './githubcredentials' -import { Clone } from './clone' +import { gitUIPanels } from '../../types' +import GitUIButton from '../buttons/gituibutton' +import { FormattedMessage } from 'react-intl' -export const Setup = () => { +export const Setup = ({ callback }) => { - const [screen, setScreen] = useState(0) - if (screen === 0) { - return ( - <> -
SETUP
-
-
- To ensure that your commits are properly attributed in Git, you need to configure a username and email address. - These will be used to identify the author of the commit. -
- -
- -
- - ) - } else if (screen === 1) { - return ( - <> -
SETUP
-
Step 2
-
- To ensure that your commits are properly attributed in Git, you need to configure your username and email address. - -
- - ) + const startSetingUp = () => { + callback(gitUIPanels.GITHUB) } + + return ( + <> +
SETUP REQUIRED
+
+
+ To ensure that your commits are properly attributed in Git, you need to configure a username and email address or connect to GitHub. + These credentials will be used to identify the author of the commit. + + + +
+
+
+ + ) + } \ No newline at end of file diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index a4a6317adc..3c43d72903 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -574,8 +574,9 @@ export const saveGitHubCredentials = async (credentials: { username: string, ema } dispatch(setGitHubUser({ login: credentials.username, + isConnected: false })) - appDispatcher({ type: appActionTypes.setGitHubUser, payload: { login: credentials.username } }) + appDispatcher({ type: appActionTypes.setGitHubUser, payload: { login: credentials.username, isConnected: false } }) dispatch(setUserEmails([{ email: credentials.email, primary: true, diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 3f70103838..4c24c1a450 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -5,7 +5,10 @@ import { CommitObject, ReadBlobResult, ReadCommitResult, StatusRow } from "isomo import { CustomRemixApi } from "@remix-api"; import { Plugin } from "@remixproject/engine"; -export type GitHubUser = Partial +export type GitHubUser = Partial & { + isConnected: boolean +} + export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] export interface IGitUi { 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 ad10b7a0b8..f4725ca88e 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -971,7 +971,7 @@ export function Workspace() { { - !appContext.appState.gitHubUser && } { - appContext.appState.gitHubUser && Date: Sat, 24 Aug 2024 14:26:08 +0200 Subject: [PATCH 045/312] rm unused events --- libs/remix-ui/git/src/components/github/devicecode.tsx | 2 -- libs/remix-ui/git/src/components/gitui.tsx | 6 ++---- .../git/src/components/panels/githubcredentials.tsx | 2 -- libs/remix-ui/git/src/lib/pluginActions.ts | 8 -------- libs/remix-ui/git/src/state/context.tsx | 2 -- 5 files changed, 2 insertions(+), 18 deletions(-) diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index 20281da15e..9ce3e5ec02 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -64,7 +64,6 @@ export const GetDeviceCode = () => { await actions.loadGitHubUserFromToken() } else { await sendToMatomo(gitMatomoEventTypes.CONNECTTOGITHUBFAIL) - pluginActions.disconnectFromGithub() } } @@ -74,7 +73,6 @@ export const GetDeviceCode = () => { setGitHubResponse(null) await pluginActions.saveToken(null) await actions.loadGitHubUserFromToken() - pluginActions.disconnectFromGithub() } return ( diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 0fd8afc0e4..370f4d8d24 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,7 +1,7 @@ import React, { useContext, useEffect, useReducer, useState } from 'react' import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' -import { openDiff, openFile, saveToken, sendToMatomo, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged, disconnectFromGithub, logInGitHub } from '../lib/pluginActions' +import { openDiff, openFile, saveToken, sendToMatomo, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' import { gitReducer } from '../state/gitreducer' import { defaultGitState, defaultLoaderState, gitMatomoEventTypes, gitState, gitUIPanels, loaderState } from '../types' @@ -162,9 +162,7 @@ export const GitUI = (props: IGitUi) => { saveToken, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, - showAlert, - disconnectFromGithub, - logInGitHub + showAlert } return ( diff --git a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx index e6b8da65d8..65abc1797c 100644 --- a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx +++ b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx @@ -55,7 +55,6 @@ export const GitHubCredentials = () => { setGithubToken(credentials.token || '') setGithubUsername(credentials.username || '') setGithubEmail(credentials.email || '') - pluginactions.logInGitHub() } function removeToken(): void { @@ -67,7 +66,6 @@ export const GitHubCredentials = () => { email: '', token: '' }) - pluginactions.disconnectFromGithub() } return ( diff --git a/libs/remix-ui/git/src/lib/pluginActions.ts b/libs/remix-ui/git/src/lib/pluginActions.ts index d5bb0ada31..7d9e81ee7a 100644 --- a/libs/remix-ui/git/src/lib/pluginActions.ts +++ b/libs/remix-ui/git/src/lib/pluginActions.ts @@ -14,14 +14,6 @@ export const setPlugin = (p: Plugin, gitDispatcher: React.D loaderDispatch = loaderDispatcher } -export const disconnectFromGithub = () => { - plugin.emit('disconnectFromGithub') -} - -export const logInGitHub = () => { - plugin.emit('loggedInGithubChanged') -} - export const statusChanged = (badges: number) => { if (!plugin) return plugin.emit('statusChanged', { diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index 47d42f3439..4608406a7f 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -54,8 +54,6 @@ export interface pluginActions { token: string }> showAlert({ title, message }:{title: string, message: string}): Promise - logInGitHub(): void - disconnectFromGithub(): void } export const pluginActionsContext = React.createContext(null) \ No newline at end of file From 31a0f7e2ec2617746c54811354bec58637ae31e4 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:27:25 +0200 Subject: [PATCH 046/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index a85269c572..f9c638ebe9 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -27,8 +27,7 @@ module.exports = { .click('*[data-id="saveGitHubCredentials"]') }, 'check if the settings are loaded #group1 #group2': function (browser: NightwatchBrowser) { - browser. - click('*[data-id="github-panel"]') + browser .waitForElementVisible('*[data-id="connected-as-bunsenstraat"]') .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') .waitForElementVisible('*[data-id="connected-link-bunsenstraat"]') From 6088ce978a05d2b802063ed3060568b9043ce221 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:28:14 +0200 Subject: [PATCH 047/312] lint --- libs/remix-ui/app/src/lib/remix-app/reducer/app.ts | 14 +++++++------- libs/remix-ui/app/src/lib/remix-app/state/app.ts | 2 +- libs/remix-ui/git/src/components/panels/setup.tsx | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts b/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts index 4bd804885f..2fce1a56cf 100644 --- a/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts +++ b/libs/remix-ui/app/src/lib/remix-app/reducer/app.ts @@ -2,12 +2,12 @@ import { AppAction, appActionTypes } from "../actions/app"; import { AppState } from "../interface"; export const appReducer = (state: AppState, action: AppAction): AppState => { - switch (action.type) { - case appActionTypes.setGitHubUser:{ - return { - ...state, - gitHubUser: action.payload - } - } + switch (action.type) { + case appActionTypes.setGitHubUser:{ + return { + ...state, + gitHubUser: action.payload } + } + } } \ No newline at end of file diff --git a/libs/remix-ui/app/src/lib/remix-app/state/app.ts b/libs/remix-ui/app/src/lib/remix-app/state/app.ts index 60e763a76c..417911ae0c 100644 --- a/libs/remix-ui/app/src/lib/remix-app/state/app.ts +++ b/libs/remix-ui/app/src/lib/remix-app/state/app.ts @@ -2,5 +2,5 @@ import { GitHubUser } from "@remix-ui/git"; import { AppState } from "../interface"; export const appInitialState: AppState = { - gitHubUser: {} as GitHubUser, + gitHubUser: {} as GitHubUser, } \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/panels/setup.tsx b/libs/remix-ui/git/src/components/panels/setup.tsx index 38e7953f3d..184a46eadf 100644 --- a/libs/remix-ui/git/src/components/panels/setup.tsx +++ b/libs/remix-ui/git/src/components/panels/setup.tsx @@ -5,7 +5,6 @@ import { FormattedMessage } from 'react-intl' export const Setup = ({ callback }) => { - const startSetingUp = () => { callback(gitUIPanels.GITHUB) } From 495917811728e2f9666aff2cb4d4f5b805d03655 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:42:02 +0200 Subject: [PATCH 048/312] fix lint --- libs/remix-ui/app/src/index.ts | 1 + libs/remix-ui/git/src/lib/gitactions.ts | 3 +-- libs/remix-ui/git/src/lib/listeners.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/app/src/index.ts b/libs/remix-ui/app/src/index.ts index e686172a78..b18c36cb9a 100644 --- a/libs/remix-ui/app/src/index.ts +++ b/libs/remix-ui/app/src/index.ts @@ -4,3 +4,4 @@ export { ModalProvider, useDialogDispatchers } from './lib/remix-app/context/pro export { AppModal } from './lib/remix-app/interface/index' export { AlertModal } from './lib/remix-app/interface/index' export { ModalTypes } from './lib/remix-app/types/index' +export { AppAction, appActionTypes } from './lib/remix-app/actions/app' diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 3c43d72903..90faf29a92 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -4,11 +4,10 @@ import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchC import { GitHubUser, branch, commitChange, gitActionDispatch, statusMatrixType, gitState, branchDifference, remote, gitLog, fileStatusResult, customGitApi, IGitApi, cloneInputType, fetchInputType, pullInputType, pushInputType, checkoutInput, rmInput, addInput, repository, userEmails, storage, gitMatomoEventTypes } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; -import { ModalTypes } from "@remix-ui/app"; +import { ModalTypes, appActionTypes, AppAction } from "@remix-ui/app"; import { sendToMatomo, setFileDecorators } from "./pluginActions"; import { Plugin } from "@remixproject/engine"; import { CustomRemixApi } from "@remix-api"; -import { AppAction, appActionTypes } from "libs/remix-ui/app/src/lib/remix-app/actions/app"; import { app } from "electron"; export const fileStatuses = [ diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index c18274c9d7..c4dfe0b11e 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -7,7 +7,7 @@ import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, import { Profile } from "@remixproject/plugin-utils"; import { CustomRemixApi } from "@remix-api"; import { statusChanged } from "./pluginActions"; -import { AppAction } from "libs/remix-ui/app/src/lib/remix-app/actions/app"; +import { AppAction } from "@remix-ui/app"; let plugin: Plugin, gitDispatch: React.Dispatch, loaderDispatch: React.Dispatch, loadFileQueue: AsyncDebouncedQueue let callBackEnabled: boolean = false From a397005407d3c861eb41a24968b31b9ce0d55f58 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:50:24 +0200 Subject: [PATCH 049/312] lint --- apps/remix-ide/src/app/files/dgitProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index f81d80859b..39c40e4073 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -1065,8 +1065,8 @@ class DGitProvider extends Plugin { const scopesArr = scopes.split(',').map(scope => scope.trim()) return { - user: {...user.data, isConnected: - scopes + user: { ...user.data, isConnected: + scopes && scopesArr.includes('repo') && scopesArr.includes('read:user') && scopesArr.includes('user:email') From a58927ad639e62b00a0b93f13f3a02ae64c6d77b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 14:56:20 +0200 Subject: [PATCH 050/312] fix test --- apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index 028551bba5..467d97e620 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -433,6 +433,8 @@ module.exports = { }, 'check source controle panel #group5': function (browser: NightwatchBrowser) { browser + .waitForElementVisible('*[data-id="sourcecontrol-panel"]') + .click('*[data-id="sourcecontrol-panel"]') .waitForElementVisible({ selector: "//*[@data-status='new-untracked' and @data-file='/tests/MyToken_test.sol']", locateStrategy: 'xpath' From 7d3300c6f0badb3b7ad014b8ecf3323ae2684bee Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 15:00:29 +0200 Subject: [PATCH 051/312] fix views --- libs/remix-ui/git/src/components/github/devicecode.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index 9ce3e5ec02..9c74245bb0 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -77,7 +77,7 @@ export const GetDeviceCode = () => { return ( <> - {(context.gitHubUser && context.gitHubUser.login) ? null : <> + {(context.gitHubUser && context.gitHubUser.isConnected) ? null : <>
} { - (context.gitHubUser && context.gitHubUser.login) ? + (context.gitHubUser && context.gitHubUser.isConnected) ?
: null } { - (context.gitHubUser && context.gitHubUser.login) ? + (context.gitHubUser && context.gitHubUser.isConnected) ?
Connected as {context.gitHubUser.login}
From ae0b394e4180789193bbd97a62b2887d52847484 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 15:48:05 +0200 Subject: [PATCH 052/312] refactor --- apps/remix-ide/src/app/files/dgitProvider.ts | 19 ++++++++++--------- .../components/panels/githubcredentials.tsx | 8 ++++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 39c40e4073..d46ca957af 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -1056,24 +1056,25 @@ class DGitProvider extends Plugin { auth: input.token }) - const user = await octokit.request('GET /user') + const user = await octokit.request('GET /user', { + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } + }) const emails = await octokit.request('GET /user/emails') const scopes = user.headers['x-oauth-scopes'] || '' console.log(scopes) const scopesArr = scopes.split(',').map(scope => scope.trim()) - + console.log(scopesArr) return { - user: { ...user.data, isConnected: - scopes - && scopesArr.includes('repo') - && scopesArr.includes('read:user') - && scopesArr.includes('user:email') - && scopesArr.includes('gist') + user: { + ...user.data, isConnected: + user.data.login !== undefined && user.data.login !== null && user.data.login !== '' }, emails: emails.data, - scopes: scopes && scopes.split(',') + scopes: scopes && scopes.split(',').map(scope => scope.trim()) } } catch (e) { return null diff --git a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx index 65abc1797c..e466aeeaf9 100644 --- a/libs/remix-ui/git/src/components/panels/githubcredentials.tsx +++ b/libs/remix-ui/git/src/components/panels/githubcredentials.tsx @@ -22,7 +22,11 @@ export const GitHubCredentials = () => { useEffect(() => { refresh() if (context.gitHubUser) { - setScopeWarning(!context.gitHubUser.isConnected) + setScopeWarning(!(context.gitHubScopes + && context.gitHubScopes.includes('repo') + && context.gitHubScopes.includes('read:user') + && context.gitHubScopes.includes('user:email') + && context.gitHubScopes.includes('gist'))) } else { setScopeWarning(false) } @@ -92,7 +96,7 @@ export const GitHubCredentials = () => {
{scopeWarning ? -
Your GitHub token may not have the correct permissions. Please use the login with GitHub feature.
: null} +
Your GitHub token may or may not have the correct permissions. Remix can't verify the permissions when using your own token. Please use the login with GitHub feature.
: null}
); From cefc6645190b2bf631f2ea448dbd2bbe249bb71b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 16:28:04 +0200 Subject: [PATCH 053/312] update tests --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 15 +++++++++++++++ .../workspace/src/lib/remix-ui-workspace.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index f9c638ebe9..80e4326620 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -18,6 +18,15 @@ module.exports = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') + }, + 'launch github login via FE #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="filepanel-login-github"]') + .click('*[data-id="filepanel-login-github"]') + }, + 'login to github #group1 #group2': function (browser: NightwatchBrowser) { + browser .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="gitubUsername"]') @@ -32,8 +41,14 @@ module.exports = { .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') .waitForElementVisible('*[data-id="connected-link-bunsenstraat"]') }, + 'check the FE for the auth user #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') + }, 'clone a repository #group1': function (browser: NightwatchBrowser) { browser + .clickLaunchIcon('dgit') .click('*[data-id="clone-panel"]') .click({ selector: '//*[@data-id="clone-panel-content"]//*[@data-id="fetch-repositories"]', 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 f4725ca88e..3efe40088e 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -977,7 +977,7 @@ export function Workspace() { tooltipClasses="text-nowrap" tooltipText={} > -
+
logInGithub() } className="fa-brands fa-github-alt text-success ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> logInGithub() } className="ml-1 text-success"> Sign in
From da2b2a184e8c40b2132329ea28306acc3b8ef93c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 16:31:21 +0200 Subject: [PATCH 054/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 80e4326620..1a7c3d73d1 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -28,7 +28,6 @@ module.exports = { 'login to github #group1 #group2': function (browser: NightwatchBrowser) { browser .waitForElementVisible('*[data-id="github-panel"]') - .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="githubToken"]', process.env.dgit_token) .setValue('*[data-id="gitubUsername"]', 'git') From 10e18960a3323b12882310dd466d8e004860d3e3 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 16:36:27 +0200 Subject: [PATCH 055/312] cleanup --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 3efe40088e..6cb9969980 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -74,13 +74,9 @@ export function Workspace() { showContextMenu: false, reservedKeywords: [ROOT_PATH], copyElement: [], - dragStatus: false, + dragStatus: false }) - useEffect(() => { - - }, []) - useEffect(() => { if (canPaste) { addMenuItems([ From 24c6bba6dee930f7c1cac8271931b8ff392b5588 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 16:41:04 +0200 Subject: [PATCH 056/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 2 +- apps/remix-ide/src/app/files/dgitProvider.ts | 3 --- libs/remix-ui/git/src/components/gitui.tsx | 1 - libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 1a7c3d73d1..46b94b986c 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -43,7 +43,7 @@ module.exports = { 'check the FE for the auth user #group1 #group2': function (browser: NightwatchBrowser) { browser .clickLaunchIcon('filePanel') - .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="filepanel-connected-img-bunsenstraat"]') }, 'clone a repository #group1': function (browser: NightwatchBrowser) { browser diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index d46ca957af..9d4b01091c 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -1064,10 +1064,7 @@ class DGitProvider extends Plugin { const emails = await octokit.request('GET /user/emails') const scopes = user.headers['x-oauth-scopes'] || '' - console.log(scopes) - const scopesArr = scopes.split(',').map(scope => scope.trim()) - console.log(scopesArr) return { user: { ...user.data, isConnected: diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 370f4d8d24..aaa29c5a84 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -72,7 +72,6 @@ export const GitUI = (props: IGitUi) => { const username = await plugin.call('settings', 'get', 'settings/github-user-name') const email = await plugin.call('settings', 'get', 'settings/github-email') const token = await plugin.call('settings', 'get', 'settings/gist-access-token') - console.log('token', token, username, email) setSetup(!(username && email)) } 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 6cb9969980..19285b9f2b 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -986,7 +986,7 @@ export function Workspace() { tooltipClasses="text-nowrap" tooltipText={appContext.appState.gitHubUser && intl.formatMessage({ id: 'filePanel.gitHubLoggedAs' }, { githubuser: appContext.appState.gitHubUser.login }) || ''} > - + } From e41dd7a336764e474c598cd9fdf1178a25985677 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 18:34:22 +0200 Subject: [PATCH 057/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 46b94b986c..a3003b6ab1 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -211,6 +211,8 @@ module.exports = { 'add a remote #group2': function (browser: NightwatchBrowser) { browser .pause(1000) + .clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="remotes-panel"]') .click('*[data-id="remotes-panel"]') .click({ selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="fetch-repositories"]', From 91185e963360c0c53b3cc25ee8160f7107fa25bc Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sat, 24 Aug 2024 19:55:32 +0200 Subject: [PATCH 058/312] test disconnect --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 15 ++++++++++++++- .../git/src/components/github/devicecode.tsx | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index a3003b6ab1..30714c3fc1 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -207,7 +207,20 @@ module.exports = { locateStrategy: 'xpath' }) }, - + 'disconnect github #group1': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="disconnect-github"]') + .click('*[data-id="disconnect-github"]') + .waitForElementNotPresent('*[data-id="connected-as-bunsenstraat"]') + }, + 'check the FE for the disconnected auth user #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementNotPresent('*[data-id="filepanel-connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="filepanel-login-github"]') + }, 'add a remote #group2': function (browser: NightwatchBrowser) { browser .pause(1000) diff --git a/libs/remix-ui/git/src/components/github/devicecode.tsx b/libs/remix-ui/git/src/components/github/devicecode.tsx index 9c74245bb0..e18a24856d 100644 --- a/libs/remix-ui/git/src/components/github/devicecode.tsx +++ b/libs/remix-ui/git/src/components/github/devicecode.tsx @@ -106,7 +106,7 @@ export const GetDeviceCode = () => { { (context.gitHubUser && context.gitHubUser.isConnected) ?
-
: null From 18117f7b11f81e619339ef6bd207ac7eaebb5b6b Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 26 Aug 2024 09:17:39 +0200 Subject: [PATCH 059/312] remove css --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 19285b9f2b..2e5a72fd1e 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -974,8 +974,8 @@ export function Workspace() { tooltipText={} >
- logInGithub() } className="fa-brands fa-github-alt text-success ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> - logInGithub() } className="ml-1 text-success"> Sign in + logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> + logInGithub() } className="ml-1"> Sign in
} From e510e308d31b25c277ee51e70b7c06a87e12759c Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 26 Aug 2024 09:26:32 +0200 Subject: [PATCH 060/312] Update remix-ui-workspace.tsx --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 2e5a72fd1e..c6368e86fd 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -974,8 +974,8 @@ export function Workspace() { tooltipText={} >
- logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem' }} aria-hidden="true"> - logInGithub() } className="ml-1"> Sign in + logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem' }} style={{ cursor: 'pointer' }} aria-hidden="true"> + logInGithub() } className="ml-1 style={{ cursor: 'pointer' }} "> Sign in
} From 85c8b03c41e21eafa45ca20f8d13fb813281a791 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 26 Aug 2024 09:31:24 +0200 Subject: [PATCH 061/312] Update remix-ui-workspace.tsx --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c6368e86fd..f6bf6d4184 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -974,7 +974,7 @@ export function Workspace() { tooltipText={} >
- logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem' }} style={{ cursor: 'pointer' }} aria-hidden="true"> + logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem', cursor: 'pointer' }} aria-hidden="true"> logInGithub() } className="ml-1 style={{ cursor: 'pointer' }} "> Sign in
From 54e3c9fbca15b2d801b87e0bd314e18077be0a7c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 18:51:10 +0200 Subject: [PATCH 062/312] pagination --- .../buttons/sourcecontrolbuttons.tsx | 4 +- libs/remix-ui/git/src/components/gitui.tsx | 12 +++-- .../git/src/components/panels/branches.tsx | 54 +++++++++++++++---- libs/remix-ui/git/src/lib/gitactions.ts | 23 +++++--- libs/remix-ui/git/src/lib/listeners.ts | 12 ++--- libs/remix-ui/git/src/state/actions.ts | 2 + libs/remix-ui/git/src/types/index.ts | 13 ++++- 7 files changed, 90 insertions(+), 30 deletions(-) diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index 250e44628c..ba9e10af21 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -4,7 +4,7 @@ import { CustomTooltip } from "@remix-ui/helper" import React, { useEffect, useState } from "react" import { FormattedMessage } from "react-intl" import { gitActionsContext } from "../../state/context" -import { branch, gitMatomoEventTypes, remote } from "../../types" +import { branch, defaultGitState, gitMatomoEventTypes, remote } from "../../types" import { gitPluginContext } from "../gitui" import GitUIButton from "./gituibutton" import { syncStateContext } from "./sourceControlBase" @@ -54,7 +54,7 @@ export const SourceControlButtons = () => { const refresh = async() => { await sendToMatomo(gitMatomoEventTypes.REFRESH) await actions.getFileStatusMatrix(null) - await actions.gitlog() + actions.setStateGitLogCount(defaultGitState.gitLogCount) } const buttonsDisabled = () => { diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index f5d1460487..7072165169 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useReducer, useState } from 'react' -import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog } from '../lib/gitactions' +import React, { useEffect, useReducer, useState, useContext } from 'react' +import { add, addall, checkout, checkoutfile, clone, commit, createBranch, remoteBranches, repositories, rm, getCommitChanges, diff, resolveRef, getBranchCommits, setUpstreamRemote, loadGitHubUserFromToken, getBranches, getRemotes, remoteCommits, saveGitHubCredentials, getGitHubCredentialsFromLocalStorage, fetch, pull, push, setDefaultRemote, addRemote, removeRemote, sendToGitLog, clearGitLog, getBranchDifferences, getFileStatusMatrix, init, showAlert, gitlog, setStateGitLogCount } from '../lib/gitactions' import { loadFiles, setCallBacks } from '../lib/listeners' import { openDiff, openFile, saveToken, sendToMatomo, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' @@ -70,6 +70,11 @@ export const GitUI = (props: IGitUi) => { }, [appLoaded]) + useEffect(() => { + if (!appLoaded) return + gitlog(gitState.gitLogCount) + }, [gitState.timestamp, gitState.gitLogCount]) + useEffect(() => { if (!appLoaded) return async function checkconfig() { @@ -155,7 +160,8 @@ export const GitUI = (props: IGitUi) => { clearGitLog, getFileStatusMatrix, gitlog, - init + init, + setStateGitLogCount } const pluginActionsProviderValue = { diff --git a/libs/remix-ui/git/src/components/panels/branches.tsx b/libs/remix-ui/git/src/components/panels/branches.tsx index 789550589e..30fde0168c 100644 --- a/libs/remix-ui/git/src/components/panels/branches.tsx +++ b/libs/remix-ui/git/src/components/panels/branches.tsx @@ -1,5 +1,4 @@ import React, { useEffect, useState } from "react"; -import { Alert } from "react-bootstrap"; import { gitActionsContext } from "../../state/context"; import { remote } from "../../types"; import GitUIButton from "../buttons/gituibutton"; @@ -8,39 +7,76 @@ import { LocalBranchDetails } from "./branches/localbranchdetails"; import { RemoteBranchDetails } from "./branches/remotebranchedetails"; import { faSync } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { branch } from "@remix-api"; + +const pageLength = 5; export const Branches = () => { const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) + const [localBranchPage, setLocalBranchPage] = useState(1); + const [remoteBranchPage, setRemoteBranchPage] = useState(1); const [newBranch, setNewBranch] = useState({ value: "" }); + const [localBranches, setLocalBranches] = useState([]); + const [remoteBranches, setRemoteBranches] = useState([]); + const [currentBranch, setCurrentBranch] = useState(null); const handleChange = (e: React.ChangeEvent) => { setNewBranch({ value: e.currentTarget.value }); }; + useEffect(() => { + if (context.branches) { + + if (context.currentBranch && context.currentBranch.name !== '') { + setCurrentBranch(context.branches.filter((branch, index) => !branch.remote && branch.name === context.currentBranch.name)[0]); + setLocalBranches(context.branches.filter((branch, index) => !branch.remote && branch.name !== context.currentBranch.name)); + } else { + setLocalBranches(context.branches.filter((branch, index) => !branch.remote)); + } + if (context.upstream) { + setRemoteBranches(context.branches.filter((branch, index) => branch.remote && branch.remote.name === context.upstream.name)); + } else { + setRemoteBranches([]); + } + } else { + setLocalBranches([]); + setRemoteBranches([]); + } + }, [context.branches, context.defaultRemote, context.upstream, context.currentBranch]); + return ( <>
{context.branches && context.branches.length ?
- - {context.branches && context.branches.filter((branch, index) => !branch.remote).map((branch, index) => { +
{localBranches.length}
+ {currentBranch && } + {context.branches && localBranches.slice(0, localBranchPage * pageLength).map((branch, index) => { return ( ); })} + {context.branches && localBranches.length > localBranchPage * pageLength && { + setLocalBranchPage(localBranchPage + 1) + }}>Show more}

{context.upstream ? <>
- - {context.branches && context.branches.filter((branch, index) => branch.remote && branch.remote.name === context.upstream.name).map((branch, index) => { - return ( - - ); - })} +
{remoteBranches.length}
+ {context.branches && remoteBranches + .slice(0, remoteBranchPage * pageLength) + .map((branch, index) => { + return ( + + ); + })} + {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { + setRemoteBranchPage(remoteBranchPage + 1); + }}>Show more

} { await actions.fetch({ remote: context.upstream diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 1805289dfc..8d9cc4f97a 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -1,6 +1,6 @@ import { ReadBlobResult, ReadCommitResult } from "isomorphic-git"; import React from "react"; -import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences } from "../state/gitpayload"; +import { fileStatus, fileStatusMerge, setRemoteBranchCommits, resetRemoteBranchCommits, setBranches, setCanCommit, setCommitChanges, setCommits, setCurrentBranch, setGitHubUser, setLoading, setRemoteBranches, setRemotes, setRepos, setUpstream, setLocalBranchCommits, setBranchDifferences, setRemoteAsDefault, setScopes, setLog, clearLog, setUserEmails, setCurrenHead, setStoragePayload, resetBranchDifferences, setGitLogCount, setTimestamp } from "../state/gitpayload"; import { GitHubUser, branch, commitChange, gitActionDispatch, statusMatrixType, gitState, branchDifference, remote, gitLog, fileStatusResult, customGitApi, IGitApi, cloneInputType, fetchInputType, pullInputType, pushInputType, checkoutInput, rmInput, addInput, repository, userEmails, storage, gitMatomoEventTypes } from '../types'; import { removeSlash } from "../utils"; import { disableCallBacks, enableCallBacks } from "./listeners"; @@ -41,7 +41,7 @@ export const setPlugin = (p: Plugin, dispatcher: React.Dispatch { await sendToMatomo(gitMatomoEventTypes.INIT) await plugin.call('dgitApi', "init"); - await gitlog(); + dispatch(setTimestamp(Date.now())) await getBranches(); } @@ -81,13 +81,13 @@ export const getFileStatusMatrix = async (filepaths: string[]) => { dispatch(setLoading(false)) } -export const getCommits = async () => { +export const getCommits = async (depth: number) => { try { const commits: ReadCommitResult[] = await plugin.call( 'dgitApi', "log", - { ref: "HEAD" } + { ref: "HEAD", depth: depth } ); return commits; @@ -96,11 +96,12 @@ export const getCommits = async () => { } } -export const gitlog = async () => { +export const gitlog = async (depth: number) => { + console.log('gitlog start') dispatch(setLoading(true)) let commits = [] try { - commits = await getCommits() + commits = await getCommits(depth) } catch (e) { } dispatch(setCommits(commits)) @@ -108,6 +109,10 @@ export const gitlog = async () => { dispatch(setLoading(false)) } +export const setStateGitLogCount = async (count: number) => { + dispatch(setGitLogCount(count)) +} + export const showCurrentBranch = async () => { try { const branch = await currentBranch(); @@ -342,7 +347,7 @@ export const fetch = async (input: fetchInputType) => { try { await plugin.call('dgitApi', 'fetch', input); if (!input.quiet) { - await gitlog() + dispatch(setTimestamp(Date.now())) await getBranches() } } catch (e: any) { @@ -359,7 +364,7 @@ export const pull = async (input: pullInputType) => { await disableCallBacks() try { await plugin.call('dgitApi', 'pull', input) - await gitlog() + dispatch(setTimestamp(Date.now())) } catch (e: any) { console.log(e) await parseError(e) @@ -393,6 +398,8 @@ const tokenWarning = async () => { const parseError = async (e: any) => { console.trace(e) + if(!e.message) return + // if message conttains 401 Unauthorized, show token warning if (e.message.includes('401')) { await sendToMatomo(gitMatomoEventTypes.ERROR, ['401']) diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index a873b303f7..161bfd5af2 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -1,6 +1,6 @@ import React from "react"; -import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails } from "../state/gitpayload"; +import { setCanUseApp, setLoading, setRepoName, setGItHubToken, setLog, setGitHubUser, setUserEmails, setTimestamp } from "../state/gitpayload"; import { gitActionDispatch, gitUIPanels, storage } from "../types"; import { Plugin } from "@remixproject/engine"; import { getBranches, getFileStatusMatrix, loadGitHubUserFromToken, getRemotes, gitlog, setPlugin, setStorage } from "./gitactions"; @@ -72,7 +72,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -84,7 +84,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -111,7 +111,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }, 10) loadFileQueue.enqueue(async () => { getBranches() @@ -123,7 +123,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { loadFileQueue.enqueue(async () => { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) loadFileQueue.enqueue(async () => { getBranches() @@ -145,7 +145,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - gitlog() + gitDispatch(setTimestamp(Date.now())) }) }) plugin.on('manager', 'pluginActivated', async (p: Profile) => { diff --git a/libs/remix-ui/git/src/state/actions.ts b/libs/remix-ui/git/src/state/actions.ts index 6aa8b95bff..821c049cd0 100644 --- a/libs/remix-ui/git/src/state/actions.ts +++ b/libs/remix-ui/git/src/state/actions.ts @@ -44,6 +44,8 @@ export interface ActionPayloadTypes { CLEAR_LOG: void SET_USER_EMAILS: userEmails SET_STORAGE: storage + SET_TIMESTAMP: number + SET_GIT_LOG_COUNT: number } export interface Action { diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 31e34db978..f3fd48e499 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -185,6 +185,8 @@ export type gitState = { gitHubScopes: string[] gitHubAccessToken: string log: gitLog[] + timestamp: number + gitLogCount: number } export type gitLog = { type: 'error' | 'warning' | 'info' | 'success', @@ -304,7 +306,9 @@ export const defaultGitState: gitState = { userEmails: [] as userEmails, gitHubScopes: [], gitHubAccessToken: "", - log: [] + log: [], + timestamp: 0, + gitLogCount: 22 } export const defaultLoaderState: loaderState = { @@ -494,4 +498,9 @@ export interface clearLogAction { type: string } -export type gitActionDispatch = setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction \ No newline at end of file +export interface setTimeStampAction { + type: string, + payload: number +} + +export type gitActionDispatch = setTimeStampAction | setCurrentHeadAction | clearLogAction | setLogAction | setDefaultRemoteAction | setTokenAction | setUpstreamAction | setRemoteBranchCommitsAction | setLocalBranchCommitsAction | setBranchDifferencesAction | setRemotesAction | setCurrentBranchAction | fileStatusAction | setLoadingAction | setCanUseAppAction | setRepoNameAction | setCommitsAction | setBranchesAction | setReposAction | setRemoteBranchesAction From 8c064680ee137b9d26e432a18503c3ac2915db47 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 31 Jul 2024 18:51:15 +0200 Subject: [PATCH 063/312] pagination --- .../git/src/components/panels/branches.tsx | 3 +- .../git/src/components/panels/commits.tsx | 9 +++-- .../src/components/panels/remoteselect.tsx | 34 +++++++++++++++---- libs/remix-ui/git/src/state/context.tsx | 3 +- libs/remix-ui/git/src/state/gitpayload.ts | 14 ++++++++ libs/remix-ui/git/src/state/gitreducer.tsx | 13 ++++++- libs/remix-ui/git/src/types/index.ts | 2 +- 7 files changed, 61 insertions(+), 17 deletions(-) diff --git a/libs/remix-ui/git/src/components/panels/branches.tsx b/libs/remix-ui/git/src/components/panels/branches.tsx index 30fde0168c..38804b57aa 100644 --- a/libs/remix-ui/git/src/components/panels/branches.tsx +++ b/libs/remix-ui/git/src/components/panels/branches.tsx @@ -1,13 +1,12 @@ import React, { useEffect, useState } from "react"; import { gitActionsContext } from "../../state/context"; -import { remote } from "../../types"; +import { branch, remote } from "../../types"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; import { LocalBranchDetails } from "./branches/localbranchdetails"; import { RemoteBranchDetails } from "./branches/remotebranchedetails"; import { faSync } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { branch } from "@remix-api"; const pageLength = 5; diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index 8fa50a9d99..a7ed6d42e8 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -1,12 +1,10 @@ -import { checkout, ReadCommitResult } from "isomorphic-git"; +import { ReadCommitResult } from "isomorphic-git"; import React from "react"; import { gitActionsContext } from "../../state/context"; import GitUIButton from "../buttons/gituibutton"; import { gitPluginContext } from "../gitui"; -import LoaderIndicator from "../navigation/loaderindicator"; import { BranchDifferences } from "./branches/branchdifferences"; import { CommitDetails } from "./commits/commitdetails"; -import { CommitSummary } from "./commits/commitsummary"; export const Commits = () => { const [hasNextPage, setHasNextPage] = React.useState(true) @@ -22,14 +20,15 @@ export const Commits = () => { }; const loadNextPage = () => { + actions.setStateGitLogCount(context.gitLogCount + 5) actions.fetch({ remote: null, ref: context.currentBranch, relative: true, depth: 5, - singleBranch: true + singleBranch: true, + quiet: true }) - } const getRemote = () => { diff --git a/libs/remix-ui/git/src/components/panels/remoteselect.tsx b/libs/remix-ui/git/src/components/panels/remoteselect.tsx index 1bff2867b9..8b2f6d526c 100644 --- a/libs/remix-ui/git/src/components/panels/remoteselect.tsx +++ b/libs/remix-ui/git/src/components/panels/remoteselect.tsx @@ -1,11 +1,10 @@ -import { branch, checkout, ReadCommitResult } from "isomorphic-git"; import React, { useEffect, useState } from "react"; import { gitActionsContext } from "../../state/context"; import { gitPluginContext } from "../gitui"; import { default as dateFormat } from "dateformat"; import { RemotesDetailsNavigation } from "../navigation/remotesdetails"; import { Accordion } from "react-bootstrap"; -import { remote } from "../../types"; +import { branch, remote } from "../../types"; import { RemoteBranchDetails } from "./branches/remotebranchedetails"; import GitUIButton from "../buttons/gituibutton"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -16,27 +15,48 @@ export interface RemoteSelectProps { openDefault: boolean } +const pageLength = 5; + export const Remoteselect = (props: RemoteSelectProps) => { const { remote, openDefault } = props; const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) const [activePanel, setActivePanel] = useState(""); + const [remoteBranchPage, setRemoteBranchPage] = useState(1); + const [remoteBranches, setRemoteBranches] = useState([]); useEffect(() => { setActivePanel(openDefault ? "0" : "") }, [openDefault]) + useEffect(() => { + if (context.branches) { + if (remote && remote.name) { + setRemoteBranches(context.branches.filter((branch, index) => branch.remote && branch.remote.name === remote.name)) + } else { + setRemoteBranches([]); + } + } else { + setRemoteBranches([]); + } + }, [context.branches, context.defaultRemote, context.upstream, remote]); + return ( <> <> - {context.branches && context.branches.filter((branch, index) => branch.remote && branch.remote.name === remote.name).map((branch, index) => { - return ( - - ); - })} + {context.branches && remoteBranches + .slice(0, remoteBranchPage * pageLength) + .map((branch, index) => { + return ( + + ); + })} + {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { + setRemoteBranchPage(remoteBranchPage + 1); + }}>Show more

} { await actions.fetch({ remote diff --git a/libs/remix-ui/git/src/state/context.tsx b/libs/remix-ui/git/src/state/context.tsx index 4608406a7f..e403201dde 100644 --- a/libs/remix-ui/git/src/state/context.tsx +++ b/libs/remix-ui/git/src/state/context.tsx @@ -31,8 +31,9 @@ export interface gitActions { sendToGitLog: (message: gitLog) => Promise clearGitLog: () => Promise getFileStatusMatrix(filespaths:[]): Promise - gitlog(): Promise + gitlog(depth: number): Promise init(): Promise + setStateGitLogCount(count: number): Promise } export const gitActionsContext = React.createContext(null) diff --git a/libs/remix-ui/git/src/state/gitpayload.ts b/libs/remix-ui/git/src/state/gitpayload.ts index 1c93a40a90..cf6063ffc3 100644 --- a/libs/remix-ui/git/src/state/gitpayload.ts +++ b/libs/remix-ui/git/src/state/gitpayload.ts @@ -231,3 +231,17 @@ export const setStoragePayload = (storage: storage) => { payload: storage } } + +export const setTimestamp = (timestamp: number) => { + return { + type: 'SET_TIMESTAMP', + payload: timestamp + } +} + +export const setGitLogCount = (count: number) => { + return { + type: 'SET_GIT_LOG_COUNT', + payload: count + } +} diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index 592360a94a..d256c6bf0a 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -215,6 +215,17 @@ export const gitReducer = (state: gitState = defaultGitState, action: Actions): ...state, storage: action.payload } - + case 'SET_TIMESTAMP': + return { + ...state, + timestamp: action.payload + } + + case 'SET_GIT_LOG_COUNT': + return { + ...state, + gitLogCount: action.payload + } } + } diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index f3fd48e499..f872203e79 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -21,7 +21,7 @@ export interface IGitApi { clone(input: cloneInputType): Promise branches(input?: branchesInput): Promise, remotes(): Promise, - log(cmd: { ref: string }): Promise, + log(cmd: { ref: string, depth?: number }): Promise, remotecommits(input: remoteCommitsInputType): Promise fetch(input: fetchInputType): Promise pull(input: pullInputType): Promise From 20fe46d7bf3c692a770523307be55450a910ac45 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 12 Aug 2024 16:58:09 +0200 Subject: [PATCH 064/312] fix loadnextpage --- libs/remix-ui/git/src/components/panels/commits.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index a7ed6d42e8..ace0ae1c7d 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -19,9 +19,9 @@ export const Commits = () => { } }; - const loadNextPage = () => { - actions.setStateGitLogCount(context.gitLogCount + 5) - actions.fetch({ + const loadNextPage = async () => { + + await actions.fetch({ remote: null, ref: context.currentBranch, relative: true, @@ -29,6 +29,8 @@ export const Commits = () => { singleBranch: true, quiet: true }) + + await actions.setStateGitLogCount(context.gitLogCount + 5) } const getRemote = () => { From 9351ea9c32b454df722f1b572c1b178bccf9a479 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 12 Aug 2024 17:38:28 +0200 Subject: [PATCH 065/312] lint --- libs/remix-ui/git/src/components/panels/commits.tsx | 2 +- libs/remix-ui/git/src/lib/gitactions.ts | 2 +- libs/remix-ui/git/src/state/gitreducer.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index ace0ae1c7d..b2acadbf9c 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -20,7 +20,7 @@ export const Commits = () => { }; const loadNextPage = async () => { - + await actions.fetch({ remote: null, ref: context.currentBranch, diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 8d9cc4f97a..aa6997877a 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -398,7 +398,7 @@ const tokenWarning = async () => { const parseError = async (e: any) => { console.trace(e) - if(!e.message) return + if (!e.message) return // if message conttains 401 Unauthorized, show token warning if (e.message.includes('401')) { diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index d256c6bf0a..a44fc91b39 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -220,7 +220,7 @@ export const gitReducer = (state: gitState = defaultGitState, action: Actions): ...state, timestamp: action.payload } - + case 'SET_GIT_LOG_COUNT': return { ...state, From 997d6a76b801a9b622544f9b62c7d36ad0033846 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 14 Aug 2024 14:39:38 +0200 Subject: [PATCH 066/312] add test --- .../src/tests/dgit_github.test.ts | 62 +++++++++++++++++++ .../components/navigation/branchedetails.tsx | 2 +- .../components/navigation/loaderindicator.tsx | 2 +- .../panels/branches/localbranchdetails.tsx | 2 +- .../panels/branches/remotebranchedetails.tsx | 2 +- .../git/src/components/panels/clone.tsx | 2 +- .../git/src/components/panels/commits.tsx | 2 +- .../panels/commits/commitsummary.tsx | 2 +- 8 files changed, 69 insertions(+), 7 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index da38485359..9b67794bab 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -310,4 +310,66 @@ module.exports = { } }) }, + // pagination test + 'clone repo #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="clone-url"]') + .setValue('*[data-id="clone-url"]', 'https://github.com/ethereum/awesome-remix') + .waitForElementVisible('*[data-id="clone-branch"]') + .setValue('*[data-id="clone-branch"]', 'master') + .waitForElementVisible('*[data-id="clone-btn"]') + .click('*[data-id="clone-btn"]') + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'Update settings for git #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .setValue('*[data-id="githubToken"]', 'invalidtoken') + .setValue('*[data-id="gitubUsername"]', 'git') + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .click('*[data-id="saveGitHubCredentials"]') + .modalFooterOKClick('github-credentials-error') + }, + 'check the commits panel for pagination #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="commits-panel"]') + .click('*[data-id="commits-panel"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length == 1) + }) + }, + 'load more commits #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="load-more-commits"]') + .click('*[data-id="load-more-commits"]') + .waitForElementVisible('*[data-id="loader-indicator"]') + .waitForElementNotPresent('*[data-id="loader-indicator"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > 2) + }) + }, + 'load more branches from remote #group3': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="branches-panel"]') + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]', + locateStrategy: 'xpath' + }) + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length == 1) + }) + .waitForElementVisible('*[data-id="remote-sync-origin"]') + .click('*[data-id="remote-sync-origin"]') + .waitForElementVisible('*[data-id="loader-indicator"]') + .waitForElementNotPresent('*[data-id="loader-indicator"]') + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > 2) + }) + } } diff --git a/libs/remix-ui/git/src/components/navigation/branchedetails.tsx b/libs/remix-ui/git/src/components/navigation/branchedetails.tsx index 2407e5a071..9de954fc94 100644 --- a/libs/remix-ui/git/src/components/navigation/branchedetails.tsx +++ b/libs/remix-ui/git/src/components/navigation/branchedetails.tsx @@ -64,7 +64,7 @@ export const BrancheDetailsNavigation = (props: BrancheDetailsNavigationProps) = return ( <>
-
handleClick()} role={'button'} className='pointer d-flex flex-row w-100 commit-navigation'> +
handleClick()} role={'button'} className='pointer d-flex flex-row w-100 commit-navigation'> { activePanel === eventKey ? : } diff --git a/libs/remix-ui/git/src/components/navigation/loaderindicator.tsx b/libs/remix-ui/git/src/components/navigation/loaderindicator.tsx index 8c13e101b3..ee5e44aff0 100644 --- a/libs/remix-ui/git/src/components/navigation/loaderindicator.tsx +++ b/libs/remix-ui/git/src/components/navigation/loaderindicator.tsx @@ -13,7 +13,7 @@ const LoaderIndicator = ({ type, isLoadingCondition }: LoaderIndicatorProps) => const isLoading = loading || isLoadingCondition if (!isLoading) return null return ( - + ); }; diff --git a/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx b/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx index 2b996a3d34..da592229b3 100644 --- a/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/localbranchdetails.tsx @@ -81,7 +81,7 @@ export const LocalBranchDetails = (props: BrancheDetailsProps) => { })}
- {hasNextPage && Load more} + {hasNextPage && Load more} ) diff --git a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx index d80e999ee1..da97dea0f2 100644 --- a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx @@ -107,7 +107,7 @@ export const RemoteBranchDetails = (props: BrancheDetailsProps) => { })}
- {hasNextPage && Load more} + {hasNextPage && Load more}
) diff --git a/libs/remix-ui/git/src/components/panels/clone.tsx b/libs/remix-ui/git/src/components/panels/clone.tsx index e7719fe68e..ab3ed7d6cb 100644 --- a/libs/remix-ui/git/src/components/panels/clone.tsx +++ b/libs/remix-ui/git/src/components/panels/clone.tsx @@ -78,7 +78,7 @@ export const Clone = (props: CloneProps) => { onGitHubCloneUrlChange(e.target.value)} aria-describedby="urlprepend" /> - onCloneBranchChange(e.target.value)} value={cloneBranch} className="form-control mb-2 mt-2" placeholder="branch" type="text" id="clonebranch" /> + onCloneBranchChange(e.target.value)} value={cloneBranch} className="form-control mb-2 mt-2" placeholder="branch" type="text" id="clonebranch" /> { clone() }}>clone diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index b2acadbf9c..db2907a1da 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -57,7 +57,7 @@ export const Commits = () => { })}
- {hasNextPage && Load more} + {hasNextPage && Load more} :
No commits
} diff --git a/libs/remix-ui/git/src/components/panels/commits/commitsummary.tsx b/libs/remix-ui/git/src/components/panels/commits/commitsummary.tsx index bff01b4712..bd1e3a7dbd 100644 --- a/libs/remix-ui/git/src/components/panels/commits/commitsummary.tsx +++ b/libs/remix-ui/git/src/components/panels/commits/commitsummary.tsx @@ -61,7 +61,7 @@ export const CommitSummary = (props: CommitSummaryProps) => { return ( <> -
+
{commit.commit.message}
{commit.commit.author.name || ""} From 728c9f73344c4131ab2ed7ac5c7b48e89e64052b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 27 Aug 2024 08:11:39 +0200 Subject: [PATCH 067/312] fix test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 2514b4823b..bfb3591900 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -343,8 +343,9 @@ module.exports = { }, // pagination test 'clone repo #group3': function (browser: NightwatchBrowser) { - browser. - clickLaunchIcon('dgit') + browser + .waitForElementVisible('*[data-id="clone-panel"]') + .click('*[data-id="clone-panel"]') .waitForElementVisible('*[data-id="clone-url"]') .setValue('*[data-id="clone-url"]', 'https://github.com/ethereum/awesome-remix') .waitForElementVisible('*[data-id="clone-branch"]') @@ -357,6 +358,8 @@ module.exports = { 'Update settings for git #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') .setValue('*[data-id="githubToken"]', 'invalidtoken') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') From 61cf0d200b3a170c2bde6ebed6a515a55994731c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 27 Aug 2024 08:27:26 +0200 Subject: [PATCH 068/312] fix --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index bfb3591900..daa7d17baa 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -344,6 +344,7 @@ module.exports = { // pagination test 'clone repo #group3': function (browser: NightwatchBrowser) { browser + .clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="clone-panel"]') .click('*[data-id="clone-panel"]') .waitForElementVisible('*[data-id="clone-url"]') From 873ec52f0197c4998144ddaa5366a3f8cbfdcf6f Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Tue, 27 Aug 2024 12:25:34 +0100 Subject: [PATCH 069/312] Export witness as json --- .../circuit-compiler/src/app/actions/index.ts | 14 +++++++++-- .../src/app/components/container.tsx | 2 +- .../src/app/components/witness.tsx | 25 +++++++++++++++---- .../src/app/reducers/state.ts | 9 ++++++- .../src/app/services/circomPluginClient.ts | 3 ++- apps/circuit-compiler/src/app/types/index.ts | 2 ++ .../src/app/tabs/locales/en/circuit.json | 1 + 7 files changed, 46 insertions(+), 10 deletions(-) diff --git a/apps/circuit-compiler/src/app/actions/index.ts b/apps/circuit-compiler/src/app/actions/index.ts index 2f48faf2fb..67ac5813d4 100644 --- a/apps/circuit-compiler/src/app/actions/index.ts +++ b/apps/circuit-compiler/src/app/actions/index.ts @@ -19,12 +19,20 @@ export const compileCircuit = async (plugin: CircomPluginClient, appState: AppSt } } -export const computeWitness = async (plugin: CircomPluginClient, status: string, witnessValues: Record) => { +export const computeWitness = async (plugin: CircomPluginClient, appState: AppState, dispatch: ICircuitAppContext['dispatch'], status: string, witnessValues: Record) => { try { if (status !== "computing") { const input = JSON.stringify(witnessValues) + const witness = await plugin.computeWitness(input) - await plugin.computeWitness(input) + if (appState.exportWtnsJson) { + const wtns = await snarkjs.wtns.exportJson(witness) + const wtnsJson = wtns.map(wtn => wtn.toString()) + const fileName = extractNameFromKey(appState.filePath) + const writePath = extractParentFromKey(appState.filePath) + `/.bin/${fileName.replace('.circom', '.wtn.json')}` + + await plugin.call('fileManager', 'writeFile', writePath, JSON.stringify(wtnsJson, null, 2)) + } } else { console.log('Existing witness computation in progress') } @@ -110,6 +118,7 @@ export const generateProof = async (plugin: CircomPluginClient, appState: AppSta const { proof, publicSignals } = await snarkjs.groth16.prove(zkey_final, wtns, zkLogger(plugin, dispatch, 'SET_PROOF_FEEDBACK')) const verified = await snarkjs.groth16.verify(vKey, publicSignals, proof, zkLogger(plugin, dispatch, 'SET_PROOF_FEEDBACK')) + plugin.call('fileManager', 'writeFile', `${extractParentFromKey(appState.filePath)}/groth16/zk/build/proof.json`, JSON.stringify(proof, null, 2)) plugin.call('terminal', 'log', { type: 'log', value: 'zk proof validity ' + verified }) if (appState.exportVerifierCalldata) { const calldata = await snarkjs.groth16.exportSolidityCallData(proof, publicSignals) @@ -120,6 +129,7 @@ export const generateProof = async (plugin: CircomPluginClient, appState: AppSta const { proof, publicSignals } = await snarkjs.plonk.prove(zkey_final, wtns, zkLogger(plugin, dispatch, 'SET_PROOF_FEEDBACK')) const verified = await snarkjs.plonk.verify(vKey, publicSignals, proof, zkLogger(plugin, dispatch, 'SET_PROOF_FEEDBACK')) + plugin.call('fileManager', 'writeFile', `${extractParentFromKey(appState.filePath)}/plonk/zk/build/proof.json`, JSON.stringify(proof, null, 2)) plugin.call('terminal', 'log', { type: 'log', value: 'zk proof validity ' + verified }) if (appState.exportVerifierCalldata) { const calldata = await snarkjs.plonk.exportSolidityCallData(proof, publicSignals) diff --git a/apps/circuit-compiler/src/app/components/container.tsx b/apps/circuit-compiler/src/app/components/container.tsx index 982395d11e..3a18465fa4 100644 --- a/apps/circuit-compiler/src/app/components/container.tsx +++ b/apps/circuit-compiler/src/app/components/container.tsx @@ -140,7 +140,7 @@ export function Container () { 0}> <> - + diff --git a/apps/circuit-compiler/src/app/components/witness.tsx b/apps/circuit-compiler/src/app/components/witness.tsx index 0a14537cde..dd40b9b2d0 100644 --- a/apps/circuit-compiler/src/app/components/witness.tsx +++ b/apps/circuit-compiler/src/app/components/witness.tsx @@ -1,12 +1,14 @@ import { RenderIf, RenderIfNot } from "@remix-ui/helper"; import { FormattedMessage } from "react-intl"; -import { CompilerStatus } from "../types"; import { computeWitness } from "../actions"; -import { useState } from "react"; -import type { CircomPluginClient } from "../services/circomPluginClient"; +import { useContext, useState } from "react"; import * as remixLib from '@remix-project/remix-lib' +import { CircuitAppContext } from "../contexts"; -export function WitnessSection ({ plugin, signalInputs, status }: {plugin: CircomPluginClient, signalInputs: string[], status: CompilerStatus}) { +export function WitnessSection () { + const circuitApp = useContext(CircuitAppContext) + const { signalInputs, status, exportWtnsJson } = circuitApp.appState + const { plugin, dispatch, appState } = circuitApp const [witnessValues, setWitnessValues] = useState>({}) const handleSignalInput = (e: any) => { @@ -47,9 +49,22 @@ export function WitnessSection ({ plugin, signalInputs, status }: {plugin: Circo
)) } +
+ { dispatch({ type: 'SET_EXPORT_WTNS_JSON', payload: !exportWtnsJson }) }} + checked={exportWtnsJson} + /> + +
+ }}>Login with GitHub } {gitHubResponse && !authorized &&
From 2fac2a08d5aa0ed1a70b7573b70c9d71270dddad Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 26 Aug 2024 12:19:06 +0200 Subject: [PATCH 076/312] add sendRawTransaction --- libs/remix-lib/src/execution/txExecution.ts | 9 ++- libs/remix-lib/src/execution/txRunner.ts | 14 ++-- libs/remix-lib/src/execution/txRunnerVM.ts | 73 +++++++++++-------- libs/remix-lib/src/index.ts | 1 + .../src/methods/transactions.ts | 25 +++++++ libs/remix-simulator/src/methods/txProcess.ts | 22 +++--- libs/remix-simulator/test/transactions.ts | 37 ++++++++++ 7 files changed, 129 insertions(+), 52 deletions(-) diff --git a/libs/remix-lib/src/execution/txExecution.ts b/libs/remix-lib/src/execution/txExecution.ts index da8c0248f1..3482a151a7 100644 --- a/libs/remix-lib/src/execution/txExecution.ts +++ b/libs/remix-lib/src/execution/txExecution.ts @@ -1,6 +1,7 @@ 'use strict' import { ethers } from 'ethers' import { getFunctionFragment } from './txHelper' +import { Transaction } from './txRunner' /** * deploy the given contract @@ -16,11 +17,11 @@ import { getFunctionFragment } from './txHelper' * [personal mode enabled, need password to continue] promptCb (okCb, cancelCb) * @param {Function} finalCallback - last callback. */ -export function createContract (from, data, value, gasLimit, txRunner, callbacks, finalCallback) { +export function createContract ({ from, data, value, gasLimit, signed }: Transaction, txRunner, callbacks, finalCallback) { if (!callbacks.confirmationCb || !callbacks.gasEstimationForceSend || !callbacks.promptCb) { return finalCallback('all the callbacks must have been defined') } - const tx = { from: from, to: null, data: data, useCall: false, value: value, gasLimit: gasLimit } + const tx = { from: from, to: null, data: data, useCall: false, value: value, gasLimit: gasLimit, signed } txRunner.rawRun(tx, callbacks.confirmationCb, callbacks.gasEstimationForceSend, callbacks.promptCb, (error, txResult) => { // see universaldapp.js line 660 => 700 to check possible values of txResult (error case) finalCallback(error, txResult) @@ -42,9 +43,9 @@ export function createContract (from, data, value, gasLimit, txRunner, callbacks * [personal mode enabled, need password to continue] promptCb (okCb, cancelCb) * @param {Function} finalCallback - last callback. */ -export function callFunction (from, to, data, value, gasLimit, funAbi, txRunner, callbacks, finalCallback) { +export function callFunction ({ from, to, data, value, gasLimit, signed }: Transaction, funAbi , txRunner, callbacks, finalCallback) { const useCall = funAbi.stateMutability === 'view' || funAbi.stateMutability === 'pure' || funAbi.constant - const tx = { from, to, data, useCall, value, gasLimit } + const tx = { from, to, data, useCall, value, gasLimit, signed } txRunner.rawRun(tx, callbacks.confirmationCb, callbacks.gasEstimationForceSend, callbacks.promptCb, (error, txResult) => { // see universaldapp.js line 660 => 700 to check possible values of txResult (error case) finalCallback(error, txResult) diff --git a/libs/remix-lib/src/execution/txRunner.ts b/libs/remix-lib/src/execution/txRunner.ts index 19f643cc7d..ee2ee5ed2d 100644 --- a/libs/remix-lib/src/execution/txRunner.ts +++ b/libs/remix-lib/src/execution/txRunner.ts @@ -3,13 +3,14 @@ import { EventManager } from '../eventManager' export type Transaction = { from: string, - to: string, + to?: string, value: string, data: string, gasLimit: number, - useCall: boolean, - timestamp?: number - type: '0x1' | '0x2' + useCall?: boolean, + timestamp?: number, + signed?: boolean, + type?: '0x1' | '0x2' } export class TxRunner { @@ -32,9 +33,8 @@ export class TxRunner { } execute (args: Transaction, confirmationCb, gasEstimationForceSend, promptCb, callback) { - let data = args.data - if (data.slice(0, 2) !== '0x') { - data = '0x' + data + if (args.data && args.data.slice(0, 2) !== '0x') { + args.data = '0x' + args.data } this.internalRunner.execute(args, confirmationCb, gasEstimationForceSend, promptCb, callback) } diff --git a/libs/remix-lib/src/execution/txRunnerVM.ts b/libs/remix-lib/src/execution/txRunnerVM.ts index 20f3e43851..6c4c40b27b 100644 --- a/libs/remix-lib/src/execution/txRunnerVM.ts +++ b/libs/remix-lib/src/execution/txRunnerVM.ts @@ -69,47 +69,60 @@ export class TxRunnerVM { } try { - this.runInVm(args.from, args.to, data, args.value, args.gasLimit, args.useCall, callback) + this.runInVm(args, callback) } catch (e) { callback(e, null) } } - async runInVm (from: string, to: string, data: string, value: string, gasLimit: number, useCall: boolean, callback: VMExecutionCallBack) { + async runInVm (tx: InternalTransaction, callback: VMExecutionCallBack) { + const { to, data, value, gasLimit, useCall, signed } = tx + let { from } = tx let account - if (!from && useCall && Object.keys(this.vmaccounts).length) { - from = Object.keys(this.vmaccounts)[0] - account = this.vmaccounts[from] - } else account = this.vmaccounts[from] - - if (!account) { - return callback('Invalid account selected') - } try { - const res = await this.getVMObject().stateManager.getAccount(Address.fromString(from)) const EIP1559 = this.commonContext.hardfork() !== 'berlin' // berlin is the only pre eip1559 fork that we handle. let tx - if (!EIP1559) { - tx = LegacyTransaction.fromTxData({ - nonce: useCall ? this.nextNonceForCall : res.nonce, - gasPrice: '0x1', - gasLimit: gasLimit, - to: (to as AddressLike), - value: (value as BigIntLike), - data: hexToBytes(data) - }, { common: this.commonContext }).sign(account.privateKey) - } else { - tx = FeeMarketEIP1559Transaction.fromTxData({ - nonce: useCall ? this.nextNonceForCall : res.nonce, - maxPriorityFeePerGas: '0x01', - maxFeePerGas: '0x7', - gasLimit: gasLimit, - to: (to as AddressLike), - value: (value as BigIntLike), - data: hexToBytes(data) - }).sign(account.privateKey) + if (signed) { + if (!EIP1559) { + tx = LegacyTransaction.fromSerializedTx(hexToBytes(data), { common: this.commonContext }) + } else { + tx = FeeMarketEIP1559Transaction.fromSerializedTx(hexToBytes(data), { common: this.commonContext }) + } } + else { + if (!from && useCall && Object.keys(this.vmaccounts).length) { + from = Object.keys(this.vmaccounts)[0] + account = this.vmaccounts[from] + } else account = this.vmaccounts[from] + + if (!account) { + return callback('Invalid account selected') + } + + const res = await this.getVMObject().stateManager.getAccount(Address.fromString(from)) + if (!EIP1559) { + tx = LegacyTransaction.fromTxData({ + nonce: useCall ? this.nextNonceForCall : res.nonce, + gasPrice: '0x1', + gasLimit: gasLimit, + to: (to as AddressLike), + value: (value as BigIntLike), + data: hexToBytes(data) + }, { common: this.commonContext }).sign(account.privateKey) + } else { + tx = FeeMarketEIP1559Transaction.fromTxData({ + nonce: useCall ? this.nextNonceForCall : res.nonce, + maxPriorityFeePerGas: '0x01', + maxFeePerGas: '0x7', + gasLimit: gasLimit, + to: (to as AddressLike), + value: (value as BigIntLike), + data: hexToBytes(data) + }).sign(account.privateKey) + } + } + if (useCall) this.nextNonceForCall++ const coinbases = ['0x0e9281e9c6a0808672eaba6bd1220e144c9bb07a', '0x8945a1288dc78a6d8952a92c77aee6730b414778', '0x94d76e24f818426ae84aa404140e8d5f60e10e7e'] diff --git a/libs/remix-lib/src/index.ts b/libs/remix-lib/src/index.ts index a2ff565543..bdf52f11d4 100644 --- a/libs/remix-lib/src/index.ts +++ b/libs/remix-lib/src/index.ts @@ -21,6 +21,7 @@ export { ICompilerApi, ConfigurationSettings, iSolJsonBinData, iSolJsonBinDataBu export { QueryParams } from './query-params' export { VMexecutionResult } from './execution/txRunnerVM' export { Registry } from './registry' +export type { Transaction } from './execution/txRunner' const helpers = { ui: uiHelper, diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 416e2e4ad8..8df2d03d5f 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -63,6 +63,7 @@ export class Transactions { methods () { return { eth_sendTransaction: this.eth_sendTransaction.bind(this), + eth_sendRawTransaction: this.eth_sendRawTransaction.bind(this), eth_getTransactionReceipt: this.eth_getTransactionReceipt.bind(this), eth_getCode: this.eth_getCode.bind(this), eth_call: this.eth_call.bind(this), @@ -80,6 +81,30 @@ export class Transactions { } } + eth_sendRawTransaction (payload, cb) { + console.log('eth_sendRawTransaction', payload) + payload.params[0] = { data: payload.params[0], signed: true } + processTx(this.txRunnerInstance, payload, false, (error, result: VMexecutionResult) => { + if (!error && result) { + this.vmContext.addBlock(result.block) + const hash = bytesToHex(result.tx.hash()) + this.vmContext.trackTx(hash, result.block, result.tx) + const returnValue = `${bytesToHex(result.result.execResult.returnValue) || '0x0'}` + const execResult: VMExecResult = { + exceptionError: result.result.execResult.exceptionError, + executionGasUsed: result.result.execResult.executionGasUsed, + gas: result.result.execResult.gas, + gasRefund: result.result.execResult.gasRefund, + logs: result.result.execResult.logs, + returnValue + } + this.vmContext.trackExecResult(hash, execResult) + return cb(null, result.transactionHash) + } + cb(error) + }) + } + eth_sendTransaction (payload, cb) { // from might be lowercased address (web3) if (payload.params && payload.params.length > 0 && payload.params[0].from) { diff --git a/libs/remix-simulator/src/methods/txProcess.ts b/libs/remix-simulator/src/methods/txProcess.ts index 61a9821ab5..b2d78092c5 100644 --- a/libs/remix-simulator/src/methods/txProcess.ts +++ b/libs/remix-simulator/src/methods/txProcess.ts @@ -1,7 +1,7 @@ -import { execution } from '@remix-project/remix-lib' +import { execution, Transaction } from '@remix-project/remix-lib' const TxExecution = execution.txExecution -function runCall (payload, from, to, data, value, gasLimit, txRunner, callbacks, callback) { +function runCall ({ from, to, data, value, gasLimit, signed }: Transaction, txRunner, callbacks, callback) { const finalCallback = function (err, result) { if (err) { return callback(err) @@ -9,10 +9,10 @@ function runCall (payload, from, to, data, value, gasLimit, txRunner, callbacks, return callback(null, result) } - TxExecution.callFunction(from, to, data, value, gasLimit, { constant: true }, txRunner, callbacks, finalCallback) + TxExecution.callFunction({ from, to, data, value, gasLimit, signed }, { constant: true }, txRunner, callbacks, finalCallback) } -function runTx (payload, from, to, data, value, gasLimit, txRunner, callbacks, callback) { +function runTx ({ from, to, data, value, gasLimit, signed }: Transaction, txRunner, callbacks, callback) { const finalCallback = function (err, result) { if (err) { return callback(err) @@ -20,10 +20,10 @@ function runTx (payload, from, to, data, value, gasLimit, txRunner, callbacks, c callback(null, result) } - TxExecution.callFunction(from, to, data, value, gasLimit, { constant: false }, txRunner, callbacks, finalCallback) + TxExecution.callFunction({ from, to, data, value, gasLimit, signed }, { constant: false }, txRunner, callbacks, finalCallback) } -function createContract (payload, from, data, value, gasLimit, txRunner, callbacks, callback) { +function createContract ({ from, data, value, gasLimit, signed }: Transaction, txRunner, callbacks, callback) { const finalCallback = function (err, result) { if (err) { return callback(err) @@ -31,11 +31,11 @@ function createContract (payload, from, data, value, gasLimit, txRunner, callbac callback(null, result) } - TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback) + TxExecution.createContract({ from, data, value, gasLimit, signed }, txRunner, callbacks, finalCallback) } export function processTx (txRunnerInstance, payload, isCall, callback) { - let { from, to, data, input, value, gas } = payload.params[0] // eslint-disable-line + let { from, to, data, input, value, gas, signed } = payload.params[0] // eslint-disable-line gas = gas || 3000000 const callbacks = { @@ -54,10 +54,10 @@ export function processTx (txRunnerInstance, payload, isCall, callback) { } if (isCall) { - runCall(payload, from, to, data||input, value, gas, txRunnerInstance, callbacks, callback) + runCall({ from, to, data: data||input, value, gasLimit: gas, signed }, txRunnerInstance, callbacks, callback) } else if (to) { - runTx(payload, from, to, data||input, value, gas, txRunnerInstance, callbacks, callback) + runTx({ from, to, data: data||input, value, gasLimit: gas, signed }, txRunnerInstance, callbacks, callback) } else { - createContract(payload, from, data||input, value, gas, txRunnerInstance, callbacks, callback) + createContract({ from, to: undefined, data: data||input, value, gasLimit: gas, signed }, txRunnerInstance, callbacks, callback) } } diff --git a/libs/remix-simulator/test/transactions.ts b/libs/remix-simulator/test/transactions.ts index 88e7a09c05..a908e797ac 100644 --- a/libs/remix-simulator/test/transactions.ts +++ b/libs/remix-simulator/test/transactions.ts @@ -1,8 +1,11 @@ /* global describe, before, it */ import Web3 from 'web3' +import { LegacyTransaction, FeeMarketEIP1559Transaction } from '@ethereumjs/tx' import { Provider } from '../src/index' const web3 = new Web3() import * as assert from 'assert' +import { bytesToHex, hexToBytes } from 'web3-utils' +import type { AddressLike } from '@ethereumjs/util' describe('Transactions', () => { before(async function () { @@ -37,4 +40,38 @@ describe('Transactions', () => { assert.equal(value, 14) }) }) + + describe('eth_sendRawTransaction', () => { + it('should deploy a contract and call a function using sendRawTransaction', async function () { + const accounts: string[] = await web3.eth.getAccounts() + + const contractCreation = `0x02f908df0105010783069f638080b9088e608060405234801561001057600080fd5b5061005a6040518060400160405280601b81526020017f4f776e657220636f6e7472616374206465706c6f7965642062793a00000000008152503361011a60201b6101e91760201c565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3610356565b6101b88282604051602401610130929190610265565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506101bc60201b60201c565b5050565b6101dd816101d86101e060201b6102851761020160201b60201c565b60201c565b50565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b61021360201b6102cb17819050919050565b61021b610316565b565b610226816102b1565b82525050565b600061023782610295565b61024181856102a0565b93506102518185602086016102e3565b61025a81610345565b840191505092915050565b6000604082019050818103600083015261027f818561022c565b905061028e602083018461021d565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006102bc826102c3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156103015780820151818401526020810190506102e6565b83811115610310576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fd5b6000601f19601f8301169050919050565b610529806103656000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063893d20e81461003b578063a6f9dae114610059575b600080fd5b610043610075565b6040516100509190610382565b60405180910390f35b610073600480360381019061006e91906102ea565b61009e565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906103cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61028182826040516024016101ff92919061039d565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506102a6565b5050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6102bd816102b56102856102c0565b63ffffffff16565b50565b6102cb819050919050565b6102d361046e565b565b6000813590506102e4816104dc565b92915050565b600060208284031215610300576102ff61049d565b5b600061030e848285016102d5565b91505092915050565b61032081610409565b82525050565b6000610331826103ed565b61033b81856103f8565b935061034b81856020860161043b565b610354816104a2565b840191505092915050565b600061036c6013836103f8565b9150610377826104b3565b602082019050919050565b60006020820190506103976000830184610317565b92915050565b600060408201905081810360008301526103b78185610326565b90506103c66020830184610317565b9392505050565b600060208201905081810360008301526103e68161035f565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006104148261041b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101561045957808201518184015260208101905061043e565b83811115610468576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6104e581610409565b81146104f057600080fd5b5056fea2646970667358221220de534e7b87a9a1d73de47545c783b70d95ffebe049e62821ef2ef1c9a0fd7e8664736f6c63430008070033c080a0e9deb1e1b2cebf79e29cd9e69074f47a6680da51cb175f899a0b8c87aa893fb3a06ab1b35f54e47cd86191accdf8c915f998135c8cb58fccdb85125a9d1d1129da` + const receipt = await web3.eth.sendSignedTransaction(contractCreation) + // owner should be 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 + let value = await web3.eth.call({ + from: accounts[0], + to: receipt.contractAddress, + data: '0x893d20e8' + }) + assert.equal(value, '0x0000000000000000000000005B38Da6a701c568545dCfcB03FcB875f56beddC4'.toLowerCase()) + const tx = FeeMarketEIP1559Transaction.fromTxData({ + nonce: 1, + gasLimit: 1000000, + maxPriorityFeePerGas: '0x01', + maxFeePerGas: '0x7', + to: (hexToBytes(receipt.contractAddress) as AddressLike), + value: 0, + data: hexToBytes('0xa6f9dae1000000000000000000000000Ab8483F64d9C6d1EcF9b849Ae677dD3315835cb2') + + }).sign(hexToBytes('0x503f38a9c967ed597e47fe25643985f032b072db8075426a92110f82df48dfcb')) + await web3.eth.sendSignedTransaction(bytesToHex(tx.serialize())) + // owner should be 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2 + value = await web3.eth.call({ + from: accounts[0], + to: receipt.contractAddress, + data: '0x893d20e8' + }) + assert.equal(value, '0x000000000000000000000000Ab8483F64d9C6d1EcF9b849Ae677dD3315835cb2'.toLowerCase()) + }) + }) }) From a66ee47e956ed9f9b9d070770882f0f6bf0e800e Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 27 Aug 2024 15:32:32 +0200 Subject: [PATCH 077/312] Update transactions.ts --- libs/remix-simulator/src/methods/transactions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 8df2d03d5f..714852f693 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -82,7 +82,6 @@ export class Transactions { } eth_sendRawTransaction (payload, cb) { - console.log('eth_sendRawTransaction', payload) payload.params[0] = { data: payload.params[0], signed: true } processTx(this.txRunnerInstance, payload, false, (error, result: VMexecutionResult) => { if (!error && result) { From df9a9f48f4be97207cd4c9e761359ed2b0a5aef3 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 14:29:35 +0200 Subject: [PATCH 078/312] refactor --- .circleci/config.yml | 2 +- apps/remix-ide-e2e/src/tests/vyper_api.test.ts | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index afe5c5576b..55755e31e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: false + default: true orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts index 1174b58fc6..944420fc64 100644 --- a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts +++ b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts @@ -17,13 +17,13 @@ module.exports = { browser.clickLaunchIcon('pluginManager') .scrollAndClick('[data-id="pluginManagerComponentActivateButtonvyper"]') .clickLaunchIcon('vyper') - .pause(5000) - // @ts-ignore .frame(0) }, - 'Should clone the Vyper repo #group1': function (browser: NightwatchBrowser) { - browser.click('button[data-id="add-repository"]') + 'Should clone the Vyper repo #group1 #flaky': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('button[data-id="add-repository"]') + .click('button[data-id="add-repository"]') .frameParent() .clickLaunchIcon('filePanel') .waitForElementVisible({ @@ -31,11 +31,10 @@ module.exports = { locateStrategy: 'xpath', timeout: 120000 }) - .currentWorkspaceIs('snekmate') .waitForElementVisible({ selector: "//*[@data-id='treeViewLitreeViewItemsrc' and contains(.,'src')]", locateStrategy: 'xpath', - timeout: 1200000 + timeout: 120000 }) }, // 'Add vyper file to run tests #group1': function (browser: NightwatchBrowser) { From 6f017e41913c34dee90e17dadcc8be8067c963eb Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 14:46:01 +0200 Subject: [PATCH 079/312] different assertion --- apps/remix-ide-e2e/src/tests/vyper_api.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts index 944420fc64..cd6c58a156 100644 --- a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts +++ b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts @@ -32,7 +32,7 @@ module.exports = { timeout: 120000 }) .waitForElementVisible({ - selector: "//*[@data-id='treeViewLitreeViewItemsrc' and contains(.,'src')]", + selector: "//*[contains(., 'Vyper repository cloned')]", locateStrategy: 'xpath', timeout: 120000 }) From 4ec814b04a81441f22f41694364ff923d247c0de Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 14:57:41 +0200 Subject: [PATCH 080/312] add assertion --- apps/remix-ide-e2e/src/tests/vyper_api.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts index cd6c58a156..8611c6f1e8 100644 --- a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts +++ b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts @@ -122,6 +122,7 @@ module.exports = { .clickLaunchIcon('vyper') // @ts-ignore .frame(0) + .waitForElementVisible('[data-id="compile"]') .click('[data-id="compile"]') .waitForElementVisible({ selector:'[data-id="compilation-details"]', From 4c0d1be86d0372af37cdebd5bb623f50179ab2d9 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 15:23:13 +0200 Subject: [PATCH 081/312] unflaky --- .circleci/config.yml | 2 +- apps/remix-ide-e2e/src/tests/vyper_api.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 55755e31e6..afe5c5576b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: true + default: false orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts index 8611c6f1e8..717edd43c9 100644 --- a/apps/remix-ide-e2e/src/tests/vyper_api.test.ts +++ b/apps/remix-ide-e2e/src/tests/vyper_api.test.ts @@ -20,7 +20,7 @@ module.exports = { .frame(0) }, - 'Should clone the Vyper repo #group1 #flaky': function (browser: NightwatchBrowser) { + 'Should clone the Vyper repo #group1': function (browser: NightwatchBrowser) { browser .waitForElementVisible('button[data-id="add-repository"]') .click('button[data-id="add-repository"]') From 91d9a736a1ec1a95bc7ba3c7719a79a0117026e5 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 15:48:40 +0200 Subject: [PATCH 082/312] drag drop flaky test --- .circleci/config.yml | 2 +- apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index afe5c5576b..55755e31e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: false + default: true orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 214217af38..08d1c3ccbc 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -56,7 +56,7 @@ module.exports = { }) } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From bd4fa4946cb80981aa3228f9891871759c7a135a Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 29 Apr 2024 11:03:10 +0200 Subject: [PATCH 083/312] add_templates --- .../src/app/plugins/templates-selection.tsx | 462 ++++++++++++++++++ .../workspace/src/lib/actions/workspace.ts | 1 + 2 files changed, 463 insertions(+) create mode 100644 apps/remix-ide/src/app/plugins/templates-selection.tsx diff --git a/apps/remix-ide/src/app/plugins/templates-selection.tsx b/apps/remix-ide/src/app/plugins/templates-selection.tsx new file mode 100644 index 0000000000..2d1d1a97ab --- /dev/null +++ b/apps/remix-ide/src/app/plugins/templates-selection.tsx @@ -0,0 +1,462 @@ + +import React from 'react' +import { FormattedMessage, useIntl } from 'react-intl' +const isElectron = require('is-electron') +import { AppModal } from '@remix-ui/app' +import { ViewPlugin } from '@remixproject/engine-web' +import { PluginViewWrapper } from '@remix-ui/helper' +import { RemixUIGridView } from '@remix-ui/remix-ui-grid-view' +import { RemixUIGridSection } from '@remix-ui/remix-ui-grid-section' +import { RemixUIGridCell } from '@remix-ui/remix-ui-grid-cell' +import type { TemplateGroup } from '@remix-ui/workspace' + +//@ts-ignore +const _paq = (window._paq = window._paq || []) + +const profile = { + name: 'templateSelection', + displayName: 'Template Selection', + description: 'templateSelection', + location: 'mainPanel', + methods: [], + events: [] +} + +export class TemplatesSelection extends ViewPlugin { + templates: Array + dispatch: React.Dispatch = () => { } + constructor() { + super(profile) + } + + async onActivation() { + this.handleThemeChange() + await this.call('tabs', 'focus', 'remixGuide') + this.renderComponent() + _paq.push(['trackEvent', 'plugin', 'activated', 'remixGuide']) + } + + onDeactivation(): void { + } + + private handleThemeChange() { + this.on('theme', 'themeChanged', (theme: any) => { + this.renderComponent() + }) + } + + setDispatch(dispatch: React.Dispatch): void { + this.dispatch = dispatch + this.renderComponent() + } + + render() { + return ( +
+ +
+ ) + } + + renderComponent() { + this.dispatch({ + ...this, + }) + } + + updateComponent() { + /* + const opts = { + // @ts-ignore: Object is possibly 'null'. + mintable: mintableCheckboxRef.current.checked, + // @ts-ignore: Object is possibly 'null'. + burnable: burnableCheckboxRef.current.checked, + // @ts-ignore: Object is possibly 'null'. + pausable: pausableCheckboxRef.current.checked, + // @ts-ignore: Object is possibly 'null'. + upgradeable: transparentRadioRef.current.checked ? transparentRadioRef.current.value : uupsRadioRef.current.checked ? uupsRadioRef.current.value : false + } + */ + this.templates = [ + { + name: "Generic", + items: [ + { value: "remixDefault", displayName: window._intl.formatMessage({id: 'filePanel.basic'}) }, + { value: "blank", displayName: window._intl.formatMessage({id: 'filePanel.blank'}) } + ] + }, + { + name: "OpenZeppelin", + items: [ + { + value: "ozerc20", + displayName: "ERC20" + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)" + }, + { + value: "ozerc1155", + displayName: "ERC1155" + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + mintable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + mintable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + mintable: true + } + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + mintable: true, + burnable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + mintable: true, + burnable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + mintable: true, + burnable: true + } + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + mintable: true, + pausable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + mintable: true, + pausable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + mintable: true, + pausable: true + } + } + ] + }, + { + name: "OpenZeppelin Proxy", + items: [ + { + value: "ozerc20", + displayName: "ERC20", + opts: { + upgradeable: 'uups' + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + upgradeable: 'uups' + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + upgradeable: 'uups' + } + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + upgradeable: 'uups', + mintable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + upgradeable: 'uups', + mintable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + upgradeable: 'uups', + mintable: true + } + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + upgradeable: 'uups', + mintable: true, + burnable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + upgradeable: 'uups', + mintable: true, + burnable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + upgradeable: 'uups', + mintable: true, + burnable: true + } + }, + { + value: "ozerc20", + displayName: "ERC20", + opts: { + upgradeable: 'uups', + mintable: true, + pausable: true + } + }, + { + value: "ozerc721", + displayName: "ERC721 (NFT)", + opts: { + upgradeable: 'uups', + mintable: true, + pausable: true + } + }, + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + upgradeable: 'uups', + mintable: true, + pausable: true + } + } + ] + }, + { + name: "OxProject", + items: [ + { value: "zeroxErc20", displayName: "ERC20" } + ] + }, + { + name: "Gnosis Safe", + items: [ + { value: "gnosisSafeMultisig", displayName: window._intl.formatMessage({id: 'filePanel.multiSigWallet'}) } + ] + }, + { + name: "Circom ZKP", + items: [ + { value: "semaphore", displayName: window._intl.formatMessage({id: 'filePanel.semaphore'}) }, + { value: "hashchecker", displayName: window._intl.formatMessage({id: 'filePanel.hashchecker'}) }, + { value: "rln", displayName: window._intl.formatMessage({id: 'filePanel.rln'}) } + ] + }, + { + name: "Generic ZKP", + items: [ + { value: "sindriScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptsindri'}) }, + ] + }, + { + name: "Uniswap V4", + items: [ + { value: "uniswapV4Template", displayName: window._intl.formatMessage({id: 'filePanel.uniswapV4Template'}) }, + { value: "breakthroughLabsUniswapv4Hooks", displayName: window._intl.formatMessage({id: 'filePanel.breakthroughLabsUniswapv4Hooks'}) }, + { value: "uniswapV4HookBookMultiSigSwapHook", displayName: window._intl.formatMessage({id: 'filePanel.uniswapV4HookBookMultiSigSwapHook'}) } + ] + }, + { + name: "Solidity CREATE2", + items: [ + { value: "contractCreate2Factory", displayName: window._intl.formatMessage({id: 'filePanel.addcreate2solidityfactory'}) }, + { value: "contractDeployerScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptdeployer'}) } + ] + }, + { + name: "Contract Verification", + items: [ + { value: "etherscanScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptetherscan'}) }, + ] + } + ] + + const createWorkspace = async (item) => { + const defaultName = await this.call('filePanel', 'getAvailableWorkspaceName', item.displayName) + + const username = await this.call('settings', 'get', 'settings/github-user-name') + const email = await this.call('settings', 'get', 'settings/github-email') + const gitNotSet = !username || !email + let workspaceName = defaultName + let initGit = true + const modal: AppModal = { + id: 'TemplatesSelection', + title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + message: await createModalMessage(defaultName, gitNotSet, (value) => workspaceName = value, (value) => initGit = !!value), + okLabel: window._intl.formatMessage({id: !isElectron() ? 'filePanel.ok':'filePanel.selectFolder'}), + } + const modalResult = await this.call('notification', 'modal', modal) + if (!modalResult) return + this.emit('createWorkspaceReducerEvent', workspaceName, item.value, item.opts, false, (e, data) => { + if (e) { + const modal: AppModal = { + id: 'TemplatesSelection', + title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + message: e.message, + okLabel: window._intl.formatMessage({id: 'filePanel.ok'}), + cancelLabel: window._intl.formatMessage({id: 'filePanel.cancel'}) + } + this.call('notification', 'modal', modal) + console.error(e) + } + + }, initGit) + } + + const addToExistingWorkspace = async (item) => { + this.emit('addTemplateToWorkspaceReducerEvent', item.value, item.opts, false, (e, data) => { + if (e) { + const modal: AppModal = { + id: 'TemplatesSelection', + title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + message: e.message, + okLabel: window._intl.formatMessage({id: 'filePanel.ok'}), + cancelLabel: window._intl.formatMessage({id: 'filePanel.cancel'}) + } + this.call('notification', 'modal', modal) + console.error(e) + } + + }) + } + + return ( + + { + + this.templates.map(template => { + return + {template.items.map(item => { + return +
+ {item.displayName} + {JSON.stringify(item.opts)} +
+
+
+ })} +
+ })} +
+ ) + } + +} + +const createModalMessage = async ( + defaultName: string, + gitConfigNotSet: boolean, + onChangeTemplateName: (name: string) => void, + onChangeInitGit: (name: string) => void) => { + + return ( + <> + + onChangeTemplateName(e.target.value)} + /> +
+ onChangeInitGit(e.target.value)} + /> + +
+ {gitConfigNotSet ? ( +
+ +
+ ) : ( + <> + )} + + ) +} + diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index c9fe57ea97..c9ec33522d 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -155,6 +155,7 @@ export const createWorkspace = async ( await plugin.workspaceCreated(workspaceName) if (isGitRepo && createCommit) { + console.log('CREATE COMMIT') const name = await plugin.call('settings', 'get', 'settings/github-user-name') const email = await plugin.call('settings', 'get', 'settings/github-email') const currentBranch: branch = await dgitPlugin.call('dgitApi', 'currentbranch') From 5651b8be83c55b89eab583cd72b9080f85525837 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 30 Apr 2024 14:42:19 +0200 Subject: [PATCH 084/312] fix E2E --- .../src/app/plugins/templates-selection.tsx | 213 +++++++++--------- 1 file changed, 112 insertions(+), 101 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection.tsx b/apps/remix-ide/src/app/plugins/templates-selection.tsx index 2d1d1a97ab..dfc98490ec 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection.tsx @@ -1,7 +1,6 @@ import React from 'react' import { FormattedMessage, useIntl } from 'react-intl' -const isElectron = require('is-electron') import { AppModal } from '@remix-ui/app' import { ViewPlugin } from '@remixproject/engine-web' import { PluginViewWrapper } from '@remix-ui/helper' @@ -10,6 +9,8 @@ import { RemixUIGridSection } from '@remix-ui/remix-ui-grid-section' import { RemixUIGridCell } from '@remix-ui/remix-ui-grid-cell' import type { TemplateGroup } from '@remix-ui/workspace' +const isElectron = require('is-electron') + //@ts-ignore const _paq = (window._paq = window._paq || []) @@ -26,7 +27,7 @@ export class TemplatesSelection extends ViewPlugin { templates: Array dispatch: React.Dispatch = () => { } constructor() { - super(profile) + super(profile) } async onActivation() { @@ -40,7 +41,7 @@ export class TemplatesSelection extends ViewPlugin { } private handleThemeChange() { - this.on('theme', 'themeChanged', (theme: any) => { + this.on('theme', 'themeChanged', (theme: any) => { this.renderComponent() }) } @@ -81,121 +82,121 @@ export class TemplatesSelection extends ViewPlugin { { name: "Generic", items: [ - { value: "remixDefault", displayName: window._intl.formatMessage({id: 'filePanel.basic'}) }, - { value: "blank", displayName: window._intl.formatMessage({id: 'filePanel.blank'}) } + { value: "remixDefault", displayName: window._intl.formatMessage({ id: 'filePanel.basic' }) }, + { value: "blank", displayName: window._intl.formatMessage({ id: 'filePanel.blank' }) } ] }, { name: "OpenZeppelin", items: [ - { + { value: "ozerc20", - displayName: "ERC20" + displayName: "ERC20" }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)" + { + value: "ozerc721", + displayName: "ERC721 (NFT)" }, - { - value: "ozerc1155", - displayName: "ERC1155" + { + value: "ozerc1155", + displayName: "ERC1155" }, - { + { value: "ozerc20", displayName: "ERC20", opts: { mintable: true - } + } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { mintable: true - } + } }, - { - value: "ozerc1155", + { + value: "ozerc1155", displayName: "ERC1155", opts: { mintable: true - } + } }, - { + { value: "ozerc20", displayName: "ERC20", opts: { mintable: true, burnable: true - } + } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { mintable: true, burnable: true - } + } }, - { - value: "ozerc1155", + { + value: "ozerc1155", displayName: "ERC1155", opts: { mintable: true, burnable: true - } + } }, - { + { value: "ozerc20", displayName: "ERC20", opts: { mintable: true, pausable: true - } + } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { mintable: true, pausable: true - } + } }, - { - value: "ozerc1155", + { + value: "ozerc1155", displayName: "ERC1155", opts: { mintable: true, pausable: true - } + } } ] }, { name: "OpenZeppelin Proxy", items: [ - { + { value: "ozerc20", displayName: "ERC20", opts: { upgradeable: 'uups' } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { upgradeable: 'uups' } }, - { + { value: "ozerc1155", displayName: "ERC1155", opts: { upgradeable: 'uups' } }, - { + { value: "ozerc20", displayName: "ERC20", opts: { @@ -203,15 +204,15 @@ export class TemplatesSelection extends ViewPlugin { mintable: true } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { upgradeable: 'uups', mintable: true } }, - { + { value: "ozerc1155", displayName: "ERC1155", opts: { @@ -219,7 +220,7 @@ export class TemplatesSelection extends ViewPlugin { mintable: true } }, - { + { value: "ozerc20", displayName: "ERC20", opts: { @@ -228,8 +229,8 @@ export class TemplatesSelection extends ViewPlugin { burnable: true } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { upgradeable: 'uups', @@ -237,7 +238,7 @@ export class TemplatesSelection extends ViewPlugin { burnable: true } }, - { + { value: "ozerc1155", displayName: "ERC1155", opts: { @@ -246,7 +247,7 @@ export class TemplatesSelection extends ViewPlugin { burnable: true } }, - { + { value: "ozerc20", displayName: "ERC20", opts: { @@ -255,8 +256,8 @@ export class TemplatesSelection extends ViewPlugin { pausable: true } }, - { - value: "ozerc721", + { + value: "ozerc721", displayName: "ERC721 (NFT)", opts: { upgradeable: 'uups', @@ -264,12 +265,22 @@ export class TemplatesSelection extends ViewPlugin { pausable: true } }, - { + { + value: "ozerc1155", + displayName: "ERC1155", + opts: { + upgradeable: 'uups', + mintable: true, + pausable: true + } + }, + { value: "ozerc1155", displayName: "ERC1155", opts: { upgradeable: 'uups', mintable: true, + burnable: true, pausable: true } } @@ -284,42 +295,42 @@ export class TemplatesSelection extends ViewPlugin { { name: "Gnosis Safe", items: [ - { value: "gnosisSafeMultisig", displayName: window._intl.formatMessage({id: 'filePanel.multiSigWallet'}) } + { value: "gnosisSafeMultisig", displayName: window._intl.formatMessage({ id: 'filePanel.multiSigWallet' }) } ] }, { name: "Circom ZKP", items: [ - { value: "semaphore", displayName: window._intl.formatMessage({id: 'filePanel.semaphore'}) }, - { value: "hashchecker", displayName: window._intl.formatMessage({id: 'filePanel.hashchecker'}) }, - { value: "rln", displayName: window._intl.formatMessage({id: 'filePanel.rln'}) } + { value: "semaphore", displayName: window._intl.formatMessage({ id: 'filePanel.semaphore' }) }, + { value: "hashchecker", displayName: window._intl.formatMessage({ id: 'filePanel.hashchecker' }) }, + { value: "rln", displayName: window._intl.formatMessage({ id: 'filePanel.rln' }) } ] }, { name: "Generic ZKP", items: [ - { value: "sindriScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptsindri'}) }, + { value: "sindriScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptsindri' }) }, ] }, { name: "Uniswap V4", items: [ - { value: "uniswapV4Template", displayName: window._intl.formatMessage({id: 'filePanel.uniswapV4Template'}) }, - { value: "breakthroughLabsUniswapv4Hooks", displayName: window._intl.formatMessage({id: 'filePanel.breakthroughLabsUniswapv4Hooks'}) }, - { value: "uniswapV4HookBookMultiSigSwapHook", displayName: window._intl.formatMessage({id: 'filePanel.uniswapV4HookBookMultiSigSwapHook'}) } + { value: "uniswapV4Template", displayName: window._intl.formatMessage({ id: 'filePanel.uniswapV4Template' }) }, + { value: "breakthroughLabsUniswapv4Hooks", displayName: window._intl.formatMessage({ id: 'filePanel.breakthroughLabsUniswapv4Hooks' }) }, + { value: "uniswapV4HookBookMultiSigSwapHook", displayName: window._intl.formatMessage({ id: 'filePanel.uniswapV4HookBookMultiSigSwapHook' }) } ] }, { name: "Solidity CREATE2", items: [ - { value: "contractCreate2Factory", displayName: window._intl.formatMessage({id: 'filePanel.addcreate2solidityfactory'}) }, - { value: "contractDeployerScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptdeployer'}) } + { value: "contractCreate2Factory", displayName: window._intl.formatMessage({ id: 'filePanel.addcreate2solidityfactory' }) }, + { value: "contractDeployerScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptdeployer' }) } ] }, { name: "Contract Verification", items: [ - { value: "etherscanScripts", displayName: window._intl.formatMessage({id: 'filePanel.addscriptetherscan'}) }, + { value: "etherscanScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptetherscan' }) }, ] } ] @@ -334,9 +345,9 @@ export class TemplatesSelection extends ViewPlugin { let initGit = true const modal: AppModal = { id: 'TemplatesSelection', - title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), message: await createModalMessage(defaultName, gitNotSet, (value) => workspaceName = value, (value) => initGit = !!value), - okLabel: window._intl.formatMessage({id: !isElectron() ? 'filePanel.ok':'filePanel.selectFolder'}), + okLabel: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.ok':'filePanel.selectFolder' }), } const modalResult = await this.call('notification', 'modal', modal) if (!modalResult) return @@ -344,15 +355,15 @@ export class TemplatesSelection extends ViewPlugin { if (e) { const modal: AppModal = { id: 'TemplatesSelection', - title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), message: e.message, - okLabel: window._intl.formatMessage({id: 'filePanel.ok'}), - cancelLabel: window._intl.formatMessage({id: 'filePanel.cancel'}) + okLabel: window._intl.formatMessage({ id: 'filePanel.ok' }), + cancelLabel: window._intl.formatMessage({ id: 'filePanel.cancel' }) } this.call('notification', 'modal', modal) console.error(e) } - + }, initGit) } @@ -361,15 +372,15 @@ export class TemplatesSelection extends ViewPlugin { if (e) { const modal: AppModal = { id: 'TemplatesSelection', - title: window._intl.formatMessage({id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop'}), + title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), message: e.message, - okLabel: window._intl.formatMessage({id: 'filePanel.ok'}), - cancelLabel: window._intl.formatMessage({id: 'filePanel.cancel'}) + okLabel: window._intl.formatMessage({ id: 'filePanel.ok' }), + cancelLabel: window._intl.formatMessage({ id: 'filePanel.cancel' }) } this.call('notification', 'modal', modal) console.error(e) } - + }) } @@ -386,27 +397,27 @@ export class TemplatesSelection extends ViewPlugin { description="Template Selection" > { - - this.templates.map(template => { - return - {template.items.map(item => { - return -
- {item.displayName} - {JSON.stringify(item.opts)} -
-
-
+ + this.templates.map(template => { + return + {template.items.map(item => { + return +
+ {item.displayName} + {JSON.stringify(item.opts)} +
+
+
+ })} +
})} -
- })} ) } @@ -414,14 +425,14 @@ export class TemplatesSelection extends ViewPlugin { } const createModalMessage = async ( - defaultName: string, - gitConfigNotSet: boolean, - onChangeTemplateName: (name: string) => void, - onChangeInitGit: (name: string) => void) => { - + defaultName: string, + gitConfigNotSet: boolean, + onChangeTemplateName: (name: string) => void, + onChangeInitGit: (name: string) => void) => { + return ( <> - From 4d6ba5611c0c63eae53f0b35cf24d47051489e6f Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 30 Apr 2024 15:53:59 +0200 Subject: [PATCH 085/312] fix electron import --- apps/remix-ide/src/app/plugins/templates-selection.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection.tsx b/apps/remix-ide/src/app/plugins/templates-selection.tsx index dfc98490ec..e1192e0693 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection.tsx @@ -7,10 +7,9 @@ import { PluginViewWrapper } from '@remix-ui/helper' import { RemixUIGridView } from '@remix-ui/remix-ui-grid-view' import { RemixUIGridSection } from '@remix-ui/remix-ui-grid-section' import { RemixUIGridCell } from '@remix-ui/remix-ui-grid-cell' +import isElectron from 'is-electron' import type { TemplateGroup } from '@remix-ui/workspace' -const isElectron = require('is-electron') - //@ts-ignore const _paq = (window._paq = window._paq || []) From 663fe2dd019533eba39e42e3f44b320b7235f7cf Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 30 Apr 2024 16:37:55 +0200 Subject: [PATCH 086/312] fix test --- apps/remix-ide-e2e/src/tests/ballot.test.ts | 2 ++ apps/remix-ide-e2e/src/tests/erc721.test.ts | 2 ++ apps/remix-ide-e2e/src/tests/workspace.test.ts | 15 +++++++++++++++ .../remix-ide-e2e/src/tests/workspace_git.test.ts | 2 ++ .../src/app/plugins/templates-selection.tsx | 2 +- 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/ballot.test.ts b/apps/remix-ide-e2e/src/tests/ballot.test.ts index c9fb7c27bc..db34e18cf3 100644 --- a/apps/remix-ide-e2e/src/tests/ballot.test.ts +++ b/apps/remix-ide-e2e/src/tests/ballot.test.ts @@ -102,6 +102,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_remix_default') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_remix_default' }) .modalFooterOKClick('TemplatesSelection') .pause(1000) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') diff --git a/apps/remix-ide-e2e/src/tests/erc721.test.ts b/apps/remix-ide-e2e/src/tests/erc721.test.ts index 890a5e7fc3..8a3861a1c8 100644 --- a/apps/remix-ide-e2e/src/tests/erc721.test.ts +++ b/apps/remix-ide-e2e/src/tests/erc721.test.ts @@ -22,6 +22,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_erc721') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_erc721' }) .modalFooterOKClick('TemplatesSelection') .pause(100) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace.test.ts b/apps/remix-ide-e2e/src/tests/workspace.test.ts index 094b35a080..e9517e90e2 100644 --- a/apps/remix-ide-e2e/src/tests/workspace.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace.test.ts @@ -43,6 +43,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_remix_default') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_remix_default' }) .modalFooterOKClick('TemplatesSelection') .pause(1000) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') @@ -115,6 +117,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_blank') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_blank' }) .modalFooterOKClick('TemplatesSelection') .pause(100) .waitForElementPresent('*[data-id="treeViewUltreeViewMenu"]') @@ -136,6 +140,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_erc20') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_erc20' }) .modalFooterOKClick('TemplatesSelection') .pause(100) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') @@ -195,6 +201,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_erc721') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_erc721' }) .modalFooterOKClick('TemplatesSelection') .pause(100) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') @@ -254,6 +262,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_erc1155') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_erc1155' }) .modalFooterOKClick('TemplatesSelection') .pause(100) .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') @@ -484,6 +494,7 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'sometestworkspace') + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'sometestworkspace' }) .modalFooterOKClick('TemplatesSelection') .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/MyToken.sol"]') @@ -510,6 +521,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_db_test') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_db_test' }) .modalFooterOKClick('TemplatesSelection') .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts"]') .waitForElementVisible('*[data-id="treeViewLitreeViewItemcontracts/MyToken.sol"]') @@ -538,6 +551,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'multisig cookbook') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'multisig cookbook' }) .modalFooterOKClick('TemplatesSelection') .waitForElementVisible('[data-id="PermissionHandler-modal-footer-ok-react"]', 300000) .click('[data-id="PermissionHandler-modal-footer-ok-react"]') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index 467d97e620..bf5da591e9 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -53,6 +53,8 @@ module.exports = { .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') .scrollAndClick('*[data-id="modalDialogCustomPromptTextCreate"]') .setValue('*[data-id="modalDialogCustomPromptTextCreate"]', 'workspace_blank') + // eslint-disable-next-line dot-notation + .execute(function () { document.querySelector('*[data-id="modalDialogCustomPromptTextCreate"]')['value'] = 'workspace_blank' }) .click('[data-id="initGitRepositoryLabel"]') .modalFooterOKClick('TemplatesSelection') .pause(100) diff --git a/apps/remix-ide/src/app/plugins/templates-selection.tsx b/apps/remix-ide/src/app/plugins/templates-selection.tsx index e1192e0693..a68b47fb75 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection.tsx @@ -341,7 +341,7 @@ export class TemplatesSelection extends ViewPlugin { const email = await this.call('settings', 'get', 'settings/github-email') const gitNotSet = !username || !email let workspaceName = defaultName - let initGit = true + let initGit = false const modal: AppModal = { id: 'TemplatesSelection', title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), From d89cce826f368b193caeaf3f852c3e428b25f1f2 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 13 Jun 2024 23:57:34 +0200 Subject: [PATCH 087/312] add cookbook* --- .../templates-selection-plugin.tsx | 3 +- .../plugins/templates-selection/templates.ts | 18 +++++++ .../src/lib/remix-ui-grid-section.tsx | 1 + .../workspace/src/lib/utils/constants.ts | 54 +++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 6df97e60b6..d8b70d5557 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -157,7 +157,8 @@ export class TemplatesSelectionPlugin extends ViewPlugin { key={template.name} title={template.name} hScrollable={false} - > + header={template.source === 'plugin' ? : ''} + > {template.items.map(item => { return { } ] }, + { + name: "Cookbook", + source: "plugin", + payload: { + pluginName: 'cookbookdev' + }, + items: [ + { value: "token-sale", displayName: 'Token Sale' }, + { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, + { value: "Azuki-ERC721A-NFT-Sale-basic", displayName: 'Azuki ERC721A NFT Sale basic' }, + { value: "Azuki-ERC721A-ERC721A", displayName: 'Azuki ERC721A' }, + { value: "token-staking-with-infinite-rewards", displayName: 'Token Staking with infinite rewards' }, + { value: "nft-staking-with-infinite-rewards", displayName: 'Nft Staking with infinite rewards' }, + { value: "basic-dao", displayName: 'Basic DAO' }, + { value: "soulbound-nft", displayName: 'Soulbound Nft' }, + { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection nft with burnable nfts and pausable transfers' }, + ] + }, { name: "OxProject", items: [ diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx index a3cb8b15c0..d6d861f3b9 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx @@ -63,6 +63,7 @@ export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { >
{ props.title &&
{ props.title }
} +
{ !hasChildCell(children) && No items found } { props.children } diff --git a/libs/remix-ui/workspace/src/lib/utils/constants.ts b/libs/remix-ui/workspace/src/lib/utils/constants.ts index fcde9c1830..f0d150afb1 100644 --- a/libs/remix-ui/workspace/src/lib/utils/constants.ts +++ b/libs/remix-ui/workspace/src/lib/utils/constants.ts @@ -34,6 +34,60 @@ export const TEMPLATE_METADATA: Record = { name: 'cookbookdev', endpoint: 'openPattern', params: ['Uniswap-V4-HookBook-MultiSigSwapHook', true] + }, + 'token-sale': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['token-sale'] + }, + 'simple-nft-sale': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['simple-nft-sale'] + }, + 'Azuki-ERC721A-NFT-Sale-basic': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['Azuki-ERC721A-NFT-Sale-basic'] + }, + 'Azuki-ERC721A-ERC721A': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['Azuki-ERC721A-ERC721A'] + }, + 'token-staking-with-infinite-rewards': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['token-staking-with-infinite-rewards'] + }, + 'nft-staking-with-infinite-rewards': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['nft-staking-with-infinite-rewards'] + }, + 'basic-dao': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['basic-dao'] + }, + 'soulbound-nft': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['soulbound-nft'] + }, + 'multi-collection-nft-with-burnable-nfts-and-pausable-transfers': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openContract', + params: ['multi-collection-nft-with-burnable-nfts-and-pausable-transfers'] } } From f1e392fb3aeba616398a173b487c9d2e49625244 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 17 Jun 2024 13:20:30 +0200 Subject: [PATCH 088/312] fix logging --- libs/remix-ui/workspace/src/lib/actions/workspace.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index c9ec33522d..389561ac60 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -220,7 +220,7 @@ export const populateWorkspace = async ( dispatch(cloneRepositorySuccess()) }).catch((e) => { dispatch(cloneRepositorySuccess()) - plugin.call('notification', 'toast', 'error adding template ' + e.message || e) + plugin.call('notification', 'toast', 'error adding template ' + (e.message || e)) }) }, 5000) } else if (!isEmpty && !(isGitRepo && createCommit)) await loadWorkspacePreset(workspaceTemplateName, opts) From a9195e29c3b873a725059b57ef835f4c9f2312d0 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 17 Jun 2024 13:20:54 +0200 Subject: [PATCH 089/312] set gaslimit in sendTransaction --- apps/remix-ide/src/blockchain/blockchain.tsx | 70 +++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.tsx b/apps/remix-ide/src/blockchain/blockchain.tsx index 66f3baafc1..3db3ae2820 100644 --- a/apps/remix-ide/src/blockchain/blockchain.tsx +++ b/apps/remix-ide/src/blockchain/blockchain.tsx @@ -39,7 +39,7 @@ export type Transaction = { to: string value: string data: string - gasLimit: number + gasLimit: string useCall: boolean timestamp?: number } @@ -779,40 +779,46 @@ export class Blockchain extends Plugin { */ sendTransaction(tx: Transaction) { return new Promise((resolve, reject) => { - this.executionContext.detectNetwork((error, network) => { - if (error) return reject(error) - if (network.name === 'Main' && network.id === '1') { - return reject(new Error('It is not allowed to make this action against mainnet')) + return this.transactionContextAPI.getGasLimit((err, value) => { + if (err) console.log('error resolving gas limit', err); + else { + tx.gasLimit = value; } - - this.txRunner.rawRun( - tx, - (network, tx, gasEstimation, continueTxExecution, cancelCb) => { - continueTxExecution() - }, - (error, continueTxExecution, cancelCb) => { - if (error) { - reject(error) - } else { + this.executionContext.detectNetwork((error, network) => { + if (error) return reject(error) + if (network.name === 'Main' && network.id === '1') { + return reject(new Error('It is not allowed to make this action against mainnet')) + } + + this.txRunner.rawRun( + tx, + (network, tx, gasEstimation, continueTxExecution, cancelCb) => { continueTxExecution() + }, + (error, continueTxExecution, cancelCb) => { + if (error) { + reject(error) + } else { + continueTxExecution() + } + }, + (okCb, cancelCb) => { + okCb() + }, + async (error, result) => { + if (error) return reject(error) + try { + if (this.executionContext.isVM()) { + const execResult = await this.web3().remix.getExecutionResultFromSimulator(result.transactionHash) + resolve(resultToRemixTx(result, execResult)) + } else resolve(resultToRemixTx(result)) + } catch (e) { + reject(e) + } } - }, - (okCb, cancelCb) => { - okCb() - }, - async (error, result) => { - if (error) return reject(error) - try { - if (this.executionContext.isVM()) { - const execResult = await this.web3().remix.getExecutionResultFromSimulator(result.transactionHash) - resolve(resultToRemixTx(result, execResult)) - } else resolve(resultToRemixTx(result)) - } catch (e) { - reject(e) - } - } - ) - }) + ) + }) + }) }) } From 8757ff9f3a618f3fa6711fc379afdbc1c4d8000e Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 17 Jun 2024 14:24:16 +0200 Subject: [PATCH 090/312] add cookbook link --- .../templates-selection/templates-selection-plugin.tsx | 5 +++-- .../src/app/plugins/templates-selection/templates.ts | 9 ++++----- .../remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx | 3 +++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index d8b70d5557..6e024880d6 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -151,13 +151,14 @@ export class TemplatesSelectionPlugin extends ViewPlugin { description="Select a template to create a workspace or to add it to current workspace" > { - templates(window._intl).map(template => { + templates(window._intl, this).map(template => { return { this.call('manager', 'activatePlugin', template.payload.pluginName) }}>Open Cookbook to load more contracts : ''} > {template.items.map(item => { return { +export const templates = (intl, plugin) => { return [ { name: "Generic", @@ -260,9 +259,9 @@ export const templates = (intl) => { }, { name: "Cookbook", - source: "plugin", - payload: { - pluginName: 'cookbookdev' + tooltip: "Cookbook is a smart contract search tool. Click here to open cookbook and browse contracts.", + onClick: () => { + plugin.call('manager', 'activatePlugin', 'cookbookdev') }, items: [ { value: "token-sale", displayName: 'Token Sale' }, diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx index d6d861f3b9..d2a9da36e5 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx @@ -1,4 +1,5 @@ import React, {useState, useEffect, useContext, useRef, ReactNode} from 'react' // eslint-disable-line +import { CustomTooltip } from "@remix-ui/helper"; import './remix-ui-grid-section.css' import FiltersContext from "./filtersContext" @@ -13,6 +14,8 @@ const _paq = window._paq = window._paq || [] interface RemixUIGridSectionProps { plugin: any title?: string + onClickTitle?: () => void + tooltipTitle?: string hScrollable: boolean classList?: string styleList?: any From dfdb6f488077a0d643a79daac4969f36bc87905e Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 30 Jul 2024 14:47:55 +0200 Subject: [PATCH 091/312] rm unused file --- .../src/app/plugins/templates-selection.tsx | 472 ------------------ 1 file changed, 472 deletions(-) delete mode 100644 apps/remix-ide/src/app/plugins/templates-selection.tsx diff --git a/apps/remix-ide/src/app/plugins/templates-selection.tsx b/apps/remix-ide/src/app/plugins/templates-selection.tsx deleted file mode 100644 index a68b47fb75..0000000000 --- a/apps/remix-ide/src/app/plugins/templates-selection.tsx +++ /dev/null @@ -1,472 +0,0 @@ - -import React from 'react' -import { FormattedMessage, useIntl } from 'react-intl' -import { AppModal } from '@remix-ui/app' -import { ViewPlugin } from '@remixproject/engine-web' -import { PluginViewWrapper } from '@remix-ui/helper' -import { RemixUIGridView } from '@remix-ui/remix-ui-grid-view' -import { RemixUIGridSection } from '@remix-ui/remix-ui-grid-section' -import { RemixUIGridCell } from '@remix-ui/remix-ui-grid-cell' -import isElectron from 'is-electron' -import type { TemplateGroup } from '@remix-ui/workspace' - -//@ts-ignore -const _paq = (window._paq = window._paq || []) - -const profile = { - name: 'templateSelection', - displayName: 'Template Selection', - description: 'templateSelection', - location: 'mainPanel', - methods: [], - events: [] -} - -export class TemplatesSelection extends ViewPlugin { - templates: Array - dispatch: React.Dispatch = () => { } - constructor() { - super(profile) - } - - async onActivation() { - this.handleThemeChange() - await this.call('tabs', 'focus', 'remixGuide') - this.renderComponent() - _paq.push(['trackEvent', 'plugin', 'activated', 'remixGuide']) - } - - onDeactivation(): void { - } - - private handleThemeChange() { - this.on('theme', 'themeChanged', (theme: any) => { - this.renderComponent() - }) - } - - setDispatch(dispatch: React.Dispatch): void { - this.dispatch = dispatch - this.renderComponent() - } - - render() { - return ( -
- -
- ) - } - - renderComponent() { - this.dispatch({ - ...this, - }) - } - - updateComponent() { - /* - const opts = { - // @ts-ignore: Object is possibly 'null'. - mintable: mintableCheckboxRef.current.checked, - // @ts-ignore: Object is possibly 'null'. - burnable: burnableCheckboxRef.current.checked, - // @ts-ignore: Object is possibly 'null'. - pausable: pausableCheckboxRef.current.checked, - // @ts-ignore: Object is possibly 'null'. - upgradeable: transparentRadioRef.current.checked ? transparentRadioRef.current.value : uupsRadioRef.current.checked ? uupsRadioRef.current.value : false - } - */ - this.templates = [ - { - name: "Generic", - items: [ - { value: "remixDefault", displayName: window._intl.formatMessage({ id: 'filePanel.basic' }) }, - { value: "blank", displayName: window._intl.formatMessage({ id: 'filePanel.blank' }) } - ] - }, - { - name: "OpenZeppelin", - items: [ - { - value: "ozerc20", - displayName: "ERC20" - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)" - }, - { - value: "ozerc1155", - displayName: "ERC1155" - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - mintable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - mintable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - mintable: true - } - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - mintable: true, - burnable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - mintable: true, - burnable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - mintable: true, - burnable: true - } - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - mintable: true, - pausable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - mintable: true, - pausable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - mintable: true, - pausable: true - } - } - ] - }, - { - name: "OpenZeppelin Proxy", - items: [ - { - value: "ozerc20", - displayName: "ERC20", - opts: { - upgradeable: 'uups' - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - upgradeable: 'uups' - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - upgradeable: 'uups' - } - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - upgradeable: 'uups', - mintable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - upgradeable: 'uups', - mintable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - upgradeable: 'uups', - mintable: true - } - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - upgradeable: 'uups', - mintable: true, - burnable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - upgradeable: 'uups', - mintable: true, - burnable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - upgradeable: 'uups', - mintable: true, - burnable: true - } - }, - { - value: "ozerc20", - displayName: "ERC20", - opts: { - upgradeable: 'uups', - mintable: true, - pausable: true - } - }, - { - value: "ozerc721", - displayName: "ERC721 (NFT)", - opts: { - upgradeable: 'uups', - mintable: true, - pausable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - upgradeable: 'uups', - mintable: true, - pausable: true - } - }, - { - value: "ozerc1155", - displayName: "ERC1155", - opts: { - upgradeable: 'uups', - mintable: true, - burnable: true, - pausable: true - } - } - ] - }, - { - name: "OxProject", - items: [ - { value: "zeroxErc20", displayName: "ERC20" } - ] - }, - { - name: "Gnosis Safe", - items: [ - { value: "gnosisSafeMultisig", displayName: window._intl.formatMessage({ id: 'filePanel.multiSigWallet' }) } - ] - }, - { - name: "Circom ZKP", - items: [ - { value: "semaphore", displayName: window._intl.formatMessage({ id: 'filePanel.semaphore' }) }, - { value: "hashchecker", displayName: window._intl.formatMessage({ id: 'filePanel.hashchecker' }) }, - { value: "rln", displayName: window._intl.formatMessage({ id: 'filePanel.rln' }) } - ] - }, - { - name: "Generic ZKP", - items: [ - { value: "sindriScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptsindri' }) }, - ] - }, - { - name: "Uniswap V4", - items: [ - { value: "uniswapV4Template", displayName: window._intl.formatMessage({ id: 'filePanel.uniswapV4Template' }) }, - { value: "breakthroughLabsUniswapv4Hooks", displayName: window._intl.formatMessage({ id: 'filePanel.breakthroughLabsUniswapv4Hooks' }) }, - { value: "uniswapV4HookBookMultiSigSwapHook", displayName: window._intl.formatMessage({ id: 'filePanel.uniswapV4HookBookMultiSigSwapHook' }) } - ] - }, - { - name: "Solidity CREATE2", - items: [ - { value: "contractCreate2Factory", displayName: window._intl.formatMessage({ id: 'filePanel.addcreate2solidityfactory' }) }, - { value: "contractDeployerScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptdeployer' }) } - ] - }, - { - name: "Contract Verification", - items: [ - { value: "etherscanScripts", displayName: window._intl.formatMessage({ id: 'filePanel.addscriptetherscan' }) }, - ] - } - ] - - const createWorkspace = async (item) => { - const defaultName = await this.call('filePanel', 'getAvailableWorkspaceName', item.displayName) - - const username = await this.call('settings', 'get', 'settings/github-user-name') - const email = await this.call('settings', 'get', 'settings/github-email') - const gitNotSet = !username || !email - let workspaceName = defaultName - let initGit = false - const modal: AppModal = { - id: 'TemplatesSelection', - title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), - message: await createModalMessage(defaultName, gitNotSet, (value) => workspaceName = value, (value) => initGit = !!value), - okLabel: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.ok':'filePanel.selectFolder' }), - } - const modalResult = await this.call('notification', 'modal', modal) - if (!modalResult) return - this.emit('createWorkspaceReducerEvent', workspaceName, item.value, item.opts, false, (e, data) => { - if (e) { - const modal: AppModal = { - id: 'TemplatesSelection', - title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), - message: e.message, - okLabel: window._intl.formatMessage({ id: 'filePanel.ok' }), - cancelLabel: window._intl.formatMessage({ id: 'filePanel.cancel' }) - } - this.call('notification', 'modal', modal) - console.error(e) - } - - }, initGit) - } - - const addToExistingWorkspace = async (item) => { - this.emit('addTemplateToWorkspaceReducerEvent', item.value, item.opts, false, (e, data) => { - if (e) { - const modal: AppModal = { - id: 'TemplatesSelection', - title: window._intl.formatMessage({ id: !isElectron() ? 'filePanel.workspace.create': 'filePanel.workspace.create.desktop' }), - message: e.message, - okLabel: window._intl.formatMessage({ id: 'filePanel.ok' }), - cancelLabel: window._intl.formatMessage({ id: 'filePanel.cancel' }) - } - this.call('notification', 'modal', modal) - console.error(e) - } - - }) - } - - return ( - - { - - this.templates.map(template => { - return - {template.items.map(item => { - return -
- {item.displayName} - {JSON.stringify(item.opts)} -
-
-
- })} -
- })} -
- ) - } - -} - -const createModalMessage = async ( - defaultName: string, - gitConfigNotSet: boolean, - onChangeTemplateName: (name: string) => void, - onChangeInitGit: (name: string) => void) => { - - return ( - <> - - onChangeTemplateName(e.target.value)} - /> -
- onChangeInitGit(e.target.value)} - /> - -
- {gitConfigNotSet ? ( -
- -
- ) : ( - <> - )} - - ) -} - From 5b26298265ec760ee93061363acd86a25fdbbb31 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 27 Aug 2024 14:17:15 +0200 Subject: [PATCH 092/312] fix gasLimit for sendTx --- apps/remix-ide/src/blockchain/blockchain.tsx | 70 +++++++++----------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/apps/remix-ide/src/blockchain/blockchain.tsx b/apps/remix-ide/src/blockchain/blockchain.tsx index 3db3ae2820..5306c18bc6 100644 --- a/apps/remix-ide/src/blockchain/blockchain.tsx +++ b/apps/remix-ide/src/blockchain/blockchain.tsx @@ -779,46 +779,42 @@ export class Blockchain extends Plugin { */ sendTransaction(tx: Transaction) { return new Promise((resolve, reject) => { - return this.transactionContextAPI.getGasLimit((err, value) => { - if (err) console.log('error resolving gas limit', err); - else { - tx.gasLimit = value; + this.executionContext.detectNetwork((error, network) => { + tx.gasLimit = '0x0' // force using gas estimation + + if (error) return reject(error) + if (network.name === 'Main' && network.id === '1') { + return reject(new Error('It is not allowed to make this action against mainnet')) } - this.executionContext.detectNetwork((error, network) => { - if (error) return reject(error) - if (network.name === 'Main' && network.id === '1') { - return reject(new Error('It is not allowed to make this action against mainnet')) - } - - this.txRunner.rawRun( - tx, - (network, tx, gasEstimation, continueTxExecution, cancelCb) => { + + this.txRunner.rawRun( + tx, + (network, tx, gasEstimation, continueTxExecution, cancelCb) => { + continueTxExecution() + }, + (error, continueTxExecution, cancelCb) => { + if (error) { + reject(error) + } else { continueTxExecution() - }, - (error, continueTxExecution, cancelCb) => { - if (error) { - reject(error) - } else { - continueTxExecution() - } - }, - (okCb, cancelCb) => { - okCb() - }, - async (error, result) => { - if (error) return reject(error) - try { - if (this.executionContext.isVM()) { - const execResult = await this.web3().remix.getExecutionResultFromSimulator(result.transactionHash) - resolve(resultToRemixTx(result, execResult)) - } else resolve(resultToRemixTx(result)) - } catch (e) { - reject(e) - } } - ) - }) - }) + }, + (okCb, cancelCb) => { + okCb() + }, + async (error, result) => { + if (error) return reject(error) + try { + if (this.executionContext.isVM()) { + const execResult = await this.web3().remix.getExecutionResultFromSimulator(result.transactionHash) + resolve(resultToRemixTx(result, execResult)) + } else resolve(resultToRemixTx(result)) + } catch (e) { + reject(e) + } + } + ) + }) }) } From 199c2f26761aeb17edd2c434bd52b011ccf5b2ce Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 27 Aug 2024 14:25:25 +0200 Subject: [PATCH 093/312] linting --- .../plugins/templates-selection/templates-selection-plugin.tsx | 2 +- apps/remix-ide/src/blockchain/blockchain.tsx | 2 +- libs/remix-ui/workspace/src/lib/actions/workspace.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 6e024880d6..8ce575c03d 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -159,7 +159,7 @@ export class TemplatesSelectionPlugin extends ViewPlugin { tooltipTitle={template.tooltip} onClickTitle={template.onClick} hScrollable={false} - > + > {template.items.map(item => { return Date: Tue, 27 Aug 2024 14:37:56 +0200 Subject: [PATCH 094/312] linting --- libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx index d2a9da36e5..277a292d48 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx @@ -66,7 +66,7 @@ export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { >
{ props.title &&
{ props.title }
} - +
{ !hasChildCell(children) && No items found } { props.children } From a247f183ab9535300c3b6283f34bcefa2085fe1c Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 27 Aug 2024 15:20:01 +0200 Subject: [PATCH 095/312] add label --- .../templates-selection/templates-selection-plugin.tsx | 3 ++- .../src/app/plugins/templates-selection/templates.ts | 6 ++++-- libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx | 7 ++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 8ce575c03d..b2f5c593c2 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -157,7 +157,8 @@ export class TemplatesSelectionPlugin extends ViewPlugin { key={template.name} title={template.name} tooltipTitle={template.tooltip} - onClickTitle={template.onClick} + onClick={template.onClick} + onClickLabel={template.onClickLabel} hScrollable={false} > {template.items.map(item => { diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 1419bb7e50..169aae0277 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -260,9 +260,11 @@ export const templates = (intl, plugin) => { { name: "Cookbook", tooltip: "Cookbook is a smart contract search tool. Click here to open cookbook and browse contracts.", - onClick: () => { - plugin.call('manager', 'activatePlugin', 'cookbookdev') + onClick: async () => { + await plugin.call('manager', 'activatePlugin', 'cookbookdev') + plugin.call('menuicons', 'showContent', 'cookbookdev') }, + onClickLabel: 'Open cookbook plugin', items: [ { value: "token-sale", displayName: 'Token Sale' }, { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx index 277a292d48..5947db70b1 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx @@ -14,7 +14,8 @@ const _paq = window._paq = window._paq || [] interface RemixUIGridSectionProps { plugin: any title?: string - onClickTitle?: () => void + onClick?: () => void + onClickLabel?: string tooltipTitle?: string hScrollable: boolean classList?: string @@ -64,9 +65,9 @@ export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { data-id={"remixUIGS" + props.title} style={{ overflowX: 'auto' }} > -
+
{ props.title &&
{ props.title }
} - + { props.onClick && props.onClick() }>{ props.onClickLabel } }
{ !hasChildCell(children) && No items found } { props.children } From ffa295c58c59ccb2120ceec87524d194d1782db1 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 18:33:47 +0200 Subject: [PATCH 096/312] done when error --- .../tests/file_explorer_multiselect.test.ts | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 08d1c3ccbc..99db771ca5 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -41,17 +41,24 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemtests"]', locateStrategy: 'xpath' }, (el: any) => { - const id = (el as any).value.getId() - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .perform(() => done()) + try { + const id = (el as any).value.getId(); + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { + (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); + }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') + .perform(() => done()) + } catch (error) { + console.error('An error occurred:', error) + done(error); + } }) }) } @@ -77,18 +84,25 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemcontracts"]', locateStrategy: 'xpath' }, (el: any) => { - const id = (el as any).value.getId() - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') - .perform(() => done()) + try { + const id = (el as any).value.getId(); + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { + (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); + }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .perform(() => done()) + } catch (error) { + console.error('An error occurred:', error) + done(error) + } }) }) } From e6af6de59c9e27a3992b1e96a96cb353955b1549 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 07:40:25 +0200 Subject: [PATCH 097/312] perform --- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 99db771ca5..67e84a1bd8 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -57,7 +57,7 @@ module.exports = { .perform(() => done()) } catch (error) { console.error('An error occurred:', error) - done(error); + browser.perform(() =>done(error)) } }) }) @@ -101,7 +101,7 @@ module.exports = { .perform(() => done()) } catch (error) { console.error('An error occurred:', error) - done(error) + browser.perform(() =>done(error)) } }) }) From 1df97b707b77e4c466a5ad477bf028377cd403d9 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:10:21 +0200 Subject: [PATCH 098/312] abort on failure false --- .../tests/file_explorer_multiselect.test.ts | 72 ++++++++----------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 67e84a1bd8..16851ab337 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #flaky #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -20,10 +20,11 @@ module.exports = { selectedElements.push(el) }) browser.selectFiles(selectedElements) - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemtests"]') + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) }, + 'Should drag and drop multiple files in file explorer to tests folder #group1': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { @@ -41,29 +42,23 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemtests"]', locateStrategy: 'xpath' }, (el: any) => { - try { - const id = (el as any).value.getId(); - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { - (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); - }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .perform(() => done()) - } catch (error) { - console.error('An error occurred:', error) - browser.perform(() =>done(error)) - } + const id = (el as any).value.getId() + browser + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) + .perform(() => done()) }) }) } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { + + 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') @@ -84,25 +79,18 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemcontracts"]', locateStrategy: 'xpath' }, (el: any) => { - try { - const id = (el as any).value.getId(); - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { - (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); - }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') - .perform(() => done()) - } catch (error) { - console.error('An error occurred:', error) - browser.perform(() =>done(error)) - } + const id = (el as any).value.getId() + browser + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts"]', abortOnFailure: false }) + .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) + .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/tests"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/scripts"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemREADME.txt"]', abortOnFailure: false }) + .perform(() => done()) }) }) } From ad39c7cd01b0bade9055c5ae537de32c099e0695 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:12:07 +0200 Subject: [PATCH 099/312] restore --- .../src/tests/file_explorer_multiselect.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 16851ab337..75cc1b4d88 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -20,9 +20,9 @@ module.exports = { selectedElements.push(el) }) browser.selectFiles(selectedElements) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemtests"]') }, 'Should drag and drop multiple files in file explorer to tests folder #group1': function (browser: NightwatchBrowser) { From c98d8ea4c44d817dd49fbe433aab1b4fa96db85b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:22:13 +0200 Subject: [PATCH 100/312] error on purpose --- apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 75cc1b4d88..1ec8e38e56 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -45,7 +45,7 @@ module.exports = { const id = (el as any).value.getId() browser .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/2_Storage.sol"]', id) .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) From 00857cdde09c5c0f381a3a5109454873e4b9a44b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:47:34 +0200 Subject: [PATCH 101/312] group3 --- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 1ec8e38e56..3f09a92899 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -45,7 +45,7 @@ module.exports = { const id = (el as any).value.getId() browser .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/2_Storage.sol"]', id) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) @@ -58,7 +58,7 @@ module.exports = { } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From 7ed6cf211db39ee9578daaec58e76cd5a1ce46ac Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 09:09:00 +0200 Subject: [PATCH 102/312] unflaky --- .circleci/config.yml | 2 +- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 55755e31e6..afe5c5576b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: true + default: false orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 3f09a92899..aee00e1410 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #flaky #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -58,7 +58,7 @@ module.exports = { } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From 9825f8b11dc0711379169091683d31d6cec4aa63 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 15:48:40 +0200 Subject: [PATCH 103/312] drag drop flaky test --- .circleci/config.yml | 2 +- apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index afe5c5576b..55755e31e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: false + default: true orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 214217af38..08d1c3ccbc 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -56,7 +56,7 @@ module.exports = { }) } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From b94b850391dd39fc2d7b89a47344e355f6644770 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 28 Aug 2024 18:33:47 +0200 Subject: [PATCH 104/312] done when error --- .../tests/file_explorer_multiselect.test.ts | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 08d1c3ccbc..99db771ca5 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -41,17 +41,24 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemtests"]', locateStrategy: 'xpath' }, (el: any) => { - const id = (el as any).value.getId() - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .perform(() => done()) + try { + const id = (el as any).value.getId(); + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { + (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); + }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') + .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') + .perform(() => done()) + } catch (error) { + console.error('An error occurred:', error) + done(error); + } }) }) } @@ -77,18 +84,25 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemcontracts"]', locateStrategy: 'xpath' }, (el: any) => { - const id = (el as any).value.getId() - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') - .perform(() => done()) + try { + const id = (el as any).value.getId(); + browser + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') + .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) + .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .execute(function () { + (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); + }) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) + .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') + .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') + .perform(() => done()) + } catch (error) { + console.error('An error occurred:', error) + done(error) + } }) }) } From 17b218bf7a50e639673350370aa84a7e6d6455f6 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 07:40:25 +0200 Subject: [PATCH 105/312] perform --- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 99db771ca5..67e84a1bd8 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -57,7 +57,7 @@ module.exports = { .perform(() => done()) } catch (error) { console.error('An error occurred:', error) - done(error); + browser.perform(() =>done(error)) } }) }) @@ -101,7 +101,7 @@ module.exports = { .perform(() => done()) } catch (error) { console.error('An error occurred:', error) - done(error) + browser.perform(() =>done(error)) } }) }) From 12d1d375a130d5ec1a3a39b74fcc84b619a22df2 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:10:21 +0200 Subject: [PATCH 106/312] abort on failure false --- .../tests/file_explorer_multiselect.test.ts | 72 ++++++++----------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 67e84a1bd8..16851ab337 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #flaky #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -20,10 +20,11 @@ module.exports = { selectedElements.push(el) }) browser.selectFiles(selectedElements) - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemtests"]') + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) + .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) }, + 'Should drag and drop multiple files in file explorer to tests folder #group1': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { @@ -41,29 +42,23 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemtests"]', locateStrategy: 'xpath' }, (el: any) => { - try { - const id = (el as any).value.getId(); - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { - (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); - }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]') - .waitForElementVisible('li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') - .perform(() => done()) - } catch (error) { - console.error('An error occurred:', error) - browser.perform(() =>done(error)) - } + const id = (el as any).value.getId() + browser + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/2_Owner.sol"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) + .perform(() => done()) }) }) } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { + + 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') @@ -84,25 +79,18 @@ module.exports = { .perform((done) => { browser.findElement({ selector: '//*[@data-id="treeViewLitreeViewItemcontracts"]', locateStrategy: 'xpath' }, (el: any) => { - try { - const id = (el as any).value.getId(); - browser - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts"]') - .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .execute(function () { - (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click(); - }) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/tests"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', 5000) - .waitForElementVisible('li[data-id="treeViewLitreeViewItemcontracts/scripts"]', 5000) - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemtests"]') - .waitForElementNotPresent('li[data-id="treeViewLitreeViewItemREADME.txt"]') - .perform(() => done()) - } catch (error) { - console.error('An error occurred:', error) - browser.perform(() =>done(error)) - } + const id = (el as any).value.getId() + browser + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts"]', abortOnFailure: false }) + .dragAndDrop('li[data-id="treeViewLitreeViewItemtests"]', id) + .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) + .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/tests"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/README.txt"]', abortOnFailure: false }) + .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemcontracts/scripts"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .waitForElementNotPresent({ selector: 'li[data-id="treeViewLitreeViewItemREADME.txt"]', abortOnFailure: false }) + .perform(() => done()) }) }) } From 6c95b2543031e4b1aace5876fc071bcb6e6411d9 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:12:07 +0200 Subject: [PATCH 107/312] restore --- .../src/tests/file_explorer_multiselect.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 16851ab337..75cc1b4d88 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -20,9 +20,9 @@ module.exports = { selectedElements.push(el) }) browser.selectFiles(selectedElements) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', abortOnFailure: false }) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]', abortOnFailure: false }) - .assert.visible({ selector: '.bg-secondary[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]') + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') + .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemtests"]') }, 'Should drag and drop multiple files in file explorer to tests folder #group1': function (browser: NightwatchBrowser) { From cd02c1b29e83081140dd7f4b973b8bf5e81253a3 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:22:13 +0200 Subject: [PATCH 108/312] error on purpose --- apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 75cc1b4d88..1ec8e38e56 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -45,7 +45,7 @@ module.exports = { const id = (el as any).value.getId() browser .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/2_Storage.sol"]', id) .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) From daffeeb33def572e09103191cc330428ae558785 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 08:47:34 +0200 Subject: [PATCH 109/312] group3 --- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 1ec8e38e56..3f09a92899 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -45,7 +45,7 @@ module.exports = { const id = (el as any).value.getId() browser .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests"]', abortOnFailure: false }) - .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/2_Storage.sol"]', id) + .dragAndDrop('li[data-id="treeViewLitreeViewItemcontracts/1_Storage.sol"]', id) .waitForElementPresent({ selector: '[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok', abortOnFailure: false }) .execute(function () { (document.querySelector('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') as HTMLElement).click() }) .waitForElementVisible({ selector: 'li[data-id="treeViewLitreeViewItemtests/1_Storage.sol"]', abortOnFailure: false }) @@ -58,7 +58,7 @@ module.exports = { } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From f8c5e47b4b173d59ef9ab8beb293358daf1a727e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 09:09:00 +0200 Subject: [PATCH 110/312] unflaky --- .circleci/config.yml | 2 +- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 55755e31e6..afe5c5576b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: run_flaky_tests: type: boolean - default: true + default: false orbs: browser-tools: circleci/browser-tools@1.4.4 win: circleci/windows@5.0 diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 3f09a92899..aee00e1410 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #flaky #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -58,7 +58,7 @@ module.exports = { } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #flaky #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From be93f41b27b97b2d01a66d63712c7d4e6bfdb0d4 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 09:09:41 +0200 Subject: [PATCH 111/312] rm space --- .../remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index aee00e1410..f809a4930c 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -58,7 +58,7 @@ module.exports = { } }, - 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { + 'should drag and drop multiple files and folders in file explorer to contracts folder #group3': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { console.log('Skipping test for firefox') From a268b333d3481c92d718838b6d05bbfbce1c2158 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 29 Aug 2024 09:10:38 +0200 Subject: [PATCH 112/312] rm space --- apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts index 3a38619c67..6b07aa123b 100644 --- a/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts +++ b/apps/remix-ide-e2e/src/tests/file_explorer_multiselect.test.ts @@ -7,7 +7,7 @@ module.exports = { init(browser, done) }, - 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { + 'Should select multiple items in file explorer #group1': function (browser: NightwatchBrowser) { const selectedElements = [] browser .openFile('contracts') @@ -24,7 +24,6 @@ module.exports = { .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemcontracts/2_Owner.sol"]') .assert.visible('.bg-secondary[data-id="treeViewLitreeViewItemtests"]') }, - 'Should drag and drop multiple files in file explorer to tests folder #group1': function (browser: NightwatchBrowser) { const selectedElements = [] if (browser.options.desiredCapabilities?.browserName === 'firefox') { From 991b090ee0a4ef7141fad7a3f7ad350b5299cce0 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 28 Aug 2024 19:09:08 +0530 Subject: [PATCH 113/312] fix free function option --- libs/remix-ui/editor/src/lib/remix-ui-editor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 658eb20fba..6217e2d3c5 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -926,6 +926,7 @@ export const EditorUI = (props: EditorUIProps) => { if (freeFunctionNode) { executeFreeFunctionAction.label = intl.formatMessage({ id: 'editor.executeFreeFunction2' }, { name: freeFunctionNode.name }) freeFunctionAction = editor.addAction(executeFreeFunctionAction) + freeFunctionCondition.set(true) } const functionImpl = nodesAtPosition.find((node) => node.kind === 'function') @@ -945,7 +946,6 @@ export const EditorUI = (props: EditorUIProps) => { executeSolgptExplainFunctionAction.label = intl.formatMessage({ id: 'editor.explainFunctionSol' }) solgptExplainFunctionAction = editor.addAction(executeSolgptExplainFunctionAction) } - freeFunctionCondition.set(!!freeFunctionNode) } contextmenu._onContextMenu = (...args) => { if (args[0]) args[0].event?.preventDefault() From 6e2e5fa5274ca1d0f9bec253dc2a37556e6522fc Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 28 Aug 2024 19:53:30 +0530 Subject: [PATCH 114/312] fix icon for bridges --- libs/remix-ui/run-tab/src/lib/components/environment.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 d499b9c917..4f6c2964ae 100644 --- a/libs/remix-ui/run-tab/src/lib/components/environment.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/environment.tsx @@ -23,7 +23,7 @@ export function EnvironmentUI(props: EnvironmentProps) { 'L2 - Arbitrum': 'https://bridge.arbitrum.io/' } - const isL2 = (providerDisplayName: string) => providerDisplayName === 'L2 - Optimism' || providerDisplayName === 'L2 - Arbitrum' + const isL2 = (providerDisplayName: string) => providerDisplayName && (providerDisplayName.startsWith('L2 - Optimism') || providerDisplayName.startsWith('L2 - Arbitrum')) return (
From 874b40573815ce87db72ed6b336e49d427616c88 Mon Sep 17 00:00:00 2001 From: ijlal321 Date: Thu, 22 Aug 2024 02:10:28 +0500 Subject: [PATCH 129/312] using context to detect app state --- .../statusbar/src/lib/remixui-statusbar-panel.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx b/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx index 4eee63fb13..5099d31286 100644 --- a/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx +++ b/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState, useContext } from 'react' import GitStatus from './components/gitStatus' import AIStatus from './components/aiStatus' import ScamAlertStatus from './components/scamAlertStatus' @@ -9,7 +9,7 @@ import axios from 'axios' import { StatusBar } from 'apps/remix-ide/src/app/components/status-bar' import { StatusBarContextProvider } from '../contexts/statusbarcontext' import DidYouKnow from './components/didYouKnow' -import isElectron from 'is-electron' +import { appPlatformTypes, platformContext } from '@remix-ui/app' export interface RemixUIStatusBarProps { statusBarPlugin: StatusBar @@ -21,6 +21,7 @@ export type ScamAlert = { } export function RemixUIStatusBar({ statusBarPlugin }: RemixUIStatusBarProps) { + const platform = useContext(platformContext) const [showScamDetails, setShowScamDetails] = useState(true) const [scamAlerts, setScamAlerts] = useState([]) const [gitBranchName, setGitBranchName] = useState('') @@ -69,7 +70,7 @@ export function RemixUIStatusBar({ statusBarPlugin }: RemixUIStatusBarProps) { return ( <> - {!isElectron() && showScamDetails && ( + {(platform !== appPlatformTypes.desktop) && showScamDetails && ( @@ -87,7 +88,7 @@ export function RemixUIStatusBar({ statusBarPlugin }: RemixUIStatusBarProps) {
- { !isElectron() &&
+ { (platform !== appPlatformTypes.desktop) &&
}
From 48924ee8e5d1cfe7eb1804ee25294468cee4f524 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 10:39:53 +0000 Subject: [PATCH 130/312] Bump webpack from 5.76.0 to 5.94.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.76.0 to 5.94.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.76.0...v5.94.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- yarn.lock | 513 ++++++++++++++++++++++++++---------------------------- 1 file changed, 251 insertions(+), 262 deletions(-) diff --git a/yarn.lock b/yarn.lock index e07bc5f64b..51c9f38f46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4243,7 +4243,7 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -4252,29 +4252,53 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -4296,7 +4320,15 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== @@ -7319,26 +7351,10 @@ dependencies: "@types/ms" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.6.tgz#7976f054c1bccfcf514bff0564c0c41df5c08207" - integrity sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@*", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/estree@0.0.39": version "0.0.39" @@ -7480,16 +7496,16 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== -"@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "@types/json-stable-stringify@^1.0.32": version "1.0.36" resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.36.tgz#fe6c6001a69ff8160a772da08779448a333c7ddd" @@ -8454,125 +8470,125 @@ dependencies: zod "3.22.4" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^1.2.0": @@ -8833,10 +8849,10 @@ acorn-es7-plugin@^1.1.7: resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" integrity sha512-7D+8kscFMf6F2t+8ZRYmv82CncDZETsaZ4dEl5lh3qQez7FVABk2Vz616SAbnIq1PbNsLVaZjl2oSkk5BWAKng== -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -8872,20 +8888,10 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -acorn@^8.11.3: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -acorn@^8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== +acorn@^8.0.4, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== adm-zip@^0.4.16: version "0.4.16" @@ -11086,25 +11092,15 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -browserslist@^4.22.2: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.10, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.22.2: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" bs58@^4.0.0: version "4.0.1" @@ -11524,15 +11520,10 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz#6af34bb5d720074e2099432aa522c21555a18301" integrity sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA== -caniuse-lite@^1.0.30001400: - version "1.0.30001412" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz#30f67d55a865da43e0aeec003f073ea8764d5d7c" - integrity sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001589" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" - integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== +caniuse-lite@^1.0.30001646: + version "1.0.30001655" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" + integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== canvg@^3.0.6: version "3.0.10" @@ -14256,15 +14247,10 @@ electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz#39e7047579867c59973eec5168d8bf440780cb7a" integrity sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ== -electron-to-chromium@^1.4.251: - version "1.4.264" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.264.tgz#2f68a062c38b7a04bf57f3e6954b868672fbdcd3" - integrity sha512-AZ6ZRkucHOQT8wke50MktxtmcWZr67kE17X/nAXFf62NIdMdgY6xfsaJD5Szoy84lnkuPWH+4tTNE3s2+bPCiw== - -electron-to-chromium@^1.4.668: - version "1.4.681" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" - integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== +electron-to-chromium@^1.5.4: + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== electron@^24.4.0: version "24.4.0" @@ -14359,10 +14345,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0, enhanced-resolve@^5.7.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -14595,10 +14581,10 @@ es-get-iterator@^1.1.1: is-string "^1.0.5" isarray "^2.0.5" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== es-set-tostringtag@^2.0.1: version "2.0.1" @@ -14717,6 +14703,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -17193,10 +17184,10 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graceful-fs@~4.1.11: version "4.1.11" @@ -23244,15 +23235,10 @@ node-notifier@^4.2.3: shellwords "^0.1.0" which "^1.0.5" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== nodemon@^2.0.4: version "2.0.20" @@ -24850,6 +24836,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -27583,10 +27574,10 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" @@ -27789,6 +27780,13 @@ serialize-javascript@6.0.0, serialize-javascript@^6.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -29448,24 +29446,24 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== +terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.6: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" -terser@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== +terser@^5.26.0: + version "5.31.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" + integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -30611,21 +30609,13 @@ upath@^1.1.1, upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-browserslist-db@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" - integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" update-notifier@~2.1.0: version "2.1.0" @@ -31115,10 +31105,10 @@ watchify@^3.9.0: through2 "^2.0.0" xtend "^4.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -31543,33 +31533,32 @@ webpack-subresource-integrity@^5.1.0: typed-assert "^1.0.8" webpack@^5.75.0: - version "5.76.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.0.tgz#f9fb9fb8c4a7dbdcd0d56a98e56b8a942ee2692c" - integrity sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== + dependencies: + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: From 03c8f6100c849370dd4f6a6a03110d0b31841df7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 07:45:21 +0000 Subject: [PATCH 131/312] Bump axios from 1.6.1 to 1.7.4 in /apps/remixdesktop Bumps [axios](https://github.com/axios/axios) from 1.6.1 to 1.7.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.1...v1.7.4) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/yarn.lock | 43 +++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index a92af25e36..f95fc5c8c7 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -49,7 +49,7 @@ "@remixproject/plugin-electron": "0.3.41", "@vscode/ripgrep": "^1.15.6", "add": "^2.0.6", - "axios": "^1.6.1", + "axios": "^1.7.4", "byline": "^5.0.0", "chokidar": "^3.5.3", "express": "^4.19.2", diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index dfe7f7a7e7..dbba1b57ce 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -1170,12 +1170,12 @@ axios@1.2.2: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" - integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== +axios@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" + integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -2489,7 +2489,7 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -follow-redirects@^1.15.0: +follow-redirects@^1.15.0, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -4677,7 +4677,16 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4736,7 +4745,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -5431,7 +5447,16 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From d7494cf875e7e96c5b906ede5ddb0c5f52e54010 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 06:48:34 +0000 Subject: [PATCH 132/312] Bump braces from 3.0.2 to 3.0.3 in /apps/remixdesktop Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] --- apps/remixdesktop/yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index dbba1b57ce..b4d80fb9e0 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -1298,11 +1298,11 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" brorand@^1.1.0: version "1.1.0" @@ -2469,10 +2469,10 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" From 657c1c5f84c7349f11bbe7c92d4281f70121cf7d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 11:07:50 +0200 Subject: [PATCH 133/312] git types --- libs/remix-api/src/lib/types/git.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libs/remix-api/src/lib/types/git.ts b/libs/remix-api/src/lib/types/git.ts index 50d145279b..6f24280b47 100644 --- a/libs/remix-api/src/lib/types/git.ts +++ b/libs/remix-api/src/lib/types/git.ts @@ -1,5 +1,7 @@ import { Endpoints } from "@octokit/types" +import { CustomRemixApi } from "@remix-api" import { AuthCallback, HttpClient, ReadCommitResult } from "isomorphic-git" +import { Plugin } from "@remixproject/engine"; export type branchDifference = { uniqueHeadCommits: ReadCommitResult[], @@ -198,5 +200,12 @@ export type isoGitProxyConfig = { onAuth: AuthCallback } -export type GitHubUser = Partial -export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] \ No newline at end of file +export type GitHubUser = Partial & { + isConnected: boolean +} + +export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] + +export interface IGitUi { + plugin: Plugin +} \ No newline at end of file From 8cc2461a6cc6eb2b19714b9abd9f0cdc17efcaca Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 11:09:12 +0200 Subject: [PATCH 134/312] type --- libs/remix-ui/git/src/components/gitui.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 4ad47ef5af..013fe4bf25 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -33,6 +33,7 @@ import { Init } from './panels/init' import { Disabled } from './disabled' import { AppContext, platformContext } from '@remix-ui/app' import { Version } from './panels/version' +import { IGitUi } from '@remix-api' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) From 64bec7b787aefe8ec207fa92a865766e4a38a6be Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 28 Aug 2024 16:25:06 +0200 Subject: [PATCH 135/312] add forked chain in env explorer --- .../app/providers/environment-explorer.tsx | 42 ++++++++++++++++++- apps/remix-ide/src/app/udapp/run-tab.js | 9 ++-- apps/remix-ide/src/blockchain/blockchain.tsx | 1 + 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide/src/app/providers/environment-explorer.tsx b/apps/remix-ide/src/app/providers/environment-explorer.tsx index 8e5fe87011..8f25793db9 100644 --- a/apps/remix-ide/src/app/providers/environment-explorer.tsx +++ b/apps/remix-ide/src/app/providers/environment-explorer.tsx @@ -25,7 +25,7 @@ const profile = { methods: [] } -type ProvidersSection = `Injected` | 'Remix VMs' | 'Externals' +type ProvidersSection = `Injected` | 'Remix VMs' | 'Externals' | 'Remix forked VMs' export class EnvironmentExplorer extends ViewPlugin { providers: { [key in ProvidersSection]: Provider[] } @@ -39,6 +39,7 @@ export class EnvironmentExplorer extends ViewPlugin { this.providers = { 'Injected': [], 'Remix VMs': [], + 'Remix forked VMs': [], 'Externals': [] } } @@ -52,6 +53,8 @@ export class EnvironmentExplorer extends ViewPlugin { addProvider (provider: Provider) { if (provider.isInjected) { this.providers['Injected'].push(provider) + } else if (provider.isForkedVM) { + this.providers['Remix forked VMs'].push(provider) } else if (provider.isVM) { this.providers['Remix VMs'].push(provider) } else { @@ -81,7 +84,8 @@ export class EnvironmentExplorer extends ViewPlugin { this.providers = { 'Injected': [], 'Remix VMs': [], - 'Externals': [] + 'Externals': [], + 'Remix forked VMs': [] } for (const [key, provider] of Object.entries(this.providersFlat)) { this.addProvider(provider) @@ -167,6 +171,40 @@ export class EnvironmentExplorer extends ViewPlugin {
{provider.description}
})} + {this.providers['Remix forked VMs'].map(provider => { + return { + if (pinned) { + this.emit('providerPinned', provider.name, provider) + this.call('notification', 'toast', `"${provider.displayName}" has been added to the Environment list of the Deploy & Run Transactions plugin.`) + return true + } + const providerName = await this.call('blockchain', 'getProvider') + if (providerName !== provider.name) { + this.emit('providerUnpinned', provider.name, provider) + this.call('notification', 'toast', `"${provider.displayName}" has been removed from the Environment list of the Deploy & Run Transactions plugin.`) + return true + } else { + this.call('notification', 'toast', 'Cannot unpin the current selected provider') + return false + } + }} + > +
{provider.description}
+
+ })}
{ + const addProvider = async (position, name, displayName, isInjected, isVM, fork = '', dataId = '', title = '', forkedVM = false) => { await this.call('blockchain', 'addProvider', { position, options: {}, @@ -176,6 +176,7 @@ export class RunTab extends ViewPlugin { logos: logos[name], fork, isInjected, + isForkedVM: forkedVM, isVM, title, init: async function () { @@ -237,9 +238,9 @@ export class RunTab extends ViewPlugin { await addProvider(51, 'vm-paris', 'Remix VM (Paris)', false, true, 'paris', 'settingsVMParisMode', titleVM) await addProvider(52, 'vm-london', 'Remix VM (London)', false, true, 'london', 'settingsVMLondonMode', titleVM) await addProvider(53, 'vm-berlin', 'Remix VM (Berlin)', false, true, 'berlin', 'settingsVMBerlinMode', titleVM) - await addProvider(2, 'vm-mainnet-fork', 'Remix VM - Mainnet fork', false, true, 'cancun', 'settingsVMMainnetMode', titleVM) - await addProvider(3, 'vm-sepolia-fork', 'Remix VM - Sepolia fork', false, true, 'cancun', 'settingsVMSepoliaMode', titleVM) - await addProvider(4, 'vm-custom-fork', 'Remix VM - Custom fork', false, true, '', 'settingsVMCustomMode', titleVM) + await addProvider(2, 'vm-mainnet-fork', 'Remix VM - Mainnet fork', false, true, 'cancun', 'settingsVMMainnetMode', titleVM, true) + await addProvider(3, 'vm-sepolia-fork', 'Remix VM - Sepolia fork', false, true, 'cancun', 'settingsVMSepoliaMode', titleVM, true) + await addProvider(4, 'vm-custom-fork', 'Remix VM - Custom fork', false, true, '', 'settingsVMCustomMode', titleVM, true) // wallet connect await addProvider(6, 'walletconnect', 'WalletConnect', false, false) diff --git a/apps/remix-ide/src/blockchain/blockchain.tsx b/apps/remix-ide/src/blockchain/blockchain.tsx index bbf1a9c805..e91acc0f4e 100644 --- a/apps/remix-ide/src/blockchain/blockchain.tsx +++ b/apps/remix-ide/src/blockchain/blockchain.tsx @@ -55,6 +55,7 @@ export type Provider = { description?: string isInjected: boolean isVM: boolean + isForkedVM: boolean title: string init: () => Promise provider:{ From b652afc6ee3de426c916ff342cd3f3fa85721ff5 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 13:47:40 +0200 Subject: [PATCH 136/312] fix merge --- libs/remix-git/src/isogit.ts | 17 +++++++++++------ .../app/src/lib/remix-app/actions/app.ts | 2 +- .../app/src/lib/remix-app/interface/index.ts | 2 +- .../remix-ui/app/src/lib/remix-app/state/app.ts | 2 +- libs/remix-ui/git/src/lib/gitactions.ts | 1 - .../workspace/src/lib/remix-ui-workspace.tsx | 3 ++- libs/remix-ui/workspace/src/lib/types/index.ts | 2 +- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index d7b0e0eb60..be3230973c 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -161,7 +161,7 @@ const getAuthor = async (input, plugin: any) => { } -const getGitHubUser = async (input: { token: string }): Promise<{ +const getGitHubUser = async(input: { token: string }): Promise<{ user: GitHubUser, emails: userEmails, scopes: string[] @@ -171,17 +171,22 @@ const getGitHubUser = async (input: { token: string }): Promise<{ auth: input.token }) - const user = await octokit.request('GET /user') + const user = await octokit.request('GET /user', { + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } + }) const emails = await octokit.request('GET /user/emails') const scopes = user.headers['x-oauth-scopes'] || '' - console.log('USER', user.data) - return { - user: user.data, + user: { + ...user.data, isConnected: + user.data.login !== undefined && user.data.login !== null && user.data.login !== '' + }, emails: emails.data, - scopes: scopes && scopes.split(',') + scopes: scopes && scopes.split(',').map(scope => scope.trim()) } } catch (e) { return null diff --git a/libs/remix-ui/app/src/lib/remix-app/actions/app.ts b/libs/remix-ui/app/src/lib/remix-app/actions/app.ts index 20932eef6c..9822635e1e 100644 --- a/libs/remix-ui/app/src/lib/remix-app/actions/app.ts +++ b/libs/remix-ui/app/src/lib/remix-app/actions/app.ts @@ -1,4 +1,4 @@ -import { GitHubUser } from '@remix-ui/git'; +import { GitHubUser } from '@remix-api'; import { AppModal } from '../interface' type ActionMap = { diff --git a/libs/remix-ui/app/src/lib/remix-app/interface/index.ts b/libs/remix-ui/app/src/lib/remix-app/interface/index.ts index dc6e453edc..b1cee75257 100644 --- a/libs/remix-ui/app/src/lib/remix-app/interface/index.ts +++ b/libs/remix-ui/app/src/lib/remix-app/interface/index.ts @@ -1,4 +1,4 @@ -import { GitHubUser } from '@remix-ui/git' +import { GitHubUser } from '@remix-api' import { ModalTypes } from '../types' export type ValidationResult = { diff --git a/libs/remix-ui/app/src/lib/remix-app/state/app.ts b/libs/remix-ui/app/src/lib/remix-app/state/app.ts index 417911ae0c..1e76098bdc 100644 --- a/libs/remix-ui/app/src/lib/remix-app/state/app.ts +++ b/libs/remix-ui/app/src/lib/remix-app/state/app.ts @@ -1,4 +1,4 @@ -import { GitHubUser } from "@remix-ui/git"; +import { GitHubUser } from "@remix-api"; import { AppState } from "../interface"; export const appInitialState: AppState = { diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index ce410e653b..7505501118 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -8,7 +8,6 @@ import { ModalTypes, appActionTypes, AppAction } from "@remix-ui/app"; import { sendToMatomo, setFileDecorators } from "./pluginActions"; import { Plugin } from "@remixproject/engine"; import { addInputType, branch, branchDifference, checkoutInputType, cloneInputType, commitChange, CustomRemixApi, fetchInputType, GitHubUser, pullInputType, pushInputType, remote, rmInputType, userEmails } from "@remix-api"; -import { app } from "electron"; export const fileStatuses = [ ["new,untracked", 0, 2, 0], // new, untracked 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 f6bf6d4184..215bc019f3 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -17,7 +17,8 @@ import { customAction } from '@remixproject/plugin-api' import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' -import { branch, GitHubUser, gitUIPanels, userEmails } from '@remix-ui/git' +import { branch } from '@remix-api' +import { gitUIPanels } from '@remix-ui/git' const _paq = (window._paq = window._paq || []) diff --git a/libs/remix-ui/workspace/src/lib/types/index.ts b/libs/remix-ui/workspace/src/lib/types/index.ts index 32e4d05d98..214c1196b2 100644 --- a/libs/remix-ui/workspace/src/lib/types/index.ts +++ b/libs/remix-ui/workspace/src/lib/types/index.ts @@ -6,7 +6,7 @@ import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types' import { ViewPlugin } from '@remixproject/engine-web' import { appPlatformTypes } from '@remix-ui/app' import { Placement } from 'react-bootstrap/esm/Overlay' -import { branch, GitHubUser } from '@remix-ui/git' +import { branch } from '@remix-api' export type action = { name: string, type?: Array, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes } export interface JSONStandardInput { From 44dbc78e3382aadf71011da9e6249b7eabcad630 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 13:52:46 +0200 Subject: [PATCH 137/312] fix lib --- libs/remix-api/src/lib/types/git.ts | 5 ----- libs/remix-ui/git/src/components/gitui.tsx | 7 ++++--- libs/remix-ui/git/src/types/index.ts | 6 ++++++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libs/remix-api/src/lib/types/git.ts b/libs/remix-api/src/lib/types/git.ts index 6f24280b47..463e515715 100644 --- a/libs/remix-api/src/lib/types/git.ts +++ b/libs/remix-api/src/lib/types/git.ts @@ -1,7 +1,5 @@ import { Endpoints } from "@octokit/types" -import { CustomRemixApi } from "@remix-api" import { AuthCallback, HttpClient, ReadCommitResult } from "isomorphic-git" -import { Plugin } from "@remixproject/engine"; export type branchDifference = { uniqueHeadCommits: ReadCommitResult[], @@ -206,6 +204,3 @@ export type GitHubUser = Partial & { export type userEmails = Endpoints["GET /user/emails"]["response"]["data"] -export interface IGitUi { - plugin: Plugin -} \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/gitui.tsx b/libs/remix-ui/git/src/components/gitui.tsx index 013fe4bf25..b7444e0b8d 100644 --- a/libs/remix-ui/git/src/components/gitui.tsx +++ b/libs/remix-ui/git/src/components/gitui.tsx @@ -4,7 +4,7 @@ import { loadFiles, setCallBacks } from '../lib/listeners' import { openDiff, openFile, openFolderInSameWindow, sendToMatomo, saveToken, setModifiedDecorator, setPlugin, setUntrackedDecorator, statusChanged } from '../lib/pluginActions' import { gitActionsContext, pluginActionsContext } from '../state/context' import { gitReducer } from '../state/gitreducer' -import { defaultGitState, defaultLoaderState, gitMatomoEventTypes, gitState, gitUIPanels, loaderState } from '../types' +import { IGitUi, defaultGitState, defaultLoaderState, gitMatomoEventTypes, gitState, gitUIPanels, loaderState } from '../types' import { Accordion, Button } from "react-bootstrap"; import { CommitMessage } from './buttons/commitmessage' import { Commits } from './panels/commits' @@ -31,9 +31,8 @@ import { GitHubCredentials } from './panels/githubcredentials' import { Setup } from './panels/setup' import { Init } from './panels/init' import { Disabled } from './disabled' -import { AppContext, platformContext } from '@remix-ui/app' +import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { Version } from './panels/version' -import { IGitUi } from '@remix-api' export const gitPluginContext = React.createContext(defaultGitState) export const loaderContext = React.createContext(defaultLoaderState) @@ -248,6 +247,8 @@ export const GitUI = (props: IGitUi) => {
+ { platform === appPlatformTypes.desktop && + } diff --git a/libs/remix-ui/git/src/types/index.ts b/libs/remix-ui/git/src/types/index.ts index 97724104d2..f87ee222f8 100644 --- a/libs/remix-ui/git/src/types/index.ts +++ b/libs/remix-ui/git/src/types/index.ts @@ -1,6 +1,12 @@ import { Endpoints } from "@octokit/types" import { GitHubUser, branch, branchDifference, commitChange, pagedCommits, remote, remoteBranch, repository, syncStatus, userEmails } from "@remix-api" import { ReadCommitResult } from "isomorphic-git" +import { Plugin } from "@remixproject/engine"; +import { CustomRemixApi } from "@remix-api" + +export interface IGitUi { + plugin: Plugin + } export type gitState = { currentBranch: branch From 6e354f99acaf4ed2d45bae5909f9155a08bfe86a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 13:59:40 +0200 Subject: [PATCH 138/312] lint --- libs/remix-ui/git/src/state/gitreducer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/git/src/state/gitreducer.tsx b/libs/remix-ui/git/src/state/gitreducer.tsx index d9db9437d5..65ab5e57a8 100644 --- a/libs/remix-ui/git/src/state/gitreducer.tsx +++ b/libs/remix-ui/git/src/state/gitreducer.tsx @@ -231,7 +231,7 @@ export const gitReducer = (state: gitState = defaultGitState, action: Actions): ...state, timestamp: action.payload } - + case 'SET_GIT_LOG_COUNT': return { ...state, From 2648d0fcf8bd9fd7dd7f8365ea6bcb8be2d6fa0c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 14:32:49 +0200 Subject: [PATCH 139/312] fix loading --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 2 ++ libs/remix-ui/git/src/components/panels/commits.tsx | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index daa7d17baa..fff0ae5b90 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -364,6 +364,7 @@ module.exports = { .setValue('*[data-id="githubToken"]', 'invalidtoken') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause() .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') }, @@ -382,6 +383,7 @@ module.exports = { .click('*[data-id="load-more-commits"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') + .pause() .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { console.log('Number of commit-summary elements:', (result.value as any).length); browser.assert.ok((result.value as any).length > 2) diff --git a/libs/remix-ui/git/src/components/panels/commits.tsx b/libs/remix-ui/git/src/components/panels/commits.tsx index 120a80b8c7..584c3f2fb4 100644 --- a/libs/remix-ui/git/src/components/panels/commits.tsx +++ b/libs/remix-ui/git/src/components/panels/commits.tsx @@ -19,9 +19,8 @@ export const Commits = () => { } }; - const loadNextPage = () => { - actions.setStateGitLogCount(context.gitLogCount + 5) - actions.fetch({ + const loadNextPage = async () => { + await actions.fetch({ remote: null, ref: context.currentBranch, relative: true, @@ -29,6 +28,7 @@ export const Commits = () => { singleBranch: true, quiet: true }) + await actions.setStateGitLogCount(context.gitLogCount + 5) } const getRemote = () => { From 30400646a4fe164f5687497db49112d852dab045 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 14:38:29 +0200 Subject: [PATCH 140/312] increase timeout again --- apps/remix-ide/src/remixEngine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/remixEngine.js b/apps/remix-ide/src/remixEngine.js index e4977c43f2..f8bd8d6641 100644 --- a/apps/remix-ide/src/remixEngine.js +++ b/apps/remix-ide/src/remixEngine.js @@ -10,7 +10,7 @@ export class RemixEngine extends Engine { setPluginOption ({ name, kind }) { if (kind === 'provider') return { queueTimeout: 60000 * 2 } if (name === 'LearnEth') return { queueTimeout: 60000 } - if (name === 'dgitApi') return { queueTimeout: 2000 } + if (name === 'dgitApi') return { queueTimeout: 60000 * 4 } if (name === 'slither') return { queueTimeout: 60000 * 4 } // Requires when a solc version is installed if (name === 'hardhat') return { queueTimeout: 60000 * 4 } if (name === 'truffle') return { queueTimeout: 60000 * 4 } From 5a5c4a621e3dd77fed75e706e220f8e2a0fe64c5 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 14:47:17 +0200 Subject: [PATCH 141/312] remove pauses --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 4 ++-- apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index fff0ae5b90..348ea01714 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -364,7 +364,7 @@ module.exports = { .setValue('*[data-id="githubToken"]', 'invalidtoken') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') - .pause() + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') }, @@ -383,7 +383,7 @@ module.exports = { .click('*[data-id="load-more-commits"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') - .pause() + .pause(1000) .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { console.log('Number of commit-summary elements:', (result.value as any).length); browser.assert.ok((result.value as any).length > 2) diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index bf5da591e9..a9af174ebc 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -181,7 +181,7 @@ module.exports = { .waitForElementVisible('[data-id="workspaceGitPanel"]') .waitForElementVisible('[data-id="workspaceGitBranchesDropdown"]') .click('[data-id="workspaceGitBranchesDropdown"]') - .pause() + .pause(1000) .waitForElementVisible('[data-id="custom-dropdown-menu"]') .waitForElementContainsText('[data-id="custom-dropdown-items"]', 'origin/dev') .waitForElementContainsText('[data-id="custom-dropdown-items"]', 'origin/production') @@ -404,7 +404,7 @@ module.exports = { .getEditorValue((content) => { browser.assert.ok(content.indexOf(`contract Counter is BaseHook {`) !== -1, 'Incorrect content') - }).pause() + }) }, 'Should create Remix default workspace with files #group5': function (browser: NightwatchBrowser) { From 9204e8e83cd0c2286a322694ebe166f074dd5461 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 15:08:47 +0200 Subject: [PATCH 142/312] update tests --- apps/remixdesktop/test/tests/app/offline.test.ts | 6 ++++-- apps/remixdesktop/test/tests/app/search.test.ts | 6 ++++-- apps/remixdesktop/test/tests/app/slitherlinux.test.ts | 6 ++++-- apps/remixdesktop/test/tests/app/templates.test.ts | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/offline.test.ts b/apps/remixdesktop/test/tests/app/offline.test.ts index 040e587e5e..284d44991a 100644 --- a/apps/remixdesktop/test/tests/app/offline.test.ts +++ b/apps/remixdesktop/test/tests/app/offline.test.ts @@ -11,9 +11,11 @@ module.exports = { .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .click('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') .pause(3000) .windowHandles(function (result) { console.log(result.value) diff --git a/apps/remixdesktop/test/tests/app/search.test.ts b/apps/remixdesktop/test/tests/app/search.test.ts index 3a10ff583e..70e3d50b30 100644 --- a/apps/remixdesktop/test/tests/app/search.test.ts +++ b/apps/remixdesktop/test/tests/app/search.test.ts @@ -10,9 +10,11 @@ module.exports = { .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .click('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') .pause(3000) .windowHandles(function (result) { console.log(result.value) diff --git a/apps/remixdesktop/test/tests/app/slitherlinux.test.ts b/apps/remixdesktop/test/tests/app/slitherlinux.test.ts index da2c96ddd4..21b3f38ea5 100644 --- a/apps/remixdesktop/test/tests/app/slitherlinux.test.ts +++ b/apps/remixdesktop/test/tests/app/slitherlinux.test.ts @@ -14,9 +14,11 @@ const tests = { .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .click('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') .pause(3000) .windowHandles(function (result) { console.log(result.value) diff --git a/apps/remixdesktop/test/tests/app/templates.test.ts b/apps/remixdesktop/test/tests/app/templates.test.ts index 4c4bdc4753..86528458e9 100644 --- a/apps/remixdesktop/test/tests/app/templates.test.ts +++ b/apps/remixdesktop/test/tests/app/templates.test.ts @@ -10,9 +10,11 @@ module.exports = { .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') - .waitForElementPresent('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') - .click('[data-id="fileSystemModalDialogModalFooter-react"] .modal-ok') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') .pause(3000) .windowHandles(function (result) { console.log(result.value) From 942cf34f1687fa931dcc0828daedd982e7d304ad Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 15:35:26 +0200 Subject: [PATCH 143/312] fix test --- apps/remixdesktop/test/tests/app/git-ui.test.ts | 3 +++ apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 1 + apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 1 + 3 files changed, 5 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 9977a7a656..f9525f122e 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -56,6 +56,8 @@ const tests = { 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') @@ -70,6 +72,7 @@ const tests = { .addFile('test.txt', { content: 'hello world' }, 'README.md') .clickLaunchIcon('dgit') .pause(1000) + .click('*[data-id="sourcecontrol-panel"]') .waitForElementVisible({ selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", locateStrategy: 'xpath' diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 6032bb3660..f8ca6032b8 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -68,6 +68,7 @@ const tests = { .addFile('test.txt', { content: 'hello world' }, 'README.md') .clickLaunchIcon('dgit') .pause(1000) + .click('*[data-id="sourcecontrol-panel"]') .waitForElementVisible({ selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", locateStrategy: 'xpath' diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 00c2afa35e..7d9dab06d2 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -70,6 +70,7 @@ const tests = { .addFile('test.txt', { content: 'hello world' }, 'README.md') .clickLaunchIcon('dgit') .pause(1000) + .click('*[data-id="sourcecontrol-panel"]') .waitForElementVisible({ selector: "//*[@data-status='new-untracked' and @data-file='/test.txt']", locateStrategy: 'xpath' From dee99d20b3e73925eceb03aa252e9968fc36d608 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 15:38:31 +0200 Subject: [PATCH 144/312] reset test --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 348ea01714..daa7d17baa 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -364,7 +364,6 @@ module.exports = { .setValue('*[data-id="githubToken"]', 'invalidtoken') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') - .pause(1000) .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') }, @@ -383,7 +382,6 @@ module.exports = { .click('*[data-id="load-more-commits"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') - .pause(1000) .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { console.log('Number of commit-summary elements:', (result.value as any).length); browser.assert.ok((result.value as any).length > 2) From 4696a9194bd36b1640e70593bf503d9486d2801f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 15:51:38 +0200 Subject: [PATCH 145/312] fix tests --- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 2 ++ apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 2 ++ apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 2 ++ 3 files changed, 6 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 69d47f64b0..a8c864b2e6 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -56,6 +56,8 @@ const tests = { 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index f8ca6032b8..f928c361f9 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -56,6 +56,8 @@ const tests = { 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 7d9dab06d2..4c5b6be23b 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -56,6 +56,8 @@ const tests = { 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') .setValue('*[data-id="gitubUsername"]', 'git') .setValue('*[data-id="githubEmail"]', 'git@example.com') .click('*[data-id="saveGitHubCredentials"]') From 6fe897348c746ccc0844da06b2f1c9f8e49c2d40 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 16:26:28 +0200 Subject: [PATCH 146/312] fix conflict --- libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx b/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx index de67337743..5099d31286 100644 --- a/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx +++ b/libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx @@ -5,7 +5,6 @@ import ScamAlertStatus from './components/scamAlertStatus' import ScamDetails from './components/scamDetails' import { FloatingFocusManager, autoUpdate, flip, offset, shift, size, useClick, useDismiss, useFloating, useInteractions, useRole } from '@floating-ui/react' import axios from 'axios' -import { appPlatformTypes, platformContext } from '@remix-ui/app' // eslint-disable-next-line @nrwl/nx/enforce-module-boundaries import { StatusBar } from 'apps/remix-ide/src/app/components/status-bar' import { StatusBarContextProvider } from '../contexts/statusbarcontext' @@ -27,7 +26,6 @@ export function RemixUIStatusBar({ statusBarPlugin }: RemixUIStatusBarProps) { const [scamAlerts, setScamAlerts] = useState([]) const [gitBranchName, setGitBranchName] = useState('') const [isAiActive, setIsAiActive] = useState(false) - const platform = useContext(platformContext) const { refs, context, floatingStyles } = useFloating({ open: showScamDetails, onOpenChange: setShowScamDetails, From 15c8aa39a69aa75d127b0b2b987047b4f215cf0e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 16:48:10 +0200 Subject: [PATCH 147/312] add pauses --- apps/remixdesktop/test/tests/app/git-ui.test.ts | 4 ++++ apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 3 +++ apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 4 ++++ apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 3 +++ 4 files changed, 14 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index f9525f122e..149b5b96d6 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -57,9 +57,13 @@ const tests = { browser. clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') + .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index a8c864b2e6..fec1c5ec95 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -58,8 +58,11 @@ const tests = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') + .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') .modalFooterOKClick('github-credentials-error') diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index f928c361f9..cf8679a226 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -58,9 +58,13 @@ const tests = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') + .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') + .pause(1000) .modalFooterOKClick('github-credentials-error') }, diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 4c5b6be23b..6344e16252 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -59,8 +59,11 @@ const tests = { .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') + .pause(1000) .modalFooterOKClick('github-credentials-error') }, From 0684826f58ade27dbc1c2bb86ae7096409740955 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 16:51:40 +0200 Subject: [PATCH 148/312] add pauses --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index 22bece4727..baa6e9cec1 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -371,10 +371,15 @@ module.exports = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') + .pause(1000) .setValue('*[data-id="githubToken"]', 'invalidtoken') + .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) .click('*[data-id="saveGitHubCredentials"]') + .pause(1000) .modalFooterOKClick('github-credentials-error') }, 'check the commits panel for pagination #group3': function (browser: NightwatchBrowser) { From 46a14eb69d8a3dc0eecaa49e1bb271280f4697c0 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 17:24:46 +0200 Subject: [PATCH 149/312] no git server on windows --- apps/remixdesktop/test/tests/app/git-ui.test.ts | 2 +- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 2 +- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 2 +- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 149b5b96d6..f0707e52cb 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -195,6 +195,6 @@ const tests = { } const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') || useIsoGit ? tests : {} + ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} } diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index fec1c5ec95..9c03b83852 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -174,5 +174,5 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') || useIsoGit ? tests : {} + ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index cf8679a226..f7cd58b2ed 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -141,5 +141,5 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') || useIsoGit ? tests : {} + ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} } diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 6344e16252..b44f2c0e12 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -191,5 +191,5 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); module.exports = { - ...process.platform.startsWith('linux') || useIsoGit ? tests : {} + ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} } \ No newline at end of file From 03d20cefc7f32b31fed9ef06119030fe773564ef Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 2 Sep 2024 17:58:44 +0200 Subject: [PATCH 150/312] add pause --- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index b44f2c0e12..95194e7b33 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -164,6 +164,7 @@ const tests = { .pause(5000) .click('*[data-id="remotes-panel"]') .waitForElementVisible('*[data-id="set-as-default-origin"]') + .pause(1000) .click('*[data-id="set-as-default-origin"]') }, 'check the commands for origin #group4': function (browser: NightwatchBrowser) { From 862e084590be8c6e77457e73e99019fe55eb03da Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 09:19:14 +0200 Subject: [PATCH 151/312] only native git --- apps/remixdesktop/run_ci_test.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/remixdesktop/run_ci_test.sh b/apps/remixdesktop/run_ci_test.sh index d169985146..473b8a7f33 100755 --- a/apps/remixdesktop/run_ci_test.sh +++ b/apps/remixdesktop/run_ci_test.sh @@ -7,11 +7,11 @@ for TESTFILE in $TESTFILES; do yarn run test --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 done -if [ "$CIRCLE_NODE_INDEX" -eq 0 ]; then - sh ./run_git_ui_isogit_tests.sh -elif [ "$CIRCLE_NODE_INDEX" -eq 1 ]; then - yarn test:offline -fi +# if [ "$CIRCLE_NODE_INDEX" -eq 0 ]; then +# sh ./run_git_ui_isogit_tests.sh +# elif [ "$CIRCLE_NODE_INDEX" -eq 1 ]; then +# yarn test:offline +# fi echo "$TEST_EXITCODE" if [ "$TEST_EXITCODE" -eq 1 ] From 4514892dee8a07bf78713b902c593f7393d5d5e7 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 09:33:37 +0200 Subject: [PATCH 152/312] debug --- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index f7cd58b2ed..6deb7bce7e 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -56,7 +56,11 @@ const tests = { 'Update settings for git #group1 #group2 #group3': function (browser: NightwatchBrowser) { browser. clickLaunchIcon('dgit') + .saveScreenshot('./reports/screenshots/gitui.png') .waitForElementVisible('*[data-id="github-panel"]') + .saveScreenshot('./reports/screenshots/gitui2.png') + .pause(1000) + .saveScreenshot('./reports/screenshots/gitui3.png') .click('*[data-id="github-panel"]') .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') From cbb24cad54dc1d295a7dc66536730842b5477b50 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 10:58:11 +0200 Subject: [PATCH 153/312] test offline --- apps/remixdesktop/run_ci_test.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/remixdesktop/run_ci_test.sh b/apps/remixdesktop/run_ci_test.sh index 473b8a7f33..55613aab83 100755 --- a/apps/remixdesktop/run_ci_test.sh +++ b/apps/remixdesktop/run_ci_test.sh @@ -7,11 +7,10 @@ for TESTFILE in $TESTFILES; do yarn run test --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 done -# if [ "$CIRCLE_NODE_INDEX" -eq 0 ]; then -# sh ./run_git_ui_isogit_tests.sh -# elif [ "$CIRCLE_NODE_INDEX" -eq 1 ]; then -# yarn test:offline -# fi + +if [ "$CIRCLE_NODE_INDEX" -eq 1 ]; then + yarn test:offline || TEST_EXITCODE=1 +fi echo "$TEST_EXITCODE" if [ "$TEST_EXITCODE" -eq 1 ] From 85bae9c821cdfe1492bb6e1848e74f9d1be7c521 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 11:04:00 +0200 Subject: [PATCH 154/312] run isogit tests --- .circleci/config.yml | 5 +++++ apps/remixdesktop/run_git_ui_isogit_tests.sh | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e70614c1b1..8bc100203f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -133,6 +133,11 @@ jobs: command: | cd apps/remixdesktop/ ./run_ci_test.sh + - run: + name: "Run isogit tests" + command: | + cd apps/remixdesktop/ + ./run_git_ui_isogit_tests.sh - store_test_results: path: ./apps/remixdesktop/reports/tests - store_artifacts: diff --git a/apps/remixdesktop/run_git_ui_isogit_tests.sh b/apps/remixdesktop/run_git_ui_isogit_tests.sh index 9333aa2498..d47be23523 100755 --- a/apps/remixdesktop/run_git_ui_isogit_tests.sh +++ b/apps/remixdesktop/run_git_ui_isogit_tests.sh @@ -1,6 +1,14 @@ -#!/bin/bash +#!/usr/bin/env bash +set -e +TEST_EXITCODE=0 +yarn run build:e2e && node ./splice_tests.js +TESTFILES=$(node ./splice_tests.js | grep -i 'git' | circleci tests split --split-by=timings) +for TESTFILE in $TESTFILES; do + yarn run test --useIsoGit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 +done -for testfile in build-e2e/remixdesktop/test/tests/app/git*.js -do - yarn test:isogit --test $testfile -done \ No newline at end of file +echo "$TEST_EXITCODE" +if [ "$TEST_EXITCODE" -eq 1 ] +then + exit 1 +fi From 86ecea907b9a22c552af21dbcf7a479e1c4f2308 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 11:37:51 +0200 Subject: [PATCH 155/312] run isogit everywhere --- .circleci/config.yml | 15 ++++++++++++++- apps/remixdesktop/test/tests/app/git-ui.test.ts | 10 ++++++++-- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 11 ++++++++--- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 9 +++++++-- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 11 ++++++++--- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8bc100203f..f361a06425 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -276,12 +276,19 @@ jobs: yarn ./rundist.bash - run: - name: start tests offline + name: run tests command: | cd "apps/remixdesktop/" yarn -v sleep 15 ./run_ci_test.sh + - run: + name: "Run isogit tests" + command: | + cd apps/remixdesktop/ + yarn -v + sleep 15 + ./run_git_ui_isogit_tests.sh - store_test_results: path: ./apps/remixdesktop/reports/tests - store_artifacts: @@ -528,6 +535,12 @@ jobs: nvm use 20 cd apps/remixdesktop ./run_ci_test.sh + - run: + name: "Run isogit tests" + command: | + nvm use 20 + cd apps/remixdesktop + ./run_git_ui_isogit_tests.sh - store_test_results: path: ./apps/remixdesktop/reports/tests - store_artifacts: diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index f0707e52cb..fb9d0158e9 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -194,7 +194,13 @@ const tests = { }, } const useIsoGit = process.argv.includes('--useIsoGit'); -module.exports = { - ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} +if (process.platform.startsWith('win')) { + if (useIsoGit) + module.exports = { ...tests } + else + module.exports = {} } +else + module.exports = { ...tests } + diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 9c03b83852..89d3c8ea7a 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -173,6 +173,11 @@ const tests = { } const useIsoGit = process.argv.includes('--useIsoGit'); -module.exports = { - ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} -} \ No newline at end of file +if (process.platform.startsWith('win')) { + if (useIsoGit) + module.exports = { ...tests } + else + module.exports = {} +} +else + module.exports = { ...tests } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 6deb7bce7e..f45dc85d0d 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -144,6 +144,11 @@ const tests = { } const useIsoGit = process.argv.includes('--useIsoGit'); -module.exports = { - ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} +if (process.platform.startsWith('win')) { + if (useIsoGit) + module.exports = { ...tests } + else + module.exports = {} } +else + module.exports = { ...tests } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 95194e7b33..784ce57edb 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -191,6 +191,11 @@ const tests = { } const useIsoGit = process.argv.includes('--useIsoGit'); -module.exports = { - ...process.platform.startsWith('win') ? {} : process.platform.startsWith('linux') || useIsoGit ? tests : {} -} \ No newline at end of file +if (process.platform.startsWith('win')) { + if (useIsoGit) + module.exports = { ...tests } + else + module.exports = {} +} +else + module.exports = { ...tests } \ No newline at end of file From d92aea669fc6eb1e39f400fb15d8e2134faa4e71 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 12:42:15 +0200 Subject: [PATCH 156/312] do not run git server on windows --- apps/remixdesktop/test/tests/app/git-ui.test.ts | 5 +---- apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 5 +---- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 5 +---- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 5 +---- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index fb9d0158e9..777f7d8631 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -195,10 +195,7 @@ const tests = { } const useIsoGit = process.argv.includes('--useIsoGit'); if (process.platform.startsWith('win')) { - if (useIsoGit) - module.exports = { ...tests } - else - module.exports = {} + module.exports = {} } else module.exports = { ...tests } diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 89d3c8ea7a..461dbba61a 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -174,10 +174,7 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); if (process.platform.startsWith('win')) { - if (useIsoGit) - module.exports = { ...tests } - else - module.exports = {} + module.exports = {} } else module.exports = { ...tests } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index f45dc85d0d..3e74121c94 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -145,10 +145,7 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); if (process.platform.startsWith('win')) { - if (useIsoGit) - module.exports = { ...tests } - else - module.exports = {} + module.exports = {} } else module.exports = { ...tests } \ No newline at end of file diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 784ce57edb..1f084209a8 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -192,10 +192,7 @@ const tests = { const useIsoGit = process.argv.includes('--useIsoGit'); if (process.platform.startsWith('win')) { - if (useIsoGit) - module.exports = { ...tests } - else - module.exports = {} + module.exports = {} } else module.exports = { ...tests } \ No newline at end of file From 2a4ae56027ed0c9bd1adf914df5553e35ba5c3d6 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 14:22:58 +0200 Subject: [PATCH 157/312] add github test --- .../test/tests/app/github_test.ts | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 apps/remixdesktop/test/tests/app/github_test.ts diff --git a/apps/remixdesktop/test/tests/app/github_test.ts b/apps/remixdesktop/test/tests/app/github_test.ts new file mode 100644 index 0000000000..50094a7389 --- /dev/null +++ b/apps/remixdesktop/test/tests/app/github_test.ts @@ -0,0 +1,247 @@ +import { NightwatchBrowser } from "nightwatch" + + +const tests = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() + done() + }, + + 'open default template': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) + .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') + .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') + .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .pause(3000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtests"]') + }) + + }, + 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { + browser.pause() + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') + .waitForElementNotPresent('*[data-id="initgit-btn"]') + }, + 'launch github login via FE #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .pause(1000) + .waitForElementVisible('*[data-id="filepanel-login-github"]') + .click('*[data-id="filepanel-login-github"]') + }, + 'login to github #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') + .setValue('*[data-id="githubToken"]', process.env.dgit_token) + .pause(1000) + .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) + .click('*[data-id="saveGitHubCredentials"]') + }, + 'check if the settings are loaded #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="connected-as-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-link-bunsenstraat"]') + .waitForElementVisible('*[data-id="remotes-panel"]') + }, + 'check the FE for the auth user #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="filepanel-connected-img-bunsenstraat"]') + }, + 'clone a repository #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .click('*[data-id="clone-panel"]') + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[@data-id="fetch-repositories"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="clone-panel-content"]//*[@id="repository-select"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[@id="repository-select"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="clone-panel-content"]//*[contains(text(), "awesome-remix")]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[contains(text(), "awesome-remix")]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="clone-panel-content"]//*[@id="branch-select"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[@id="branch-select"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[contains(text(), "master")]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="clone-panel-content"]//*[@data-id="clonebtn-ethereum/awesome-remix-master"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="clone-panel-content"]//*[@data-id="clonebtn-ethereum/awesome-remix-master"]', + locateStrategy: 'xpath' + }) + }, + 'check if there is a README.md file #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') + }, + 'check the commands panel #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'master')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'origin')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-local-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'master')]", + locateStrategy: 'xpath' + }) + }, + 'check the remotes #group1': function (browser: NightwatchBrowser) { + browser + + .click('*[data-id="remotes-panel"]') + .waitForElementVisible('*[data-id="remotes-panel-content"]') + .pause(2000) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-detail-origin-default"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="branches-current-branch-master"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-sync-origin"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="branches-branch-links"]', + locateStrategy: 'xpath', + timeout: 10000 + }) + + }, + 'check the commits of branch links #group1': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="branches-branch-links"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="branches-branch-links"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="commit-summary-linking fixed-"]', + locateStrategy: 'xpath' + }) + }, + 'switch to branch links #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="branches-panel"]') + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-id="branches-branch-links"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-id="branches-toggle-branch-links"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-id="branches-toggle-current-branch-links"]', + locateStrategy: 'xpath' + }) + }, + 'check the local branches #group1': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-local-branches"]//*[@data-id="branches-toggle-current-branch-links"]', + locateStrategy: 'xpath' + }) + }, + 'check the local commits #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commits-panel"]') + .pause(1000) + .waitForElementVisible({ + selector: '//*[@data-id="commits-current-branch-links"]//*[@data-id="commit-summary-linking fixed-"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="commits-current-branch-links"]//*[@data-id="commit-summary-linking fixed-"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="commits-current-branch-links"]//*[@data-id="commit-change-modified-README.md"]', + locateStrategy: 'xpath' + }) + }, + 'check the commands panel for links #group1': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'links')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'origin')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-local-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'links')]", + locateStrategy: 'xpath' + }) + }, + 'disconnect github #group1': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="disconnect-github"]') + .pause(1000) + .click('*[data-id="disconnect-github"]') + .waitForElementNotPresent('*[data-id="connected-as-bunsenstraat"]') + }, + 'check the FE for the disconnected auth user #group1': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementNotPresent('*[data-id="filepanel-connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="filepanel-login-github"]') + }, +} + +module.exports = tests \ No newline at end of file From ceb43f07b99d8fba03ae1880c400783ce6874dc6 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 14:36:49 +0200 Subject: [PATCH 158/312] github test --- .../test/tests/app/{github_test.ts => github.test.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/remixdesktop/test/tests/app/{github_test.ts => github.test.ts} (100%) diff --git a/apps/remixdesktop/test/tests/app/github_test.ts b/apps/remixdesktop/test/tests/app/github.test.ts similarity index 100% rename from apps/remixdesktop/test/tests/app/github_test.ts rename to apps/remixdesktop/test/tests/app/github.test.ts From ac99b52c4f7b50c518bdcabb722bcc7578db7bc7 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 15:09:25 +0200 Subject: [PATCH 159/312] github test --- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 1 + apps/remixdesktop/test/tests/app/github.test.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 1f084209a8..89c4099b67 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -58,6 +58,7 @@ const tests = { clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') .click('*[data-id="github-panel"]') + .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') .pause(1000) .setValue('*[data-id="githubEmail"]', 'git@example.com') diff --git a/apps/remixdesktop/test/tests/app/github.test.ts b/apps/remixdesktop/test/tests/app/github.test.ts index 50094a7389..d888f64889 100644 --- a/apps/remixdesktop/test/tests/app/github.test.ts +++ b/apps/remixdesktop/test/tests/app/github.test.ts @@ -26,7 +26,7 @@ const tests = { }, 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { - browser.pause() + browser .clickLaunchIcon('dgit') .pause(1000) .waitForElementVisible('*[data-id="initgit-btn"]') @@ -108,10 +108,16 @@ const tests = { selector: '//*[@data-id="clone-panel-content"]//*[@data-id="clonebtn-ethereum/awesome-remix-master"]', locateStrategy: 'xpath' }) + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[2]) + .pause(1000) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) }, 'check if there is a README.md file #group1': function (browser: NightwatchBrowser) { browser - .clickLaunchIcon('filePanel') .waitForElementVisible('*[data-id="treeViewLitreeViewItemREADME.md"]') }, 'check the commands panel #group1': function (browser: NightwatchBrowser) { From 9967ee5da7c64c145486749f4a3c49488ec88a68 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 15:54:32 +0200 Subject: [PATCH 160/312] github2 --- apps/remixdesktop/test/nighwatch.app.ts | 2 +- .../test/tests/app/github_2.test.ts | 190 ++++++++++++++++++ 2 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 apps/remixdesktop/test/tests/app/github_2.test.ts diff --git a/apps/remixdesktop/test/nighwatch.app.ts b/apps/remixdesktop/test/nighwatch.app.ts index 2583c7e58f..d3d5e79fd9 100644 --- a/apps/remixdesktop/test/nighwatch.app.ts +++ b/apps/remixdesktop/test/nighwatch.app.ts @@ -75,7 +75,7 @@ module.exports = { if(useOffline) args = [...args, '--useOffline']; // Set display size - const windowSize = "--window-size=1920,1080"; + const windowSize = "--window-size=2920,2080"; args = [...args, windowSize]; switch (type) { diff --git a/apps/remixdesktop/test/tests/app/github_2.test.ts b/apps/remixdesktop/test/tests/app/github_2.test.ts new file mode 100644 index 0000000000..3b02b3746c --- /dev/null +++ b/apps/remixdesktop/test/tests/app/github_2.test.ts @@ -0,0 +1,190 @@ +import { NightwatchBrowser } from "nightwatch" + + +const tests = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() + done() + }, + + 'open default template': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) + .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') + .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') + .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .pause(3000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtests"]') + }) + + }, + 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') + .waitForElementNotPresent('*[data-id="initgit-btn"]') + }, + 'launch github login via FE #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .pause(1000) + .waitForElementVisible('*[data-id="filepanel-login-github"]') + .click('*[data-id="filepanel-login-github"]') + }, + 'login to github #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') + .setValue('*[data-id="githubToken"]', process.env.dgit_token) + .pause(1000) + .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) + .click('*[data-id="saveGitHubCredentials"]') + }, + 'check if the settings are loaded #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="connected-as-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-link-bunsenstraat"]') + .waitForElementVisible('*[data-id="remotes-panel"]') + }, + 'check the FE for the auth user #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="filepanel-connected-img-bunsenstraat"]') + }, + 'add a remote #group2': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="remotes-panel"]') + .click('*[data-id="remotes-panel"]') + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="fetch-repositories"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@id="repository-select"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@id="repository-select"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[contains(text(), "awesome-remix")]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[contains(text(), "awesome-remix")]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-panel-remotename"]', + locateStrategy: 'xpath' + }) + .setValue({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-panel-remotename"]', + locateStrategy: 'xpath' + }, 'newremote') + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-panel-addremote"]', + locateStrategy: 'xpath' + }) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-panel-addremote"]', + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-detail-newremote-default"]', + locateStrategy: 'xpath' + }) + }, + 'check the commands panel for newremote #group2': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'main')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'newremote')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-local-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'main')]", + locateStrategy: 'xpath' + }) + .pause(1000) + .getAttribute({ + selector: '//*[@data-id="sourcecontrol-pull"]', + locateStrategy: 'xpath' + }, 'disabled', (result) => { + if (result.value) { + browser.assert.fail('Button is disabled') + } else { + browser.assert.ok(true) + } + }) + }, + 'remove the remote #group2': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .click('*[data-id="remotes-panel"]') + .waitForElementVisible({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-rm-newremote"]', + locateStrategy: 'xpath' + }) + .pause(2000) + .click({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-rm-newremote"]', + locateStrategy: 'xpath' + }) + .pause(1000) + .waitForElementNotPresent({ + selector: '//*[@data-id="remotes-panel-content"]//*[@data-id="remote-detail-newremote-default"]', + locateStrategy: 'xpath' + }) + }, + 'check the commands panel for removed remote #group2': function (browser: NightwatchBrowser) { + browser + .pause(1000) + .click('*[data-id="commands-panel"]') + .waitForElementVisible({ + selector: "//div[@id='commands-remote-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'main')]", + locateStrategy: 'xpath' + }) + .waitForElementNotPresent({ + selector: "//div[@id='commands-remote-origin-select']//div[contains(@class, 'singleValue') and contains(text(), 'newremote')]", + locateStrategy: 'xpath' + }) + .waitForElementVisible({ + selector: "//div[@id='commands-local-branch-select']//div[contains(@class, 'singleValue') and contains(text(), 'main')]", + locateStrategy: 'xpath' + }) + .getAttribute({ + selector: '//*[@data-id="sourcecontrol-pull"]', + locateStrategy: 'xpath' + }, 'disabled', (result) => { + if (result.value) { + browser.assert.ok(true) + } else { + browser.assert.fail('Button is not disabled') + } + }) + }, +} + +module.exports = tests \ No newline at end of file From 1de7dd99ad9653e37dc7b473675b12181929d36c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 15:59:23 +0200 Subject: [PATCH 161/312] github3 test --- .../test/tests/app/github_3.test.ts | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 apps/remixdesktop/test/tests/app/github_3.test.ts diff --git a/apps/remixdesktop/test/tests/app/github_3.test.ts b/apps/remixdesktop/test/tests/app/github_3.test.ts new file mode 100644 index 0000000000..436b585a8c --- /dev/null +++ b/apps/remixdesktop/test/tests/app/github_3.test.ts @@ -0,0 +1,146 @@ +import { NightwatchBrowser } from "nightwatch" + + +const tests = { + before: function (browser: NightwatchBrowser, done: VoidFunction) { + browser.hideToolTips() + done() + }, + + 'open default template': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) + .waitForElementVisible('button[data-id="landingPageImportFromTemplate"]') + .click('button[data-id="landingPageImportFromTemplate"]') + .waitForElementPresent('*[data-id="create-remixDefault"]') + .scrollAndClick('*[data-id="create-remixDefault"]') + .waitForElementVisible('*[data-id="modalDialogCustomPromptTextCreate"]') + .waitForElementPresent('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .click('[data-id="TemplatesSelectionModalDialogContainer-react"] .modal-ok') + .pause(3000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[1]) + .waitForElementVisible('*[data-id="treeViewLitreeViewItemtests"]') + }) + + }, + 'Update settings for git #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .pause(1000) + .waitForElementVisible('*[data-id="initgit-btn"]') + .click('*[data-id="initgit-btn"]') + .waitForElementNotPresent('*[data-id="initgit-btn"]') + }, + 'launch github login via FE #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .pause(1000) + .waitForElementVisible('*[data-id="filepanel-login-github"]') + .click('*[data-id="filepanel-login-github"]') + }, + 'login to github #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="github-panel"]') + .waitForElementVisible('*[data-id="gitubUsername"]') + .setValue('*[data-id="githubToken"]', process.env.dgit_token) + .pause(1000) + .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) + .click('*[data-id="saveGitHubCredentials"]') + }, + 'check if the settings are loaded #group1 #group2': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="connected-as-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-img-bunsenstraat"]') + .waitForElementVisible('*[data-id="connected-link-bunsenstraat"]') + .waitForElementVisible('*[data-id="remotes-panel"]') + }, + 'check the FE for the auth user #group1 #group2': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('filePanel') + .waitForElementVisible('*[data-id="filepanel-connected-img-bunsenstraat"]') + }, + // pagination test + 'clone repo #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="clone-panel"]') + .click('*[data-id="clone-panel"]') + .waitForElementVisible('*[data-id="clone-url"]') + .setValue('*[data-id="clone-url"]', 'https://github.com/ethereum/awesome-remix') + .waitForElementVisible('*[data-id="clone-branch"]') + .setValue('*[data-id="clone-branch"]', 'master') + .waitForElementVisible('*[data-id="clone-btn"]') + .click('*[data-id="clone-btn"]') + .clickLaunchIcon('filePanel') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[2]) + .pause(1000) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) + }, + 'Update settings for git #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .pause(1000) + .setValue('*[data-id="githubToken"]', 'invalidtoken') + .pause(1000) + .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) + .click('*[data-id="saveGitHubCredentials"]') + .pause(1000) + .modalFooterOKClick('github-credentials-error') + }, + 'check the commits panel for pagination #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="commits-panel"]') + .click('*[data-id="commits-panel"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length == 1) + }) + }, + 'load more commits #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="load-more-commits"]') + .click('*[data-id="load-more-commits"]') + .waitForElementVisible('*[data-id="loader-indicator"]') + .waitForElementNotPresent('*[data-id="loader-indicator"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > 2) + }) + }, + 'load more branches from remote #group3': function (browser: NightwatchBrowser) { + browser + .click('*[data-id="branches-panel"]') + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]', + locateStrategy: 'xpath' + }) + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length == 1) + }) + .waitForElementVisible('*[data-id="remote-sync-origin"]') + .click('*[data-id="remote-sync-origin"]') + .waitForElementVisible('*[data-id="loader-indicator"]') + .waitForElementNotPresent('*[data-id="loader-indicator"]') + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > 2) + }) + } +} + +module.exports = tests \ No newline at end of file From fec417977c534f28df0023a2a835ed352bf42b8f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 16:07:09 +0200 Subject: [PATCH 162/312] display size for e2e --- apps/remixdesktop/src/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index d06f3d62f0..c081a6ac51 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - height: (isE2E ? 1440 : screen.getPrimaryDisplay().size.height * 0.8), - width: (isE2E ? 2560 : screen.getPrimaryDisplay().size.width * 0.8), + height: (isE2E ? 4000 : screen.getPrimaryDisplay().size.height * 0.8), + width: (isE2E ? 4000 : screen.getPrimaryDisplay().size.width * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') From ee39fed28d32973139143a8c2c46ad6b904532c6 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 3 Sep 2024 16:26:28 +0200 Subject: [PATCH 163/312] square --- apps/remixdesktop/src/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index c081a6ac51..513782cafc 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - height: (isE2E ? 4000 : screen.getPrimaryDisplay().size.height * 0.8), - width: (isE2E ? 4000 : screen.getPrimaryDisplay().size.width * 0.8), + height: (isE2E ? 2560 : screen.getPrimaryDisplay().size.height * 0.8), + width: (isE2E ? 2560 : screen.getPrimaryDisplay().size.width * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') From 2df5372cb220647ff63807276d0cfab5a6ab8a9f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 07:03:33 +0200 Subject: [PATCH 164/312] force window --- apps/remixdesktop/src/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index 513782cafc..c096ed27e0 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - height: (isE2E ? 2560 : screen.getPrimaryDisplay().size.height * 0.8), - width: (isE2E ? 2560 : screen.getPrimaryDisplay().size.width * 0.8), + width: 3840,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), + height: 2160, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') From 14d316ebd5e9e10bad1b8c1746cb9318c540841a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 07:15:35 +0200 Subject: [PATCH 165/312] force screensize --- apps/remixdesktop/src/main.ts | 8 ++++---- apps/remixdesktop/test/nighwatch.app.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index c096ed27e0..367b7873fa 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - width: 3840,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), - height: 2160, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), + width: 1000,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), + height: 1000, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') @@ -66,8 +66,8 @@ export const createWindow = async (dir?: string): Promise => { windowSet.delete(mainWindow) }) - if (isE2E) - mainWindow.maximize() + //if (isE2E) + // mainWindow.maximize() windowSet.add(mainWindow) //mainWindow.webContents.openDevTools(); diff --git a/apps/remixdesktop/test/nighwatch.app.ts b/apps/remixdesktop/test/nighwatch.app.ts index d3d5e79fd9..c3e4b709f0 100644 --- a/apps/remixdesktop/test/nighwatch.app.ts +++ b/apps/remixdesktop/test/nighwatch.app.ts @@ -75,8 +75,8 @@ module.exports = { if(useOffline) args = [...args, '--useOffline']; // Set display size - const windowSize = "--window-size=2920,2080"; - args = [...args, windowSize]; + const windowSize = "--window-size=1000,1000"; + args = [...args]; switch (type) { case 'Windows_NT': From d7547bd867f1be822b656d502e28ce3863eb6246 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 07:23:44 +0200 Subject: [PATCH 166/312] set default main --- apps/remixdesktop/src/main.ts | 4 ++-- apps/remixdesktop/src/tools/git.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index 367b7873fa..ba222820bd 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - width: 1000,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), - height: 1000, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), + width: 1280,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), + height: 720, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index f32a6426c9..249ef321a5 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -107,7 +107,7 @@ export const gitProxy = { }, async init(path: string) { - await execAsync(`git init`, { cwd: path }); + await execAsync(`git init --initial-branch=main`, { cwd: path }); }, async updateSubmodules(path: string) { From 9a907158d5e5fc923975a16e4bddaa36b23b9523 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 08:11:03 +0200 Subject: [PATCH 167/312] windows resize --- .circleci/config.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index f361a06425..ce800b258a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -238,6 +238,17 @@ jobs: parallelism: 10 working_directory: ~/remix-project steps: + - run: + name: Restart local mstsc + command: psexec64.exe -accepteula -nobanner -i 0 mstsc /v:localhost /w:3840 /h:2160 + background: true + shell: powershell.exe + - run: name: Naive impl to wait until the screen stretches command: Start-Sleep 5 + - run: + name: Get screen info + command: | + Add-Type -AssemblyName System.Windows.Forms + [System.Windows.Forms.Screen]::AllScreens | fl * - checkout - attach_workspace: at: . From dd96c5c3361e8b98689a2539fe23aebd4a2adb3c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 08:17:41 +0200 Subject: [PATCH 168/312] windows --- .circleci/config.yml | 6 ++++-- apps/remixdesktop/src/main.ts | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ce800b258a..6f4c8a6543 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -240,10 +240,12 @@ jobs: steps: - run: name: Restart local mstsc - command: psexec64.exe -accepteula -nobanner -i 0 mstsc /v:localhost /w:3840 /h:2160 + command: psexec64.exe -accepteula -nobanner -i 0 mstsc /v:localhost /w:2560 /h:1140 background: true shell: powershell.exe - - run: name: Naive impl to wait until the screen stretches command: Start-Sleep 5 + - run: + name: Naive impl to wait until the screen stretches + command: Start-Sleep 5 - run: name: Get screen info command: | diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index ba222820bd..fc4663e7d1 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - width: 1280,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), - height: 720, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), + width: 2560,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), + height: 1140, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js') @@ -66,8 +66,8 @@ export const createWindow = async (dir?: string): Promise => { windowSet.delete(mainWindow) }) - //if (isE2E) - // mainWindow.maximize() + if (isE2E) + mainWindow.maximize() windowSet.add(mainWindow) //mainWindow.webContents.openDevTools(); From 951e8be2c106e5b93d18397781b9e119f8ab846d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 4 Sep 2024 08:23:42 +0200 Subject: [PATCH 169/312] powershell --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6f4c8a6543..dd8feb6e08 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -246,11 +246,13 @@ jobs: - run: name: Naive impl to wait until the screen stretches command: Start-Sleep 5 + shell: powershell.exe - run: name: Get screen info command: | Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Screen]::AllScreens | fl * + shell: powershell.exe - checkout - attach_workspace: at: . From 6219fb136fc41fe98419cd1a6ae0ba872df66285 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 14:48:37 +0100 Subject: [PATCH 170/312] change title to agreed text --- .../plugins/templates-selection/templates-selection-plugin.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index b2f5c593c2..138ac3a7a4 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -147,7 +147,7 @@ export class TemplatesSelectionPlugin extends ViewPlugin { ['ERC721', 'secondary'], ['ERC1155', 'primary'], ]} - title='Template explorer' + title='Workspace Templates' description="Select a template to create a workspace or to add it to current workspace" > { From 0200a73882276eca295918d2fbabf2a4e6a80c7e Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 15:13:25 +0100 Subject: [PATCH 171/312] update text in templates.ts. update tooltips. update hambuger --- .../plugins/templates-selection/templates.ts | 52 +++++++++---------- .../src/app/tabs/locales/en/filePanel.json | 4 +- .../lib/components/workspace-hamburger.tsx | 10 ++++ 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 169aae0277..2ea38759b1 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -14,24 +14,24 @@ export const templates = (intl, plugin) => { value: "ozerc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], - description: 'A simple ERC20 project' + description: 'A simple ERC20 Project' }, { value: "ozerc721", displayName: "ERC721 (NFT)", tagList: ["ERC721", "Solidity"], - description: 'A simple ERC721 (aka NFT) project' + description: 'A simple ERC721 (aka NFT) Project' }, { value: "ozerc1155", tagList: ["Solidity"], displayName: "ERC1155", - description: 'A simple ERC1155 (multi token) project' + description: 'A simple ERC1155 (multi token) Project' }, { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", tagList: ["Solidity"], opts: { mintable: true @@ -50,7 +50,7 @@ export const templates = (intl, plugin) => { value: "ozerc1155", displayName: "ERC1155", tagList: ["Solidity"], - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { mintable: true } @@ -58,7 +58,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", tagList: ["Solidity", "ERC20"], opts: { mintable: true, @@ -78,7 +78,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that Manage multiple Token types", opts: { mintable: true, burnable: true @@ -88,7 +88,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { mintable: true, pausable: true @@ -108,7 +108,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", tagList: ["ERC20"], opts: { mintable: true, @@ -123,7 +123,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups' }, @@ -141,7 +141,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups' }, @@ -150,7 +150,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true @@ -170,7 +170,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true @@ -180,7 +180,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true, @@ -202,7 +202,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -213,7 +213,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true, @@ -235,7 +235,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -246,7 +246,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -259,12 +259,12 @@ export const templates = (intl, plugin) => { }, { name: "Cookbook", - tooltip: "Cookbook is a smart contract search tool. Click here to open cookbook and browse contracts.", + tooltip: "Cookbook is a Smart Contract Search Tool. Click here to open Cookbook and browse Contracts.", onClick: async () => { await plugin.call('manager', 'activatePlugin', 'cookbookdev') plugin.call('menuicons', 'showContent', 'cookbookdev') }, - onClickLabel: 'Open cookbook plugin', + onClickLabel: 'Open Cookbook Plugin', items: [ { value: "token-sale", displayName: 'Token Sale' }, { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, @@ -280,7 +280,7 @@ export const templates = (intl, plugin) => { { name: "OxProject", items: [ - { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A standard interface for fungible tokens by 0xProject" } + { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A standard Interface for fungible Tokens by 0xProject" } ] }, { @@ -292,9 +292,9 @@ export const templates = (intl, plugin) => { { name: "Circom ZKP", items: [ - { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Run a ZK Semaphore circom circuit.' }, - { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Run a ZK Hash checker circom circuit.' }, - { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Run a Rate Limiting Nullifier circom circuit.' } + { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Run a ZK Semaphore Circom Circuit.' }, + { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Run a ZK Hash checker Circom Circuit.' }, + { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Run a Rate Limiting Nullifier Circom Circuit.' } ] }, { @@ -304,7 +304,7 @@ export const templates = (intl, plugin) => { value: "sindriScripts", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.addscriptsindri' }), - description: 'Use the Sindri API to compile and generate proof.' + description: 'Use the Sindri API to Compile and Generate Proof.' }, ], }, @@ -373,4 +373,4 @@ export const templates = (intl, plugin) => { IsArtefact: true } ] -} \ No newline at end of file +} diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index affee6c134..b776e76866 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -2,6 +2,7 @@ "filePanel.displayName": "File explorer", "filePanel.workspace": "WORKSPACES", "filePanel.create": "Create", + "filePanel.createBlank":"Create Blank", "filePanel.create.desktop": "Create Project", "filePanel.clone": "Clone", "filePanel.download": "Download", @@ -9,7 +10,8 @@ "filePanel.restore": "Restore", "filePanel.name": "Name", "filePanel.save": "Save", - "filePanel.workspace.create": "Create Workspace", + "filePanel.workspace.create": "Create Workspace using Templates", + "filePanel.workspace.createBlank": "Create Blank Workspace", "filePanel.workspace.create.desktop": "Create project in new folder", "filePanel.workspace.rename": "Rename Workspace", "filePanel.workspace.save_workspace": "Save Workspace", 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 95de007539..03dcc6cb1a 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -36,6 +36,16 @@ export function HamburgerMenu(props: HamburgerMenuProps) { }} platforms={[appPlatformTypes.web]} > + { + props.createWorkspace() + props.hideIconsMenu(!showIconsMenu) + }} + platforms={[appPlatformTypes.web]} + > Date: Wed, 4 Sep 2024 15:23:17 +0100 Subject: [PATCH 172/312] create logic and markup for blank workspace --- .../src/lib/components/createModal.tsx | 51 +++++++++++++++++++ .../workspace/src/lib/remix-ui-workspace.tsx | 6 +++ 2 files changed, 57 insertions(+) create mode 100644 libs/remix-ui/workspace/src/lib/components/createModal.tsx diff --git a/libs/remix-ui/workspace/src/lib/components/createModal.tsx b/libs/remix-ui/workspace/src/lib/components/createModal.tsx new file mode 100644 index 0000000000..81b9d24a08 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/createModal.tsx @@ -0,0 +1,51 @@ +import React from 'react' +import { FormattedMessage } from 'react-intl' + +export const createModalMessage = async ( + defaultName: string, + gitConfigNotSet: boolean, + onChangeTemplateName: (name: string) => void, + onChangeInitGit: (name: string) => void) => { + + return ( + <> + + onChangeTemplateName(e.target.value)} + onInput={(e) => onChangeTemplateName((e.target as any).value)} + /> +
+ onChangeInitGit(e.target.value)} + onInput={(e) => onChangeInitGit((e.target as any).value)} + /> + +
+ {gitConfigNotSet ? ( +
+ +
+ ) : ( + <> + )} + + ) +} 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 f6bf6d4184..287691cdb2 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -335,6 +335,12 @@ export function Workspace() { ) } + const createBlankWorkspace = async () => { + global.modal( + + ) + } + const saveSampleCodeWorkspace = () => { const workspaceName = global.plugin.getAvailableWorkspaceName('code-sample') global.modal( From 45b9a37d10315cb1b591dd49d75d08bdd174e0c0 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 16:22:14 +0100 Subject: [PATCH 173/312] implement blank workspace logic --- .../src/lib/components/workspace-hamburger.tsx | 3 ++- .../workspace/src/lib/remix-ui-workspace.tsx | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) 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 03dcc6cb1a..0dad148999 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -7,6 +7,7 @@ import { WorkspaceMetadata } from '../types' export interface HamburgerMenuProps { selectedWorkspace: WorkspaceMetadata createWorkspace: () => void + createBlankWorkspace: () => Promise renameCurrentWorkspace: () => void downloadCurrentWorkspace: () => void deleteCurrentWorkspace: () => void @@ -41,7 +42,7 @@ export function HamburgerMenu(props: HamburgerMenuProps) { fa="far fa-plus" hideOption={hideWorkspaceOptions} actionOnClick={() => { - props.createWorkspace() + props.createBlankWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} 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 287691cdb2..96a74ed5dc 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -18,6 +18,7 @@ import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' import { branch, GitHubUser, gitUIPanels, userEmails } from '@remix-ui/git' +import { createModalMessage } from './components/createModal' const _paq = (window._paq = window._paq || []) @@ -335,9 +336,23 @@ export function Workspace() { ) } + const [counter, setCounter] = useState(0) const createBlankWorkspace = async () => { + const username = await global.plugin.call('settings', 'get', 'settings/github-user-name') + const email = await global.plugin.call('settings', 'get', 'settings/github-email') + const gitNotSet = !username || !email + const defaultName = await global.plugin.call('filePanel', 'getAvailableWorkspaceName', 'blank') + let workspace = defaultName + let gitInit = false + setCounter((previous) => { + return previous + 1 + }) global.modal( - + intl.formatMessage({ id: 'filePanel.workspace.createBlank' }), + await createModalMessage(`blank - 1`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), + intl.formatMessage({ id: 'filePanel.ok' }), + () => global.dispatchCreateWorkspace(`blank - ${counter}`, 'blank', false), + intl.formatMessage({ id: 'filePanel.cancel' }) ) } @@ -932,6 +947,7 @@ export function Workspace() { Date: Wed, 4 Sep 2024 18:58:36 +0200 Subject: [PATCH 174/312] load more test fix --- .../test/tests/app/github_3.test.ts | 167 +++++++++++------- .../git/src/components/panels/branches.tsx | 2 +- 2 files changed, 100 insertions(+), 69 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/github_3.test.ts b/apps/remixdesktop/test/tests/app/github_3.test.ts index 436b585a8c..145e196bed 100644 --- a/apps/remixdesktop/test/tests/app/github_3.test.ts +++ b/apps/remixdesktop/test/tests/app/github_3.test.ts @@ -1,6 +1,8 @@ import { NightwatchBrowser } from "nightwatch" - +const useIsoGit = process.argv.includes('--useIsoGit'); +let commitCount = 0 +let branchCount = 0 const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { browser.hideToolTips() @@ -64,83 +66,112 @@ const tests = { .clickLaunchIcon('filePanel') .waitForElementVisible('*[data-id="filepanel-connected-img-bunsenstraat"]') }, - // pagination test - 'clone repo #group3': function (browser: NightwatchBrowser) { - browser - .clickLaunchIcon('dgit') - .waitForElementVisible('*[data-id="clone-panel"]') - .click('*[data-id="clone-panel"]') - .waitForElementVisible('*[data-id="clone-url"]') - .setValue('*[data-id="clone-url"]', 'https://github.com/ethereum/awesome-remix') - .waitForElementVisible('*[data-id="clone-branch"]') - .setValue('*[data-id="clone-branch"]', 'master') - .waitForElementVisible('*[data-id="clone-btn"]') - .click('*[data-id="clone-btn"]') - .clickLaunchIcon('filePanel') - .pause(5000) - .windowHandles(function (result) { - console.log(result.value) - browser.switchWindow(result.value[2]) - .pause(1000) - .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') - }) - }, - 'Update settings for git #group3': function (browser: NightwatchBrowser) { - browser. - clickLaunchIcon('dgit') - .waitForElementVisible('*[data-id="github-panel"]') - .click('*[data-id="github-panel"]') - .pause(1000) - .setValue('*[data-id="githubToken"]', 'invalidtoken') - .pause(1000) - .setValue('*[data-id="gitubUsername"]', 'git') - .pause(1000) - .setValue('*[data-id="githubEmail"]', 'git@example.com') - .pause(1000) - .click('*[data-id="saveGitHubCredentials"]') - .pause(1000) - .modalFooterOKClick('github-credentials-error') - }, - 'check the commits panel for pagination #group3': function (browser: NightwatchBrowser) { - browser - .waitForElementVisible('*[data-id="commits-panel"]') - .click('*[data-id="commits-panel"]') - .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { - console.log('Number of commit-summary elements:', (result.value as any).length); + // pagination test + 'clone repo #group3': function (browser: NightwatchBrowser) { + browser + .clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="clone-panel"]') + .click('*[data-id="clone-panel"]') + .waitForElementVisible('*[data-id="clone-url"]') + .setValue('*[data-id="clone-url"]', 'https://github.com/yann300/remix-reward') + .waitForElementVisible('*[data-id="clone-branch"]') + .setValue('*[data-id="clone-branch"]', 'master') + .waitForElementVisible('*[data-id="clone-btn"]') + .click('*[data-id="clone-btn"]') + .clickLaunchIcon('filePanel') + .pause(5000) + .windowHandles(function (result) { + console.log(result.value) + browser.switchWindow(result.value[2]) + .pause(1000) + .waitForElementVisible('*[data-id="treeViewLitreeViewItem.git"]') + }) + }, + 'Update settings for git #group3': function (browser: NightwatchBrowser) { + browser. + clickLaunchIcon('dgit') + .waitForElementVisible('*[data-id="github-panel"]') + .click('*[data-id="github-panel"]') + .pause(1000) + .setValue('*[data-id="githubToken"]', 'invalidtoken') + .pause(1000) + .setValue('*[data-id="gitubUsername"]', 'git') + .pause(1000) + .setValue('*[data-id="githubEmail"]', 'git@example.com') + .pause(1000) + .click('*[data-id="saveGitHubCredentials"]') + .pause(1000) + .modalFooterOKClick('github-credentials-error') + }, + 'check the commits panel for pagination #group3': function (browser: NightwatchBrowser) { + browser + .waitForElementVisible('*[data-id="commits-panel"]') + .click('*[data-id="commits-panel"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + if (useIsoGit) { + commitCount = (result.value as any).length browser.assert.ok((result.value as any).length == 1) - }) - }, - 'load more commits #group3': function (browser: NightwatchBrowser) { - browser - .waitForElementVisible('*[data-id="load-more-commits"]') - .click('*[data-id="load-more-commits"]') - .waitForElementVisible('*[data-id="loader-indicator"]') - .waitForElementNotPresent('*[data-id="loader-indicator"]') - .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { - console.log('Number of commit-summary elements:', (result.value as any).length); + } else { + commitCount = (result.value as any).length browser.assert.ok((result.value as any).length > 2) - }) - }, - 'load more branches from remote #group3': function (browser: NightwatchBrowser) { - browser - .click('*[data-id="branches-panel"]') - .waitForElementVisible({ - selector: '//*[@data-id="branches-panel-content-remote-branches"]', - locateStrategy: 'xpath' - }) - .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { - console.log('Number of branches elements:', (result.value as any).length); + } + }) + + }, + 'load more commits #group3': function (browser: NightwatchBrowser) { + console.log('commitCount:', commitCount) + browser + .waitForElementVisible('*[data-id="load-more-commits"]') + .click('*[data-id="load-more-commits"]') + .waitForElementVisible('*[data-id="loader-indicator"]') + .waitForElementNotPresent('*[data-id="loader-indicator"]') + .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { + console.log('Number of commit-summary elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > commitCount) + }) + }, + 'load more branches from remote #group3': function (browser: NightwatchBrowser) { + + browser + .click('*[data-id="branches-panel"]') + .waitForElementVisible({ + selector: '//*[@data-id="branches-panel-content-remote-branches"]', + locateStrategy: 'xpath' + }) + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + if (useIsoGit) { + branchCount = (result.value as any).length browser.assert.ok((result.value as any).length == 1) - }) - .waitForElementVisible('*[data-id="remote-sync-origin"]') + } else { + branchCount = (result.value as any).length + browser.assert.ok((result.value as any).length > 2) + } + }) + + + if (useIsoGit) { + + browser.waitForElementVisible('*[data-id="remote-sync-origin"]') .click('*[data-id="remote-sync-origin"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { console.log('Number of branches elements:', (result.value as any).length); - browser.assert.ok((result.value as any).length > 2) + browser.assert.ok((result.value as any).length > branchCount) + }) + } else { + browser.waitForElementVisible('*[data-id="show-more-branches-on-remote"]') + .click('*[data-id="show-more-branches-on-remote"]') + .pause(1000) + .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { + console.log('Number of branches elements:', (result.value as any).length); + browser.assert.ok((result.value as any).length > branchCount) }) } + + } } module.exports = tests \ No newline at end of file diff --git a/libs/remix-ui/git/src/components/panels/branches.tsx b/libs/remix-ui/git/src/components/panels/branches.tsx index 4e92dc1755..e0db3e4a4e 100644 --- a/libs/remix-ui/git/src/components/panels/branches.tsx +++ b/libs/remix-ui/git/src/components/panels/branches.tsx @@ -73,7 +73,7 @@ export const Branches = () => { ); })} - {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { + {context.branches && remoteBranches.length > remoteBranchPage * pageLength && <> { setRemoteBranchPage(remoteBranchPage + 1); }}>Show more

} { From b634eeb41a6c7ee94b4fc593d4174eaf53da4630 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 06:07:59 +0200 Subject: [PATCH 175/312] add pause --- apps/remixdesktop/test/tests/app/github_3.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/remixdesktop/test/tests/app/github_3.test.ts b/apps/remixdesktop/test/tests/app/github_3.test.ts index 145e196bed..e7dc1de86a 100644 --- a/apps/remixdesktop/test/tests/app/github_3.test.ts +++ b/apps/remixdesktop/test/tests/app/github_3.test.ts @@ -126,6 +126,7 @@ const tests = { .click('*[data-id="load-more-commits"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') + .pause(2000) .elements('xpath', '//*[@data-id="commits-current-branch-master"]//*[@data-type="commit-summary"]', function (result) { console.log('Number of commit-summary elements:', (result.value as any).length); browser.assert.ok((result.value as any).length > commitCount) @@ -157,6 +158,7 @@ const tests = { .click('*[data-id="remote-sync-origin"]') .waitForElementVisible('*[data-id="loader-indicator"]') .waitForElementNotPresent('*[data-id="loader-indicator"]') + .pause(2000) .elements('xpath', '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-type="branches-branch"]', function (result) { console.log('Number of branches elements:', (result.value as any).length); browser.assert.ok((result.value as any).length > branchCount) From 225259bab991589df9ef312ed45683ca9eeafe1f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 06:41:18 +0200 Subject: [PATCH 176/312] add pause --- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 3e74121c94..ef29f0ded9 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -116,6 +116,7 @@ const tests = { selector: "//*[@data-status='new-untracked' and @data-file='/test_rename.txt']", locateStrategy: 'xpath' }) + .pause(2000) .click('*[data-id="sourcecontrol-add-all"]') .waitForElementVisible({ selector: "//*[@data-status='added-staged' and @data-file='/test_rename.txt']", From 323598d00768f5266d321138cbb96b3fd6d44d6e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 06:55:34 +0200 Subject: [PATCH 177/312] add pause --- apps/remixdesktop/test/tests/app/github.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remixdesktop/test/tests/app/github.test.ts b/apps/remixdesktop/test/tests/app/github.test.ts index d888f64889..ef7f68b30c 100644 --- a/apps/remixdesktop/test/tests/app/github.test.ts +++ b/apps/remixdesktop/test/tests/app/github.test.ts @@ -184,6 +184,7 @@ const tests = { selector: '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-id="branches-branch-links"]', locateStrategy: 'xpath' }) + .pause(1000) .click({ selector: '//*[@data-id="branches-panel-content-remote-branches"]//*[@data-id="branches-toggle-branch-links"]', locateStrategy: 'xpath' From 44607e628f676b03523448354785ae551ffabffb Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 07:33:40 +0200 Subject: [PATCH 178/312] small screen test --- apps/remixdesktop/test/tests/app/search.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/search.test.ts b/apps/remixdesktop/test/tests/app/search.test.ts index 70e3d50b30..7b39ba137c 100644 --- a/apps/remixdesktop/test/tests/app/search.test.ts +++ b/apps/remixdesktop/test/tests/app/search.test.ts @@ -108,7 +108,8 @@ module.exports = { browser .waitForElementVisible('*[data-id="toggle_replace"]').click('*[data-id="toggle_replace"]') .waitForElementVisible('*[id="search_replace"]') - .setValue('*[id="search_replace"]', 'replacing').sendKeys('*[id="search_replace"]', browser.Keys.ENTER).pause(1000) + .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', 'contracts/*.sol') + .setValue('*[id="search_replace"]', 'replacing').sendKeys('*[id="search_include"]', browser.Keys.ENTER).pause(1000) .waitForElementVisible('*[data-id="contracts/2_Owner.sol-33-71"]') .moveToElement('*[data-id="contracts/2_Owner.sol-33-71"]', 10, 10) .waitForElementVisible('*[data-id="replace-contracts/2_Owner.sol-33-71"]') @@ -153,7 +154,8 @@ module.exports = { 'Should replace all & undo & switch between files #group1': function (browser: NightwatchBrowser) { browser.waitForElementVisible('*[id="search_input"]') .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', '*.sol, *.js, *.txt') + .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_include"]', browser.Keys.ENTER) .clearValue('*[id="search_replace"]') .setValue('*[id="search_replace"]', '123test').pause(1000) .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') From 163eb1c16a096668807c88e61a99454152bf632d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 08:13:55 +0200 Subject: [PATCH 179/312] lmit search --- apps/remixdesktop/test/tests/app/search.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/search.test.ts b/apps/remixdesktop/test/tests/app/search.test.ts index 7b39ba137c..30f1593bdc 100644 --- a/apps/remixdesktop/test/tests/app/search.test.ts +++ b/apps/remixdesktop/test/tests/app/search.test.ts @@ -108,7 +108,7 @@ module.exports = { browser .waitForElementVisible('*[data-id="toggle_replace"]').click('*[data-id="toggle_replace"]') .waitForElementVisible('*[id="search_replace"]') - .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', 'contracts/*.sol') + .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', 'contracts/2_*.sol') .setValue('*[id="search_replace"]', 'replacing').sendKeys('*[id="search_include"]', browser.Keys.ENTER).pause(1000) .waitForElementVisible('*[data-id="contracts/2_Owner.sol-33-71"]') .moveToElement('*[data-id="contracts/2_Owner.sol-33-71"]', 10, 10) @@ -135,7 +135,8 @@ module.exports = { 'Should replace all & undo #group1': function (browser: NightwatchBrowser) { browser .clearValue('*[id="search_input"]') - .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_input"]', browser.Keys.ENTER) + .clearValue('*[id="search_include"]').setValue('*[id="search_include"]', 'contracts/1_*.sol') + .setValue('*[id="search_input"]', 'storage').sendKeys('*[id="search_include"]', browser.Keys.ENTER) .clearValue('*[id="search_replace"]') .setValue('*[id="search_replace"]', '123test').pause(1000) .waitForElementVisible('*[data-id="replace-all-contracts/1_Storage.sol"]') From ce91d361bdf19bc3286026ac2b518781ef328882 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 08:28:16 +0200 Subject: [PATCH 180/312] add pause --- apps/remix-ide-e2e/src/tests/dgit_github.test.ts | 2 ++ apps/remix-ide-e2e/src/tests/dgit_local.test.ts | 1 + apps/remix-ide-e2e/src/tests/workspace_git.test.ts | 1 + apps/remixdesktop/test/tests/app/git-ui_2.test.ts | 1 + apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 1 + apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 1 + apps/remixdesktop/test/tests/app/github.test.ts | 1 + apps/remixdesktop/test/tests/app/github_3.test.ts | 1 + 8 files changed, 9 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts index baa6e9cec1..1b361b3591 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_github.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_github.test.ts @@ -218,6 +218,7 @@ module.exports = { 'disconnect github #group1': function (browser: NightwatchBrowser) { browser .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="disconnect-github"]') .pause(1000) @@ -370,6 +371,7 @@ module.exports = { browser. clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .pause(1000) .setValue('*[data-id="githubToken"]', 'invalidtoken') diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index 659b20767a..b0cce197f6 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -37,6 +37,7 @@ module.exports = { .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') diff --git a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts index a9af174ebc..c495ce11b8 100644 --- a/apps/remix-ide-e2e/src/tests/workspace_git.test.ts +++ b/apps/remix-ide-e2e/src/tests/workspace_git.test.ts @@ -426,6 +426,7 @@ module.exports = { .waitForElementVisible('*[data-id="initgit-btn"]') .click('*[data-id="initgit-btn"]') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="gitubUsername"]') .setValue('*[data-id="gitubUsername"]', 'git') diff --git a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts index 461dbba61a..6a1f3b598b 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_2.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_2.test.ts @@ -57,6 +57,7 @@ const tests = { browser. clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index ef29f0ded9..0872d93b27 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -58,6 +58,7 @@ const tests = { clickLaunchIcon('dgit') .saveScreenshot('./reports/screenshots/gitui.png') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .saveScreenshot('./reports/screenshots/gitui2.png') .pause(1000) .saveScreenshot('./reports/screenshots/gitui3.png') diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 89c4099b67..962a0b3ccb 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -57,6 +57,7 @@ const tests = { browser. clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .pause(1000) .setValue('*[data-id="gitubUsername"]', 'git') diff --git a/apps/remixdesktop/test/tests/app/github.test.ts b/apps/remixdesktop/test/tests/app/github.test.ts index ef7f68b30c..612be7e02f 100644 --- a/apps/remixdesktop/test/tests/app/github.test.ts +++ b/apps/remixdesktop/test/tests/app/github.test.ts @@ -237,6 +237,7 @@ const tests = { 'disconnect github #group1': function (browser: NightwatchBrowser) { browser .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .waitForElementVisible('*[data-id="disconnect-github"]') .pause(1000) diff --git a/apps/remixdesktop/test/tests/app/github_3.test.ts b/apps/remixdesktop/test/tests/app/github_3.test.ts index e7dc1de86a..9c95fdc99c 100644 --- a/apps/remixdesktop/test/tests/app/github_3.test.ts +++ b/apps/remixdesktop/test/tests/app/github_3.test.ts @@ -91,6 +91,7 @@ const tests = { browser. clickLaunchIcon('dgit') .waitForElementVisible('*[data-id="github-panel"]') + .pause(1000) .click('*[data-id="github-panel"]') .pause(1000) .setValue('*[data-id="githubToken"]', 'invalidtoken') From a17d5470b918754af2a4add72b4694c492efc314 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 11:42:26 +0200 Subject: [PATCH 181/312] fix cli --- apps/remixdesktop/package.json | 4 ++-- apps/remixdesktop/run_git_ui_isogit_tests.sh | 2 +- apps/remixdesktop/src/plugins/compilerLoader.ts | 2 +- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 2 +- apps/remixdesktop/test/nighwatch.app.ts | 8 ++++---- apps/remixdesktop/test/tests/app/git-ui.test.ts | 2 +- apps/remixdesktop/test/tests/app/git-ui_3.test.ts | 2 +- apps/remixdesktop/test/tests/app/git-ui_4.test.ts | 2 +- apps/remixdesktop/test/tests/app/github_3.test.ts | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 41590157cc..1f1fe2d264 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -29,8 +29,8 @@ "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "postinstall": "electron-builder install-app-deps", "test": "yarn run build:e2e && nightwatch --config build-e2e/remixdesktop/test/nighwatch.app.js", - "test:isogit": "yarn run test --useIsoGit", - "test:offline": "yarn run test --useOffline --test build-e2e/remixdesktop/test/tests/app/offline.test.js", + "test:isogit": "yarn run test --use-isogit", + "test:offline": "yarn run test --use-offline --test build-e2e/remixdesktop/test/tests/app/offline.test.js", "build:e2e": "tsc -p tsconfig.e2e.json" }, "devDependencies": { diff --git a/apps/remixdesktop/run_git_ui_isogit_tests.sh b/apps/remixdesktop/run_git_ui_isogit_tests.sh index d47be23523..4e082ce11e 100755 --- a/apps/remixdesktop/run_git_ui_isogit_tests.sh +++ b/apps/remixdesktop/run_git_ui_isogit_tests.sh @@ -4,7 +4,7 @@ TEST_EXITCODE=0 yarn run build:e2e && node ./splice_tests.js TESTFILES=$(node ./splice_tests.js | grep -i 'git' | circleci tests split --split-by=timings) for TESTFILE in $TESTFILES; do - yarn run test --useIsoGit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 + yarn run test --use-isogit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 done echo "$TEST_EXITCODE" diff --git a/apps/remixdesktop/src/plugins/compilerLoader.ts b/apps/remixdesktop/src/plugins/compilerLoader.ts index 846ab4641f..9a74931543 100644 --- a/apps/remixdesktop/src/plugins/compilerLoader.ts +++ b/apps/remixdesktop/src/plugins/compilerLoader.ts @@ -12,7 +12,7 @@ export const baseURLWasm = 'https://binaries.soliditylang.org/wasm' const appExpress = express() // used in e2e tests -const useOffline = process.argv.includes('--useOffline'); +const useOffline = process.argv.includes('--use-offline'); console.log('cacheDir', cacheDir) appExpress.use(express.static(cacheDir)) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index 886eeb531e..d319aa2270 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -13,7 +13,7 @@ const profile: Profile = { description: 'isogit plugin', } // used in e2e tests -const useIsoGit = process.argv.includes('--useIsoGit'); +const useIsoGit = process.argv.includes('--use-isogit'); export class IsoGitPlugin extends ElectronBasePlugin { clients: IsoGitPluginClient[] = [] constructor() { diff --git a/apps/remixdesktop/test/nighwatch.app.ts b/apps/remixdesktop/test/nighwatch.app.ts index c3e4b709f0..5c34abd683 100644 --- a/apps/remixdesktop/test/nighwatch.app.ts +++ b/apps/remixdesktop/test/nighwatch.app.ts @@ -3,8 +3,8 @@ import fs from 'fs'; -const useIsoGit = process.argv.includes('--useIsoGit'); -const useOffline = process.argv.includes('--useOffline'); +const useIsoGit = process.argv.includes('--use-isogit'); +const useOffline = process.argv.includes('--use-offline'); // Function to read JSON file synchronously function readJSONFileSync(filename: string): any { @@ -71,8 +71,8 @@ module.exports = { // Check if running on CircleCI or locally let args = process.env.CIRCLECI ? ["--e2e"] : ["--e2e-local"]; - if(useIsoGit) args = [...args, '--useIsoGit']; - if(useOffline) args = [...args, '--useOffline']; + if(useIsoGit) args = [...args, '--use-isogit']; + if(useOffline) args = [...args, '--use-offline']; // Set display size const windowSize = "--window-size=1000,1000"; diff --git a/apps/remixdesktop/test/tests/app/git-ui.test.ts b/apps/remixdesktop/test/tests/app/git-ui.test.ts index 777f7d8631..813c31da44 100644 --- a/apps/remixdesktop/test/tests/app/git-ui.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui.test.ts @@ -193,7 +193,7 @@ const tests = { .waitForElementVisible('*[data-id="treeViewLitreeViewItemtest2.txt"]') }, } -const useIsoGit = process.argv.includes('--useIsoGit'); +const useIsoGit = process.argv.includes('--use-isogit'); if (process.platform.startsWith('win')) { module.exports = {} } diff --git a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts index 0872d93b27..6fb96951ff 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_3.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_3.test.ts @@ -145,7 +145,7 @@ const tests = { } -const useIsoGit = process.argv.includes('--useIsoGit'); +const useIsoGit = process.argv.includes('--use-isogit'); if (process.platform.startsWith('win')) { module.exports = {} } diff --git a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts index 962a0b3ccb..521462122d 100644 --- a/apps/remixdesktop/test/tests/app/git-ui_4.test.ts +++ b/apps/remixdesktop/test/tests/app/git-ui_4.test.ts @@ -192,7 +192,7 @@ const tests = { }, } -const useIsoGit = process.argv.includes('--useIsoGit'); +const useIsoGit = process.argv.includes('--use-isogit'); if (process.platform.startsWith('win')) { module.exports = {} } diff --git a/apps/remixdesktop/test/tests/app/github_3.test.ts b/apps/remixdesktop/test/tests/app/github_3.test.ts index 9c95fdc99c..12542bb86f 100644 --- a/apps/remixdesktop/test/tests/app/github_3.test.ts +++ b/apps/remixdesktop/test/tests/app/github_3.test.ts @@ -1,6 +1,6 @@ import { NightwatchBrowser } from "nightwatch" -const useIsoGit = process.argv.includes('--useIsoGit'); +const useIsoGit = process.argv.includes('--use-isogit'); let commitCount = 0 let branchCount = 0 const tests = { From 847d9276496273514398cfb2b5613e5cd155dd9b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 12:28:14 +0200 Subject: [PATCH 182/312] fix checkout --- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 112 ++++++++---------- apps/remixdesktop/src/tools/git.ts | 7 +- .../panels/branches/remotebranchedetails.tsx | 2 +- 3 files changed, 56 insertions(+), 65 deletions(-) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index d319aa2270..bbaedfcdb4 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -1,11 +1,11 @@ -import { Profile } from "@remixproject/plugin-utils"; -import { ElectronBasePlugin, ElectronBasePluginClient } from "@remixproject/plugin-electron" +import {Profile} from '@remixproject/plugin-utils' +import {ElectronBasePlugin, ElectronBasePluginClient} from '@remixproject/plugin-electron' import fs from 'fs/promises' import git from 'isomorphic-git' import http from 'isomorphic-git/http/web' -import { gitProxy } from "../tools/git"; -import { isoGit } from "@remix-git" -import { branchDifference, branchInputType, cloneInputType, commitChange, commitInputType, compareBranchesInput, currentBranchInput, fetchInputType, initInputType, logInputType, pullInputType, pushInputType, remote, resolveRefInput, statusInput } from "@remix-api"; +import {gitProxy} from '../tools/git' +import {isoGit} from '@remix-git' +import {branchDifference, branchInputType, checkoutInputType, cloneInputType, commitChange, commitInputType, compareBranchesInput, currentBranchInput, fetchInputType, initInputType, logInputType, pullInputType, pushInputType, remote, resolveRefInput, statusInput} from '@remix-api' const profile: Profile = { name: 'isogit', @@ -13,7 +13,7 @@ const profile: Profile = { description: 'isogit plugin', } // used in e2e tests -const useIsoGit = process.argv.includes('--use-isogit'); +const useIsoGit = process.argv.includes('--use-isogit') export class IsoGitPlugin extends ElectronBasePlugin { clients: IsoGitPluginClient[] = [] constructor() { @@ -21,19 +21,18 @@ export class IsoGitPlugin extends ElectronBasePlugin { } startClone(webContentsId: any): void { - const client = this.clients.find(c => c.webContentsId === webContentsId) + const client = this.clients.find((c) => c.webContentsId === webContentsId) if (client) { client.startClone() } } } - const clientProfile: Profile = { name: 'isogit', displayName: 'isogit', description: 'isogit plugin', - methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder', 'getCommitChanges', 'compareBranches', 'startClone', 'updateSubmodules'] + methods: ['init', 'localStorageUsed', 'version', 'addremote', 'delremote', 'remotes', 'fetch', 'clone', 'export', 'import', 'status', 'log', 'commit', 'add', 'remove', 'rm', 'readblob', 'resolveref', 'branches', 'branch', 'checkout', 'currentbranch', 'push', 'pin', 'pull', 'pinList', 'unPin', 'setIpfsConfig', 'zip', 'setItem', 'getItem', 'openFolder', 'getCommitChanges', 'compareBranches', 'startClone', 'updateSubmodules'], } class IsoGitPluginClient extends ElectronBasePluginClient { @@ -44,15 +43,15 @@ class IsoGitPluginClient extends ElectronBasePluginClient { this.onload(async () => { this.on('fs' as any, 'workingDirChanged', async (path: string) => { this.workingDir = path - this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false + this.gitIsInstalled = (await gitProxy.version()) && !useIsoGit ? true : false }) this.workingDir = await this.call('fs' as any, 'getWorkingDir') - this.gitIsInstalled = await gitProxy.version() && !useIsoGit ? true : false + this.gitIsInstalled = (await gitProxy.version()) && !useIsoGit ? true : false }) } async version() { - return this.gitIsInstalled? gitProxy.version(): 'built-in' + return this.gitIsInstalled ? gitProxy.version() : 'built-in' } async getGitConfig() { @@ -68,7 +67,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { throw new Error('No working directory') } - if (this.workingDir === '') { return [] } @@ -79,8 +77,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } const status = await git.statusMatrix({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) //console.log('STATUS', status, await this.getGitConfig()) return status @@ -90,15 +88,15 @@ class IsoGitPluginClient extends ElectronBasePluginClient { console.log('LOG', cmd) const token = await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') console.log('LOG', token) - + if (this.workingDir === '') { return [] } const log = await git.log({ - ...await this.getGitConfig(), + ...(await this.getGitConfig()), ...cmd, - depth: cmd.depth || 10 + depth: cmd.depth || 10, }) console.log('LOG') return log @@ -110,22 +108,21 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } const add = await git.add({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) return add } async rm(cmd: any) { - if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } const rm = await git.remove({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) return rm @@ -142,15 +139,14 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } const commit = await git.commit({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) return commit } async init(input: initInputType) { - if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -159,8 +155,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return status } await git.init({ - ...await this.getGitConfig(), - defaultBranch: (input && input.defaultBranch) || 'main' + ...(await this.getGitConfig()), + defaultBranch: (input && input.defaultBranch) || 'main', }) } @@ -169,8 +165,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return null } const branch = await git.branch({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) return branch @@ -183,40 +179,41 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } const resolveref = await git.resolveRef({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) console.log('RESOLVE REF', resolveref) return resolveref } - async readblob(cmd: any) { - if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } const readblob = await git.readBlob({ - ...await this.getGitConfig(), - ...cmd + ...(await this.getGitConfig()), + ...cmd, }) return readblob } - async checkout(cmd: any) { + async checkout(cmd: checkoutInputType) { + console.log('CHECKOUT', cmd) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } - - const checkout = await git.checkout({ - ...await this.getGitConfig(), - ...cmd - }) - - return checkout + if (this.gitIsInstalled) { + return await gitProxy.checkout(this.workingDir, cmd) + } else { + const checkout = await git.checkout({ + ...(await this.getGitConfig()), + ...cmd, + }) + return checkout + } } async push(input: pushInputType) { @@ -231,7 +228,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { const push = await isoGit.push(input, await this.getGitConfig(), this) return push } - } async pull(input: pullInputType) { @@ -256,7 +252,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { if (this.gitIsInstalled) { await gitProxy.fetch(this.workingDir, input) - } else { const fetch = await isoGit.fetch(input, await this.getGitConfig(), this) return fetch @@ -264,7 +259,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async clone(cmd: cloneInputType) { - if (this.gitIsInstalled) { try { this.call('terminal' as any, 'log', 'Cloning using git... please wait.') @@ -285,27 +279,24 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async addremote(input: remote) { - const addremote = await git.addRemote({ - ...await this.getGitConfig(), - url: input.url, remote: input.name + ...(await this.getGitConfig()), + url: input.url, + remote: input.name, }) return addremote } async delremote(input: remote) { - const delremote = await git.deleteRemote({ - ...await this.getGitConfig(), - remote: input.name + ...(await this.getGitConfig()), + remote: input.name, }) return delremote } - - async remotes() { console.log('REMOTES') if (!this.workingDir || this.workingDir === '') { @@ -324,7 +315,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return await isoGit.currentbranch(input, defaultConfig) } - async branches(config: any) { console.log('BRANCHES') if (!this.workingDir || this.workingDir === '') { @@ -335,7 +325,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return await isoGit.branches(defaultConfig) } - async startClone() { this.call('filePanel' as any, 'clone') } @@ -344,8 +333,8 @@ class IsoGitPluginClient extends ElectronBasePluginClient { return await isoGit.getCommitChanges(commitHash1, commitHash2, await this.getGitConfig()) } - async compareBranches({ branch, remote }: compareBranchesInput): Promise { - return await isoGit.compareBranches({ branch, remote }, await this.getGitConfig()) + async compareBranches({branch, remote}: compareBranchesInput): Promise { + return await isoGit.compareBranches({branch, remote}, await this.getGitConfig()) } async updateSubmodules(input) { @@ -356,10 +345,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { throw e } } else { - this.call('terminal', 'log', { type: 'error', value: 'Please install git into your OS to use this functionality...' }) + this.call('terminal', 'log', {type: 'error', value: 'Please install git into your OS to use this functionality...'}) } } } - - - diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index 249ef321a5..e27f088296 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -1,7 +1,7 @@ import { exec } from 'child_process'; import { CommitObject, ReadCommitResult } from 'isomorphic-git'; import { promisify } from 'util'; -import { cloneInputType, commitInputType, fetchInputType, pullInputType, pushInputType } from "@remix-api"; +import { cloneInputType, commitInputType, fetchInputType, pullInputType, pushInputType, checkoutInputType } from "@remix-api"; const execAsync = promisify(exec); const statusTransFormMatrix = (status: string) => { @@ -97,6 +97,11 @@ export const gitProxy = { } }, + async checkout(path: string, input: checkoutInputType) { + let force = input.force ? ' -f' : ''; + const { stdout, stderr } = await execAsync(`git checkout ${force} ${input.ref}`, { cwd: path }); + }, + async commit(path: string, input: commitInputType) { await execAsync(`git commit -m '${input.message}'`, { cwd: path }); diff --git a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx index 632cfdbde5..7e6ede379b 100644 --- a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx @@ -60,7 +60,7 @@ export const RemoteBranchDetails = (props: BrancheDetailsProps) => { }) await actions.checkout({ ref: branch.name, - remote: branch.remote && branch.remote.name || null, + //remote: branch.remote && branch.remote.name || null, refresh: true }); await actions.getBranches() From 955b9cf71e2df845ab61e42eddf2823d3989e01e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 12:28:39 +0200 Subject: [PATCH 183/312] rm comment --- .../git/src/components/panels/branches/remotebranchedetails.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx index 7e6ede379b..fcff0754a3 100644 --- a/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx +++ b/libs/remix-ui/git/src/components/panels/branches/remotebranchedetails.tsx @@ -60,7 +60,6 @@ export const RemoteBranchDetails = (props: BrancheDetailsProps) => { }) await actions.checkout({ ref: branch.name, - //remote: branch.remote && branch.remote.name || null, refresh: true }); await actions.getBranches() From edca0712d18a5b0da457559c7a37ab89db21bbdd Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 13:09:18 +0200 Subject: [PATCH 184/312] fix refreshing --- .../buttons/sourcecontrolbuttons.tsx | 109 ++++++++++-------- .../src/components/navigation/branches.tsx | 4 + .../git/src/components/navigation/commits.tsx | 3 +- .../components/navigation/sourcecontrol.tsx | 3 +- libs/remix-ui/git/src/lib/gitactions.ts | 1 + 5 files changed, 72 insertions(+), 48 deletions(-) diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index 0f0300ae49..fcad46ffc9 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -1,17 +1,21 @@ -import { faArrowDown, faArrowUp, faArrowsUpDown, faArrowRotateRight } from "@fortawesome/free-solid-svg-icons" -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" -import { CustomTooltip } from "@remix-ui/helper" -import React, { useEffect, useState } from "react" -import { FormattedMessage } from "react-intl" -import { gitActionsContext } from "../../state/context" -import { branch, remote } from "@remix-api" -import { defaultGitState, gitMatomoEventTypes } from "../../types" -import { gitPluginContext } from "../gitui" -import GitUIButton from "./gituibutton" -import { syncStateContext } from "./sourceControlBase" -import { sendToMatomo } from "../../lib/pluginActions" +import {faArrowDown, faArrowUp, faArrowsUpDown, faArrowRotateRight} from '@fortawesome/free-solid-svg-icons' +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' +import {CustomTooltip} from '@remix-ui/helper' +import React, {useEffect, useState} from 'react' +import {FormattedMessage} from 'react-intl' +import {gitActionsContext} from '../../state/context' +import {branch, remote} from '@remix-api' +import {defaultGitState, gitMatomoEventTypes, gitUIPanels} from '../../types' +import {gitPluginContext} from '../gitui' +import GitUIButton from './gituibutton' +import {syncStateContext} from './sourceControlBase' +import {sendToMatomo} from '../../lib/pluginActions' -export const SourceControlButtons = () => { +export interface SourceControlButtonsProps { + panel: string +} + +export const SourceControlButtons = (props: SourceControlButtonsProps) => { const context = React.useContext(gitPluginContext) const actions = React.useContext(gitActionsContext) const syncState = React.useContext(syncStateContext) @@ -29,21 +33,21 @@ export const SourceControlButtons = () => { const pull = async () => { await actions.pull({ remote: getRemote(), - ref: branch ? branch : context.currentBranch + ref: branch ? branch : context.currentBranch, }) } const push = async () => { await actions.push({ remote: getRemote(), - ref: branch ? branch : context.currentBranch + ref: branch ? branch : context.currentBranch, }) await actions.fetch({ remote: getRemote(), ref: branch ? branch : context.currentBranch, relative: false, depth: 1, - singleBranch: true + singleBranch: true, }) } @@ -52,50 +56,63 @@ export const SourceControlButtons = () => { await push() } - const refresh = async() => { + const refresh = async () => { await sendToMatomo(gitMatomoEventTypes.REFRESH) await actions.getFileStatusMatrix(null) + if (props.panel === gitUIPanels.BRANCHES) { + await actions.getBranches() + } + if (props.panel === gitUIPanels.COMMITS) { + await actions.gitlog(defaultGitState.gitLogCount) + } actions.setStateGitLogCount(defaultGitState.gitLogCount) } const buttonsDisabled = () => { - return (!context.upstream) || context.remotes.length === 0 + return !context.upstream || context.remotes.length === 0 } const getTooltipText = (id: string) => { if (buttonsDisabled()) return - return <> {getRemoteName()} + return ( + <> + {getRemoteName()} + + ) } return ( - - - -
- {syncState.commitsBehind.length ?
- {syncState.commitsBehind.length} -
: null} - -
-
-
- - -
- {syncState.commitsAhead.length ?
- {syncState.commitsAhead.length} -
: null} - -
-
-
- - - + + {props.panel === gitUIPanels.COMMITS || props.panel === gitUIPanels.SOURCECONTROL ? ( + <> + + +
+ {syncState.commitsBehind.length ?
{syncState.commitsBehind.length}
: null} + +
+
+
+ + +
+ {syncState.commitsAhead.length ?
{syncState.commitsAhead.length}
: null} + +
+
+
+ + + + + + + ) : null} }> - + + +
- ) -} \ No newline at end of file +} diff --git a/libs/remix-ui/git/src/components/navigation/branches.tsx b/libs/remix-ui/git/src/components/navigation/branches.tsx index 21decc6e7a..be02305932 100644 --- a/libs/remix-ui/git/src/components/navigation/branches.tsx +++ b/libs/remix-ui/git/src/components/navigation/branches.tsx @@ -3,6 +3,9 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import React, { } from "react"; import { gitActionsContext, pluginActionsContext } from "../../state/context"; import LoaderIndicator from "./loaderindicator"; +import { gitUIPanels } from "../../types"; +import { SourceControlBase } from "../buttons/sourceControlBase"; +import { SourceControlButtons } from "../buttons/sourcecontrolbuttons"; export const BranchesNavigation = ({ eventKey, activePanel, callback }) => { const pluginactions = React.useContext(pluginActionsContext) @@ -26,6 +29,7 @@ export const BranchesNavigation = ({ eventKey, activePanel, callback }) => {
+
); diff --git a/libs/remix-ui/git/src/components/navigation/commits.tsx b/libs/remix-ui/git/src/components/navigation/commits.tsx index 44c9299eb8..85c7dd1815 100644 --- a/libs/remix-ui/git/src/components/navigation/commits.tsx +++ b/libs/remix-ui/git/src/components/navigation/commits.tsx @@ -9,6 +9,7 @@ import { SourceControlBase } from "../buttons/sourceControlBase"; import { SourceControlButtons } from "../buttons/sourcecontrolbuttons"; import { gitPluginContext } from "../gitui"; import LoaderIndicator from "./loaderindicator"; +import { gitUIPanels } from "../../types"; export interface CommitsNavigationProps { title: string, @@ -53,7 +54,7 @@ export const CommitsNavigation = ({ eventKey, activePanel, callback, title, bran {showButtons ? - + : null}
diff --git a/libs/remix-ui/git/src/components/navigation/sourcecontrol.tsx b/libs/remix-ui/git/src/components/navigation/sourcecontrol.tsx index 7baf2f50e1..9f66bc9314 100644 --- a/libs/remix-ui/git/src/components/navigation/sourcecontrol.tsx +++ b/libs/remix-ui/git/src/components/navigation/sourcecontrol.tsx @@ -9,6 +9,7 @@ import { SourceControlButtons } from "../buttons/sourcecontrolbuttons"; import { gitPluginContext } from "../gitui"; import LoaderIndicator from "./loaderindicator"; import { SourceControlMenu } from "./menu/sourcecontrolmenu"; +import { gitUIPanels } from "../../types"; export const SourceControlNavigation = ({ eventKey, activePanel, callback }) => { const pluginactions = React.useContext(pluginActionsContext) @@ -35,7 +36,7 @@ export const SourceControlNavigation = ({ eventKey, activePanel, callback }) => - +
diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 7505501118..7ced95da51 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -51,6 +51,7 @@ export const getBranches = async () => { const branches = await plugin.call('dgitApi', 'branches') dispatch(setBranches(branches)); + await showCurrentBranch(); } export const getRemotes = async () => { From 3181e66e6b2bed1b9fcc183359762ebeb7ee2647 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 13:23:31 +0200 Subject: [PATCH 185/312] lint --- apps/remix-ide/src/app/files/dgitProvider.ts | 18 +++++++------- .../buttons/sourcecontrolbuttons.tsx | 22 ++++++++--------- libs/remix-ui/git/src/lib/gitactions.ts | 24 +++++++++---------- libs/remix-ui/git/src/lib/listeners.ts | 9 ++++--- 4 files changed, 35 insertions(+), 38 deletions(-) diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 8dfd9b6784..cdb863b4b7 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -101,10 +101,9 @@ class DGitProvider extends Plugin { } async status(cmd: statusInput): Promise> { - console.log('status', cmd) + if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'status', cmd) - console.log('STATUS', { ...status }) return status } @@ -112,7 +111,7 @@ class DGitProvider extends Plugin { ...await this.addIsomorphicGitConfigFS(), ...cmd }) - console.log('STATUS', JSON.stringify(status)) + return status } @@ -131,7 +130,7 @@ class DGitProvider extends Plugin { } async rm(cmd: rmInputType) { - console.log('RM', cmd) + if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'rm', cmd) } else { @@ -144,7 +143,7 @@ class DGitProvider extends Plugin { } async checkout(cmd: checkoutInputType): Promise { - console.log('checkout', cmd) + if ((Registry.getInstance().get('platform').api.isDesktop())) { await this.call('isogit', 'checkout', cmd) } else { @@ -185,12 +184,12 @@ class DGitProvider extends Plugin { } async log(cmd: logInputType): Promise { - console.log('LOG', cmd) + if ((Registry.getInstance().get('platform').api.isDesktop())) { const status = await this.call('isogit', 'log', { ...cmd, }) - console.log('LOG END', status) + return status } @@ -198,7 +197,7 @@ class DGitProvider extends Plugin { ...await this.addIsomorphicGitConfigFS(), ...cmd, }) - console.log('LOG END', status) + return status } @@ -260,7 +259,6 @@ class DGitProvider extends Plugin { if ((Registry.getInstance().get('platform').api.isDesktop())) { const branches = await this.call('isogit', 'branches') - console.log(branches) return branches } const defaultConfig = await this.addIsomorphicGitConfigFS() @@ -618,7 +616,7 @@ class DGitProvider extends Plugin { } async remotecommits(input: remoteCommitsInputType): Promise { - console.log('remotecommits', input) + const octokit = new Octokit({ auth: input.token }) diff --git a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx index fcad46ffc9..7aa8705e2a 100644 --- a/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx +++ b/libs/remix-ui/git/src/components/buttons/sourcecontrolbuttons.tsx @@ -1,15 +1,15 @@ -import {faArrowDown, faArrowUp, faArrowsUpDown, faArrowRotateRight} from '@fortawesome/free-solid-svg-icons' -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' -import {CustomTooltip} from '@remix-ui/helper' -import React, {useEffect, useState} from 'react' -import {FormattedMessage} from 'react-intl' -import {gitActionsContext} from '../../state/context' -import {branch, remote} from '@remix-api' -import {defaultGitState, gitMatomoEventTypes, gitUIPanels} from '../../types' -import {gitPluginContext} from '../gitui' +import { faArrowDown, faArrowUp, faArrowsUpDown, faArrowRotateRight } from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { CustomTooltip } from '@remix-ui/helper' +import React, { useEffect, useState } from 'react' +import { FormattedMessage } from 'react-intl' +import { gitActionsContext } from '../../state/context' +import { branch, remote } from '@remix-api' +import { defaultGitState, gitMatomoEventTypes, gitUIPanels } from '../../types' +import { gitPluginContext } from '../gitui' import GitUIButton from './gituibutton' -import {syncStateContext} from './sourceControlBase' -import {sendToMatomo} from '../../lib/pluginActions' +import { syncStateContext } from './sourceControlBase' +import { sendToMatomo } from '../../lib/pluginActions' export interface SourceControlButtonsProps { panel: string diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index 7ced95da51..5c9bbe9638 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -65,7 +65,7 @@ export const setUpstreamRemote = async (remote: remote) => { } export const getFileStatusMatrix = async (filepaths: string[]) => { - console.log('getFileStatusMatrix', filepaths) + dispatch(setLoading(true)) const fileStatusResult = await statusMatrix(filepaths); fileStatusResult.map((m) => { @@ -81,7 +81,7 @@ export const getFileStatusMatrix = async (filepaths: string[]) => { dispatch(fileStatusMerge(fileStatusResult)) setFileDecorators(fileStatusResult) } - console.log('getFileStatusMatrix end') + dispatch(setLoading(false)) } @@ -93,7 +93,7 @@ export const getCommits = async (depth: number) => { "log", { ref: "HEAD", depth: depth } ); - console.log('commits', commits) + return commits; } catch (e) { return []; @@ -101,7 +101,7 @@ export const getCommits = async (depth: number) => { } export const gitlog = async (depth: number) => { - console.log('gitlog start') + let commits = [] try { commits = await getCommits(depth) @@ -110,7 +110,7 @@ export const gitlog = async (depth: number) => { dispatch(setCommits(commits)) await showCurrentBranch() dispatch(setLoading(false)) - console.log('gitlog end') + } export const setStateGitLogCount = async (count: number) => { @@ -533,7 +533,7 @@ export const remoteBranches = async (owner: string, repo: string) => { } export const remoteCommits = async (url: string, branch: string, length: number) => { - console.log('get remote commits') + const urlParts = url.split("/"); // check if it's github @@ -680,9 +680,9 @@ export const loadGitHubUserFromToken = async () => { } export const statusMatrix = async (filepaths: string[]) => { - console.log('calling status') + const matrix = await plugin.call('dgitApi', 'status', { ref: "HEAD", filepaths: filepaths || ['.']}); - console.log('calling status end') + const result = (matrix || []).map((x) => { return { filename: `/${x.shift()}`, @@ -745,7 +745,7 @@ export const diff = async (commitChange: commitChange) => { } export const getCommitChanges = async (oid1: string, oid2: string, branch?: branch, remote?: remote) => { - console.log('getCommitChanges', oid1, oid2, branch, remote) + try { let log try { @@ -758,7 +758,7 @@ export const getCommitChanges = async (oid1: string, oid2: string, branch?: bran console.log(e, 'log error') } if (log) { - console.log('log', log) + const foundCommit = log.find((commit: ReadCommitResult) => commit.oid === oid2) if (!foundCommit && remote) { @@ -795,7 +795,7 @@ async function getRepoDetails(url: string) { } export const fetchBranch = async (branch: branch, page: number) => { - console.log('fetch branch') + if (!branch.remote || !branch.remote.url) return const token = await tokenWarning(); if (page == 1) { @@ -815,7 +815,7 @@ export const fetchBranch = async (branch: branch, page: number) => { } export const getBranchDifferences = async (branch: branch, remote: remote, state: gitState) => { - console.log('get branch diff') + if (!remote && state) { if (state.defaultRemote) { remote = state.defaultRemote diff --git a/libs/remix-ui/git/src/lib/listeners.ts b/libs/remix-ui/git/src/lib/listeners.ts index cb8377e055..42f450c058 100644 --- a/libs/remix-ui/git/src/lib/listeners.ts +++ b/libs/remix-ui/git/src/lib/listeners.ts @@ -69,11 +69,11 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - console.log('workingDirChanged', path) + gitDispatcher(setDesktopWorkingDir(path)) gitDispatch(setCanUseApp(path ? true : false)) const version = await plugin.call('dgitApi', 'version') - console.log(version) + gitDispatch(setVersion(version)) loadFileQueue.enqueue(async () => { loadFiles() @@ -90,13 +90,12 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - console.log('setWorkspace', x) if (platform == appPlatformTypes.desktop) { const workingDir = await plugin.call('fs', 'getWorkingDir') gitDispatch(setCanUseApp(workingDir? true : false)) const version = await plugin.call('dgitApi', 'version') - console.log(version) + gitDispatch(setVersion(version)) } else { gitDispatch(setCanUseApp(x && !x.isLocalhost && x.name)) @@ -144,7 +143,7 @@ export const setCallBacks = (viewPlugin: Plugin, gitDispatcher: React.Dispatch { - console.log('commit') + loadFileQueue.enqueue(async () => { loadFiles() }, 10) From 34530fbd03b5685e8793d03a9fbf9cd933708036 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 13:25:22 +0200 Subject: [PATCH 186/312] rm logs --- apps/remixdesktop/src/plugins/isoGitPlugin.ts | 25 ++++++++----------- libs/remix-git/src/isogit.ts | 4 --- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/apps/remixdesktop/src/plugins/isoGitPlugin.ts b/apps/remixdesktop/src/plugins/isoGitPlugin.ts index bbaedfcdb4..201d19b6d4 100644 --- a/apps/remixdesktop/src/plugins/isoGitPlugin.ts +++ b/apps/remixdesktop/src/plugins/isoGitPlugin.ts @@ -62,7 +62,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async status(cmd: statusInput) { - console.log('status', cmd) + if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -80,14 +80,13 @@ class IsoGitPluginClient extends ElectronBasePluginClient { ...(await this.getGitConfig()), ...cmd, }) - //console.log('STATUS', status, await this.getGitConfig()) + return status } async log(cmd: logInputType) { - console.log('LOG', cmd) + const token = await this.call('config' as any, 'getAppParameter', 'settings/gist-access-token') - console.log('LOG', token) if (this.workingDir === '') { return [] @@ -98,7 +97,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { ...cmd, depth: cmd.depth || 10, }) - console.log('LOG') + return log } @@ -173,7 +172,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async resolveref(cmd: resolveRefInput) { - console.log('RESOLVE REF', cmd) + if (!this.workingDir || this.workingDir === '') { return null } @@ -182,7 +181,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { ...(await this.getGitConfig()), ...cmd, }) - console.log('RESOLVE REF', resolveref) + return resolveref } @@ -200,7 +199,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async checkout(cmd: checkoutInputType) { - console.log('CHECKOUT', cmd) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') @@ -217,7 +215,6 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async push(input: pushInputType) { - console.log('PUSH', input, this.gitIsInstalled) if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -231,7 +228,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async pull(input: pullInputType) { - console.log('PULL', input) + if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -245,7 +242,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async fetch(input: fetchInputType) { - console.log('FETCH', input) + if (!this.workingDir || this.workingDir === '') { throw new Error('No working directory') } @@ -298,7 +295,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async remotes() { - console.log('REMOTES') + if (!this.workingDir || this.workingDir === '') { return [] } @@ -307,7 +304,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async currentbranch(input: currentBranchInput) { - console.log('CURRENT BRANCH', input) + if (!this.workingDir || this.workingDir === '') { return '' } @@ -316,7 +313,7 @@ class IsoGitPluginClient extends ElectronBasePluginClient { } async branches(config: any) { - console.log('BRANCHES') + if (!this.workingDir || this.workingDir === '') { return [] } diff --git a/libs/remix-git/src/isogit.ts b/libs/remix-git/src/isogit.ts index be3230973c..2c608d9ce2 100644 --- a/libs/remix-git/src/isogit.ts +++ b/libs/remix-git/src/isogit.ts @@ -8,7 +8,6 @@ import http from 'isomorphic-git/http/web' import { Octokit } from "octokit" import { ElectronBasePluginClient } from "@remixproject/plugin-electron" const currentbranch = async (input: currentBranchInput, fsConfig: isoGitFSConfig) => { - console.log('CURRENT BRANCH', input) try { const cmd = input ? fsConfig ? { ...fsConfig, ...input } : input : fsConfig @@ -31,8 +30,6 @@ const currentbranch = async (input: currentBranchInput, fsConfig: isoGitFSConfig } catch (e) { // do nothing } - console.log('NAME', name) - console.log('REMOTE', remote) return { remote: remote, @@ -201,7 +198,6 @@ const addIsomorphicGitProxyConfig = async (input: { }, plugin: any) => { const token = await plugin.call('config' as any, 'getAppParameter', 'settings/gist-access-token') - console.log('TOKEN', token) let config: isoGitProxyConfig = { corsProxy: 'https://corsproxy.remixproject.org/', From 313bb2d9b9345722d0e6b4feb0e341a5ec6b5f40 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 5 Sep 2024 13:26:01 +0200 Subject: [PATCH 187/312] logs --- apps/remixdesktop/src/tools/git.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remixdesktop/src/tools/git.ts b/apps/remixdesktop/src/tools/git.ts index e27f088296..ed28a70b82 100644 --- a/apps/remixdesktop/src/tools/git.ts +++ b/apps/remixdesktop/src/tools/git.ts @@ -83,7 +83,7 @@ export const gitProxy = { if(!input.remote || !input.remote.name) { input.remote = { name: await gitProxy.defaultRemoteName(path), url: '' } } - console.log('fetch', input, path, `git fetch ${input.remote.name} ${(input.ref && input.ref.name) ? input.ref.name : ''}`); + try { const { stdout, stderr } = await execAsync(`git fetch ${input.remote.name} ${(input.ref && input.ref.name) ? input.ref.name : ''}`, { cwd: path }); if (stdout) { From f46c2fa115e1da19f68b67e4f73e4b0e0ff3236e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 6 Sep 2024 07:35:34 +0200 Subject: [PATCH 188/312] backup yarn call --- .circleci/config.yml | 3 ++- apps/remix-ide/src/assets/js/loader.js | 2 +- apps/remix-ide/src/assets/list.json | 14 +++++++++++++- apps/remixdesktop/package.json | 2 +- .../src/lib/solidity-compiler.tsx | 4 ++-- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dd8feb6e08..4020c3f3ed 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -458,7 +458,8 @@ jobs: - run: command: | nvm use 20.0.0 - cd apps/remixdesktop && yarn + cd apps/remixdesktop + yarn || yarn yarn add @remix-project/remix-ws-templates - save_cache: key: remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} diff --git a/apps/remix-ide/src/assets/js/loader.js b/apps/remix-ide/src/assets/js/loader.js index fec4de246f..44a7687830 100644 --- a/apps/remix-ide/src/assets/js/loader.js +++ b/apps/remix-ide/src/assets/js/loader.js @@ -10,7 +10,7 @@ let domainToTrack = domains[window.location.hostname] function trackDomain(domainToTrack) { var _paq = window._paq = window._paq || [] - console.log('Tracking domain', domainToTrack, _paq) + /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(["setExcludedQueryParams", ["code", "gist"]]); _paq.push(["setExcludedReferrers", ["etherscan.io"]]); diff --git a/apps/remix-ide/src/assets/list.json b/apps/remix-ide/src/assets/list.json index 6a55fff4f7..82f8fe17bb 100644 --- a/apps/remix-ide/src/assets/list.json +++ b/apps/remix-ide/src/assets/list.json @@ -1022,9 +1022,21 @@ "urls": [ "dweb:/ipfs/QmS5JdeXtYhGBvdgNTLWuBNHupyP623X4sf43fRbrgiTaA" ] + }, + { + "path": "soljson-v0.8.27+commit.40a35a09.js", + "version": "0.8.27", + "build": "commit.40a35a09", + "longVersion": "0.8.27+commit.40a35a09", + "keccak256": "0x68c7a06651a847fc9a60886a6ba590a2b20d87f2d4f9570bf70fbb2b901e7713", + "sha256": "0xd91c08277f801321af4e80958015aea18b41c01d2c6a38310a23014485b0e51c", + "urls": [ + "dweb:/ipfs/QmVTALD1WUQwRvEL19jgwrEFyBJMQmy9z32zvT6TAtYPY1" + ] } ], "releases": { + "0.8.27": "soljson-v0.8.27+commit.40a35a09.js", "0.8.26": "soljson-v0.8.26+commit.8a97fa7a.js", "0.8.25": "soljson-v0.8.25+commit.b61c2a91.js", "0.8.24": "soljson-v0.8.24+commit.e11b9ed9.js", @@ -1119,5 +1131,5 @@ "0.4.0": "soljson-v0.4.0+commit.acd334c9.js", "0.3.6": "soljson-v0.3.6+commit.3fc68da5.js" }, - "latestRelease": "0.8.26" + "latestRelease": "0.8.27" } \ No newline at end of file diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 1f1fe2d264..76a2f112e0 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -38,7 +38,7 @@ "@types/byline": "^4.2.35", "@types/express": "^4.17.21", "@types/nightwatch": "^2.3.23", - "chromedriver": "116", + "chromedriver": "^116", "cross-env": "^7.0.3", "deep-equal": "^2.2.3", "electron": "^26.0.0", diff --git a/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx b/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx index 04908c35ec..4d6f5773d6 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx +++ b/libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx @@ -80,11 +80,11 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => { api.onSetWorkspace = async (isLocalhost: boolean, workspaceName: string) => { const isDesktop = platform === appPlatformTypes.desktop - console.log('onSetWorkspace', workspaceName, isLocalhost, isDesktop, workspaceName) + const isHardhat = (isLocalhost || isDesktop) && (await compileTabLogic.isHardhatProject()) const isTruffle = (isLocalhost || isDesktop) && (await compileTabLogic.isTruffleProject()) const isFoundry = (isLocalhost || isDesktop) && (await compileTabLogic.isFoundryProject()) - console.log(isFoundry, isHardhat, isTruffle) + setState((prevState) => { return { ...prevState, From 462c9caeca5a8918ecc5744fffbb12206a1a7d53 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 6 Sep 2024 07:57:39 +0200 Subject: [PATCH 189/312] double run --- apps/remixdesktop/run_ci_test.sh | 2 +- apps/remixdesktop/run_git_ui_isogit_tests.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/run_ci_test.sh b/apps/remixdesktop/run_ci_test.sh index 55613aab83..9b3ebfcdd1 100755 --- a/apps/remixdesktop/run_ci_test.sh +++ b/apps/remixdesktop/run_ci_test.sh @@ -4,7 +4,7 @@ TEST_EXITCODE=0 yarn run build:e2e && node ./splice_tests.js TESTFILES=$(node ./splice_tests.js | circleci tests split --split-by=timings) for TESTFILE in $TESTFILES; do - yarn run test --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 + yarn run test --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || yarn run test --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 done diff --git a/apps/remixdesktop/run_git_ui_isogit_tests.sh b/apps/remixdesktop/run_git_ui_isogit_tests.sh index 4e082ce11e..2b88b26e24 100755 --- a/apps/remixdesktop/run_git_ui_isogit_tests.sh +++ b/apps/remixdesktop/run_git_ui_isogit_tests.sh @@ -4,7 +4,7 @@ TEST_EXITCODE=0 yarn run build:e2e && node ./splice_tests.js TESTFILES=$(node ./splice_tests.js | grep -i 'git' | circleci tests split --split-by=timings) for TESTFILE in $TESTFILES; do - yarn run test --use-isogit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 + yarn run test --use-isogit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || yarn run test --use-isogit --test ./build-e2e/remixdesktop/test/tests/app/${TESTFILE} || TEST_EXITCODE=1 done echo "$TEST_EXITCODE" From 514d2b502de1d27ec6f2aa9ec5f9c34bea6126e8 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 6 Sep 2024 08:14:36 +0200 Subject: [PATCH 190/312] rm logs --- apps/remix-ide/src/app/plugins/electron/appUpdaterPlugin.ts | 1 - apps/remixdesktop/src/plugins/appUpdater.ts | 1 - apps/remixdesktop/src/preload.ts | 1 - libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts | 1 - 4 files changed, 4 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/electron/appUpdaterPlugin.ts b/apps/remix-ide/src/app/plugins/electron/appUpdaterPlugin.ts index ec879fa687..e2a0c38cfc 100644 --- a/apps/remix-ide/src/app/plugins/electron/appUpdaterPlugin.ts +++ b/apps/remix-ide/src/app/plugins/electron/appUpdaterPlugin.ts @@ -8,7 +8,6 @@ const profile = { export class appUpdaterPlugin extends ElectronPlugin { constructor() { - console.log('appUpdaterPlugin') super(profile) } diff --git a/apps/remixdesktop/src/plugins/appUpdater.ts b/apps/remixdesktop/src/plugins/appUpdater.ts index 7f21fd962c..78abaa3721 100644 --- a/apps/remixdesktop/src/plugins/appUpdater.ts +++ b/apps/remixdesktop/src/plugins/appUpdater.ts @@ -14,7 +14,6 @@ const profile = { export class AppUpdaterPlugin extends ElectronBasePlugin { clients: AppUpdaterPluginClient[] = [] constructor() { - console.log('AppUpdaterPlugin') super(profile, clientProfile, AppUpdaterPluginClient) this.methods = [...super.methods] diff --git a/apps/remixdesktop/src/preload.ts b/apps/remixdesktop/src/preload.ts index 50c2fd4e84..984dc41e2d 100644 --- a/apps/remixdesktop/src/preload.ts +++ b/apps/remixdesktop/src/preload.ts @@ -29,7 +29,6 @@ contextBridge.exposeInMainWorld('electronAPI', { return { name, on: (cb:any) => { - if(name === 'isogit') console.log('isogit', cb) ipcRenderer.on(`${name}:send`, cb) }, send: (message: Partial) => { 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 0c5800a46e..2b3b6e0000 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts @@ -130,7 +130,6 @@ export class CompileTabLogic { async isHardhatProject () { if (this.api.getFileManagerMode() === ('localhost') || this.api.isDesktop()) { - console.log('checking hardhat project') return await this.api.fileExists('hardhat.config.js') || await this.api.fileExists('hardhat.config.ts') } else return false } From 468f7245f7beb8a9b1c4f341f3cd138aace793e6 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 6 Sep 2024 08:30:50 +0200 Subject: [PATCH 191/312] backup yarn --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4020c3f3ed..123d420ace 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -526,7 +526,8 @@ jobs: - run: command: | nvm use 20.0.0 - cd apps/remixdesktop && yarn + cd apps/remixdesktop + yarn || yarn yarn add @remix-project/remix-ws-templates - save_cache: key: remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} From ed96d279bf110834f24a74b914ec4ce93cd0d0cd Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 6 Sep 2024 08:53:03 +0200 Subject: [PATCH 192/312] nvm --- .circleci/config.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 123d420ace..f8449a1e5c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -199,8 +199,8 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20.0.0 - nvm use 20.0.0 + nvm install 20 + nvm use 20 node -v npx -v npm install --global yarn @@ -261,8 +261,8 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20.0.0 - nvm use 20.0.0 + nvm install 20 + nvm use 20 node -v npx -v npm install --global yarn @@ -285,7 +285,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ - nvm use 20.0.0 + nvm use 20 node -v pip install setuptools yarn @@ -450,14 +450,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20.0.0 - nvm use 20.0.0 + nvm install 20 + nvm use 20 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 20.0.0 + nvm use 20 cd apps/remixdesktop yarn || yarn yarn add @remix-project/remix-ws-templates @@ -518,14 +518,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20.0.0 - nvm use 20.0.0 + nvm install 20 + nvm use 20 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 20.0.0 + nvm use 20 cd apps/remixdesktop yarn || yarn yarn add @remix-project/remix-ws-templates From 9f16510b54c8c45307fff3d2a4c9d8b4b2dd152a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 10 Sep 2024 08:36:15 +0200 Subject: [PATCH 193/312] 1.0.8 --- apps/remixdesktop/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 76a2f112e0..08def30488 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -1,6 +1,6 @@ { "name": "remixdesktop", - "version": "1.0.7-insiders", + "version": "1.0.8-insiders", "main": "build/main.js", "license": "MIT", "type": "commonjs", From dc2033d856e7055afecc99fa8f42646151147e9e Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Tue, 10 Sep 2024 14:10:59 +0100 Subject: [PATCH 194/312] made changes as per @ryestew & @LianaHus --- .../workspace/src/lib/components/workspace-hamburger.tsx | 8 ++++---- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) 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 0dad148999..860ac4042e 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -28,21 +28,21 @@ export function HamburgerMenu(props: HamburgerMenuProps) { return ( <> { - props.createWorkspace() + props.createBlankWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} > { - props.createBlankWorkspace() + props.createWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} 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 96a74ed5dc..8db36e36a0 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -349,7 +349,7 @@ export function Workspace() { }) global.modal( intl.formatMessage({ id: 'filePanel.workspace.createBlank' }), - await createModalMessage(`blank - 1`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), + await createModalMessage(`blank - ${counter}`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), intl.formatMessage({ id: 'filePanel.ok' }), () => global.dispatchCreateWorkspace(`blank - ${counter}`, 'blank', false), intl.formatMessage({ id: 'filePanel.cancel' }) From 08c5643ff8bbebb10c3346212a24caa1c3817c8a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 10 Sep 2024 15:19:08 +0200 Subject: [PATCH 195/312] fix spawn server --- .../src/githttpbackend/package.json | 6 ++++- .../src/githttpbackend/{ => src}/server.ts | 0 .../src/githttpbackend/tsconfig.json | 25 +++++++++++++++++++ .../src/githttpbackend/yarn.lock | 17 +++++++++++++ .../src/tests/dgit_local.test.ts | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) rename apps/remix-ide-e2e/src/githttpbackend/{ => src}/server.ts (100%) create mode 100644 apps/remix-ide-e2e/src/githttpbackend/tsconfig.json diff --git a/apps/remix-ide-e2e/src/githttpbackend/package.json b/apps/remix-ide-e2e/src/githttpbackend/package.json index 3e44990386..23c5fdb3fd 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/package.json +++ b/apps/remix-ide-e2e/src/githttpbackend/package.json @@ -1,6 +1,6 @@ { "scripts": { - "start:server": "npx ts-node server.ts" + "start:server": "tsc && node ./dist/server.js" }, "dependencies": { "body-parser": "^1.20.2", @@ -9,5 +9,9 @@ "git-http-backend": "^1.1.2", "path": "^0.12.7", "zlib": "^1.0.5" + }, + "devDependencies": { + "@types/node": "^22.5.4", + "typescript": "^5.6.2" } } diff --git a/apps/remix-ide-e2e/src/githttpbackend/server.ts b/apps/remix-ide-e2e/src/githttpbackend/src/server.ts similarity index 100% rename from apps/remix-ide-e2e/src/githttpbackend/server.ts rename to apps/remix-ide-e2e/src/githttpbackend/src/server.ts diff --git a/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json b/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json new file mode 100644 index 0000000000..7b867a47ae --- /dev/null +++ b/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES6", // Set the ECMAScript target version + "module": "commonjs", // Specify module code generation + "strict": true, + "noImplicitAny": false, // Enable all strict type-checking options + "esModuleInterop": true, // Emit additional code to make commonJS and ES modules work together + "skipLibCheck": true, // Skip type checking of all declaration files (.d.ts) + "forceConsistentCasingInFileNames": true, // Ensure file names are treated with case sensitivity + "outDir": "./dist", // Redirect output structure to the 'dist' directory + "rootDir": "./src", // Specify the root directory of input files + "sourceMap": true, // Create source map files + "types": [ + "node" + ], // Add node types + "moduleResolution": "node", // Ensure TypeScript resolves modules like Node.js + }, + "include": [ + "src/**/*" // Include all TypeScript files in the src directory + ], + "exclude": [ + "node_modules", // Exclude the node_modules folder + "**/*.test.ts" // Exclude test files + ] +} \ No newline at end of file diff --git a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock index 8548a19555..b426315cd1 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock +++ b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@types/node@^22.5.4": + version "22.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" + integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== + dependencies: + undici-types "~6.19.2" + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -483,6 +490,16 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index 659b20767a..a298f15d96 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -606,7 +606,7 @@ async function createCommitOnLocalServer(path: string, message: string) { async function spawnGitServer(path: string): Promise { console.log(process.cwd()) try { - const server = spawn('yarn && sh setup.sh && npx ts-node server.ts', [`${path}`], { cwd: process.cwd() + '/apps/remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) + const server = spawn('yarn && sh setup.sh && yarn start:server', [`${path}`], { cwd: process.cwd() + '/apps/remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) console.log('spawned', server.stdout.closed, server.stderr.closed) return new Promise((resolve, reject) => { server.stdout.on('data', function (data) { From 90c580a42169acbd10b5cea431668bb65796fbab Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 10 Sep 2024 15:27:41 +0200 Subject: [PATCH 196/312] spawn server --- apps/remixdesktop/test/lib/git.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remixdesktop/test/lib/git.ts b/apps/remixdesktop/test/lib/git.ts index 2a04570819..2a47d54477 100644 --- a/apps/remixdesktop/test/lib/git.ts +++ b/apps/remixdesktop/test/lib/git.ts @@ -171,7 +171,7 @@ export async function createCommitOnLocalServer(path: string, message: string) { export async function spawnGitServer(path: string): Promise { console.log(process.cwd()) try { - const server = spawn('yarn && sh setup.sh && npx ts-node server.ts', [`${path}`], { cwd: process.cwd() + '/../remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) + const server = spawn('yarn && sh setup.sh && yarn start:server', [`${path}`], { cwd: process.cwd() + '/../remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) console.log('spawned', server.stdout.closed, server.stderr.closed) return new Promise((resolve, reject) => { server.stdout.on('data', function (data) { From 3abc8451c3d40ce7cb985feb0f7e1fa3f95e646f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 10 Sep 2024 15:19:08 +0200 Subject: [PATCH 197/312] fix spawn server --- .../src/githttpbackend/package.json | 6 ++++- .../src/githttpbackend/{ => src}/server.ts | 0 .../src/githttpbackend/tsconfig.json | 25 +++++++++++++++++++ .../src/githttpbackend/yarn.lock | 17 +++++++++++++ .../src/tests/dgit_local.test.ts | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) rename apps/remix-ide-e2e/src/githttpbackend/{ => src}/server.ts (100%) create mode 100644 apps/remix-ide-e2e/src/githttpbackend/tsconfig.json diff --git a/apps/remix-ide-e2e/src/githttpbackend/package.json b/apps/remix-ide-e2e/src/githttpbackend/package.json index 3e44990386..23c5fdb3fd 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/package.json +++ b/apps/remix-ide-e2e/src/githttpbackend/package.json @@ -1,6 +1,6 @@ { "scripts": { - "start:server": "npx ts-node server.ts" + "start:server": "tsc && node ./dist/server.js" }, "dependencies": { "body-parser": "^1.20.2", @@ -9,5 +9,9 @@ "git-http-backend": "^1.1.2", "path": "^0.12.7", "zlib": "^1.0.5" + }, + "devDependencies": { + "@types/node": "^22.5.4", + "typescript": "^5.6.2" } } diff --git a/apps/remix-ide-e2e/src/githttpbackend/server.ts b/apps/remix-ide-e2e/src/githttpbackend/src/server.ts similarity index 100% rename from apps/remix-ide-e2e/src/githttpbackend/server.ts rename to apps/remix-ide-e2e/src/githttpbackend/src/server.ts diff --git a/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json b/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json new file mode 100644 index 0000000000..7b867a47ae --- /dev/null +++ b/apps/remix-ide-e2e/src/githttpbackend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES6", // Set the ECMAScript target version + "module": "commonjs", // Specify module code generation + "strict": true, + "noImplicitAny": false, // Enable all strict type-checking options + "esModuleInterop": true, // Emit additional code to make commonJS and ES modules work together + "skipLibCheck": true, // Skip type checking of all declaration files (.d.ts) + "forceConsistentCasingInFileNames": true, // Ensure file names are treated with case sensitivity + "outDir": "./dist", // Redirect output structure to the 'dist' directory + "rootDir": "./src", // Specify the root directory of input files + "sourceMap": true, // Create source map files + "types": [ + "node" + ], // Add node types + "moduleResolution": "node", // Ensure TypeScript resolves modules like Node.js + }, + "include": [ + "src/**/*" // Include all TypeScript files in the src directory + ], + "exclude": [ + "node_modules", // Exclude the node_modules folder + "**/*.test.ts" // Exclude test files + ] +} \ No newline at end of file diff --git a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock index 8548a19555..b426315cd1 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock +++ b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@types/node@^22.5.4": + version "22.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" + integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== + dependencies: + undici-types "~6.19.2" + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -483,6 +490,16 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@^5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" diff --git a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts index 659b20767a..a298f15d96 100644 --- a/apps/remix-ide-e2e/src/tests/dgit_local.test.ts +++ b/apps/remix-ide-e2e/src/tests/dgit_local.test.ts @@ -606,7 +606,7 @@ async function createCommitOnLocalServer(path: string, message: string) { async function spawnGitServer(path: string): Promise { console.log(process.cwd()) try { - const server = spawn('yarn && sh setup.sh && npx ts-node server.ts', [`${path}`], { cwd: process.cwd() + '/apps/remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) + const server = spawn('yarn && sh setup.sh && yarn start:server', [`${path}`], { cwd: process.cwd() + '/apps/remix-ide-e2e/src/githttpbackend/', shell: true, detached: true }) console.log('spawned', server.stdout.closed, server.stderr.closed) return new Promise((resolve, reject) => { server.stdout.on('data', function (data) { From f273dabd08666bf8a9549f636ec3a5fad37da6ab Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 13:24:21 +0530 Subject: [PATCH 198/312] fix Remix copilot status --- .../remix-ui/statusbar/src/lib/components/aiStatus.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx index 255602004f..46ad4ba524 100644 --- a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx +++ b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx @@ -14,13 +14,11 @@ export default function AIStatus(props: AIStatusProps) { const [copilotActive, setCopilotActive] = useState(false) useEffect(() => { const run = async () => { - props.plugin.on('fileManager', 'currentFileChanged', async (isAiActive) => { - const aiActivate = await props.plugin.call('settings', 'get', 'settings/copilot/suggest/activate') - setCopilotActive(aiActivate) - }) + const aiActivate = await props.plugin.call('settings', 'get', 'settings/copilot/suggest/activate') + setCopilotActive(aiActivate) } run() - }, [props.plugin.isAiActive, props.isAiActive]) + }, []) useEffect(() => { const run = async () => { @@ -30,7 +28,7 @@ export default function AIStatus(props: AIStatusProps) { }) } run() - }, [props.plugin.isAiActive]) + }, [props.plugin.isAiActive, props.plugin.isAiActive]) return ( Date: Mon, 9 Sep 2024 13:32:57 +0530 Subject: [PATCH 199/312] update wording --- libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx index 46ad4ba524..b6b1f68891 100644 --- a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx +++ b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx @@ -31,7 +31,7 @@ export default function AIStatus(props: AIStatusProps) { }, [props.plugin.isAiActive, props.plugin.isAiActive]) return (
From 5cfefa12dbd3bbdb42266fab8964675c1a8cea46 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 13:34:56 +0530 Subject: [PATCH 200/312] remove terminal logs --- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 2 -- 1 file changed, 2 deletions(-) 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 050cb9d539..d56fe1dff9 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -139,13 +139,11 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const onchangeCopilotActivate = () => { if (!props.useCopilot) { copilotActivate(props.config, props.useCopilot, dispatch) - props.plugin.call('terminal', 'log', { type: 'typewriterlog', value: `Solidity copilot not activated!` }) return } const startCopilot = async () => { copilotActivate(props.config, props.useCopilot, dispatch) - props.plugin.call('terminal', 'log', { type: 'typewriterlog', value: `Solidity copilot activated!` }) } startCopilot() From 59e30c9810c8e259a8b85d1e5c2daf28bd912005 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 14:27:57 +0530 Subject: [PATCH 201/312] fix e2e text not visible on screen --- apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts index 91ef7d6a4f..6503ade008 100644 --- a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts +++ b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts @@ -246,7 +246,6 @@ module.exports = { .waitForElementPresent('#solidityUnittestsOutput div[class^="testPass"]', 60000) .waitForElementContainsText('#solidityUnittestsOutput', 'tests/hhLogs_test.sol', 60000) .pause(2000) - .assert.containsText('#journal > div:nth-child(4) > span', 'Before all:') .assert.containsText('#journal > div:nth-child(4) > span', 'Inside beforeAll') .assert.containsText('#journal > div:nth-child(5) > span', 'Check sender:') .assert.containsText('#journal > div:nth-child(5) > span', 'msg.sender is 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4') From 2fd9537f3381c9ffaeb1556dc20a89b9f078f3d0 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 19:14:55 +0530 Subject: [PATCH 202/312] fix e2e --- .../src/tests/solidityUnittests.test.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts index 6503ade008..8fd8ff3b68 100644 --- a/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts +++ b/apps/remix-ide-e2e/src/tests/solidityUnittests.test.ts @@ -246,12 +246,13 @@ module.exports = { .waitForElementPresent('#solidityUnittestsOutput div[class^="testPass"]', 60000) .waitForElementContainsText('#solidityUnittestsOutput', 'tests/hhLogs_test.sol', 60000) .pause(2000) - .assert.containsText('#journal > div:nth-child(4) > span', 'Inside beforeAll') - .assert.containsText('#journal > div:nth-child(5) > span', 'Check sender:') - .assert.containsText('#journal > div:nth-child(5) > span', 'msg.sender is 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4') - .assert.containsText('#journal > div:nth-child(6) > span', 'Check int logs:') - .assert.containsText('#journal > div:nth-child(6) > span', '10 20') - .assert.containsText('#journal > div:nth-child(6) > span', 'Number is 25') + .assert.textContains('#journal > div:nth-child(3) > span', 'Before all:') + .assert.textContains('#journal > div:nth-child(3) > span', 'Inside beforeAll') + .assert.textContains('#journal > div:nth-child(4) > span', 'Check sender:') + .assert.textContains('#journal > div:nth-child(4) > span', 'msg.sender is 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4') + .assert.textContains('#journal > div:nth-child(5) > span', 'Check int logs:') + .assert.textContains('#journal > div:nth-child(5) > span', '10 20') + .assert.textContains('#journal > div:nth-child(5) > span', 'Number is 25') .openFile('tests/hhLogs_test.sol') .removeFile('tests/hhLogs_test.sol', 'workspace_new') }, From 9ed694fb33346502cea6ec5cb048dcb940dc9266 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 10 Sep 2024 14:16:50 +0530 Subject: [PATCH 203/312] update text --- apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json | 6 +++--- libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json index 6541753d86..b3f77de301 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json +++ b/apps/remix-ide/src/app/tabs/locales/en/remixUiTabs.json @@ -4,10 +4,10 @@ "remixUiTabs.tooltipText3": "Select .sol or .yul file to compile OR a .ts or .js file to run", "remixUiTabs.tooltipText4": "To explain a contract, choose a .sol file", "remixUiTabs.tooltipText5": "Explain the contract(s) in current file [BETA]", - "remixUiTabs.tooltipText6": "Enable Remix AI Copilot [BETA]", - "remixUiTabs.tooltipText7": "Disable Remix AI Copilot [BETA]", + "remixUiTabs.tooltipText6": "Enable RemixAI Copilot [BETA]", + "remixUiTabs.tooltipText7": "Disable RemixAI Copilot [BETA]", "remixUiTabs.tooltipText8": "Remix AI Tools Documentation", - "remixUiTabs.tooltipTextDisabledCopilot": "To use Remix AI Copilot, choose a .sol file", + "remixUiTabs.tooltipTextDisabledCopilot": "To use RemixAI Copilot, choose a .sol file", "remixUiTabs.zoomOut": "Zoom out", "remixUiTabs.zoomIn": "Zoom in" } diff --git a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx index b6b1f68891..fc6d774ce4 100644 --- a/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx +++ b/libs/remix-ui/statusbar/src/lib/components/aiStatus.tsx @@ -31,11 +31,11 @@ export default function AIStatus(props: AIStatusProps) { }, [props.plugin.isAiActive, props.plugin.isAiActive]) return (
- {copilotActive === false ? 'Remix Copilot (disabled)' : 'Remix Copilot (enabled)'} + {copilotActive === false ? 'RemixAI Copilot (disabled)' : 'RemixAI Copilot (enabled)'}
From 537a56329b46f3f0344af40cf5dadf4b8351b838 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 29 Aug 2024 14:40:38 +0530 Subject: [PATCH 204/312] Update EVM to cancun for parser --- .../src/app/plugins/parser/services/code-parser-compiler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6f1d5f9152..073347a33b 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 @@ -161,7 +161,7 @@ export default class CodeParserCompiler { "*": ["evm.gasEstimates"] } }, - "evmVersion": state.evmVersion && state.evmVersion.toString() || "berlin", + "evmVersion": state.evmVersion && state.evmVersion.toString() || "cancun", } } From 2b504425011440a5ac2b446136c6e2b3f5f81d26 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 2 Sep 2024 15:02:21 +0200 Subject: [PATCH 205/312] should clear transient storage after tx execution --- apps/remix-ide-e2e/src/tests/eip1153.test.ts | 36 +++++++++++++++++++- libs/remix-lib/src/execution/txRunnerVM.ts | 1 + 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/eip1153.test.ts b/apps/remix-ide-e2e/src/tests/eip1153.test.ts index 1f8598c49c..acecf5a013 100644 --- a/apps/remix-ide-e2e/src/tests/eip1153.test.ts +++ b/apps/remix-ide-e2e/src/tests/eip1153.test.ts @@ -31,7 +31,22 @@ module.exports = { 1: 'uint256: out2 15' } }) - .end() + }, + + 'Should clear transient storage after tx execution' : function (browser: NightwatchBrowser) { + browser.addFile('clear_transient.sol', { content: clearTransient }) + .clickLaunchIcon('solidity') + .verifyContracts(['ClearTransient']) + .clickLaunchIcon('udapp') + .createContract('') + .clickInstance(0) + .clickFunction('get - call') + .testFunction('last', + { + 'decoded output': { + 0: 'uint256: 0' + } + }) } } @@ -49,3 +64,22 @@ contract TestTransientStorage { } } }` + +const clearTransient = ` +// SPDX-License-Identifier: none +pragma solidity 0.8.26; +import "hardhat/console.sol"; + +contract ClearTransient { + uint p; + constructor() { + uint256 value; + assembly { value := tload(hex"1234") } + p = value; + assembly { tstore(hex"1234", 10) } + } + + function get () public view returns (uint) { + return p; + } +}` diff --git a/libs/remix-lib/src/execution/txRunnerVM.ts b/libs/remix-lib/src/execution/txRunnerVM.ts index 6c4c40b27b..9447a8157b 100644 --- a/libs/remix-lib/src/execution/txRunnerVM.ts +++ b/libs/remix-lib/src/execution/txRunnerVM.ts @@ -146,6 +146,7 @@ export class TxRunnerVM { const root = await this.getVMObject().stateManager.getStateRoot() this.runBlockInVm(tx, block, async (err, result) => { await this.getVMObject().stateManager.setStateRoot(root) + this.getVMObject().vm.evm.transientStorage.clear() callback(err, result) }) } else { From 2eae6b8ff26d524618fd972bc9a458e8f724eee1 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 4 Sep 2024 10:34:21 +0200 Subject: [PATCH 206/312] fix test --- apps/remix-ide-e2e/src/tests/eip1153.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/eip1153.test.ts b/apps/remix-ide-e2e/src/tests/eip1153.test.ts index acecf5a013..a0a440af46 100644 --- a/apps/remix-ide-e2e/src/tests/eip1153.test.ts +++ b/apps/remix-ide-e2e/src/tests/eip1153.test.ts @@ -33,9 +33,8 @@ module.exports = { }) }, - 'Should clear transient storage after tx execution' : function (browser: NightwatchBrowser) { + 'Should clear transient storage after tx execution #group1' : function (browser: NightwatchBrowser) { browser.addFile('clear_transient.sol', { content: clearTransient }) - .clickLaunchIcon('solidity') .verifyContracts(['ClearTransient']) .clickLaunchIcon('udapp') .createContract('') From 66644a5fee57dbc84927b0cc7b0ab304911a304c Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 20:56:28 +0530 Subject: [PATCH 207/312] update ethereumjs deps --- libs/remix-analyzer/package.json | 2 +- libs/remix-astwalker/package.json | 2 +- libs/remix-debug/package.json | 2 +- libs/remix-lib/src/execution/txRunnerVM.ts | 1 - libs/remix-simulator/package.json | 2 +- libs/remix-solidity/package.json | 2 +- libs/remix-tests/package.json | 6 +++--- package.json | 8 ++++---- yarn.lock | 18 +++++++++--------- 9 files changed, 21 insertions(+), 22 deletions(-) diff --git a/libs/remix-analyzer/package.json b/libs/remix-analyzer/package.json index bdb6ca7a35..3e39770dc4 100644 --- a/libs/remix-analyzer/package.json +++ b/libs/remix-analyzer/package.json @@ -24,7 +24,7 @@ "@ethereumjs/block": "5.3.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@remix-project/remix-astwalker": "^0.0.86", "@remix-project/remix-lib": "^0.5.63", "async": "^2.6.2", diff --git a/libs/remix-astwalker/package.json b/libs/remix-astwalker/package.json index dfc1642738..9780d528f9 100644 --- a/libs/remix-astwalker/package.json +++ b/libs/remix-astwalker/package.json @@ -36,7 +36,7 @@ "@ethereumjs/block": "5.3.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@remix-project/remix-lib": "^0.5.63", "@types/tape": "^4.2.33", "async": "^2.6.2", diff --git a/libs/remix-debug/package.json b/libs/remix-debug/package.json index 3ac26c3cf7..46d64c7e8f 100644 --- a/libs/remix-debug/package.json +++ b/libs/remix-debug/package.json @@ -25,7 +25,7 @@ "@ethereumjs/common": "4.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@remix-project/remix-astwalker": "^0.0.86", "@remix-project/remix-lib": "^0.5.63", "@remix-project/remix-simulator": "^0.2.56", diff --git a/libs/remix-lib/src/execution/txRunnerVM.ts b/libs/remix-lib/src/execution/txRunnerVM.ts index 9447a8157b..6c4c40b27b 100644 --- a/libs/remix-lib/src/execution/txRunnerVM.ts +++ b/libs/remix-lib/src/execution/txRunnerVM.ts @@ -146,7 +146,6 @@ export class TxRunnerVM { const root = await this.getVMObject().stateManager.getStateRoot() this.runBlockInVm(tx, block, async (err, result) => { await this.getVMObject().stateManager.setStateRoot(root) - this.getVMObject().vm.evm.transientStorage.clear() callback(err, result) }) } else { diff --git a/libs/remix-simulator/package.json b/libs/remix-simulator/package.json index fce9106de5..9095287fd4 100644 --- a/libs/remix-simulator/package.json +++ b/libs/remix-simulator/package.json @@ -21,7 +21,7 @@ "@ethereumjs/common": "4.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@metamask/eth-sig-util": "^7.0.2", "@remix-project/remix-lib": "^0.5.63", "ansi-gray": "^0.1.1", diff --git a/libs/remix-solidity/package.json b/libs/remix-solidity/package.json index b95adccd1a..00d89faf89 100644 --- a/libs/remix-solidity/package.json +++ b/libs/remix-solidity/package.json @@ -18,7 +18,7 @@ "@ethereumjs/block": "5.3.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@remix-project/remix-lib": "^0.5.63", "async": "^2.6.2", "eslint-scope": "^5.0.0", diff --git a/libs/remix-tests/package.json b/libs/remix-tests/package.json index 5b5dc898d6..b4942a7a40 100644 --- a/libs/remix-tests/package.json +++ b/libs/remix-tests/package.json @@ -40,7 +40,7 @@ "@ethereumjs/common": "4.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@remix-project/remix-lib": "^0.5.63", "@remix-project/remix-simulator": "^0.2.56", "@remix-project/remix-solidity": "^0.5.42", @@ -81,11 +81,11 @@ "@ethereumjs/blockchain": "7.3.0", "@ethereumjs/block": "5.3.0", "@ethereumjs/common": "4.4.0", - "@ethereumjs/evm": "3.1.0", + "@ethereumjs/evm": "3.1.1", "@ethereumjs/statemanager": "2.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@ethereumjs/trie": "6.2.1" }, "typings": "src/index.d.ts", diff --git a/package.json b/package.json index 7db9ea7eb2..a34b90e2b6 100644 --- a/package.json +++ b/package.json @@ -92,11 +92,11 @@ "@erebos/bzz-node": "^0.13.0", "@ethereumjs/block": "5.3.0", "@ethereumjs/common": "4.4.0", - "@ethereumjs/evm": "3.1.0", + "@ethereumjs/evm": "3.1.1", "@ethereumjs/statemanager": "2.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@ethersphere/bee-js": "^3.2.0", "@floating-ui/react": "^0.26.15", "@fortawesome/fontawesome-svg-core": "^6.5.1", @@ -383,11 +383,11 @@ "@ethereumjs/blockchain": "7.3.0", "@ethereumjs/block": "5.3.0", "@ethereumjs/common": "4.4.0", - "@ethereumjs/evm": "3.1.0", + "@ethereumjs/evm": "3.1.1", "@ethereumjs/statemanager": "2.4.0", "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", - "@ethereumjs/vm": "8.1.0", + "@ethereumjs/vm": "8.1.1", "@ethereumjs/trie": "6.2.1" } } diff --git a/yarn.lock b/yarn.lock index 51c9f38f46..cdf1016ec4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2835,10 +2835,10 @@ bigint-crypto-utils "^3.2.2" ethereum-cryptography "^2.2.1" -"@ethereumjs/evm@3.1.0", "@ethereumjs/evm@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/evm/-/evm-3.1.0.tgz#d036a7986d2a4914a82324ee4fbc2ae7a503e515" - integrity sha512-m6L8wPDpNDqCBeiCQDwoKtKMcFjcvctuZs6XHaVnFocMwsAsN9Wg89nAT7Gs6ic2kDUgVGhtGTvEAaH51B70ew== +"@ethereumjs/evm@3.1.1", "@ethereumjs/evm@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/evm/-/evm-3.1.1.tgz#f593ea99e564ba6d916d81a833bb9af5713caf34" + integrity sha512-JbDXtIn0PPZFU2oqVngje0YvW/JuNa6Y+kIYp1MCh5pn9NRplR8FkBbvb991fVSSo6AzuFMHJxSwgVl+OksnvQ== dependencies: "@ethereumjs/common" "^4.4.0" "@ethereumjs/statemanager" "^2.4.0" @@ -2914,15 +2914,15 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethereumjs/vm@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-8.1.0.tgz#9f795a7802b0ccdedd4ca45193a3895eafe51ef9" - integrity sha512-CjQ57Kl2JYMyX8UNUW2aWFWJnb7M5a8gUEtBMZ+A3K+wNNTALVPOKx9eNCiSwBn1bijB05FyvcNMnHEDwqSuiA== +"@ethereumjs/vm@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-8.1.1.tgz#6b58f298ee6f665d4ac412cd0d3351bb9c0ceea3" + integrity sha512-h9gIN/maMKXltM4VxZ9ac581PPUUObnFVBniLuu9vJgGTELdnwqxLwJVxSfho/Bhk56YyvKBYf1RpHwoLZZ6xw== dependencies: "@ethereumjs/block" "^5.3.0" "@ethereumjs/blockchain" "^7.3.0" "@ethereumjs/common" "^4.4.0" - "@ethereumjs/evm" "^3.1.0" + "@ethereumjs/evm" "^3.1.1" "@ethereumjs/rlp" "^5.0.2" "@ethereumjs/statemanager" "^2.4.0" "@ethereumjs/trie" "^6.2.1" From 8da7892c3a2efc49c4bd49e469f852575f6c0128 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 9 Sep 2024 21:19:35 +0530 Subject: [PATCH 208/312] fix instance id --- apps/remix-ide-e2e/src/tests/eip1153.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/eip1153.test.ts b/apps/remix-ide-e2e/src/tests/eip1153.test.ts index a0a440af46..9a5fae289c 100644 --- a/apps/remix-ide-e2e/src/tests/eip1153.test.ts +++ b/apps/remix-ide-e2e/src/tests/eip1153.test.ts @@ -38,7 +38,7 @@ module.exports = { .verifyContracts(['ClearTransient']) .clickLaunchIcon('udapp') .createContract('') - .clickInstance(0) + .clickInstance(1) .clickFunction('get - call') .testFunction('last', { From 27590dd40d139240b132da31443c07702715cce7 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 10 Sep 2024 13:41:07 +0530 Subject: [PATCH 209/312] fix e2e --- apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts index 2fb98cc339..2b130875e3 100644 --- a/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts +++ b/apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts @@ -90,6 +90,8 @@ module.exports = { browser .clickLaunchIcon('solidity') .setSolidityCompilerVersion('soljson-v0.8.20+commit.a1b79de6.js') + .click('*[data-id="scConfigExpander"]') + .setValue('#evmVersionSelector', 'berlin') // set target EVM for parser to berlin .addFile('contracts/mytoken.sol', { content: myToken }).useXpath().waitForElementVisible("//*[@class='view-line' and contains(.,'gas')]") From f91ecff661d29b54aa8af4af60cbb660c01cace2 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 3 Sep 2024 11:35:43 +0200 Subject: [PATCH 210/312] update web3.js import --- apps/etherscan/src/app/views/VerifyView.tsx | 2 +- apps/remix-ide/src/app/providers/injected-custom-provider.tsx | 2 +- .../src/app/providers/injected-ephemery-testnet-provider.tsx | 2 +- apps/remix-ide/src/app/tabs/debugger-tab.js | 2 +- apps/remix-ide/src/blockchain/execution-context.js | 2 +- apps/remix-ide/src/blockchain/providers/injected.ts | 2 +- apps/remix-ide/src/blockchain/providers/node.ts | 2 +- apps/remix-ide/src/blockchain/providers/vm.ts | 2 +- libs/ghaction-helper/src/methods.ts | 2 +- libs/remix-debug/src/cmdline/index.ts | 2 +- libs/remix-debug/src/init.ts | 2 +- libs/remix-lib/src/execution/txRunnerWeb3.ts | 2 +- libs/remix-lib/src/init.ts | 2 +- libs/remix-simulator/test/accounts.ts | 2 +- libs/remix-simulator/test/blocks.ts | 2 +- libs/remix-simulator/test/events.ts | 2 +- libs/remix-simulator/test/misc.ts | 2 +- libs/remix-simulator/test/transactions.ts | 2 +- libs/remix-tests/src/deployer.ts | 2 +- libs/remix-tests/src/run.ts | 2 +- libs/remix-tests/src/runTestFiles.ts | 2 +- libs/remix-tests/src/runTestSources.ts | 2 +- libs/remix-tests/src/testRunner.ts | 2 +- libs/remix-tests/tests/testRunner.spec.ts | 2 +- libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts | 2 +- libs/remix-ui/run-tab/src/lib/actions/deploy.ts | 2 +- libs/remix-ui/run-tab/src/lib/actions/events.ts | 2 +- libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts | 2 +- .../src/templates/gnosisSafeMultisig/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc1155/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc20/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc721/scripts/web3-lib.ts | 2 +- .../src/templates/playground/scripts/web3-lib.ts | 2 +- .../src/templates/remixDefault/scripts/web3-lib.ts | 2 +- .../src/templates/zeroxErc20/scripts/web3-lib.ts | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/apps/etherscan/src/app/views/VerifyView.tsx b/apps/etherscan/src/app/views/VerifyView.tsx index f41e9203af..e8f4011072 100644 --- a/apps/etherscan/src/app/views/VerifyView.tsx +++ b/apps/etherscan/src/app/views/VerifyView.tsx @@ -1,5 +1,5 @@ import React, {useEffect, useRef, useState} from 'react' -import Web3 from 'web3' +import { Web3 } from 'web3' import {PluginClient} from '@remixproject/plugin' import {CustomTooltip} from '@remix-ui/helper' diff --git a/apps/remix-ide/src/app/providers/injected-custom-provider.tsx b/apps/remix-ide/src/app/providers/injected-custom-provider.tsx index bb41eeac4a..a00604b3d9 100644 --- a/apps/remix-ide/src/app/providers/injected-custom-provider.tsx +++ b/apps/remix-ide/src/app/providers/injected-custom-provider.tsx @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { InjectedProviderDefault } from './injected-provider-default' export class InjectedCustomProvider extends InjectedProviderDefault { diff --git a/apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx b/apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx index dd5e8266b1..4b25986ba5 100644 --- a/apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx +++ b/apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx @@ -1,6 +1,6 @@ import * as packageJson from '../../../../../package.json' import { InjectedCustomProvider } from './injected-custom-provider' -import Web3 from 'web3' +import { Web3 } from 'web3' const profile = { name: 'injected-ephemery-testnet-provider', diff --git a/apps/remix-ide/src/app/tabs/debugger-tab.js b/apps/remix-ide/src/app/tabs/debugger-tab.js index 9c99051ef8..9560713ffe 100644 --- a/apps/remix-ide/src/app/tabs/debugger-tab.js +++ b/apps/remix-ide/src/app/tabs/debugger-tab.js @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { DebuggerUI } from '@remix-ui/debugger-ui' // eslint-disable-line import { DebuggerApiMixin } from '@remix-ui/debugger-ui' import { ViewPlugin } from '@remixproject/engine-web' diff --git a/apps/remix-ide/src/blockchain/execution-context.js b/apps/remix-ide/src/blockchain/execution-context.js index fd127fb20c..cf82b96ad8 100644 --- a/apps/remix-ide/src/blockchain/execution-context.js +++ b/apps/remix-ide/src/blockchain/execution-context.js @@ -1,6 +1,6 @@ /* global ethereum */ 'use strict' -import Web3 from 'web3' +import { Web3 } from 'web3' import { execution } from '@remix-project/remix-lib' import EventManager from '../lib/events' import { bytesToHex } from '@ethereumjs/util' diff --git a/apps/remix-ide/src/blockchain/providers/injected.ts b/apps/remix-ide/src/blockchain/providers/injected.ts index 8ef55f8093..9e10ebc68d 100644 --- a/apps/remix-ide/src/blockchain/providers/injected.ts +++ b/apps/remix-ide/src/blockchain/providers/injected.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { hashPersonalMessage, isHexString, bytesToHex } from '@ethereumjs/util' import { ExecutionContext } from '../execution-context' diff --git a/apps/remix-ide/src/blockchain/providers/node.ts b/apps/remix-ide/src/blockchain/providers/node.ts index 9c7c538307..6c316e05ff 100644 --- a/apps/remix-ide/src/blockchain/providers/node.ts +++ b/apps/remix-ide/src/blockchain/providers/node.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { hashPersonalMessage, isHexString, bytesToHex } from '@ethereumjs/util' import { Personal } from 'web3-eth-personal' import { ExecutionContext } from '../execution-context' diff --git a/apps/remix-ide/src/blockchain/providers/vm.ts b/apps/remix-ide/src/blockchain/providers/vm.ts index c2e6448da5..81f74137f9 100644 --- a/apps/remix-ide/src/blockchain/providers/vm.ts +++ b/apps/remix-ide/src/blockchain/providers/vm.ts @@ -1,4 +1,4 @@ -import Web3, { FMT_BYTES, FMT_NUMBER, LegacySendAsyncProvider } from 'web3' +import { Web3, FMT_BYTES, FMT_NUMBER, LegacySendAsyncProvider } from 'web3' import { fromWei, toBigInt } from 'web3-utils' import { privateToAddress, hashPersonalMessage, isHexString, bytesToHex } from '@ethereumjs/util' import { extend, JSONRPCRequestPayload, JSONRPCResponseCallback } from '@remix-project/remix-simulator' diff --git a/libs/ghaction-helper/src/methods.ts b/libs/ghaction-helper/src/methods.ts index 793d904db8..d7ece2b6c6 100644 --- a/libs/ghaction-helper/src/methods.ts +++ b/libs/ghaction-helper/src/methods.ts @@ -3,7 +3,7 @@ import { ethers } from "ethers" import { Provider } from '@remix-project/remix-simulator' import { getArtifactsByContractName } from './artifacts-helper' import { SignerWithAddress } from './signer' -import Web3 from "web3" +import { Web3 } from "web3" const providerConfig = { fork: global.fork || null, diff --git a/libs/remix-debug/src/cmdline/index.ts b/libs/remix-debug/src/cmdline/index.ts index 2bad4a431e..da56ba00b9 100644 --- a/libs/remix-debug/src/cmdline/index.ts +++ b/libs/remix-debug/src/cmdline/index.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Debugger } from '../debugger/debugger' import { EventEmitter } from 'events' diff --git a/libs/remix-debug/src/init.ts b/libs/remix-debug/src/init.ts index 4ddafff021..8217c0808a 100644 --- a/libs/remix-debug/src/init.ts +++ b/libs/remix-debug/src/init.ts @@ -1,5 +1,5 @@ 'use strict' -import Web3, { Web3PluginBase } from 'web3' +import { Web3, Web3PluginBase } from 'web3' import { toNumber } from 'web3-utils' export function extendWeb3 (web3) { diff --git a/libs/remix-lib/src/execution/txRunnerWeb3.ts b/libs/remix-lib/src/execution/txRunnerWeb3.ts index 621e1c475a..8b353d6ba9 100644 --- a/libs/remix-lib/src/execution/txRunnerWeb3.ts +++ b/libs/remix-lib/src/execution/txRunnerWeb3.ts @@ -1,7 +1,7 @@ 'use strict' import { EventManager } from '../eventManager' import type { Transaction as InternalTransaction } from './txRunner' -import Web3 from 'web3' +import { Web3 } from 'web3' import { toBigInt, toHex } from 'web3-utils' export class TxRunnerWeb3 { diff --git a/libs/remix-lib/src/init.ts b/libs/remix-lib/src/init.ts index d22c2392ef..128702cd01 100644 --- a/libs/remix-lib/src/init.ts +++ b/libs/remix-lib/src/init.ts @@ -1,5 +1,5 @@ 'use strict' -import Web3, { Web3PluginBase } from 'web3' +import { Web3, Web3PluginBase } from 'web3' import { toNumber } from 'web3-utils' export function extendWeb3 (web3) { diff --git a/libs/remix-simulator/test/accounts.ts b/libs/remix-simulator/test/accounts.ts index 17635383fc..46d1c359f6 100644 --- a/libs/remix-simulator/test/accounts.ts +++ b/libs/remix-simulator/test/accounts.ts @@ -1,5 +1,5 @@ /* global describe, before, it */ -import Web3, { FMT_BYTES, FMT_NUMBER } from 'web3' +import { Web3, FMT_BYTES, FMT_NUMBER } from 'web3' import { Provider } from '../src/index' const web3 = new Web3() import * as assert from 'assert' diff --git a/libs/remix-simulator/test/blocks.ts b/libs/remix-simulator/test/blocks.ts index 7923103edd..e0eb39d6c9 100644 --- a/libs/remix-simulator/test/blocks.ts +++ b/libs/remix-simulator/test/blocks.ts @@ -1,5 +1,5 @@ /* global describe, before, it */ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Provider } from '../src/index' const web3 = new Web3() import * as assert from 'assert' diff --git a/libs/remix-simulator/test/events.ts b/libs/remix-simulator/test/events.ts index 7d8fad7e9c..cd465caaf3 100644 --- a/libs/remix-simulator/test/events.ts +++ b/libs/remix-simulator/test/events.ts @@ -1,5 +1,5 @@ /* global describe, before, it */ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Provider } from '../src/index' const web3 = new Web3() import * as assert from 'assert' diff --git a/libs/remix-simulator/test/misc.ts b/libs/remix-simulator/test/misc.ts index 673e98a35b..dbea658c96 100644 --- a/libs/remix-simulator/test/misc.ts +++ b/libs/remix-simulator/test/misc.ts @@ -1,5 +1,5 @@ /* global describe, before, it */ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Provider } from '../src/index' const web3 = new Web3() import * as assert from 'assert' diff --git a/libs/remix-simulator/test/transactions.ts b/libs/remix-simulator/test/transactions.ts index a908e797ac..2fa2da4b4f 100644 --- a/libs/remix-simulator/test/transactions.ts +++ b/libs/remix-simulator/test/transactions.ts @@ -1,5 +1,5 @@ /* global describe, before, it */ -import Web3 from 'web3' +import { Web3 } from 'web3' import { LegacyTransaction, FeeMarketEIP1559Transaction } from '@ethereumjs/tx' import { Provider } from '../src/index' const web3 = new Web3() diff --git a/libs/remix-tests/src/deployer.ts b/libs/remix-tests/src/deployer.ts index 991847a051..0094784e0a 100644 --- a/libs/remix-tests/src/deployer.ts +++ b/libs/remix-tests/src/deployer.ts @@ -1,6 +1,6 @@ import async from 'async' import { execution } from '@remix-project/remix-lib' -import Web3, { FMT_BYTES, FMT_NUMBER } from 'web3' +import { Web3, FMT_BYTES, FMT_NUMBER } from 'web3' import { compilationInterface } from './types' /** diff --git a/libs/remix-tests/src/run.ts b/libs/remix-tests/src/run.ts index 83fc6c1dc9..b844bb456a 100644 --- a/libs/remix-tests/src/run.ts +++ b/libs/remix-tests/src/run.ts @@ -1,5 +1,5 @@ import { Command } from 'commander'; -import Web3 from 'web3' +import { Web3 } from 'web3' import path from 'path' import axios, { AxiosResponse } from 'axios' import { runTestFiles } from './runTestFiles' diff --git a/libs/remix-tests/src/runTestFiles.ts b/libs/remix-tests/src/runTestFiles.ts index 3ac058857b..9b1c2bde00 100644 --- a/libs/remix-tests/src/runTestFiles.ts +++ b/libs/remix-tests/src/runTestFiles.ts @@ -3,7 +3,7 @@ import fs from './fileSystem' import { runTest } from './testRunner' import { TestResultInterface, ResultsInterface, CompilerConfiguration, compilationInterface, ASTInterface, Options, AstNode } from './types' import colors from 'colors' -import Web3 from 'web3' +import { Web3 } from 'web3' import { format } from 'util' import { compileFileOrFiles } from './compiler' import { deployAll } from './deployer' diff --git a/libs/remix-tests/src/runTestSources.ts b/libs/remix-tests/src/runTestSources.ts index 7b97b2851c..3464ddb037 100644 --- a/libs/remix-tests/src/runTestSources.ts +++ b/libs/remix-tests/src/runTestSources.ts @@ -2,7 +2,7 @@ import async, { ErrorCallback } from 'async' import { compileContractSources, writeTestAccountsContract } from './compiler' import { deployAll } from './deployer' import { runTest } from './testRunner' -import Web3 from 'web3' +import { Web3 } from 'web3' import { EventEmitter } from 'events' import { Provider, extend } from '@remix-project/remix-simulator' import { diff --git a/libs/remix-tests/src/testRunner.ts b/libs/remix-tests/src/testRunner.ts index 6dcdf239b0..b9e1c5c2d5 100644 --- a/libs/remix-tests/src/testRunner.ts +++ b/libs/remix-tests/src/testRunner.ts @@ -1,6 +1,6 @@ import async from 'async' import * as changeCase from 'change-case' -import Web3 from 'web3' +import { Web3 } from 'web3' import assertionEvents from './assertionEvents' import { RunListInterface, TestCbInterface, TestResultInterface, ResultCbInterface, diff --git a/libs/remix-tests/tests/testRunner.spec.ts b/libs/remix-tests/tests/testRunner.spec.ts index 3da24b5acd..c5efe8452e 100644 --- a/libs/remix-tests/tests/testRunner.spec.ts +++ b/libs/remix-tests/tests/testRunner.spec.ts @@ -1,5 +1,5 @@ import * as async from 'async' -import Web3 from 'web3'; +import { Web3 } from 'web3'; import * as assert from 'assert' import { Provider, extend } from '@remix-project/remix-simulator' 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 0f444a7464..45db6dfbf1 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { init , traceHelper, TransactionDebugger as Debugger } from '@remix-project/remix-debug' import { CompilerAbstract } from '@remix-project/remix-solidity' import { lineText } from '@remix-ui/editor' 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 a1375b473d..8103a4e832 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/deploy.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/deploy.ts @@ -9,7 +9,7 @@ import { DeployMode, MainnetPrompt } from "../types" import { displayNotification, fetchProxyDeploymentsSuccess, setDecodedResponse, updateInstancesBalance } from "./payload" import { addInstance } from "./actions" import { addressToString, logBuilder } from "@remix-ui/helper" -import Web3 from "web3" +import { Web3 } from "web3" declare global { interface Window { diff --git a/libs/remix-ui/run-tab/src/lib/actions/events.ts b/libs/remix-ui/run-tab/src/lib/actions/events.ts index 41deac6c6f..8d13ac5776 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/events.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/events.ts @@ -6,7 +6,7 @@ import { addDeployOption, clearAllInstances, clearAllPinnedInstances, clearRecor import { updateInstanceBalance } from './deploy' import { CompilerAbstract } from '@remix-project/remix-solidity' import BN from 'bn.js' -import Web3 from 'web3' +import { Web3 } from 'web3' import { Plugin } from "@remixproject/engine" import { getNetworkProxyAddresses } from "./deploy" import { shortenAddress } from "@remix-ui/helper" diff --git a/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts b/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts index dd7c244c6d..83d3df2d55 100644 --- a/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts +++ b/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' export class ExecutionContext { event: any; 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 cbd4f48489..898e7c72d4 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 32369998ad..cdc9b31982 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 cbd4f48489..898e7c72d4 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 cbd4f48489..898e7c72d4 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** diff --git a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts index cbd4f48489..898e7c72d4 100644 --- a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 cbd4f48489..898e7c72d4 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 cbd4f48489..898e7c72d4 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 @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** From 4ed2409f0ebc1962e8603385ecb4d07223e5bd58 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Tue, 10 Sep 2024 20:08:24 +0530 Subject: [PATCH 211/312] revert change for templates --- .../src/templates/gnosisSafeMultisig/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc1155/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc20/scripts/web3-lib.ts | 2 +- .../src/templates/ozerc721/scripts/web3-lib.ts | 2 +- .../src/templates/playground/scripts/web3-lib.ts | 2 +- .../src/templates/remixDefault/scripts/web3-lib.ts | 2 +- .../src/templates/zeroxErc20/scripts/web3-lib.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) 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 898e7c72d4..cbd4f48489 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 cdc9b31982..32369998ad 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 898e7c72d4..cbd4f48489 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 898e7c72d4..cbd4f48489 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** diff --git a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts index 898e7c72d4..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 898e7c72d4..cbd4f48489 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** 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 898e7c72d4..cbd4f48489 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 @@ -1,4 +1,4 @@ -import { Web3 } from 'web3' +import Web3 from 'web3' import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' /** From e253a27233062a0c92cb9e2579c9396e00dc962d Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 11 Sep 2024 10:06:26 +0100 Subject: [PATCH 212/312] fix label for hamburger menu --- apps/remix-ide/src/app/tabs/locales/en/filePanel.json | 1 + .../workspace/src/lib/components/workspace-hamburger-item.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index b776e76866..549b7d00c0 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -2,6 +2,7 @@ "filePanel.displayName": "File explorer", "filePanel.workspace": "WORKSPACES", "filePanel.create": "Create", + "filePanel.createLabel": "Create using Template", "filePanel.createBlank":"Create Blank", "filePanel.create.desktop": "Create Project", "filePanel.clone": "Clone", 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 25622b3c9a..f5df61691a 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 @@ -32,7 +32,7 @@ export function HamburgerMenuItem(props: HamburgerMenuItemProps) { > - + {props.kind === 'create' ? :}
From e5379b120967b9bf22635a8215239a17feba67bc Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 11 Sep 2024 16:28:01 +0100 Subject: [PATCH 213/312] blank workspace counter starts from 1 --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8db36e36a0..2e035ac018 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -336,7 +336,7 @@ export function Workspace() { ) } - const [counter, setCounter] = useState(0) + const [counter, setCounter] = useState(1) const createBlankWorkspace = async () => { const username = await global.plugin.call('settings', 'get', 'settings/github-user-name') const email = await global.plugin.call('settings', 'get', 'settings/github-email') From 02b1677b15dd08b6833f746e495899f6c420b159 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 11 Sep 2024 17:43:14 +0200 Subject: [PATCH 214/312] fix list.json --- apps/remix-ide/ci/downloadsoljson.sh | 29 +++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/remix-ide/ci/downloadsoljson.sh b/apps/remix-ide/ci/downloadsoljson.sh index 4d3d93932f..202d3e69b2 100644 --- a/apps/remix-ide/ci/downloadsoljson.sh +++ b/apps/remix-ide/ci/downloadsoljson.sh @@ -4,7 +4,7 @@ echo "Downloading specified soljson.js version based on defaultVersion in packag set -e -# Check if curl and jq are installed +# Check if curl is installed if ! command -v curl &> /dev/null; then echo "curl could not be found" exit 1 @@ -14,32 +14,35 @@ fi defaultVersion=$(grep '"defaultVersion"' package.json | awk -F '"' '{print $4}') echo "Specified version from package.json: $defaultVersion" -# Download the list.json file containing available versions -curl -s https://binaries.soliditylang.org/wasm/list.json > list.json +# Fetch the list.json from the Solidity binaries +listJson=$(curl -s --connect-timeout 5 --max-time 5 https://binaries.soliditylang.org/wasm/list.json) + +# Check if the download was successful +if [ -z "$listJson" ]; then + echo "Failed to fetch version list. No internet connection or the connection is too slow." + exit 0 # Silently exit +fi + +# Check if the specified version exists in the list +check=$(echo "$listJson" | grep "\"$defaultVersion\"") -# Use jq to extract the path for the specified version from the builds array -check=$(grep "\"$defaultVersion\"" list.json) if [ -z "$check" ]; then echo "The specified version $defaultVersion could not be found in the list" exit 1 fi - echo "Path for the specified version: $defaultVersion" fullPath="https://binaries.soliditylang.org/bin/$defaultVersion" echo "Download fullPath: $fullPath" - # Ensure the target directory exists if [ ! -d "./apps/remix-ide/src/assets/js/soljson" ]; then mkdir -p ./apps/remix-ide/src/assets/js/soljson fi -# Download the file to ./apps/remix-ide/src/assets/js/soljson.js -echo "Downloading soljson.js from "$fullPath" to ./apps/remix-ide/src/assets/js/soljson.js" +# Download the soljson.js file to ./apps/remix-ide/src/assets/js/soljson.js +echo "Downloading soljson.js from $fullPath to ./apps/remix-ide/src/assets/js/soljson.js" curl -s "$fullPath" > ./apps/remix-ide/src/assets/js/soljson.js # Copy the downloaded soljson.js to the specific version directory -cp ./apps/remix-ide/src/assets/js/soljson.js "./apps/remix-ide/src/assets/js/soljson/$path" -cp list.json ./apps/remix-ide/src/assets/list.json +cp ./apps/remix-ide/src/assets/js/soljson.js "./apps/remix-ide/src/assets/js/soljson/$defaultVersion.js" -# Clean up by removing the list.json -rm list.json +echo "Download and setup of soljson.js complete" From 2e10a0c0273e13b697b10d8a78063a7adc5adf3d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 11 Sep 2024 17:51:52 +0200 Subject: [PATCH 215/312] untrack and fix copy list --- apps/remix-ide/src/assets/list.json | 1123 --------------------------- 1 file changed, 1123 deletions(-) delete mode 100644 apps/remix-ide/src/assets/list.json diff --git a/apps/remix-ide/src/assets/list.json b/apps/remix-ide/src/assets/list.json deleted file mode 100644 index 6a55fff4f7..0000000000 --- a/apps/remix-ide/src/assets/list.json +++ /dev/null @@ -1,1123 +0,0 @@ -{ - "builds": [ - { - "path": "soljson-v0.3.6+commit.3fc68da5.js", - "version": "0.3.6", - "build": "commit.3fc68da5", - "longVersion": "0.3.6+commit.3fc68da5", - "keccak256": "0x4a1c2a6a4896edefd3a4178a6c3ed8f1de625bd7c00dd7cc5781a9f36236e7db", - "sha256": "0xee7ba01680ed3a1c1cda236189a51c1e6ff99f6dca602a580e5b16441772b50b", - "urls": [ - "dweb:/ipfs/Qme9brfZS3XhbiRbbNDKhBpgFknyD92omMmYa7XSf56bJP" - ] - }, - { - "path": "soljson-v0.4.0+commit.acd334c9.js", - "version": "0.4.0", - "build": "commit.acd334c9", - "longVersion": "0.4.0+commit.acd334c9", - "keccak256": "0x07994ad8c59c498bf44ca8e84914e27b79be964d98a9556226db377819d67387", - "sha256": "0xb83d2025e0bbc7f7f0dc9e47f5aa22eacb548b42c55add8f5f6822c105163500", - "urls": [ - "dweb:/ipfs/QmcBZ6Q2iHmrf9omvD7Jyy8kgrqyPmZFwvKWqvVDaxo1Ta" - ] - }, - { - "path": "soljson-v0.4.1+commit.4fc6fc2c.js", - "version": "0.4.1", - "build": "commit.4fc6fc2c", - "longVersion": "0.4.1+commit.4fc6fc2c", - "keccak256": "0x4c358c2e90447ad9e7c1816b5be8edde1172f67dedf16755a6c7373ede46b245", - "sha256": "0x9825565e1f199dbed6de01d27e10f83a9180300acab80f8469bf427e3cf92e96", - "urls": [ - "dweb:/ipfs/QmcEK5gvWNeHUtjsF3B6j5AXb9uNoG3aHbPrCMJDx7C8TM" - ] - }, - { - "path": "soljson-v0.4.2+commit.af6afb04.js", - "version": "0.4.2", - "build": "commit.af6afb04", - "longVersion": "0.4.2+commit.af6afb04", - "keccak256": "0xb67df5c37e8255e0de7918b6d3261f0f29e277d121bf5f414b66157a5b1070cd", - "sha256": "0x67f8a94b60278cfb80d505c47a1a5e67ec2caf20167ef85f2bdf2a80a692bd1b", - "urls": [ - "dweb:/ipfs/QmVumPvgQVFLZvDvQddcDGcdxjbVWTTzxoQvJAECBBZ6Ju" - ] - }, - { - "path": "soljson-v0.4.3+commit.2353da71.js", - "version": "0.4.3", - "build": "commit.2353da71", - "longVersion": "0.4.3+commit.2353da71", - "keccak256": "0x62a65d0a951617f022524fc844ca11d90266f64e693343a2f41107183bf364c1", - "sha256": "0x66da311056ec26c9c3fb501350ee22187c30e79c41bf2713eeff7d84479948c5", - "urls": [ - "dweb:/ipfs/QmXf2cKYJ26tXAU6A6tmUk2dn4tuX3CWNaXJVnGLuoe15y" - ] - }, - { - "path": "soljson-v0.4.4+commit.4633f3de.js", - "version": "0.4.4", - "build": "commit.4633f3de", - "longVersion": "0.4.4+commit.4633f3de", - "keccak256": "0x06afcb6dc23efb1482545b63c5e3983dded0c383ecc46c3ae319f7b868201e47", - "sha256": "0x9e386edb2ee759ad65792f7d62c10ae7edf65c5b874a5451f1e695e586b69eea", - "urls": [ - "dweb:/ipfs/QmSJFaZhpXQ2EPF2koyiTNAiiuJRykv1Q8yubhkmBhvYyu" - ] - }, - { - "path": "soljson-v0.4.5+commit.b318366e.js", - "version": "0.4.5", - "build": "commit.b318366e", - "longVersion": "0.4.5+commit.b318366e", - "keccak256": "0xcdf7c4d4c6b9331b755170fa927692019c94088f87f100d2c3c920bcc3740d0b", - "sha256": "0x7184dae0b761485a5dce66b50075e17857c5b55fe3fa71fe22d4d5acc0839741", - "urls": [ - "dweb:/ipfs/QmYJuZgMbeMiotHAFNWEXdxjTa5yi7GaV4UkgBYABomFpj" - ] - }, - { - "path": "soljson-v0.4.6+commit.2dabbdf0.js", - "version": "0.4.6", - "build": "commit.2dabbdf0", - "longVersion": "0.4.6+commit.2dabbdf0", - "keccak256": "0x52ca702b8ed4b1e6d43d8a006b3d27f6dba611bac118c523711bfd209fb1cc9d", - "sha256": "0x8db9466df3b91c52e3412cebd13176ea9fe16d3239d000828a081c34ce899337", - "urls": [ - "dweb:/ipfs/QmZZ9hNntBxJw3G7LGW3e8nXtnGxLnaSMM44K4BbLrkELs" - ] - }, - { - "path": "soljson-v0.4.7+commit.822622cf.js", - "version": "0.4.7", - "build": "commit.822622cf", - "longVersion": "0.4.7+commit.822622cf", - "keccak256": "0xcd8a6a8b2626de75ef6ff73fb724f3ad5693a8902f86e88290f048b56182e7cc", - "sha256": "0xd28a58fbc3ce56ff650d4daf3a1d8092e25cadf2a5b2769fd333b321dfc6a22d", - "urls": [ - "dweb:/ipfs/QmfHjv4nYKuv3yFpWZqBYyiYEYmkQGydQmFT5b6mJkFpWp" - ] - }, - { - "path": "soljson-v0.4.8+commit.60cc1668.js", - "version": "0.4.8", - "build": "commit.60cc1668", - "longVersion": "0.4.8+commit.60cc1668", - "keccak256": "0x43c96fc79cf288cecda12b23a17f30b1cf0427a19dc7c1c094bb461eabefe0df", - "sha256": "0x9af176f42b63eaec838999a07e80484f92f41a0fc497adefa65baf88d8fbecaf", - "urls": [ - "dweb:/ipfs/Qmf7WYJJ8y6oHr4RQ7HC4tXgFPGvsnp3Qf6TrMBdK52Y5Z" - ] - }, - { - "path": "soljson-v0.4.9+commit.364da425.js", - "version": "0.4.9", - "build": "commit.364da425", - "longVersion": "0.4.9+commit.364da425", - "keccak256": "0xbe94ff397be2a951cbeb6c9c1a60ddf531d0ce76f45d51755386b6fa42cc2e2c", - "sha256": "0x6ff1683eb76dc58c31043fea474be6da8535ec625d1cd8331a3daead84fd5564", - "urls": [ - "dweb:/ipfs/QmeBWFbK1aAxnB6muXWStZJWndrFvMJt4xfAzEJD7AqaY3" - ] - }, - { - "path": "soljson-v0.4.10+commit.f0d539ae.js", - "version": "0.4.10", - "build": "commit.f0d539ae", - "longVersion": "0.4.10+commit.f0d539ae", - "keccak256": "0x178e51ad0c6a350ec4ed6fd07675dfd4d2581ee07b14b4954dd0b0f6d8633ca5", - "sha256": "0xd70ca2f656a88a9be7a3f7d602f03b30149b3bda0d1057cfa3a3c5e3d6e07453", - "urls": [ - "dweb:/ipfs/QmarthW41sfbrdkMmCK6jicXFZDGgvALzdgzygtUqEauae" - ] - }, - { - "path": "soljson-v0.4.11+commit.68ef5810.js", - "version": "0.4.11", - "build": "commit.68ef5810", - "longVersion": "0.4.11+commit.68ef5810", - "keccak256": "0xb8c3f5654b323cea016c0cc1a4584069714cdf796489efe2496a13f8f83a0e63", - "sha256": "0xdeb3c274f8b840d657e2f9b1dba602e89f58b1bf3fd7178c48c9033310a1f006", - "urls": [ - "dweb:/ipfs/QmNUf8dTW9xANAvJmV1ho279AyWSCCvDp6bXet1QTcS2z5" - ] - }, - { - "path": "soljson-v0.4.12+commit.194ff033.js", - "version": "0.4.12", - "build": "commit.194ff033", - "longVersion": "0.4.12+commit.194ff033", - "keccak256": "0x598af6fec02a6783d6a438a6bb0f7d3012716d003f7bf6c9ac5a4d2bc911941b", - "sha256": "0xd522b307a014a32ed5815b05045c4396abc047e70c8a53c1e3ef92e14daa61c6", - "urls": [ - "dweb:/ipfs/QmWGK9FbQiNWNeqysvCNCBw3q7cR1dzpnD1EKtNija2zyK" - ] - }, - { - "path": "soljson-v0.4.13+commit.0fb4cb1a.js", - "version": "0.4.13", - "build": "commit.0fb4cb1a", - "longVersion": "0.4.13+commit.0fb4cb1a", - "keccak256": "0x93f7046d6e0ea2492ec5229936821b3b020dbe9eb2e1193953389293d64a190b", - "sha256": "0x68ace74ca809ff47b09449d4054c77907d9412f14f6003d5475b60f4fec13709", - "urls": [ - "dweb:/ipfs/Qmco9fGHM6mdaPVYqeDQ11GB3BrCbwRcEzM5XzHpAdAVWc" - ] - }, - { - "path": "soljson-v0.4.14+commit.c2215d46.js", - "version": "0.4.14", - "build": "commit.c2215d46", - "longVersion": "0.4.14+commit.c2215d46", - "keccak256": "0x7def3c264883cbe6ffbfc54894e48f9a0d2984ddbd1145eb898758d2a41d1559", - "sha256": "0x54f3dc64f2ff5a5350410f6157a537d96fb4aeec90476e90a951ddfbd1fe4bca", - "urls": [ - "dweb:/ipfs/QmXyyuEWhexuez2rzAeFjunpiAhncD1AfcXitGNHxpRWha" - ] - }, - { - "path": "soljson-v0.4.15+commit.bbb8e64f.js", - "version": "0.4.15", - "build": "commit.bbb8e64f", - "longVersion": "0.4.15+commit.bbb8e64f", - "keccak256": "0x9ffa9ee890ec483580c0b4ed72270b16e92eb0b7a8a97fb00c257f8809aa4023", - "sha256": "0x3e64525797e0b2d9abaeb022688cc02d63fc5820327e382fc6574a7de650dc97", - "urls": [ - "dweb:/ipfs/QmW2rPbEtiVAbWJxtizzDqTjwpRpXCxkpSR696g9GxAYKT" - ] - }, - { - "path": "soljson-v0.4.16+commit.d7661dd9.js", - "version": "0.4.16", - "build": "commit.d7661dd9", - "longVersion": "0.4.16+commit.d7661dd9", - "keccak256": "0xf0a6c32af3eaa2f8c6d9e6c8b90f3bac5e775c7f1c90a61c1e72b593fbb1528d", - "sha256": "0x0e6d842e941cd8b76280c59f28f6d020af1afdea8e4be9d9da677ac5dbe860c6", - "urls": [ - "dweb:/ipfs/QmSwumWbYwYe4xLcqpi38VNtw7xCgbNaUkRhiZro9EnqLt" - ] - }, - { - "path": "soljson-v0.4.17+commit.bdeb9e52.js", - "version": "0.4.17", - "build": "commit.bdeb9e52", - "longVersion": "0.4.17+commit.bdeb9e52", - "keccak256": "0xeb8c3c474b5fa792f9b1b2ac6be945c32f835ccdc059deb562da4e99a031eab9", - "sha256": "0x7fe677e8214d0486fa7164f797862fae0a0fefb7b72cf6ad8e728faa54f12b60", - "urls": [ - "dweb:/ipfs/QmbgEAtdmSoxH4cfRJXj7mVpKv9rT5Cq2YmXmAnjgsyqBC" - ] - }, - { - "path": "soljson-v0.4.18+commit.9cf6e910.js", - "version": "0.4.18", - "build": "commit.9cf6e910", - "longVersion": "0.4.18+commit.9cf6e910", - "keccak256": "0xf824e695e8e66079b4b6063622c7dd80ed056d29969c8c3babac4fb572f3dfec", - "sha256": "0x5bb50839ba5116bf31669f3de8dad72eaec298ba32a643be7d0dc2d1392c54d6", - "urls": [ - "dweb:/ipfs/Qmf5RrLbWeMykvWJbCyyThCLQ9YVmU8uWagMdSp9nNzZMc" - ] - }, - { - "path": "soljson-v0.4.19+commit.c4cbbb05.js", - "version": "0.4.19", - "build": "commit.c4cbbb05", - "longVersion": "0.4.19+commit.c4cbbb05", - "keccak256": "0xa60eadfddbfda0daebb8a1b883b89d33b800cff7ce7e12458170ea17cd5ede58", - "sha256": "0x8c2a69fbab9bdf503538028c697e09e51a7e699323ae7100c375cb35c415a819", - "urls": [ - "dweb:/ipfs/QmSZEQEGuVJ7hudg8FzfDMXKVtn5AVGKaxbhSSDXwpX73K" - ] - }, - { - "path": "soljson-v0.4.20+commit.3155dd80.js", - "version": "0.4.20", - "build": "commit.3155dd80", - "longVersion": "0.4.20+commit.3155dd80", - "keccak256": "0x6c6dfa967526b7060634474ef730761711e5be662abf5ee02dc05985abfadec9", - "sha256": "0x9852ad94048600cc5a1458b4a7ab625996844c809b314422693bdc81d953fcc0", - "urls": [ - "dweb:/ipfs/QmcsCpg6kfp7Vea4y9qPtfDXcaQJbDidb65n3t9f2MFDpR" - ] - }, - { - "path": "soljson-v0.4.21+commit.dfe3193c.js", - "version": "0.4.21", - "build": "commit.dfe3193c", - "longVersion": "0.4.21+commit.dfe3193c", - "keccak256": "0xd0f9a689670184ad874ca6a2cb40dfe57e9cf539d9330ca3f2501951478eace8", - "sha256": "0x4197bb1cb0ea7e637ed8a0e7810f1bfe32c90d0151d6f423bb3dfeef9f6777c4", - "urls": [ - "dweb:/ipfs/QmY7UN95hdfFSD1jwFANegze5eLX8PgP5BfWFH1usTB8Sw" - ] - }, - { - "path": "soljson-v0.4.22+commit.4cb486ee.js", - "version": "0.4.22", - "build": "commit.4cb486ee", - "longVersion": "0.4.22+commit.4cb486ee", - "keccak256": "0x50972c5b966188341d133aa58fbf895c54655d7bd733fb5ad58852e85f9f9444", - "sha256": "0x73458d16a3e34fc7b489d2399b3680cccfc968d01abc9f1b61e438b6fb0c24a1", - "urls": [ - "dweb:/ipfs/QmPUJNa1LYaThwLQsw6fF5DMYyDfEg57gmD5wCsazkLS8c" - ] - }, - { - "path": "soljson-v0.4.23+commit.124ca40d.js", - "version": "0.4.23", - "build": "commit.124ca40d", - "longVersion": "0.4.23+commit.124ca40d", - "keccak256": "0x74f927b4f520d8d31863996a100ebc7827f919c77f777f6d4d416c6e613a03c7", - "sha256": "0x98c350cc41f873af84a78d1e24cbc8449045ee54923af0a39440e4d84600dc50", - "urls": [ - "dweb:/ipfs/QmZbo5YkSbcenWrUDjiCvUZdQe4UrNBw9vtx9nbgcMdRAs" - ] - }, - { - "path": "soljson-v0.4.24+commit.e67f0147.js", - "version": "0.4.24", - "build": "commit.e67f0147", - "longVersion": "0.4.24+commit.e67f0147", - "keccak256": "0x4cc2bb4c8894ad4349a88f330ba74d7ea643030d3f68037d1c94c370b6a25dd7", - "sha256": "0xf83e8f7014ad6b8bc801dc3684c644e372673ed678425c35aea5d4b4fe37e922", - "urls": [ - "dweb:/ipfs/QmauztXLDUdwJitA4Uc9MQYCTttUcivR5foTZYgwt4aAeC" - ] - }, - { - "path": "soljson-v0.4.25+commit.59dbf8f1.js", - "version": "0.4.25", - "build": "commit.59dbf8f1", - "longVersion": "0.4.25+commit.59dbf8f1", - "keccak256": "0x92b9c5de10bd908527e9cfba3f04bbe637163b4a5313c5a69179ccddd5fa6685", - "sha256": "0x782a999d3e1227c86854e7e29954ee856c6ae684124b9facf09f4f1724dc4e85", - "urls": [ - "dweb:/ipfs/QmUtwmzqqCftcubfyGwAefLBQ8ffp8EFhW7HCEQfhaviFs" - ] - }, - { - "path": "soljson-v0.4.26+commit.4563c3fc.js", - "version": "0.4.26", - "build": "commit.4563c3fc", - "longVersion": "0.4.26+commit.4563c3fc", - "keccak256": "0xc9c60203789ef778b9104ae7a39e9090b3d1256b24983d49e40e7d1e3c3ed65d", - "sha256": "0x264d0d25e31cb32f4369f82ba3ad0b6a84a8a1975b10bd738123ddf947618840", - "urls": [ - "dweb:/ipfs/QmRd1uRbHRvpybQk5TQ11zyqmG4wQqHnefgvYdJ14V5D8x" - ] - }, - { - "path": "soljson-v0.5.0+commit.1d4f565a.js", - "version": "0.5.0", - "build": "commit.1d4f565a", - "longVersion": "0.5.0+commit.1d4f565a", - "keccak256": "0x2921f518cf5a0627d96e07e8c3d2b5482dbbf14d7dc6bbb055481c46d98903f3", - "sha256": "0xaf811843add541705ff65f0c20fd864bd0387116544524fa1830cf67a14af6c4", - "urls": [ - "dweb:/ipfs/QmYLhaeGbq3tFdCUC2pvtA8QdGnCbA8kn24z3C741k5TUE" - ] - }, - { - "path": "soljson-v0.5.1+commit.c8a2cb62.js", - "version": "0.5.1", - "build": "commit.c8a2cb62", - "longVersion": "0.5.1+commit.c8a2cb62", - "keccak256": "0x1980cf8a81c6bd2b371bf7d9145c819a7fb2d72e9aa462aaff0c10b4eccd595c", - "sha256": "0x69cb1300b5f72eb128604507991d9ada97180d31afde7c59aa3fa3ae9ad5200d", - "urls": [ - "dweb:/ipfs/QmPfxPYsYysRR8HFkWr47FMQ8ardmfmtrmdYc2ogT9Gfp9" - ] - }, - { - "path": "soljson-v0.5.2+commit.1df8f40c.js", - "version": "0.5.2", - "build": "commit.1df8f40c", - "longVersion": "0.5.2+commit.1df8f40c", - "keccak256": "0x3efd0585a3c00a1a2c62e590e22a69aa981d1b5148af2ebdbe1610dff93cea78", - "sha256": "0xaff4ca62ac0b03cb4b9c50f8250e2e7307b5c75fefc9847f269bd05c20367148", - "urls": [ - "dweb:/ipfs/QmaZrQSg8njYzFXH2PzwxHDLKxkBhKmYmLm43DJWnurPeJ" - ] - }, - { - "path": "soljson-v0.5.3+commit.10d17f24.js", - "version": "0.5.3", - "build": "commit.10d17f24", - "longVersion": "0.5.3+commit.10d17f24", - "keccak256": "0x9b7a39606c3c27a8619b3eb493efca512cbd26c5ab7fc95489564239aab32a50", - "sha256": "0x24b4cbc28d68bde8455c14a46b55e4f292c3c295271e09991b2176a487cb4487", - "urls": [ - "dweb:/ipfs/QmQmkd5FGiKKg8eRmo3L7Cn62nuV1M6GRDUGiq5bAx4AWx" - ] - }, - { - "path": "soljson-v0.5.4+commit.9549d8ff.js", - "version": "0.5.4", - "build": "commit.9549d8ff", - "longVersion": "0.5.4+commit.9549d8ff", - "keccak256": "0x4a6244b03de1968f0a48800e75640921d62b7602d0301093e1c5c318d1effb36", - "sha256": "0x91ed0cf4390f33174a4aaf49d1ce7cd9c72e28b95d2f9422314a29b2144b2042", - "urls": [ - "dweb:/ipfs/QmRPchg1b5ofkLnLTPuunfSMKnxbXcZyzSR4NkyJAYUTrR" - ] - }, - { - "path": "soljson-v0.5.5+commit.47a71e8f.js", - "version": "0.5.5", - "build": "commit.47a71e8f", - "longVersion": "0.5.5+commit.47a71e8f", - "keccak256": "0xf46cb35b3aefb9b3d59a1fb4c151eb23a0f0a05387b379b3e7fbed1c01c861df", - "sha256": "0xaf812445476c101ae5ef92941c79eaebf57b39d455bdfb54a6a86b4ab6ca498c", - "urls": [ - "dweb:/ipfs/QmPYEmgLWDjk7kPGovojurz7fzdGv8Ti3H66nEzRzdiGwh" - ] - }, - { - "path": "soljson-v0.5.6+commit.b259423e.js", - "version": "0.5.6", - "build": "commit.b259423e", - "longVersion": "0.5.6+commit.b259423e", - "keccak256": "0x66669372d2d958bfeb5129a387dbc3882a96e260fc12e2910a7eb148b8ea5dd6", - "sha256": "0x9ffc04d0aee2c817ae6a897b1ba5aaca2bcd860416aaddfaa4de553fc1ad6e8e", - "urls": [ - "dweb:/ipfs/QmYWL8Z3yXfCuhrprimdLhYFkjR74TjFHULxcABbUipetv" - ] - }, - { - "path": "soljson-v0.5.7+commit.6da8b019.js", - "version": "0.5.7", - "build": "commit.6da8b019", - "longVersion": "0.5.7+commit.6da8b019", - "keccak256": "0x27e324f75dd52eb180569e7a8865048253e5fcdaacc52e7c998ecaeb78dcdabd", - "sha256": "0xfd7c4e652d5891c84d93b28c90b8ac58c9253d2a3677935883a337ee96087b8f", - "urls": [ - "dweb:/ipfs/QmdEr1zJrD2UYawZzeE6zPuYiYaSHdpLtKeHYixHgRp9ko" - ] - }, - { - "path": "soljson-v0.5.8+commit.23d335f2.js", - "version": "0.5.8", - "build": "commit.23d335f2", - "longVersion": "0.5.8+commit.23d335f2", - "keccak256": "0x05c00863784c63220704197d8446ac1e277fe53c42b5264093960b7bb70b9792", - "sha256": "0x25cfdd733e9c780ab85373268fde7bfa2e4b22093af57422ca3b586c7af7cd60", - "urls": [ - "dweb:/ipfs/QmSUakgiWEffZ82RrN7hgLaemdqtLSCD7pfGAKxGhDUJxB" - ] - }, - { - "path": "soljson-v0.5.9+commit.e560f70d.js", - "version": "0.5.9", - "build": "commit.e560f70d", - "longVersion": "0.5.9+commit.e560f70d", - "keccak256": "0x7c967d9dc0fdca0db88a7cee22cf5886f65e8fa8b4a145eccd910fc81a1c949d", - "sha256": "0x7d40c6325c0aa4635babdb8913626b7c4bac6a4f41e1c383de5f398e1fc98e1b", - "urls": [ - "dweb:/ipfs/QmZcHLPfa2Dz8M3justKYyDmDnaNo4pseTgAeQbtJNYywe" - ] - }, - { - "path": "soljson-v0.5.10+commit.5a6ea5b1.js", - "version": "0.5.10", - "build": "commit.5a6ea5b1", - "longVersion": "0.5.10+commit.5a6ea5b1", - "keccak256": "0x012ae146ebdd510b31c1e44a8d60071a66cdebc77f0e743a6ebc2fe68e67d297", - "sha256": "0x566601442deff058d393359df59ed72b41e1f6a65b0aa371fab7f903c189b59d", - "urls": [ - "dweb:/ipfs/Qmej9jEnSsD2LqGnL4jgbUvHTxTwiFiHqeMpqyuPLaX1uw" - ] - }, - { - "path": "soljson-v0.5.11+commit.c082d0b4.js", - "version": "0.5.11", - "build": "commit.c082d0b4", - "longVersion": "0.5.11+commit.c082d0b4", - "keccak256": "0x4ba5500559a9ad03e4c1d3866ba9d915cdb5d7f2e326b4cb1fa0fe7bdf90dc27", - "sha256": "0x89978dcef86244b8e7af95298abe26aaf4825df819d6c556e4323dc152c988ad", - "urls": [ - "dweb:/ipfs/QmdgDj3bPSKU1xKMY8FRHj8E6z9BQefeuaVuF27RpvZMXJ" - ] - }, - { - "path": "soljson-v0.5.12+commit.7709ece9.js", - "version": "0.5.12", - "build": "commit.7709ece9", - "longVersion": "0.5.12+commit.7709ece9", - "keccak256": "0xcda83fe69ce2a319d0caa20c98b53ff36ea1886054ab3dab23fa80ede3dcdea0", - "sha256": "0x1784f89fcfffccddaa94273a58e452682f61dea05d142406775f099c6ef5d61f", - "urls": [ - "dweb:/ipfs/QmPA1Uf4iwkr2ouguzxxFepVxaRg36XFXxiwqYUuwafQzQ" - ] - }, - { - "path": "soljson-v0.5.13+commit.5b0b510c.js", - "version": "0.5.13", - "build": "commit.5b0b510c", - "longVersion": "0.5.13+commit.5b0b510c", - "keccak256": "0x432dd5d662d88c2316b4df503f693ae9e6e8ed4216726db2fdb3e7f628523fe5", - "sha256": "0x6e095eefc48dfc21fec18d0b63f229e929f881b5d6e8a999e1622c6b707a7f54", - "urls": [ - "dweb:/ipfs/QmSgJ8Ru6vraz9CyCDPMifVxpckkoooVSBj9vYcQqG4wG4" - ] - }, - { - "path": "soljson-v0.5.14+commit.01f1aaa4.js", - "version": "0.5.14", - "build": "commit.01f1aaa4", - "longVersion": "0.5.14+commit.01f1aaa4", - "keccak256": "0x98e1027fbf3acb279f740c3b38df69d79ad3f2e6171414508d50604dc2dfc13e", - "sha256": "0x43b85bc9941814b018065da5c6c8d40e2af49264d0d1f06bdefbfbe628e65ff8", - "urls": [ - "dweb:/ipfs/QmeXatGB9MdWA2NBLSNQbcKvuZpa4Sxem51vCrqyQGfXnU" - ] - }, - { - "path": "soljson-v0.5.15+commit.6a57276f.js", - "version": "0.5.15", - "build": "commit.6a57276f", - "longVersion": "0.5.15+commit.6a57276f", - "keccak256": "0x6f9251f86fd798a3ae25688307ffc7a9984dcf0d809a1aef54f5c68b6cf9fb6a", - "sha256": "0x0d34e4ed048bbf67daacdf36cd5ce0f553a32962967b52edab6afccaa071878b", - "urls": [ - "dweb:/ipfs/Qmdx3AHUB8bN6ZZs1XsTV3Gz9FV3gAB7x7JbYeUsn43Azu" - ] - }, - { - "path": "soljson-v0.5.16+commit.9c3226ce.js", - "version": "0.5.16", - "build": "commit.9c3226ce", - "longVersion": "0.5.16+commit.9c3226ce", - "keccak256": "0x6abf17bdb1b934d072739e0e083ecfd579c523d200d45184b8d3987924ca0454", - "sha256": "0xa09c9cc2672678d461dc71100600bb58802db87be4de9424769241712ccbec03", - "urls": [ - "dweb:/ipfs/QmQjodGav6KhMDjuoyJ1ag8osgKLBsFC1E9LmaGP7qCRZ2" - ] - }, - { - "path": "soljson-v0.5.17+commit.d19bba13.js", - "version": "0.5.17", - "build": "commit.d19bba13", - "longVersion": "0.5.17+commit.d19bba13", - "keccak256": "0x936e6bfbf4ea9ac32997adb893b0aeecd050cfef8b475f297dca1add0a1ff934", - "sha256": "0x7fd1d3f1fddc615e117f7fb7586acabd60c649c390cf110c8fdc5ce159fa5734", - "urls": [ - "dweb:/ipfs/QmNrRJwVHaJSZ3aAQZWZKjV9o8BqWKFP3RPYL6hKU65PAE" - ] - }, - { - "path": "soljson-v0.6.0+commit.26b70077.js", - "version": "0.6.0", - "build": "commit.26b70077", - "longVersion": "0.6.0+commit.26b70077", - "keccak256": "0xea559c55bf7046cb48378fe9b43eaab6e345700aa22d701fcf946a42ec6b1008", - "sha256": "0xf22c63511a85230f7640ff5a77433db643d8d32be8b7c7f1dc24c1301a5158e9", - "urls": [ - "dweb:/ipfs/QmTQPQb6br2VEzKTiXBEE6z69xRXEk24xi2R2gn8EsvGD9" - ] - }, - { - "path": "soljson-v0.6.1+commit.e6f7d5a4.js", - "version": "0.6.1", - "build": "commit.e6f7d5a4", - "longVersion": "0.6.1+commit.e6f7d5a4", - "keccak256": "0xb2657b5ce7a9b405a65e4a88845a51216cd7371e8f84861eef9cb0cb20d78081", - "sha256": "0x3628fdefd6971ea9cc16acbf91e5f6d6cfb2079181784b47e4d24f4c5d92e4e4", - "urls": [ - "dweb:/ipfs/QmYWAkYAJo59kc5dHWaLuQqEm7xusESdu5meDzjpxnyXKt" - ] - }, - { - "path": "soljson-v0.6.2+commit.bacdbe57.js", - "version": "0.6.2", - "build": "commit.bacdbe57", - "longVersion": "0.6.2+commit.bacdbe57", - "keccak256": "0x7dc96455c864b49abc7dd5f38ba6a47904709ad132ea36babbfce98d42e962e6", - "sha256": "0x25f564cbecc5bfe95d6d358e0e7543c31ece0ab1332c555ff323ca163711bd2b", - "urls": [ - "dweb:/ipfs/QmaLUM18c7ecA911ig5u2HY6fAu4AiUbhJpnZwwCMc9cWi" - ] - }, - { - "path": "soljson-v0.6.3+commit.8dda9521.js", - "version": "0.6.3", - "build": "commit.8dda9521", - "longVersion": "0.6.3+commit.8dda9521", - "keccak256": "0x39ae8b2f3ba05ed7d4a7c16f0a9f4f5118180a209379cfc9bdd2d4fb5d015dff", - "sha256": "0xf89514dedd8cfb3c4d351580ff80b8444acde702f8be0e5fad710fe6e906c687", - "urls": [ - "dweb:/ipfs/Qmd9JfFpUXsUQrJad1u2QDuMxBMeVrcG8mrpfJVV9jiBXB" - ] - }, - { - "path": "soljson-v0.6.4+commit.1dca32f3.js", - "version": "0.6.4", - "build": "commit.1dca32f3", - "longVersion": "0.6.4+commit.1dca32f3", - "keccak256": "0x435820544c2598d4ffbfb6f11003364c883a0766c8ac2a03215dd73022b34679", - "sha256": "0xa4fd5bb021259cdde001b03dac0e66353a3b066b47eb2476acb58b2610a224ca", - "urls": [ - "dweb:/ipfs/QmTxzbPN4HwcK5YX7n3PNkb1BzKFiRwStsmBfgC9VwrtFt" - ] - }, - { - "path": "soljson-v0.6.5+commit.f956cc89.js", - "version": "0.6.5", - "build": "commit.f956cc89", - "longVersion": "0.6.5+commit.f956cc89", - "keccak256": "0x6262768243c1ceaf91418e52dc6f52d2ce94d19c6e1065d54499b7bc4d6e14dc", - "sha256": "0xf8f83757e73f33f44389d1fa72d013fb266454a8dd9bb6897c7776f8fc3b0231", - "urls": [ - "dweb:/ipfs/QmRUoBQeA5zpun1NK7BvBhQk6pTT4uZw7Jn2wZnWQETH9W" - ] - }, - { - "path": "soljson-v0.6.6+commit.6c089d02.js", - "version": "0.6.6", - "build": "commit.6c089d02", - "longVersion": "0.6.6+commit.6c089d02", - "keccak256": "0x3c9cfccc78bf352f4c7901d7af76757bd228f93af2634af4cd16b4916c13e44e", - "sha256": "0x09f6098026622c5c334c7798c3ad2b8f7c0ebc62f87846c7d5e7e725c3d1cbc2", - "urls": [ - "dweb:/ipfs/QmRj2pxXxvmJ96i57maVjLMfs4DUtCuptM8vSVvvDweJ74" - ] - }, - { - "path": "soljson-v0.6.7+commit.b8d736ae.js", - "version": "0.6.7", - "build": "commit.b8d736ae", - "longVersion": "0.6.7+commit.b8d736ae", - "keccak256": "0xb463b6a61fc027247655a32cbfd50bf543eafa3a6b42ceacdda7293e3ada8866", - "sha256": "0xb795f1b20f065a0aee492c24071fc1efa1633c3caab77cff20278a9ae822f04e", - "urls": [ - "dweb:/ipfs/QmShUrNZf1dZFjziorJYE8fMGNUSMFsbaR3ipSvsCMvExM" - ] - }, - { - "path": "soljson-v0.6.8+commit.0bbfe453.js", - "version": "0.6.8", - "build": "commit.0bbfe453", - "longVersion": "0.6.8+commit.0bbfe453", - "keccak256": "0x537cefc0579dd9631ec952cae951b3df0a50a3e557b5638107a67275f7aacc07", - "sha256": "0x3e8b01cbd194e40971b41017ada7c8b2fa941b0458cb701bdfb6a82257ca971b", - "urls": [ - "dweb:/ipfs/Qmdq9AfwdmKfEGP8u7H9E4VYrKLVinRZPZD1EWRnXSn1oe" - ] - }, - { - "path": "soljson-v0.6.9+commit.3e3065ac.js", - "version": "0.6.9", - "build": "commit.3e3065ac", - "longVersion": "0.6.9+commit.3e3065ac", - "keccak256": "0xa2d4d3ebe5d52bfa7ddf1a1fcd9bfed81eaa8678e6a1dd5a1c84954dd064422c", - "sha256": "0xf1724fd46b7a353561b3f8d473b0dc8c855b6d84b5af559d7e3326ac79b9d758", - "urls": [ - "dweb:/ipfs/Qmad6iesaR5FQ45RRtMrt2Fa1EYDuq1oGoMJJB6beMHESn" - ] - }, - { - "path": "soljson-v0.6.10+commit.00c0fcaf.js", - "version": "0.6.10", - "build": "commit.00c0fcaf", - "longVersion": "0.6.10+commit.00c0fcaf", - "keccak256": "0x620163da7ee7b2622c9ee48b06110a52739f633189555148a3b5ecf767e60cfb", - "sha256": "0xfa27ce9d23bddaa76a4aefbafa48e48affde9a1ee7c8a5e8784cf8d4c390f655", - "urls": [ - "dweb:/ipfs/QmUinsRZvs2zFNG6FMWy7ngTYUnZccXq7MRtgpj1dPfxu4" - ] - }, - { - "path": "soljson-v0.6.11+commit.5ef660b1.js", - "version": "0.6.11", - "build": "commit.5ef660b1", - "longVersion": "0.6.11+commit.5ef660b1", - "keccak256": "0xf0abd02c495a0b4c5c9a7ff20de8b932e11fc3066d0b754422035ecd96fcdbbc", - "sha256": "0x9778e4a7667d5fd7632caf3ef3791d390a7cc217f94f96e919a31e3be332386a", - "urls": [ - "dweb:/ipfs/QmXyjgFNMyFD4fdf8wt9uvUU92MGdDVGmcPdMZhNEo1g8N" - ] - }, - { - "path": "soljson-v0.6.12+commit.27d51765.js", - "version": "0.6.12", - "build": "commit.27d51765", - "longVersion": "0.6.12+commit.27d51765", - "keccak256": "0xe1412d909a0dae79b13c0066b9bf08831c522daec00b273bbc19a799af213d6a", - "sha256": "0x3e1956c550ca48e289044c7c0bd892403081b4b5e17e77ce707c815ce6c4228f", - "urls": [ - "dweb:/ipfs/QmTs8PnAGr1ijXtWvMjoWraefAtVv2Y5ZnwkArz6NqJ93w" - ] - }, - { - "path": "soljson-v0.7.0+commit.9e61f92b.js", - "version": "0.7.0", - "build": "commit.9e61f92b", - "longVersion": "0.7.0+commit.9e61f92b", - "keccak256": "0x0c7a4386781683c327fde95363535f377941e14feffad5bb1134c7aa7eba726f", - "sha256": "0xe7e1be3d0a67469f6a37cd676a22314c4faa8a22ff9d5ebde11302db754453eb", - "urls": [ - "dweb:/ipfs/QmQFhTptWdDzhemjGpa7Q65HKWGphs4nKKS13nzkcVE8pM" - ] - }, - { - "path": "soljson-v0.7.1+commit.f4a555be.js", - "version": "0.7.1", - "build": "commit.f4a555be", - "longVersion": "0.7.1+commit.f4a555be", - "keccak256": "0x3502cf7933fbce9f1fe1d87a83d5b9df12eee36c03997c3b9821493ce03fcf3e", - "sha256": "0x7fcc983c5149840a47b946fc51fc14f1c21cda07c01d650e4a1f814319cb1423", - "urls": [ - "dweb:/ipfs/Qmdw9c3usmqgdV2w4JoNWJqscHzscKNVWsWtos1engJa1o" - ] - }, - { - "path": "soljson-v0.7.2+commit.51b20bc0.js", - "version": "0.7.2", - "build": "commit.51b20bc0", - "longVersion": "0.7.2+commit.51b20bc0", - "keccak256": "0x0c80a0bf9e17700249a04a80d7729ccb012a55a82cb0f9e412fa32cc14b09c2b", - "sha256": "0xdfa3f2bb4589bdc9c054292173c82ee70e65af8d1971598f6e13b9b79ba94185", - "urls": [ - "dweb:/ipfs/QmTNWY4vkVLgtNdfGXyH6CY8URmzr33VzMJNN37z5dsAgu" - ] - }, - { - "path": "soljson-v0.7.3+commit.9bfce1f6.js", - "version": "0.7.3", - "build": "commit.9bfce1f6", - "longVersion": "0.7.3+commit.9bfce1f6", - "keccak256": "0xcf099e7057d6c3d5acac1f4e349798ad5a581b6cb7ffcebdf5b37b86eac4872d", - "sha256": "0xcaf4b1f3e01fcf946aad2d22bbe046b9dc4fd50049a05c3458ff239e2c93a785", - "urls": [ - "dweb:/ipfs/QmQMH2o7Nz3DaQ31hNYyHVAgejqTyZouvA35Zzzwe2UBPt" - ] - }, - { - "path": "soljson-v0.7.4+commit.3f05b770.js", - "version": "0.7.4", - "build": "commit.3f05b770", - "longVersion": "0.7.4+commit.3f05b770", - "keccak256": "0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3", - "sha256": "0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2", - "urls": [ - "dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS" - ] - }, - { - "path": "soljson-v0.7.5+commit.eb77ed08.js", - "version": "0.7.5", - "build": "commit.eb77ed08", - "longVersion": "0.7.5+commit.eb77ed08", - "keccak256": "0xfe223dd264421f9b96c3dd3c835a3d0d4d9cfa4c61f75ca0761860c9ae8906ca", - "sha256": "0x2ee1c6434a32a40b137ac28be12ceeba64701bfad5e80239690803d9c139908e", - "urls": [ - "dweb:/ipfs/Qmf5fpJmeHdwgmSjQPqdu25XtA9akTotakkNmrh4axgo8N" - ] - }, - { - "path": "soljson-v0.7.6+commit.7338295f.js", - "version": "0.7.6", - "build": "commit.7338295f", - "longVersion": "0.7.6+commit.7338295f", - "keccak256": "0xc68517effed7163db0c7f4559931a4c5530fe6f2a8a20596361640d9d7eff655", - "sha256": "0xb94e69dfb056b3e26080f805ab43b668afbc0ac70bf124bfb7391ecfc0172ad2", - "urls": [ - "dweb:/ipfs/QmWjG6PLzF5M6kxkHujhEMg5znQCgf2m1cM1UptKA719Hy" - ] - }, - { - "path": "soljson-v0.8.0+commit.c7dfd78e.js", - "version": "0.8.0", - "build": "commit.c7dfd78e", - "longVersion": "0.8.0+commit.c7dfd78e", - "keccak256": "0x08dd57a5cf5fd59accbd5b601909ffa22d28da756b5367c29b523ff17bbc2f99", - "sha256": "0xc596765f9b3dce486cf596ea35676f37124d54f3ada0fcbc02f094c392066a59", - "urls": [ - "dweb:/ipfs/QmYh5C2rgDAx452f7HyHA8soLhnoL1GeeNNEWEuw9jKY8w" - ] - }, - { - "path": "soljson-v0.8.1+commit.df193b15.js", - "version": "0.8.1", - "build": "commit.df193b15", - "longVersion": "0.8.1+commit.df193b15", - "keccak256": "0x84a0e9282047512eeec499d55c83dbb6981430b08692d81d6c09730bb18e6cd8", - "sha256": "0xf77f141e5fed9594b28342e2c630ac6d48f2a724e4383a457881acd7fa62b1cf", - "urls": [ - "dweb:/ipfs/QmQ6W5VedQpZAwuGTtp1BhmNkvVheLnJq4xwN9Qmt9bAbH" - ] - }, - { - "path": "soljson-v0.8.2+commit.661d1103.js", - "version": "0.8.2", - "build": "commit.661d1103", - "longVersion": "0.8.2+commit.661d1103", - "keccak256": "0xd0c15275c5b0d03871332719def9b0f17e8860c7db60e0e71f18b971458a7391", - "sha256": "0x015e83fb0b72ccdafb0c217961b21a0321adb2d3f2ad992f5e79635c2086e6dd", - "urls": [ - "dweb:/ipfs/QmdfVfa2mhyosaJVeV7rbfnvQ95GTHPeRPzmvxcds7RYej" - ] - }, - { - "path": "soljson-v0.8.3+commit.8d00100c.js", - "version": "0.8.3", - "build": "commit.8d00100c", - "longVersion": "0.8.3+commit.8d00100c", - "keccak256": "0x51777116af58223a41aa3016d0bf733bbb0f78ad9ba4bcc36487eba175f65015", - "sha256": "0xb5cedfa8de5f9421fbdaccf9fd5038652c2632344b3b68e5278de81e9aeac210", - "urls": [ - "dweb:/ipfs/QmWbNMzJryhiZmyifLDQteGPwN4aTgXQB6barBvXYVw975" - ] - }, - { - "path": "soljson-v0.8.4+commit.c7e474f2.js", - "version": "0.8.4", - "build": "commit.c7e474f2", - "longVersion": "0.8.4+commit.c7e474f2", - "keccak256": "0x7e0bca960d11fb095798ff65d029436f23358ac060b25a0938acfcb4652da2ec", - "sha256": "0x4a14c7bcaf0d988a829db2174b8f7731898aa8633216490603ad74bff64eca3c", - "urls": [ - "dweb:/ipfs/QmPYDf4qYtZLNEAicW7hcvpUJ69FoHiXmUypipDpTKo9hU" - ] - }, - { - "path": "soljson-v0.8.5+commit.a4f2e591.js", - "version": "0.8.5", - "build": "commit.a4f2e591", - "longVersion": "0.8.5+commit.a4f2e591", - "keccak256": "0x6d6d75b033717aae0a728e527005d8d2cc7dbd0a835c8873c630a2a9689a2976", - "sha256": "0x4af595f976235d33a22ffe223e9e3210b4ca510f6a93f153b3daed60f2b11fbc", - "urls": [ - "dweb:/ipfs/QmNWkyirqXy3gDHNXpPuVUbExMGWjMqPR82Xzs64RzgQzy" - ] - }, - { - "path": "soljson-v0.8.6+commit.11564f7e.js", - "version": "0.8.6", - "build": "commit.11564f7e", - "longVersion": "0.8.6+commit.11564f7e", - "keccak256": "0x070e41c7f761ff1a8383a2c0d54c22aab0f115ca8c3790ecea27d6dde11611ca", - "sha256": "0x06a671efd8865a6ecc0ad648076177b35abcd06a7059888ea65111272e33a57f", - "urls": [ - "dweb:/ipfs/QmQre11ZPgWSx79Jzca1tkTYFyMbXz8H4kcrhfpWSj4qs8" - ] - }, - { - "path": "soljson-v0.8.7+commit.e28d00a7.js", - "version": "0.8.7", - "build": "commit.e28d00a7", - "longVersion": "0.8.7+commit.e28d00a7", - "keccak256": "0x8d6be9e58c33d265b5a8b1132a27fce126067419f3f4f15d3ef6b7147593b61d", - "sha256": "0x663ba99f7c7ee907f0f03227502d48a78256c3c292ace3b79a5d3eb510665306", - "urls": [ - "dweb:/ipfs/QmYv3Rsi9pL6PZAtc4XLHezPqti8yCRGEdDBqzEsQv57GV" - ] - }, - { - "path": "soljson-v0.8.8+commit.dddeac2f.js", - "version": "0.8.8", - "build": "commit.dddeac2f", - "longVersion": "0.8.8+commit.dddeac2f", - "keccak256": "0x56cb2f6978bf1213982ef217ee76b39dc97b6e66c92a7be7a1b44079c0236e5c", - "sha256": "0x534b7d4079d13bb4cd10b7559dc105c2adec625df4105f20ebce47e6da60bfda", - "urls": [ - "dweb:/ipfs/QmZaSrn3TPvPVoShtjSonQLFd3BV6RdgRMqw8GTzhnKYpm" - ] - }, - { - "path": "soljson-v0.8.9+commit.e5eed63a.js", - "version": "0.8.9", - "build": "commit.e5eed63a", - "longVersion": "0.8.9+commit.e5eed63a", - "keccak256": "0xbc470ab3442e78bb4d3f16c01c39b2f160f4f34eb4373efed11c234e1c7f6ca0", - "sha256": "0x5b25f987aae32a0275fdc6c1be36cc47cf126024a04dafd8e4be39a1d1d1422c", - "urls": [ - "dweb:/ipfs/QmfFq3MvisCSUJy8N8EVsBribgPbdpTZb7tQ2eHYw7dwag" - ] - }, - { - "path": "soljson-v0.8.10+commit.fc410830.js", - "version": "0.8.10", - "build": "commit.fc410830", - "longVersion": "0.8.10+commit.fc410830", - "keccak256": "0x3820aae0de50f10f62819d65f0b5a236ccffed11ab465a3295a5408fa47e24f5", - "sha256": "0x5eaee3240a06891abf5ac70c75caf9a0c33ebe9a2736abdaa22a337f86c22933", - "urls": [ - "dweb:/ipfs/QmcsfYpEWbPXfVptzi1YvGokxi2FYCUzUr8rQYJCc5fEiB" - ] - }, - { - "path": "soljson-v0.8.11+commit.d7f03943.js", - "version": "0.8.11", - "build": "commit.d7f03943", - "longVersion": "0.8.11+commit.d7f03943", - "keccak256": "0x798b23086ce1339e3d47b3648a1f3ae40561e2c9f66ffcc98e71fc14a7f77584", - "sha256": "0x64117d4b13bfc5bc6e5f80823519b140e753a0c09e99edd756772dc3029bc1f8", - "urls": [ - "dweb:/ipfs/QmNQTFQmfnjxnDmbguVSnZ5DiHGFQHCsffccW5c2DMcSsT" - ] - }, - { - "path": "soljson-v0.8.12+commit.f00d7308.js", - "version": "0.8.12", - "build": "commit.f00d7308", - "longVersion": "0.8.12+commit.f00d7308", - "keccak256": "0xdd4ae95607655404b769fab5f949ac95c6a1a506330f512aef0d92974c390431", - "sha256": "0xc2c4738c96ad329cbb9baea615ed50ffb5a53d93fed8e00785e47242581d3c60", - "urls": [ - "dweb:/ipfs/QmVdW2ygaT2vecoSUog3HUn8hZqXU4XXQZvuRSdpV6DJPL" - ] - }, - { - "path": "soljson-v0.8.13+commit.abaa5c0e.js", - "version": "0.8.13", - "build": "commit.abaa5c0e", - "longVersion": "0.8.13+commit.abaa5c0e", - "keccak256": "0x9afa714859d1c8f8ed2fded497b83a7a420474282494d25d4c9f592667729f21", - "sha256": "0x387343bcf8f2b77fe4cdcddcaa84361fabf8e1c3508f874fbbcbb9c313542f56", - "urls": [ - "dweb:/ipfs/Qma9V9dJwmkim98H6DQX4f7RH395vsUuqHCDxbKetcbj18" - ] - }, - { - "path": "soljson-v0.8.14+commit.80d49f37.js", - "version": "0.8.14", - "build": "commit.80d49f37", - "longVersion": "0.8.14+commit.80d49f37", - "keccak256": "0xb0f7f19a8590e5c0aaf779019c1deaafed170d8c26bec9bfd782d212e097619e", - "sha256": "0x7c3b3d0066fd381283b1d8d9a86153b2ddb5c01da14a1ae015c05cfa484e81b6", - "urls": [ - "dweb:/ipfs/QmcM1TcDB4ta8ttNLWZ4d24M4Qs35rc91sQkdNmJMNbuvV" - ] - }, - { - "path": "soljson-v0.8.15+commit.e14f2714.js", - "version": "0.8.15", - "build": "commit.e14f2714", - "longVersion": "0.8.15+commit.e14f2714", - "keccak256": "0x4f6cdc0f25e734bcb977bb6a3e22fa41d8a82cbd5f220a2e4238c2d233526d1a", - "sha256": "0x71135e459d691767ce3453bab4564ef4a640dd50182da36517cbc1f96c1d4c7c", - "urls": [ - "dweb:/ipfs/QmPiBrYZxxpNZPQ98GNyL7Xa1F9Dq7uHtdt9ESwhPNkHhc" - ] - }, - { - "path": "soljson-v0.8.16+commit.07a7930e.js", - "version": "0.8.16", - "build": "commit.07a7930e", - "longVersion": "0.8.16+commit.07a7930e", - "keccak256": "0x331f4bc6de3d44d87b68629e83f711105325b482da7e9ca9bdbdd01371fee438", - "sha256": "0x27b2820ef93805a65c76b7945a49432582d306fd17a28985709a51e6403677c2", - "urls": [ - "dweb:/ipfs/QmWzBJ8gdccvRSSB5YsMKiF2qt3RFmAP2X25QEWqqQnR4y" - ] - }, - { - "path": "soljson-v0.8.17+commit.8df45f5f.js", - "version": "0.8.17", - "build": "commit.8df45f5f", - "longVersion": "0.8.17+commit.8df45f5f", - "keccak256": "0x3f2be218cf4545b4d2e380417c6da1e008fdc4255ab38c9ee12f64c0e3f55ea9", - "sha256": "0x617828e63be485c7cc2dbcbdd5a22b582b40fafaa41016ad595637b83c90656c", - "urls": [ - "dweb:/ipfs/QmTedx1wBKSUaLatuqXYngjfKQLD2cGqPKjdLYCnbMYwiz" - ] - }, - { - "path": "soljson-v0.8.18+commit.87f61d96.js", - "version": "0.8.18", - "build": "commit.87f61d96", - "longVersion": "0.8.18+commit.87f61d96", - "keccak256": "0x9a8fa4183ef95496045189b80dfb39f745db89a903b398e40131f500953e5d57", - "sha256": "0xd82bdcba2c386d60b33aca148a9cfdf097551f68c5e45d8ec01aebbafacf5075", - "urls": [ - "dweb:/ipfs/QmcKzrqRBy7PeFQxzJDs1AZZzNHKaKbJces6zUDysXZofJ" - ] - }, - { - "path": "soljson-v0.8.19+commit.7dd6d404.js", - "version": "0.8.19", - "build": "commit.7dd6d404", - "longVersion": "0.8.19+commit.7dd6d404", - "keccak256": "0x6be35b86f5656c06ae897ef311c28da375bdcbded68c4a81e124f2cb36adf830", - "sha256": "0xe0b74e0a16e783a35169f74d1a615ecb48d07c30f97346b83cd587949268681e", - "urls": [ - "dweb:/ipfs/QmPnhNtzrEBeWWQMXdAByQTDPoKXXV9NFXLk3YL4QbghMP" - ] - }, - { - "path": "soljson-v0.8.20+commit.a1b79de6.js", - "version": "0.8.20", - "build": "commit.a1b79de6", - "longVersion": "0.8.20+commit.a1b79de6", - "keccak256": "0x3a420fa9963772eee5b9221ebb8cf9548eea8f88b09537390960ea9b440f333c", - "sha256": "0x5c509f760dc110a695c8b39bbc21e08c17dee431aa14d606f59e623d7c3cc657", - "urls": [ - "dweb:/ipfs/QmciAxUX2kfuoxitmMdkKSfWn2SfxQdieLRa3S5S2munot" - ] - }, - { - "path": "soljson-v0.8.21+commit.d9974bed.js", - "version": "0.8.21", - "build": "commit.d9974bed", - "longVersion": "0.8.21+commit.d9974bed", - "keccak256": "0x370efd28e2d28b6d0ba55e20d8994f3d286c3772552ed63586b5fe157c0d3c57", - "sha256": "0x45bea352b41d04039e19439962ddef1d3e10cf2bc9526feba39f2cc79e3c5a17", - "urls": [ - "dweb:/ipfs/QmXLgy6oexvCBWYS5pTpJWohsDNGqgdNFLRKX7JrE3NxYt" - ] - }, - { - "path": "soljson-v0.8.22+commit.4fc1097e.js", - "version": "0.8.22", - "build": "commit.4fc1097e", - "longVersion": "0.8.22+commit.4fc1097e", - "keccak256": "0x907eeba6e6e0d6977ac5a8f50e4dd2762539ca827ceab1afb1f5a4f0f3ce3e0c", - "sha256": "0x92d283c545395b91a656fa1ec94d567a464bca55aebcdbb99debf42b43026845", - "urls": [ - "dweb:/ipfs/Qma6o4e57YtWj8cQLQs12r2Enx9qmRA7VHtupCauXjYTAk" - ] - }, - { - "path": "soljson-v0.8.23+commit.f704f362.js", - "version": "0.8.23", - "build": "commit.f704f362", - "longVersion": "0.8.23+commit.f704f362", - "keccak256": "0x743aaafac24d9740a0b71215f55a132f89336a662487944767ca4bfd66400769", - "sha256": "0x9c681b165c8647867589c0a5ecdc8692637a935928a2b1bbea2ff4a1f4976985", - "urls": [ - "dweb:/ipfs/QmZy5ho8W943FMGwppXZFS1WFrVwV3UXhUUwcD7oH5vrYe" - ] - }, - { - "path": "soljson-v0.8.24+commit.e11b9ed9.js", - "version": "0.8.24", - "build": "commit.e11b9ed9", - "longVersion": "0.8.24+commit.e11b9ed9", - "keccak256": "0x1b6ceeabad21bbb2011ba13373160f7c4d46c11371a354243ee1be07159345f3", - "sha256": "0x11b054b55273ec55f6ab3f445eb0eb2c83a23fed43d10079d34ac3eabe6ed8b1", - "urls": [ - "dweb:/ipfs/QmW2SQbEhiz3n2qV5iL8WBgzapv6cXjkLStvTMpCZhvr2x" - ] - }, - { - "path": "soljson-v0.8.25+commit.b61c2a91.js", - "version": "0.8.25", - "build": "commit.b61c2a91", - "longVersion": "0.8.25+commit.b61c2a91", - "keccak256": "0x4639103a26b2f669bd3ecc22b1a1665819f2a2956f917ab91380bd9565dbcd01", - "sha256": "0xf8c9554471ff2db3843167dffb7a503293b5dc728c8305b044ef9fd37d626ca7", - "urls": [ - "dweb:/ipfs/QmdduJxmPXungjJk2FBDw1bdDQ6ucHxYGLXRMBJqMFW7h9" - ] - }, - { - "path": "soljson-v0.8.26+commit.8a97fa7a.js", - "version": "0.8.26", - "build": "commit.8a97fa7a", - "longVersion": "0.8.26+commit.8a97fa7a", - "keccak256": "0x34ffb570dd3b2041e3df86cb1f9190256cd28ee5a6f3d4200fe4b9747d33f901", - "sha256": "0xdb85e5396f523cc1a53c4c4d742e204f6dcba1a05842623d73be946809e11cd6", - "urls": [ - "dweb:/ipfs/QmS5JdeXtYhGBvdgNTLWuBNHupyP623X4sf43fRbrgiTaA" - ] - } - ], - "releases": { - "0.8.26": "soljson-v0.8.26+commit.8a97fa7a.js", - "0.8.25": "soljson-v0.8.25+commit.b61c2a91.js", - "0.8.24": "soljson-v0.8.24+commit.e11b9ed9.js", - "0.8.23": "soljson-v0.8.23+commit.f704f362.js", - "0.8.22": "soljson-v0.8.22+commit.4fc1097e.js", - "0.8.21": "soljson-v0.8.21+commit.d9974bed.js", - "0.8.20": "soljson-v0.8.20+commit.a1b79de6.js", - "0.8.19": "soljson-v0.8.19+commit.7dd6d404.js", - "0.8.18": "soljson-v0.8.18+commit.87f61d96.js", - "0.8.17": "soljson-v0.8.17+commit.8df45f5f.js", - "0.8.16": "soljson-v0.8.16+commit.07a7930e.js", - "0.8.15": "soljson-v0.8.15+commit.e14f2714.js", - "0.8.14": "soljson-v0.8.14+commit.80d49f37.js", - "0.8.13": "soljson-v0.8.13+commit.abaa5c0e.js", - "0.8.12": "soljson-v0.8.12+commit.f00d7308.js", - "0.8.11": "soljson-v0.8.11+commit.d7f03943.js", - "0.8.10": "soljson-v0.8.10+commit.fc410830.js", - "0.8.9": "soljson-v0.8.9+commit.e5eed63a.js", - "0.8.8": "soljson-v0.8.8+commit.dddeac2f.js", - "0.8.7": "soljson-v0.8.7+commit.e28d00a7.js", - "0.8.6": "soljson-v0.8.6+commit.11564f7e.js", - "0.8.5": "soljson-v0.8.5+commit.a4f2e591.js", - "0.8.4": "soljson-v0.8.4+commit.c7e474f2.js", - "0.8.3": "soljson-v0.8.3+commit.8d00100c.js", - "0.8.2": "soljson-v0.8.2+commit.661d1103.js", - "0.8.1": "soljson-v0.8.1+commit.df193b15.js", - "0.8.0": "soljson-v0.8.0+commit.c7dfd78e.js", - "0.7.6": "soljson-v0.7.6+commit.7338295f.js", - "0.7.5": "soljson-v0.7.5+commit.eb77ed08.js", - "0.7.4": "soljson-v0.7.4+commit.3f05b770.js", - "0.7.3": "soljson-v0.7.3+commit.9bfce1f6.js", - "0.7.2": "soljson-v0.7.2+commit.51b20bc0.js", - "0.7.1": "soljson-v0.7.1+commit.f4a555be.js", - "0.7.0": "soljson-v0.7.0+commit.9e61f92b.js", - "0.6.12": "soljson-v0.6.12+commit.27d51765.js", - "0.6.11": "soljson-v0.6.11+commit.5ef660b1.js", - "0.6.10": "soljson-v0.6.10+commit.00c0fcaf.js", - "0.6.9": "soljson-v0.6.9+commit.3e3065ac.js", - "0.6.8": "soljson-v0.6.8+commit.0bbfe453.js", - "0.6.7": "soljson-v0.6.7+commit.b8d736ae.js", - "0.6.6": "soljson-v0.6.6+commit.6c089d02.js", - "0.6.5": "soljson-v0.6.5+commit.f956cc89.js", - "0.6.4": "soljson-v0.6.4+commit.1dca32f3.js", - "0.6.3": "soljson-v0.6.3+commit.8dda9521.js", - "0.6.2": "soljson-v0.6.2+commit.bacdbe57.js", - "0.6.1": "soljson-v0.6.1+commit.e6f7d5a4.js", - "0.6.0": "soljson-v0.6.0+commit.26b70077.js", - "0.5.17": "soljson-v0.5.17+commit.d19bba13.js", - "0.5.16": "soljson-v0.5.16+commit.9c3226ce.js", - "0.5.15": "soljson-v0.5.15+commit.6a57276f.js", - "0.5.14": "soljson-v0.5.14+commit.01f1aaa4.js", - "0.5.13": "soljson-v0.5.13+commit.5b0b510c.js", - "0.5.12": "soljson-v0.5.12+commit.7709ece9.js", - "0.5.11": "soljson-v0.5.11+commit.c082d0b4.js", - "0.5.10": "soljson-v0.5.10+commit.5a6ea5b1.js", - "0.5.9": "soljson-v0.5.9+commit.e560f70d.js", - "0.5.8": "soljson-v0.5.8+commit.23d335f2.js", - "0.5.7": "soljson-v0.5.7+commit.6da8b019.js", - "0.5.6": "soljson-v0.5.6+commit.b259423e.js", - "0.5.5": "soljson-v0.5.5+commit.47a71e8f.js", - "0.5.4": "soljson-v0.5.4+commit.9549d8ff.js", - "0.5.3": "soljson-v0.5.3+commit.10d17f24.js", - "0.5.2": "soljson-v0.5.2+commit.1df8f40c.js", - "0.5.1": "soljson-v0.5.1+commit.c8a2cb62.js", - "0.5.0": "soljson-v0.5.0+commit.1d4f565a.js", - "0.4.26": "soljson-v0.4.26+commit.4563c3fc.js", - "0.4.25": "soljson-v0.4.25+commit.59dbf8f1.js", - "0.4.24": "soljson-v0.4.24+commit.e67f0147.js", - "0.4.23": "soljson-v0.4.23+commit.124ca40d.js", - "0.4.22": "soljson-v0.4.22+commit.4cb486ee.js", - "0.4.21": "soljson-v0.4.21+commit.dfe3193c.js", - "0.4.20": "soljson-v0.4.20+commit.3155dd80.js", - "0.4.19": "soljson-v0.4.19+commit.c4cbbb05.js", - "0.4.18": "soljson-v0.4.18+commit.9cf6e910.js", - "0.4.17": "soljson-v0.4.17+commit.bdeb9e52.js", - "0.4.16": "soljson-v0.4.16+commit.d7661dd9.js", - "0.4.15": "soljson-v0.4.15+commit.bbb8e64f.js", - "0.4.14": "soljson-v0.4.14+commit.c2215d46.js", - "0.4.13": "soljson-v0.4.13+commit.0fb4cb1a.js", - "0.4.12": "soljson-v0.4.12+commit.194ff033.js", - "0.4.11": "soljson-v0.4.11+commit.68ef5810.js", - "0.4.10": "soljson-v0.4.10+commit.f0d539ae.js", - "0.4.9": "soljson-v0.4.9+commit.364da425.js", - "0.4.8": "soljson-v0.4.8+commit.60cc1668.js", - "0.4.7": "soljson-v0.4.7+commit.822622cf.js", - "0.4.6": "soljson-v0.4.6+commit.2dabbdf0.js", - "0.4.5": "soljson-v0.4.5+commit.b318366e.js", - "0.4.4": "soljson-v0.4.4+commit.4633f3de.js", - "0.4.3": "soljson-v0.4.3+commit.2353da71.js", - "0.4.2": "soljson-v0.4.2+commit.af6afb04.js", - "0.4.1": "soljson-v0.4.1+commit.4fc6fc2c.js", - "0.4.0": "soljson-v0.4.0+commit.acd334c9.js", - "0.3.6": "soljson-v0.3.6+commit.3fc68da5.js" - }, - "latestRelease": "0.8.26" -} \ No newline at end of file From b117d52c5219c71d65fb515015703b7c9d26df31 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 11 Sep 2024 17:52:00 +0200 Subject: [PATCH 216/312] copy list --- apps/remix-ide/ci/downloadsoljson.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/remix-ide/ci/downloadsoljson.sh b/apps/remix-ide/ci/downloadsoljson.sh index 202d3e69b2..ac477d469f 100644 --- a/apps/remix-ide/ci/downloadsoljson.sh +++ b/apps/remix-ide/ci/downloadsoljson.sh @@ -23,6 +23,9 @@ if [ -z "$listJson" ]; then exit 0 # Silently exit fi +# Overwrite the local list.json with the fetched content +echo "$listJson" > ./apps/remix-ide/src/assets/list.json + # Check if the specified version exists in the list check=$(echo "$listJson" | grep "\"$defaultVersion\"") From 4eee98db6056c5662797cb057d5d731601f0de1b Mon Sep 17 00:00:00 2001 From: ryestew Date: Wed, 4 Sep 2024 13:43:05 -0400 Subject: [PATCH 217/312] text & list.json update --- .../src/app/tabs/locales/en/home.json | 6 ++--- .../src/lib/components/homeTabFeatured.tsx | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/home.json b/apps/remix-ide/src/app/tabs/locales/en/home.json index 588b671983..a95e8e46f2 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/home.json +++ b/apps/remix-ide/src/app/tabs/locales/en/home.json @@ -7,9 +7,9 @@ "home.learnMore": "Learn more", "home.here": "more", "home.featured": "Featured", - "home.jumpIntoWeb3": "JUMP INTO WEB3", - "home.jumpIntoWeb3More": "More", - "home.jumpIntoWeb3Text": "Remix IDE is part of the Remix Project, a rich toolset that can be used for the entire journey of contract development by users of any knowledge level. Learn more on the Remix Project website.", + "home.jumpIntoLearnEth": "LearnEth: Tutorials inside Remix", + "home.jumpIntoLearnEthMore": "Start Learning", + "home.jumpIntoLearnEthText": "Check out tutorials on Remix, Solidity, and other Web3 projects. Great for all skill levels.", "home.remixYouTube": "WATCH TO LEARN", "home.remixYouTubeText1": "Video Tips from the Remix Team", "home.remixYouTubeMore": "Watch", diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index 7f1eb98d59..23f8b5f71c 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -62,6 +62,28 @@ function HomeTabFeatured() {
+ + ----
+ ----
From 6d0f3ca1518b280abacab458ee62131427ca7a62 Mon Sep 17 00:00:00 2001 From: ryestew Date: Fri, 6 Sep 2024 10:34:18 -0400 Subject: [PATCH 218/312] update 2nd slider --- .../src/app/tabs/locales/en/home.json | 6 +-- .../src/lib/components/homeTabFeatured.tsx | 46 ++++++------------- .../home-tab/src/lib/remix-ui-home-tab.tsx | 2 +- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/home.json b/apps/remix-ide/src/app/tabs/locales/en/home.json index a95e8e46f2..a6d6502eeb 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/home.json +++ b/apps/remix-ide/src/app/tabs/locales/en/home.json @@ -7,9 +7,9 @@ "home.learnMore": "Learn more", "home.here": "more", "home.featured": "Featured", - "home.jumpIntoLearnEth": "LearnEth: Tutorials inside Remix", - "home.jumpIntoLearnEthMore": "Start Learning", - "home.jumpIntoLearnEthText": "Check out tutorials on Remix, Solidity, and other Web3 projects. Great for all skill levels.", + "home.learnEthPromoTitle": "LearnEth: Tutorials inside Remix", + "home.learnEthPromoButton": "Start Learning", + "home.learnEthPromoText": "Check out tutorials on Remix, Solidity, and other Web3 projects. Great for all skill levels.", "home.remixYouTube": "WATCH TO LEARN", "home.remixYouTubeText1": "Video Tips from the Remix Team", "home.remixYouTubeMore": "Watch", diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index 23f8b5f71c..d50a67de6d 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -7,8 +7,11 @@ import 'react-multi-carousel/lib/styles.css' import * as releaseDetails from './../../../../../../releaseDetails.json' const _paq = (window._paq = window._paq || []) // eslint-disable-line +export type HomeTabFeaturedProps = { + plugin: any + } -function HomeTabFeatured() { +function HomeTabFeatured(props:HomeTabFeaturedProps) { const themeFilter = useContext(ThemeContext) return ( @@ -68,44 +71,23 @@ function HomeTabFeatured() { -
- ---- - - ----
- +
From aa5f0edd8227adc556c0319dd0ab7c0eb94d7ed4 Mon Sep 17 00:00:00 2001 From: ryestew Date: Fri, 6 Sep 2024 22:48:41 -0400 Subject: [PATCH 219/312] update learneth Promos --- .../src/app/tabs/locales/en/home.json | 1 + .../src/assets/img/remi-desk-470.webp | Bin 0 -> 26646 bytes .../src/lib/components/homeTabFeatured.tsx | 10 ++++--- .../lib/components/homeTabFeaturedPlugins.tsx | 25 ++++++++++-------- 4 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 apps/remix-ide/src/assets/img/remi-desk-470.webp diff --git a/apps/remix-ide/src/app/tabs/locales/en/home.json b/apps/remix-ide/src/app/tabs/locales/en/home.json index a6d6502eeb..a638fd2b02 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/home.json +++ b/apps/remix-ide/src/app/tabs/locales/en/home.json @@ -37,6 +37,7 @@ "home.ozerc1155TemplateDesc": "Create an ERC1155 token by importing OpenZeppelin library.", "home.gnosisSafeMultisigTemplateDesc": "Create Multi-Signature wallets using this template.", "home.zeroxErc20TemplateDesc": "Create an ERC20 token by importing 0xProject contract.", + "home.learnEthPluginDesc": "Learn about Remix, Solidity, and other Web3 projects.", "home.learn": "Learn", "home.learnEth1": "Remix Basics", "home.learnEth1Desc": "An introduction to Remix's interface and basic operations.", diff --git a/apps/remix-ide/src/assets/img/remi-desk-470.webp b/apps/remix-ide/src/assets/img/remi-desk-470.webp new file mode 100644 index 0000000000000000000000000000000000000000..942563fe0fefdb764c7115783307d290e334142e GIT binary patch literal 26646 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 literal 0 HcmV?d00001 diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index d50a67de6d..17d968a5c3 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -67,7 +67,7 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) {
- +
@@ -79,10 +79,12 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) { { - await props.plugin.appManager.activatePlugin(['learneth']) - await props.plugin.verticalIcons.select('learneth') - _paq.push(['trackEvent', 'hometab', 'featuredSection', 'LearnEth'])} + await props.plugin.appManager.activatePlugin(['LearnEth', 'solidity', 'solidityUnitTesting']) + props.plugin.verticalIcons.select('LearnEth') + await props.plugin.call('LearnEth', 'home') + } } + > diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx index 017caea368..52a9880312 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx @@ -67,10 +67,10 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) { plugin.verticalIcons.select('solidityStaticAnalysis') _paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'solidityStaticAnalysis']) } - const startSourceVerify = async () => { - await plugin.appManager.activatePlugin(['solidity', 'sourcify']) - plugin.verticalIcons.select('sourcify') - _paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'sourcify']) + const startLearnEth = async () => { + await plugin.appManager.activatePlugin(['LearnEth', 'solidity', 'solidityUnitTesting']) + plugin.verticalIcons.select('LearnEth') + _paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'LearnEth']) } const startCookbook = async () => { await plugin.appManager.activatePlugin(['cookbookdev']) @@ -125,6 +125,16 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) { remixMaintained={true} callback={() => startCodeAnalyzer()} /> + startLearnEth()} + /> startSolidity()} /> - startSourceVerify()} - /> Date: Tue, 10 Sep 2024 20:52:50 -0400 Subject: [PATCH 220/312] update slider image --- .../remix-ide/src/assets/img/remi-desk-470.webp | Bin 26646 -> 0 bytes apps/remix-ide/src/assets/img/remi-prof.webp | Bin 0 -> 63410 bytes .../src/lib/components/homeTabFeatured.tsx | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 apps/remix-ide/src/assets/img/remi-desk-470.webp create mode 100644 apps/remix-ide/src/assets/img/remi-prof.webp diff --git a/apps/remix-ide/src/assets/img/remi-desk-470.webp b/apps/remix-ide/src/assets/img/remi-desk-470.webp deleted file mode 100644 index 942563fe0fefdb764c7115783307d290e334142e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26646 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 diff --git a/apps/remix-ide/src/assets/img/remi-prof.webp b/apps/remix-ide/src/assets/img/remi-prof.webp new file mode 100644 index 0000000000000000000000000000000000000000..f5bfceeb4afa601f2b1483ec5fbd716448e0af29 GIT binary patch literal 63410 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 Db*)3Jp`0AYor7csWjo>RwVP@%WaNC=y zPP&f%-uWJ4iwl{cPzvhjCXh}>?Iymf+F7||tK(5rnB+i2x+tQ&}zQ$u1HCc;_yGyDE=K;5q0?Xy6s?9V%+j!!b z^h?BzRQVJ*VjVIPh5D9c5;u-2_w2J2j`~>X=?Nz--FJWHKRDm5>??p?RYC4IkS`~t z+vSsYzZa(dXX=MGsX}IOAsY1NoBNNQo>&RmhyhFViFozEUH2SzL)BNFmsmyT8nV$A zg4WbbTiTq2r2q1my8D_kwi@Tr*hV0sdh#TeAatFD&MF!S&O{TlhaCq$!&Rbcugpx~ z{0<)-uOTETCzP(aOQiv+Y;9Ki^3ki6$F%eCO{t-T*RanoOc9kLv*KduFR3fJM#5bs z2x!VY0wslBj47SF?Hiq!ZXPZAfa^+47u-W+$314oz(IU`MBP|`&gQgSU1(S==Dpp( z0lfgO`9bj#>y#5*%Ph-3c7TRpgMcDfb1Ah^*mjl-YQu3L2Q)%i=G4h1<9Sgm2Xn!m zCd>^r$rBnk;T`km+QDtObj^Y?wz*5O540ebWQV~{$Unf+39Rrc_a$ot= zH@a(;Fu8FijFD11_9mZNjppUQGoKlzls3K7H<*eRtd#Yd{Rj>dI_nOsjsVQl1V|g9 zleh)yeE#6wMqMXTAB@YkFT)k7r$ITnm&#x(^b|y=<2SL0>E(RqtB#R=*@;l^)ud-p zJO9Sf8+%}T8*GnH0Vz8$_e%flN4RgcI_HOCG?SuZNaf69pLNdw*mYvmUqop^Y|xt48_)t{I8nRxYK}dE-r!0pj*BTMHmhZ=# z?59D1NR!LuOIPPn2TSj(M^&5+VKYj!Xgv#xDQ9*W>mM#1Cg^8En#E)ej5{XBXv&8} zyCRS$@fNf@_};@ovGU$KHrh%&wV6SeK~R>1%K<;(AYKAh;<~a5Wlp-5;iz`fAx_?Q zLwO&%((haK9(jP7MV139YHc`^$!hOe8I1hMtIPqzCv7PdDtcimqCNd4F^poiTJ{~w zVBSL7a(XaZ@eaYzf|H z+ms_wc$ZdMFe>{t=#Es-lK39oXByy!(yh64?X1KXNOi+U^2|S;ls%j%avAG7B`kRv z3RsWDr9Y7foUgc&+@Q%^PSdtmB8}JPG}6*yY}`F(K6e}4GArRyBCm?C!}|jQqKi}Y zq`nV4UF8)kBKY?E#doW6iuB=LK}cLajPz7_!H){Z9klyUmQt{f`Pj+^;H{93v(jw9 zqur`X+{h`X%3vJ*P{Q0F>yJRq%A&1+*JiJ(_@BfE<`qQMaSx>Hl5_4rx9OD(|7QB< z8mvsC+X6TKuogfxe!%J@gMZwfQqEeJc$iCZ4qB|=DPQ;2As8qQh0n6S!WD`Ml}c!|(Wv6f z#L5wAmsYbE-uOr5Y73X5yvU~oY!R+;i_UV0e7rBga>kl%l!ISP70+o~Yi+*5)5*IG z^Nb6T^Bbx@Nb{OcR8@RgWZcsYNJy#&@&y%^uLEr?&R+sS+!##4&p5>;LO{q=RnAtZ_x{@3(~&>L0dZ=C z3@VVc{~x>{w>L>p>&6ih*SPC?9K(R3MnC@1t;y$^BJlOXPtVBP85hoC0+L#fdXcE{ zs#oH6yX!2eARL!L(OB$Z90lSZ6QmJh?#@0DaXuV9GUR=UW8r8zfs#n!F}!%>N1$aY zAIqr@-|+U;$PM2bq{qyoBs;$PWq%-7eQ$F;}VcDCJ1&gax%uqs4%epm)T;vzx zUm@_84j~R46Z1-19V6pVEwN+2D-c5ufEE%|!T&NdI}BmwN67ty_Bwb7(goZhfR9|~+gQI#Q9_py7Vw$y z74#G0=)n`8C>7tT%%*k(^w%7ZD!~YWLExVwJmND9|ph-@Nrf9tuZVA7+-;-V_-V0q~0m0?@K$z>)ar7C|Hxn zNH%+>sWI9h254#(GZxt;g0+7i%E+~I?f<|+;Uazv`>p)~G)Pt$Gb*<^gWvA>eZTc0 z{JOYjZZNU8=wMwz~qr2N3p~xz6Ba|(sVQj+GF3GmVN5>Dy+jkg^h#5AjpH_Z&^+hx(RNv;@A4v*q z9iMZ)AiwBI9c0M2+(!*jf^OJgyG)A5e`8@WO9}UXQ-?$yKZit$A;qK010Fdj5T&eJ z@D&DB5{Mc4y%K0TRC{a3>5oMka_7ovxBFWkMZde;WPbB#pJ?{TK-k=WsOHwa4S$iM z#66T+LF?j=Hp`|_vJXVmd}Ax^(kJgjeT4glfoDK`CQc@Dkeo^#bKTUH10#OE5LY`6 zeq+U#LZyJYK`^Y=RFPEu8%9y@T3b=!zY8DxAm{PBbSFt3?$tYK+4h`MXnFHbvzT8k z$QQ0Nblc3I$JA+Bvi137jQqCk)8Ik^Q^T|)5T-X+lFTH~6# zE7B)eNY|MGX_T0fu=04q`TGj>56CpqaD+eu&Zk$WN_X_61Ao5uJyrVdMzohh9MZ|u zH{+b1GO(@zX}4T?eUt2rzY<-%cPG2IPtg(!ccOUn7DFU@n3LTqrCtmXhdhxfAwRQ?^&$D1B?)Y*7;d5K+n6+44Z!4gh; z%gGECnlpOborbjTPWjM)q-==yr#A#qGZF5;n8<4Ca!Hj>R#xZvb`_|Uzcy7xXSCQo zHzthjtWYEutU$;Sa+6_UE4&F!5_F(Pl53}@9h%>$C!4z^D7iM18HSK4HsW;Tkv!iB zZ&>yaC6hGUNGb}eH-af8d5Nmj*?P`Xr z8bo(g7dlkpWffTXk;DGPR*VDe{x%JrYdAA(Kb*5b;V#0@mNx9d2pX{(0*=JQd1K1} z-{^N#KRPurIGD>yjlT7u`~|es|F`?@go+Nx2vB%`pJxofk z;p1jpa9EVDaZnX#I_%3Wdaa^mkPr|MY!(i#8sr1bGe4Kn9M>Q?NQmzDN2+-=pW6BJ zG`rHtXmkvo!vRCIT7?8KyBeeeM{G;5x;>1^%IkyTKHo~SxBkKrh1P`D4pW)jWvm%) zx$XpGcW=kRaZ1VW;IaN~lL~=?&p{Giiv7|hH^qP#=ed4O$om)Tp3p9AB zVIxh~cUB&jlb4Oj@9bsS7~8&y@DRA0%vYIe^97FRyP~EnBVmY)NQ>?hDRWE~;bQHj zS<2~2la+-drzmTvmz-JmvhWX8;3R=QW5Cr^r31kCr@4g8`^tPBNnDQt!coh<9@0Oi z-0E61C}bOH4TM_cx{d{{9B@LqW=nd@p;xv%(u-z*W97+cJ=XNN2si*T%sK&AQTf!B z5~)vM>FNo(Aj!vVp7XLF95rHd$$O^`SzIp+UwCsaOaBFUszHy7rX-G;K{_et^hfG< zeC0AT`*e{1#4gpCoZBl(Rz55kbpD*`1j!%IPp))R3)sWlciCI;x@C>jGf=|j87MvV z6V}CsyQp~_jf}zg1j+r}94j&YoX)d82wu2x%eqG_yFV%1ncz}&J2H^@0K=V1{($E6 znY#CJn${&;mK40tnWo4vL{{DSP-RJFhry<>w>dbrKNF(mC7uloMLq}D6lWgR4A(q1 zAX}Gc-*%<6Pr(keGSX+(t+yA0PTuYOc{8EJe5krB(4=Dw93$U|DuwKjr|&i~f$lSt zQoBi6N4#Bd2*o`I6Gg)33Fw6q@Y9d7Z4-Ml&pPV!_-T}~fb61bIq%;%eYB+r>~y)v zk!WSZvtQ;7mrGsvK`>|rsG_Elh32ijCek?o<7&-2)Z}tcX$UH`2!={qXsP!e!+z97 zyU_cKF2Kh#WE!qP`m z)0q9XE2;`ScXl3JiO(BUguCKmWYKkAvN6DX+F-ZKlGYkeh|l|BBE1NMB+{wRWhzKc zAVS*9tCny@Pz~Wi{ZKtRwkhD~1~z`AG`92*5ya+D@i{u?ax5=wQhKu_`nk*ugQZfYTTO>&_k0j|z7O4U|y}Ag3}iVX}Xn z{1{c^1842Mj1utM*hEZ{El9QcyfgCEq6g>nA-#R^E(~g0K+;JR9EC+)=L-9kk1ArA z)ErK2@@mva!H7^%Q@ zM|yFF@%I}Mo@2{7J3TyI^8QY;fz6hNTf6iBy)fOmG}aqN3uh{GP?L4s~zUHlIK6)A&mCvHBzm7)an z<{>kj(y=wwlTee*H*&$ZG%k~#7}%E61OhV&0#72@RS>S%q+Bb@WVTk~l@!sXh*~Vb z+vAL6Ie50^^PwaP7DAw*8VWCN#-eFHkE;G=(H*UqRpz(Q6EgjKis|c9#+9l8 zJXE7yq8LM=uP^EDI5P_;tMd2hUIY3z)yrr^)Sh$m%K|zwUIE5svj(;Dm!wbqS!?Xf z`bC~r-UxmP+ph%>x_YV&%EDp4yV#Pnr`6Y{%!l#=ujDKj!qBFq|7BB;-@L-6OF@s(h$w1J8K6 zlD|7%;kjWHYCurQ9CpeipnETBb|U7i{J^f0o@k;6BjLkiD2nFML3e_b)5RdzB4P7P z3e6`ZtIoDj|4Cs3CueLnyOK|M4@5kJ0XhDCAzf0djY*z*Oy=jF$c?NsR^&PaIG=a*C^Ho0PULC!psooG`KjW^m~6F{+N*W zoo!j$f%h-bEwTlz+pD%xq7_>Q&nVg54r-9bc--KUBO)xXG#DoBT-oRaoS>jv4EYV6 zmE#qyVC0sSm%j&2&!NANk=>e~-L}LtV~5$I8ooaf>a${)UNZ^=zS($_=UmW#E6@u~ zhWf(j0C)7m%HP0`j%5JKbsZWFRW4YO!eoWF!Sj z{tx4X%G+`Qb7mgyrBaPpA0uSiE5*T9{4az0{48{Ah4$j#^ESyO(Y#oxSdFw=G*Ayu zR%CCNboUyQJLe3)@P)g?ZkPm{77SMHlw&#B8oist0(=J`e2Q%EeE^sZkk=U7N_cANw1T=$xLGQjf<^;>b`EnP%B6njj?R(?e-RLkosA^y z$6MJLdxPEJ)f5al6%a}%)l(c6mB0P;n9BvI8Y7700962080P>00962I6_HH1SkLi0000C00002Kkxtm00000I6_HH Z1VaD-0000EP-10Q0T2KN0A2t9002+T5$XT{ literal 0 HcmV?d00001 diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index 17d968a5c3..daa0b8619c 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -67,7 +67,7 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) {
- +
From 981d0f4f1173e34e1a53a9b93de98a046fe7adf0 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 11 Sep 2024 14:26:15 +0100 Subject: [PATCH 221/312] small fixes --- libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx | 3 +-- .../home-tab/src/lib/components/homeTabFeaturedPlugins.tsx | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index daa0b8619c..f69c35d96f 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -79,12 +79,11 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) { { - await props.plugin.appManager.activatePlugin(['LearnEth', 'solidity', 'solidityUnitTesting']) + await props.plugin.appManager.activatePlugin(['LearnEth', 'solidityUnitTesting']) props.plugin.verticalIcons.select('LearnEth') await props.plugin.call('LearnEth', 'home') } } - > diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx index 52a9880312..10cf7d82bc 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx @@ -109,7 +109,7 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) { } }} renderButtonGroupOutside={true} - ssr={true} // means to render carousel on server-side. + ssr={false} // means to render carousel on server-side. keyBoardControl={true} containerClass="carousel-container" deviceType={'desktop'} From 1566dabbf503772b64d61ca4bd364a520c5c8de8 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Sep 2024 12:39:44 +0530 Subject: [PATCH 222/312] cursor pointer --- libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index f69c35d96f..0093649be3 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -78,6 +78,7 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) {
{ await props.plugin.appManager.activatePlugin(['LearnEth', 'solidityUnitTesting']) props.plugin.verticalIcons.select('LearnEth') From 2502807d7ac3453db7533a14cba640ae55320d37 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Sep 2024 13:38:48 +0530 Subject: [PATCH 223/312] fix linting --- libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx index 0093649be3..0db352120b 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx @@ -78,7 +78,7 @@ function HomeTabFeatured(props:HomeTabFeaturedProps) {
{ await props.plugin.appManager.activatePlugin(['LearnEth', 'solidityUnitTesting']) props.plugin.verticalIcons.select('LearnEth') From 4be06106826b19a8527465c520ca7b2d5532e253 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 2 Sep 2024 19:55:38 +0530 Subject: [PATCH 224/312] Short description for settings --- apps/remix-ide/src/app/tabs/locales/en/settings.json | 3 ++- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/settings.json b/apps/remix-ide/src/app/tabs/locales/en/settings.json index 2ea6de0d4b..55f83aa3d2 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/settings.json +++ b/apps/remix-ide/src/app/tabs/locales/en/settings.json @@ -2,7 +2,8 @@ "settings.displayName": "Settings", "settings.reset": "Reset to Default settings", "settings.general": "General settings", - "settings.generateContractMetadataText": "Generate contract metadata. Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploys libraries automatically.", + "settings.generateContractMetadataText": "Generate contract metadata", + "settings.generateContractMetadataTooltip": "Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploys libraries automatically.", "settings.ethereunVMText": "Always use the Remix VM at load", "settings.wordWrapText": "Word wrap in editor", "settings.useAutoCompleteText": "Enable code completion in editor.", 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 d56fe1dff9..aa63cee205 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -249,6 +249,14 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { htmlFor="generatecontractmetadata" > + + + +
From a31f822aba9b7aff42fbcfb9a1c1fe69031f914c Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 2 Sep 2024 20:06:22 +0530 Subject: [PATCH 225/312] personal mode --- .../src/app/tabs/locales/en/settings.json | 4 ++-- .../settings/src/lib/remix-ui-settings.tsx | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/settings.json b/apps/remix-ide/src/app/tabs/locales/en/settings.json index 55f83aa3d2..ba2737c6fd 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/settings.json +++ b/apps/remix-ide/src/app/tabs/locales/en/settings.json @@ -10,8 +10,8 @@ "settings.useShowGasInEditorText": "Display gas estimates in editor.", "settings.displayErrorsText": "Display errors in editor while typing.", "settings.matomoAnalytics": "Enable Matomo Analytics. We do not collect personally identifiable information (PII). The info is used to improve the site’s UX & UI. See more about ", - "settings.enablePersonalModeText": " Enable Personal Mode for web3 provider. Transaction sent over Web3 will use the web3.personal API.\n", - "settings.warnText": "Be sure the endpoint is opened before enabling it. This mode allows a user to provide a passphrase in the Remix interface without having to unlock the account. Although this is very convenient, you should completely trust the backend you are connected to (Geth, Parity, ...). Remix never persists any passphrase", + "settings.enablePersonalModeText": " Enable Personal Mode for web3 provider", + "settings.enablePersonalModeTooltip": "Transaction sent over Web3 will use the web3.personal API. Be sure the endpoint is opened before enabling it. This mode allows a user to provide a passphrase in the Remix interface without having to unlock the account. Although this is very convenient, you should completely trust the backend you are connected to (Geth, Parity, ...). Remix never persists any passphrase", "settings.gitAccessTokenTitle": "Github Credentials", "settings.gitAccessTokenText": "The access token is used to publish a Gist and retrieve GitHub contents. You may need to input username/email.", "settings.gitAccessTokenText2":"Go to github token page (link below) to create a new token and save it in Remix. Make sure this token has only 'create gist' permission", 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 aa63cee205..84b7f75432 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -251,12 +251,11 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { -
@@ -304,11 +303,16 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
From 12fac700197bb62a89a569c350300a057b756b7f Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 2 Sep 2024 20:12:53 +0530 Subject: [PATCH 226/312] update title --- apps/remix-ide/src/app/tabs/locales/en/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/settings.json b/apps/remix-ide/src/app/tabs/locales/en/settings.json index ba2737c6fd..ae329ba8c6 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/settings.json +++ b/apps/remix-ide/src/app/tabs/locales/en/settings.json @@ -1,7 +1,7 @@ { "settings.displayName": "Settings", "settings.reset": "Reset to Default settings", - "settings.general": "General settings", + "settings.general": "General", "settings.generateContractMetadataText": "Generate contract metadata", "settings.generateContractMetadataTooltip": "Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploys libraries automatically.", "settings.ethereunVMText": "Always use the Remix VM at load", From 944471138e6797e6125c8b19e469286b053662a2 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 4 Sep 2024 16:51:46 +0530 Subject: [PATCH 227/312] matomo text --- .../remix-ide/src/app/tabs/locales/en/settings.json | 9 +++++---- .../remix-ui/settings/src/lib/remix-ui-settings.tsx | 13 ++++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/settings.json b/apps/remix-ide/src/app/tabs/locales/en/settings.json index ae329ba8c6..41240fe28c 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/settings.json +++ b/apps/remix-ide/src/app/tabs/locales/en/settings.json @@ -6,10 +6,11 @@ "settings.generateContractMetadataTooltip": "Generate a JSON file in the contract folder. Allows to specify library addresses the contract depends on. If nothing is specified, Remix deploys libraries automatically.", "settings.ethereunVMText": "Always use the Remix VM at load", "settings.wordWrapText": "Word wrap in editor", - "settings.useAutoCompleteText": "Enable code completion in editor.", - "settings.useShowGasInEditorText": "Display gas estimates in editor.", - "settings.displayErrorsText": "Display errors in editor while typing.", - "settings.matomoAnalytics": "Enable Matomo Analytics. We do not collect personally identifiable information (PII). The info is used to improve the site’s UX & UI. See more about ", + "settings.useAutoCompleteText": "Enable code completion in editor", + "settings.useShowGasInEditorText": "Display gas estimates in editor", + "settings.displayErrorsText": "Display errors in editor while typing", + "settings.matomoAnalytics": "Enable Matomo Analytics. See", + "settings.matomoAnalyticsTooltip": "We do not collect personally identifiable information (PII). The info is used to improve the site’s UX & UI.", "settings.enablePersonalModeText": " Enable Personal Mode for web3 provider", "settings.enablePersonalModeTooltip": "Transaction sent over Web3 will use the web3.personal API. Be sure the endpoint is opened before enabling it. This mode allows a user to provide a passphrase in the Remix interface without having to unlock the account. Although this is very convenient, you should completely trust the backend you are connected to (Geth, Parity, ...). Remix never persists any passphrase", "settings.gitAccessTokenTitle": "Github Credentials", 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 84b7f75432..5fc491e88a 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -254,7 +254,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { tooltipId="settings-tooltip-metadata" tooltipText={intl.formatMessage({ id: 'settings.generateContractMetadataTooltip' })} > - +
@@ -311,7 +311,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { tooltipId="settings-tooltip-personalMode" tooltipText={intl.formatMessage({ id: 'settings.enablePersonalModeTooltip' })} > - +
@@ -321,7 +321,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { - + {' '} {' '} @@ -329,6 +329,13 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { Matomo + + +
From 7d08b09fc6ceff5b829d98cc41c28e2fc4e33db2 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Wed, 4 Sep 2024 17:00:55 +0530 Subject: [PATCH 228/312] linting fix --- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5fc491e88a..57f8953ffa 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -305,7 +305,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
@@ -303,7 +303,6 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
@@ -334,7 +333,7 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { tooltipId="settings-tooltip-matomo" tooltipText={intl.formatMessage({ id: 'settings.matomoAnalyticsTooltip' })} > - +
From f37a465290cb452460abda2e2e52e4431362c2ab Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Sep 2024 14:39:05 +0530 Subject: [PATCH 230/312] move tooltip to triangle icon --- libs/remix-ui/settings/src/lib/remix-ui-settings.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 3e1562b44a..f77700b94e 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -304,13 +304,12 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
From f079d1794b84b983581672cbbc2f8e306c31879e Mon Sep 17 00:00:00 2001 From: lianahus Date: Tue, 10 Sep 2024 12:07:08 +0200 Subject: [PATCH 231/312] scrollbar --- libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.css b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.css index 5c79533a71..50588fc36b 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.css +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.css @@ -21,6 +21,6 @@ } * { - scrollbar-width: thin; + scrollbar-width: 0.5rem; scrollbar-color: var(--bg-dark) var(--bg-light); -} \ No newline at end of file +} From dd1b7e5d48549a403dab534d3c0000d5c92c6c36 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 14:48:37 +0100 Subject: [PATCH 232/312] change title to agreed text --- .../plugins/templates-selection/templates-selection-plugin.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index b2f5c593c2..138ac3a7a4 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -147,7 +147,7 @@ export class TemplatesSelectionPlugin extends ViewPlugin { ['ERC721', 'secondary'], ['ERC1155', 'primary'], ]} - title='Template explorer' + title='Workspace Templates' description="Select a template to create a workspace or to add it to current workspace" > { From 0d8a761112bdea9958afa316abe9b91f43c846ac Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 15:13:25 +0100 Subject: [PATCH 233/312] update text in templates.ts. update tooltips. update hambuger --- .../plugins/templates-selection/templates.ts | 52 +++++++++---------- .../src/app/tabs/locales/en/filePanel.json | 4 +- .../lib/components/workspace-hamburger.tsx | 10 ++++ 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 169aae0277..2ea38759b1 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -14,24 +14,24 @@ export const templates = (intl, plugin) => { value: "ozerc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], - description: 'A simple ERC20 project' + description: 'A simple ERC20 Project' }, { value: "ozerc721", displayName: "ERC721 (NFT)", tagList: ["ERC721", "Solidity"], - description: 'A simple ERC721 (aka NFT) project' + description: 'A simple ERC721 (aka NFT) Project' }, { value: "ozerc1155", tagList: ["Solidity"], displayName: "ERC1155", - description: 'A simple ERC1155 (multi token) project' + description: 'A simple ERC1155 (multi token) Project' }, { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", tagList: ["Solidity"], opts: { mintable: true @@ -50,7 +50,7 @@ export const templates = (intl, plugin) => { value: "ozerc1155", displayName: "ERC1155", tagList: ["Solidity"], - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { mintable: true } @@ -58,7 +58,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", tagList: ["Solidity", "ERC20"], opts: { mintable: true, @@ -78,7 +78,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that Manage multiple Token types", opts: { mintable: true, burnable: true @@ -88,7 +88,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { mintable: true, pausable: true @@ -108,7 +108,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", tagList: ["ERC20"], opts: { mintable: true, @@ -123,7 +123,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups' }, @@ -141,7 +141,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups' }, @@ -150,7 +150,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true @@ -170,7 +170,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true @@ -180,7 +180,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true, @@ -202,7 +202,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -213,7 +213,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "ERC20", - description: "A standard interface for fungible tokens", + description: "A Standard Interface for fungible Tokens", opts: { upgradeable: 'uups', mintable: true, @@ -235,7 +235,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -246,7 +246,7 @@ export const templates = (intl, plugin) => { { value: "ozerc1155", displayName: "ERC1155", - description: "A standard interface for contracts that manage multiple token types", + description: "A Standard Interface for Contracts that manage Multiple Token types", opts: { upgradeable: 'uups', mintable: true, @@ -259,12 +259,12 @@ export const templates = (intl, plugin) => { }, { name: "Cookbook", - tooltip: "Cookbook is a smart contract search tool. Click here to open cookbook and browse contracts.", + tooltip: "Cookbook is a Smart Contract Search Tool. Click here to open Cookbook and browse Contracts.", onClick: async () => { await plugin.call('manager', 'activatePlugin', 'cookbookdev') plugin.call('menuicons', 'showContent', 'cookbookdev') }, - onClickLabel: 'Open cookbook plugin', + onClickLabel: 'Open Cookbook Plugin', items: [ { value: "token-sale", displayName: 'Token Sale' }, { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, @@ -280,7 +280,7 @@ export const templates = (intl, plugin) => { { name: "OxProject", items: [ - { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A standard interface for fungible tokens by 0xProject" } + { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A standard Interface for fungible Tokens by 0xProject" } ] }, { @@ -292,9 +292,9 @@ export const templates = (intl, plugin) => { { name: "Circom ZKP", items: [ - { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Run a ZK Semaphore circom circuit.' }, - { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Run a ZK Hash checker circom circuit.' }, - { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Run a Rate Limiting Nullifier circom circuit.' } + { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Run a ZK Semaphore Circom Circuit.' }, + { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Run a ZK Hash checker Circom Circuit.' }, + { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Run a Rate Limiting Nullifier Circom Circuit.' } ] }, { @@ -304,7 +304,7 @@ export const templates = (intl, plugin) => { value: "sindriScripts", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.addscriptsindri' }), - description: 'Use the Sindri API to compile and generate proof.' + description: 'Use the Sindri API to Compile and Generate Proof.' }, ], }, @@ -373,4 +373,4 @@ export const templates = (intl, plugin) => { IsArtefact: true } ] -} \ No newline at end of file +} diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index affee6c134..b776e76866 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -2,6 +2,7 @@ "filePanel.displayName": "File explorer", "filePanel.workspace": "WORKSPACES", "filePanel.create": "Create", + "filePanel.createBlank":"Create Blank", "filePanel.create.desktop": "Create Project", "filePanel.clone": "Clone", "filePanel.download": "Download", @@ -9,7 +10,8 @@ "filePanel.restore": "Restore", "filePanel.name": "Name", "filePanel.save": "Save", - "filePanel.workspace.create": "Create Workspace", + "filePanel.workspace.create": "Create Workspace using Templates", + "filePanel.workspace.createBlank": "Create Blank Workspace", "filePanel.workspace.create.desktop": "Create project in new folder", "filePanel.workspace.rename": "Rename Workspace", "filePanel.workspace.save_workspace": "Save Workspace", 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 95de007539..03dcc6cb1a 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -36,6 +36,16 @@ export function HamburgerMenu(props: HamburgerMenuProps) { }} platforms={[appPlatformTypes.web]} > + { + props.createWorkspace() + props.hideIconsMenu(!showIconsMenu) + }} + platforms={[appPlatformTypes.web]} + > Date: Wed, 4 Sep 2024 15:23:17 +0100 Subject: [PATCH 234/312] create logic and markup for blank workspace --- .../src/lib/components/createModal.tsx | 51 +++++++++++++++++++ .../workspace/src/lib/remix-ui-workspace.tsx | 6 +++ 2 files changed, 57 insertions(+) create mode 100644 libs/remix-ui/workspace/src/lib/components/createModal.tsx diff --git a/libs/remix-ui/workspace/src/lib/components/createModal.tsx b/libs/remix-ui/workspace/src/lib/components/createModal.tsx new file mode 100644 index 0000000000..81b9d24a08 --- /dev/null +++ b/libs/remix-ui/workspace/src/lib/components/createModal.tsx @@ -0,0 +1,51 @@ +import React from 'react' +import { FormattedMessage } from 'react-intl' + +export const createModalMessage = async ( + defaultName: string, + gitConfigNotSet: boolean, + onChangeTemplateName: (name: string) => void, + onChangeInitGit: (name: string) => void) => { + + return ( + <> + + onChangeTemplateName(e.target.value)} + onInput={(e) => onChangeTemplateName((e.target as any).value)} + /> +
+ onChangeInitGit(e.target.value)} + onInput={(e) => onChangeInitGit((e.target as any).value)} + /> + +
+ {gitConfigNotSet ? ( +
+ +
+ ) : ( + <> + )} + + ) +} 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 f6bf6d4184..287691cdb2 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -335,6 +335,12 @@ export function Workspace() { ) } + const createBlankWorkspace = async () => { + global.modal( + + ) + } + const saveSampleCodeWorkspace = () => { const workspaceName = global.plugin.getAvailableWorkspaceName('code-sample') global.modal( From 07962422a6e74e4569fd40a8374e26e0e101ea82 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 4 Sep 2024 16:22:14 +0100 Subject: [PATCH 235/312] implement blank workspace logic --- .../src/lib/components/workspace-hamburger.tsx | 3 ++- .../workspace/src/lib/remix-ui-workspace.tsx | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) 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 03dcc6cb1a..0dad148999 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -7,6 +7,7 @@ import { WorkspaceMetadata } from '../types' export interface HamburgerMenuProps { selectedWorkspace: WorkspaceMetadata createWorkspace: () => void + createBlankWorkspace: () => Promise renameCurrentWorkspace: () => void downloadCurrentWorkspace: () => void deleteCurrentWorkspace: () => void @@ -41,7 +42,7 @@ export function HamburgerMenu(props: HamburgerMenuProps) { fa="far fa-plus" hideOption={hideWorkspaceOptions} actionOnClick={() => { - props.createWorkspace() + props.createBlankWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} 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 287691cdb2..96a74ed5dc 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -18,6 +18,7 @@ import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' import { branch, GitHubUser, gitUIPanels, userEmails } from '@remix-ui/git' +import { createModalMessage } from './components/createModal' const _paq = (window._paq = window._paq || []) @@ -335,9 +336,23 @@ export function Workspace() { ) } + const [counter, setCounter] = useState(0) const createBlankWorkspace = async () => { + const username = await global.plugin.call('settings', 'get', 'settings/github-user-name') + const email = await global.plugin.call('settings', 'get', 'settings/github-email') + const gitNotSet = !username || !email + const defaultName = await global.plugin.call('filePanel', 'getAvailableWorkspaceName', 'blank') + let workspace = defaultName + let gitInit = false + setCounter((previous) => { + return previous + 1 + }) global.modal( - + intl.formatMessage({ id: 'filePanel.workspace.createBlank' }), + await createModalMessage(`blank - 1`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), + intl.formatMessage({ id: 'filePanel.ok' }), + () => global.dispatchCreateWorkspace(`blank - ${counter}`, 'blank', false), + intl.formatMessage({ id: 'filePanel.cancel' }) ) } @@ -932,6 +947,7 @@ export function Workspace() { Date: Tue, 10 Sep 2024 14:10:59 +0100 Subject: [PATCH 236/312] made changes as per @ryestew & @LianaHus --- .../workspace/src/lib/components/workspace-hamburger.tsx | 8 ++++---- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) 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 0dad148999..860ac4042e 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -28,21 +28,21 @@ export function HamburgerMenu(props: HamburgerMenuProps) { return ( <> { - props.createWorkspace() + props.createBlankWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} > { - props.createBlankWorkspace() + props.createWorkspace() props.hideIconsMenu(!showIconsMenu) }} platforms={[appPlatformTypes.web]} 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 96a74ed5dc..8db36e36a0 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -349,7 +349,7 @@ export function Workspace() { }) global.modal( intl.formatMessage({ id: 'filePanel.workspace.createBlank' }), - await createModalMessage(`blank - 1`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), + await createModalMessage(`blank - ${counter}`, gitNotSet, (value) => { workspace = value }, (value) => gitInit = false), intl.formatMessage({ id: 'filePanel.ok' }), () => global.dispatchCreateWorkspace(`blank - ${counter}`, 'blank', false), intl.formatMessage({ id: 'filePanel.cancel' }) From 4fd1cf569619fba477d90db81400a47fa6f67538 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 11 Sep 2024 10:06:26 +0100 Subject: [PATCH 237/312] fix label for hamburger menu --- apps/remix-ide/src/app/tabs/locales/en/filePanel.json | 1 + .../workspace/src/lib/components/workspace-hamburger-item.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index b776e76866..549b7d00c0 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -2,6 +2,7 @@ "filePanel.displayName": "File explorer", "filePanel.workspace": "WORKSPACES", "filePanel.create": "Create", + "filePanel.createLabel": "Create using Template", "filePanel.createBlank":"Create Blank", "filePanel.create.desktop": "Create Project", "filePanel.clone": "Clone", 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 25622b3c9a..f5df61691a 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 @@ -32,7 +32,7 @@ export function HamburgerMenuItem(props: HamburgerMenuItemProps) { > - + {props.kind === 'create' ? :}
From 0a47c67f639764f312ce22f874b677837214a94b Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 11 Sep 2024 16:28:01 +0100 Subject: [PATCH 238/312] blank workspace counter starts from 1 --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8db36e36a0..2e035ac018 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -336,7 +336,7 @@ export function Workspace() { ) } - const [counter, setCounter] = useState(0) + const [counter, setCounter] = useState(1) const createBlankWorkspace = async () => { const username = await global.plugin.call('settings', 'get', 'settings/github-user-name') const email = await global.plugin.call('settings', 'get', 'settings/github-email') From 31689aaac09445889b608636ffc5ec4dc94de85a Mon Sep 17 00:00:00 2001 From: ryestew Date: Wed, 11 Sep 2024 23:40:19 -0400 Subject: [PATCH 239/312] update text to follow a standardized case style --- .../plugins/templates-selection/templates.ts | 227 +++++++++--------- .../src/app/tabs/locales/en/filePanel.json | 4 +- 2 files changed, 117 insertions(+), 114 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 2ea38759b1..41573f3c37 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -3,7 +3,7 @@ export const templates = (intl, plugin) => { { name: "Generic", items: [ - { value: "remixDefault", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.basic' }), description: 'A default project' }, + { value: "remixDefault", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.basic' }), description: 'The default project' }, { value: "blank", displayName: intl.formatMessage({ id: 'filePanel.blank' }), IsArtefact: true, description: 'A blank project' } ] }, @@ -14,102 +14,102 @@ export const templates = (intl, plugin) => { value: "ozerc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], - description: 'A simple ERC20 Project' + description: 'A simple fungible token contract' }, { - value: "ozerc721", - displayName: "ERC721 (NFT)", - tagList: ["ERC721", "Solidity"], - description: 'A simple ERC721 (aka NFT) Project' + value: "ozerc20", + displayName: "ERC20", + description: "An ERC20 contract with:", + tagList: ["Solidity"], + opts: { + mintable: true + } }, { - value: "ozerc1155", - tagList: ["Solidity"], - displayName: "ERC1155", - description: 'A simple ERC1155 (multi token) Project' + value: "ozerc20", + displayName: "ERC20", + description: "An ERC20 contract with:", + tagList: ["Solidity", "ERC20"], + opts: { + mintable: true, + burnable: true + }, }, { value: "ozerc20", displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", - tagList: ["Solidity"], + description: "An ERC20 contract with:", opts: { - mintable: true - } + mintable: true, + pausable: true + }, + tagList: ["ERC20", "Solidity"] }, { value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", - tagList: ["Solidity", "ERC721"], - opts: { - mintable: true - } + displayName: "ERC721", + tagList: ["ERC721", "Solidity"], + description: 'A simple non-fungible token (NFT) contract' }, { - value: "ozerc1155", - displayName: "ERC1155", - tagList: ["Solidity"], - description: "A Standard Interface for Contracts that manage Multiple Token types", + value: "ozerc721", + displayName: "ERC721", + description: "An ERC721 contract with:", + tagList: ["Solidity", "ERC721"], opts: { mintable: true } }, { - value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", - tagList: ["Solidity", "ERC20"], + value: "ozerc721", + displayName: "ERC721 (NFT)", + description: "An ERC721 contract with:", opts: { mintable: true, burnable: true }, + tagList: ["ERC721", "Solidity"] }, { value: "ozerc721", displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + description: "An ERC721 contract with:", opts: { mintable: true, - burnable: true + pausable: true }, tagList: ["ERC721", "Solidity"] }, { value: "ozerc1155", + tagList: ["Solidity"], displayName: "ERC1155", - description: "A Standard Interface for Contracts that Manage multiple Token types", - opts: { - mintable: true, - burnable: true - }, - tagList: ["ERC1155", "Solidity"] + description: 'A simple multi token contract' }, { - value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", + value: "ozerc1155", + displayName: "ERC1155", + tagList: ["Solidity"], + description: "An ERC1155 contract with:", opts: { - mintable: true, - pausable: true - }, - tagList: ["ERC20", "Solidity"] + mintable: true + } }, { - value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + value: "ozerc1155", + displayName: "ERC1155", + description: "An ERC1155 contract with:", opts: { mintable: true, - pausable: true + burnable: true }, - tagList: ["ERC721", "Solidity"] + tagList: ["ERC1155", "Solidity"] }, { value: "ozerc1155", displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", - tagList: ["ERC20"], + description: "An ERC1155 contract with:", + tagList: ["ERC1155"], opts: { mintable: true, pausable: true @@ -122,120 +122,120 @@ export const templates = (intl, plugin) => { items: [ { value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", + displayName: "UUPS ERC20", + description: "A simple ERC20 contract using the Universal Upgradeable Proxy Standard (UUPS) pattern", opts: { upgradeable: 'uups' }, tagList: ["ERC20", "Solidity"] }, { - value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + value: "ozerc20", + displayName: "UUPS ERC20", + description: "UUSP ERC20 contract with:", opts: { - upgradeable: 'uups' + upgradeable: 'uups', + mintable: true }, - tagList: ["ERC721", "Solidity"] + tagList: ["ERC20", "Solidity"] }, { - value: "ozerc1155", - displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", + value: "ozerc20", + displayName: "UUPS ERC20", + description: "UUSP ERC20 contract with:", opts: { - upgradeable: 'uups' + upgradeable: 'uups', + mintable: true, + burnable: true }, - tagList: ["ERC1155", "Solidity"] + tagList: ["ERC20", "Solidity"] }, { value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", + displayName: "UUPS ERC20", + description: "UUSP ERC20 contract with:", opts: { upgradeable: 'uups', - mintable: true + mintable: true, + pausable: true }, tagList: ["ERC20", "Solidity"] }, { value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + displayName: "UUPS ERC721", + description: "A simple UUPS ERC721 contract", opts: { - upgradeable: 'uups', - mintable: true + upgradeable: 'uups' }, tagList: ["ERC721", "Solidity"] }, { - value: "ozerc1155", - displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", + value: "ozerc721", + displayName: "UUPS ERC721", + description: "UUPS ERC721 contract with:", opts: { upgradeable: 'uups', mintable: true }, - tagList: ["ERC1155", "Solidity"] + tagList: ["ERC721", "Solidity"] }, { - value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", + value: "ozerc721", + displayName: "UUPS ERC721 (NFT)", + description: "Non-fungible Token Standard", opts: { upgradeable: 'uups', mintable: true, burnable: true }, - tagList: ["ERC20", "Solidity"] + tagList: ["ERC721", "Solidity"] }, { value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + displayName: "UUPS ERC721 (NFT)", + description: "UUPS ERC721 with: ", opts: { upgradeable: 'uups', mintable: true, - burnable: true + pausable: true }, tagList: ["ERC721", "Solidity"] }, { value: "ozerc1155", - displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", + displayName: "UUPS ERC1155", + description: "A simple multi token contract using the UUPS pattern", opts: { - upgradeable: 'uups', - mintable: true, - burnable: true + upgradeable: 'uups' }, tagList: ["ERC1155", "Solidity"] }, { - value: "ozerc20", - displayName: "ERC20", - description: "A Standard Interface for fungible Tokens", + value: "ozerc1155", + displayName: "UUPS ERC1155", + description: "UUPS ERC1155 with:", opts: { upgradeable: 'uups', - mintable: true, - pausable: true + mintable: true }, - tagList: ["ERC20", "Solidity"] + tagList: ["ERC1155", "Solidity"] }, { - value: "ozerc721", - displayName: "ERC721 (NFT)", - description: "Non-fungible Token Standard", + value: "ozerc1155", + displayName: "UUPS ERC1155", + description: "UUPS ERC1155 with:", opts: { upgradeable: 'uups', mintable: true, - pausable: true + burnable: true }, - tagList: ["ERC721", "Solidity"] + tagList: ["ERC1155", "Solidity"] }, { value: "ozerc1155", - displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", + displayName: "UUPS ERC1155", + description: "UUPS ERC1155 with:", opts: { upgradeable: 'uups', mintable: true, @@ -245,8 +245,8 @@ export const templates = (intl, plugin) => { }, { value: "ozerc1155", - displayName: "ERC1155", - description: "A Standard Interface for Contracts that manage Multiple Token types", + displayName: "UUPS ERC1155", + description: "UUPS ERC1155 with:", opts: { upgradeable: 'uups', mintable: true, @@ -274,27 +274,30 @@ export const templates = (intl, plugin) => { { value: "nft-staking-with-infinite-rewards", displayName: 'Nft Staking with infinite rewards' }, { value: "basic-dao", displayName: 'Basic DAO' }, { value: "soulbound-nft", displayName: 'Soulbound Nft' }, - { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection nft with burnable nfts and pausable transfers' }, + { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection NFT', description: "Multi collection NFT with:", opts: { + burnable: true, + pausable: true + }, }, ] }, { name: "OxProject", items: [ - { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A standard Interface for fungible Tokens by 0xProject" } + { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A fungible token contract by 0xProject" } ] }, { name: "Gnosis Safe", items: [ - { value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or Customize the Gnosis Safe.' } + { value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or customize the Gnosis Safe.' } ] }, { name: "Circom ZKP", items: [ - { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Run a ZK Semaphore Circom Circuit.' }, - { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Run a ZK Hash checker Circom Circuit.' }, - { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Run a Rate Limiting Nullifier Circom Circuit.' } + { value: "semaphore", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.semaphore' }), description: 'Semaphore protocol for casting a message as a provable group member' }, + { value: "hashchecker", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.hashchecker' }), description: 'Hash checker Circom circuit' }, + { value: "rln", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.rln' }), description: 'Rate Limiting Nullifier Circom circuit' } ] }, { @@ -304,7 +307,7 @@ export const templates = (intl, plugin) => { value: "sindriScripts", tagList: ["ZKP"], displayName: intl.formatMessage({ id: 'filePanel.addscriptsindri' }), - description: 'Use the Sindri API to Compile and Generate Proof.' + description: 'Use the Sindri API to compile and generate proofs' }, ], }, @@ -334,12 +337,12 @@ export const templates = (intl, plugin) => { value: "contractCreate2Factory", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.addcreate2solidityfactory' }), - description: 'Factory for deploying a Contract using the CREATE2 opcode.' + description: 'Factory for deploying a contract using the CREATE2 opcode' }, { value: "contractDeployerScripts", displayName: intl.formatMessage({ id: 'filePanel.addscriptdeployer' }), - description: 'Script for deploying a Contract using the CREATE2 opcode.' + description: 'Script for deploying a contract using the CREATE2 opcode' } ] }, @@ -358,16 +361,16 @@ export const templates = (intl, plugin) => { items: [ { value: "runJsTestAction", displayName: intl.formatMessage({ id: 'filePanel.tssoltestghaction' }), - description: 'A Mocha Chai Test Workflow in a GitHub CI.' + description: 'A Mocha Chai test workflow in a GitHub CI.' }, { value: "runSolidityUnittestingAction", displayName: intl.formatMessage({ id: 'filePanel.solghaction' }), - description: 'Run a Solidity Unittest Workflow in a GitHub CI.' + description: 'Run a Solidity unit test workflow in a GitHub CI.' }, { value: "runSlitherAction", displayName: intl.formatMessage({ id: 'filePanel.slitherghaction' }), - description: 'Run a Slither Security Analysis in a GitHub CI.' + description: 'Run a Slither security analysis in a GitHub CI.' } ], IsArtefact: true diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index 549b7d00c0..378869138f 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -2,7 +2,7 @@ "filePanel.displayName": "File explorer", "filePanel.workspace": "WORKSPACES", "filePanel.create": "Create", - "filePanel.createLabel": "Create using Template", + "filePanel.createLabel": "Create Using Template", "filePanel.createBlank":"Create Blank", "filePanel.create.desktop": "Create Project", "filePanel.clone": "Clone", @@ -11,7 +11,7 @@ "filePanel.restore": "Restore", "filePanel.name": "Name", "filePanel.save": "Save", - "filePanel.workspace.create": "Create Workspace using Templates", + "filePanel.workspace.create": "Create Workspace using template", "filePanel.workspace.createBlank": "Create Blank Workspace", "filePanel.workspace.create.desktop": "Create project in new folder", "filePanel.workspace.rename": "Rename Workspace", From 6f4eed77d054d5368480b844fb81fd3ba05c814a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 23:57:11 +0000 Subject: [PATCH 240/312] Bump dset from 3.1.3 to 3.1.4 Bumps [dset](https://github.com/lukeed/dset) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/lukeed/dset/releases) - [Commits](https://github.com/lukeed/dset/compare/v3.1.3...v3.1.4) --- updated-dependencies: - dependency-name: dset 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 cdf1016ec4..bdbde9a3d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14104,9 +14104,9 @@ dotignore@~0.1.2: minimatch "^3.0.4" dset@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.3.tgz#c194147f159841148e8e34ca41f638556d9542d2" - integrity sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ== + version "3.1.4" + resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.4.tgz#f8eaf5f023f068a036d08cd07dc9ffb7d0065248" + integrity sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA== duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" From a7b36434270e4398982193600b9fe318e2d90a5a Mon Sep 17 00:00:00 2001 From: ryestew Date: Thu, 12 Sep 2024 10:08:22 -0400 Subject: [PATCH 241/312] fix linting error --- apps/remix-ide/src/app/plugins/templates-selection/templates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 41573f3c37..1a70bcd906 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -274,7 +274,7 @@ export const templates = (intl, plugin) => { { value: "nft-staking-with-infinite-rewards", displayName: 'Nft Staking with infinite rewards' }, { value: "basic-dao", displayName: 'Basic DAO' }, { value: "soulbound-nft", displayName: 'Soulbound Nft' }, - { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection NFT', description: "Multi collection NFT with:", opts: { + { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection NFT', description: "Multi collection NFT with:", opts: { burnable: true, pausable: true }, }, From 31d68313808f70db498e1e957ae1f088f7259ce1 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Thu, 12 Sep 2024 19:38:04 +0530 Subject: [PATCH 242/312] v0.54.0 release highlights --- releaseDetails.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/releaseDetails.json b/releaseDetails.json index 241101d8b9..15b21653c2 100644 --- a/releaseDetails.json +++ b/releaseDetails.json @@ -1,11 +1,13 @@ { - "version": "v0.53.0", + "version": "v0.54.0", "title": "RELEASE HIGHLIGHTS", - "highlight1": "Keyboard shortcut for Cut-Copy-Paste files and folder", - "highlight2": "Interface to generate proof in Circom compiler plugin", - "highlight3": "Publish multi-selected files to Gist", + "highlight1": "Login to GitHub from 'File Explorer'", + "highlight2": "Added Cookbook workspace templates", + "highlight3": "Added 'sendRawTransaction' API to remix-simulator", "highlight4": "", "more": "Read More", - "moreLink": "https://medium.com/remix-ide/remix-release-v0-53-0-615d9e7c6c58?source=friends_link&sk=35e918e8487aaab02e79ea4dc557a7e7" + "moreLink": "https://medium.com/remix-ide/remix-release-v0-54-0-021575d54849?source=friends_link&sk=e3960ba90994b63993987b007ee3ac63" } + + \ No newline at end of file From 61362b46f4bfd486d34a5a9aed9c0ddecf909e2e Mon Sep 17 00:00:00 2001 From: filip mertens Date: Fri, 13 Sep 2024 07:54:21 +0200 Subject: [PATCH 243/312] catch error --- apps/remixdesktop/notarizedmg.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remixdesktop/notarizedmg.sh b/apps/remixdesktop/notarizedmg.sh index e621d3a422..3522476f08 100644 --- a/apps/remixdesktop/notarizedmg.sh +++ b/apps/remixdesktop/notarizedmg.sh @@ -11,7 +11,7 @@ echo $DMG_PATHS xcrun notarytool store-credentials "notarytool-password" \ --apple-id ${APPLE_ID} \ --team-id ${APPLE_TEAM_ID} \ - --password ${APPLE_ID_PASSWORD} + --password ${APPLE_ID_PASSWORD} || exit 1 # Use jq to parse the DMGs array and read each line while IFS= read -r DMG_PATH; do From 99b6b8c24012123c9e8ecba360f35c467392b850 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Fri, 13 Sep 2024 07:57:36 +0200 Subject: [PATCH 244/312] error catch --- apps/remixdesktop/aftersign.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remixdesktop/aftersign.js b/apps/remixdesktop/aftersign.js index 5ea850e164..ec0e5efed0 100644 --- a/apps/remixdesktop/aftersign.js +++ b/apps/remixdesktop/aftersign.js @@ -77,6 +77,7 @@ exports.default = async function notarizing(context) { } catch (error) { console.error('Error during notarization:', error) + throw new Error('Error during notarization', error) } } From 49d322ebaa87272a5c36b31ae84922d2c4b0da59 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 13 Sep 2024 14:18:06 +0200 Subject: [PATCH 245/312] do not notarize when testing --- .circleci/config.yml | 2 +- apps/remixdesktop/aftersign.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f8449a1e5c..225d772c75 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -545,7 +545,7 @@ jobs: nvm use 20 cd apps/remixdesktop yarn installRipGrepMacOXarm64 - PUBLISH_FOR_PULL_REQUEST='false' USE_HARD_LINKS=false ./rundist.bash --arm64 + PUBLISH_FOR_PULL_REQUEST='false' DO_NOT_NOTARIZE='true' USE_HARD_LINKS=false ./rundist.bash --arm64 - run: name: "Run tests" command: | diff --git a/apps/remixdesktop/aftersign.js b/apps/remixdesktop/aftersign.js index ec0e5efed0..27d452eaab 100644 --- a/apps/remixdesktop/aftersign.js +++ b/apps/remixdesktop/aftersign.js @@ -1,6 +1,16 @@ const { notarize } = require('@electron/notarize') const fs = require('fs') const { exec } = require('child_process') // Import the exec function + +// read the environment variables from process + +console.log(process.env.DO_NOT_NOTARIZE) + +if (process.env.DO_NOT_NOTARIZE) { + console.log('NOTARIZING DISABLED') + return [] +} + exports.default = async function notarizing(context) { const { electronPlatformName, appOutDir } = context // Provided by electron-builder From 8777d564a0adf6bdca05bba4f8cf9383f7fe4496 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 13 Sep 2024 14:33:17 +0200 Subject: [PATCH 246/312] aftersign --- apps/remixdesktop/aftersign.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/remixdesktop/aftersign.js b/apps/remixdesktop/aftersign.js index 27d452eaab..6feec59496 100644 --- a/apps/remixdesktop/aftersign.js +++ b/apps/remixdesktop/aftersign.js @@ -8,7 +8,9 @@ console.log(process.env.DO_NOT_NOTARIZE) if (process.env.DO_NOT_NOTARIZE) { console.log('NOTARIZING DISABLED') - return [] + exports.default = async function notarizing(context) { + return [] + } } exports.default = async function notarizing(context) { From eb72d52823cfc29737ff86bd6b2bfb03972cbf5f Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 13 Sep 2024 14:41:15 +0200 Subject: [PATCH 247/312] aftersign --- apps/remixdesktop/aftersign.js | 131 +++++++++++++++++---------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/apps/remixdesktop/aftersign.js b/apps/remixdesktop/aftersign.js index 6feec59496..bb1e2102c9 100644 --- a/apps/remixdesktop/aftersign.js +++ b/apps/remixdesktop/aftersign.js @@ -11,68 +11,59 @@ if (process.env.DO_NOT_NOTARIZE) { exports.default = async function notarizing(context) { return [] } -} +} else { -exports.default = async function notarizing(context) { - const { electronPlatformName, appOutDir } = context // Provided by electron-builder + exports.default = async function notarizing(context) { + const { electronPlatformName, appOutDir } = context // Provided by electron-builder - console.log('NOTARIZING') + console.log('NOTARIZING') - if (electronPlatformName !== 'darwin' || !process.env.CIRCLE_BRANCH) { - return - } + if (electronPlatformName !== 'darwin' || !process.env.CIRCLE_BRANCH) { + return + } - const appName = context.packager.appInfo.productFilename - const appPath = `${appOutDir}/${appName}.app` - - // Function to promisify the exec command - function execShellCommand(cmd) { - return new Promise((resolve, reject) => { - exec(cmd, (error, stdout, stderr) => { - if (error) { - reject(new Error(`Error: ${error.message}`)); - return; - } - if (stderr) { - reject(new Error(`Stderr: ${stderr}`)); - return; - } - console.log(`stdout: ${stdout}`); - resolve(stdout); + const appName = context.packager.appInfo.productFilename + const appPath = `${appOutDir}/${appName}.app` + + // Function to promisify the exec command + function execShellCommand(cmd) { + return new Promise((resolve, reject) => { + exec(cmd, (error, stdout, stderr) => { + if (error) { + reject(new Error(`Error: ${error.message}`)); + return; + } + if (stderr) { + reject(new Error(`Stderr: ${stderr}`)); + return; + } + console.log(`stdout: ${stdout}`); + resolve(stdout); + }); }); - }); - } - - // Function to check if the app is stapled - // Async function to check the stapling status - async function checkStapleStatus() { - try { - console.log(`xcrun stapler validate "${appPath}"`) - await execShellCommand(`xcrun stapler validate "${appPath}"`); - console.log('App is already stapled. No action needed.'); - return true - } catch (error) { - console.log(`App is not stapled: ${error.message}`); - return false } - } + // Function to check if the app is stapled + // Async function to check the stapling status + async function checkStapleStatus() { + try { + console.log(`xcrun stapler validate "${appPath}"`) + await execShellCommand(`xcrun stapler validate "${appPath}"`); + console.log('App is already stapled. No action needed.'); + return true + } catch (error) { + console.log(`App is not stapled: ${error.message}`); + return false + } + } - async function runNotarize() { - console.log('NOTARIZING + ', `xcrun stapler staple "${appPath}"`) - console.log({ - appBundleId: 'org.ethereum.remix-ide', // Your app's bundle ID - appPath: `${appOutDir}/${appName}.app`, // Path to your .app - appleId: process.env.APPLE_ID, // Your Apple ID - appleIdPassword: process.env.APPLE_ID_PASSWORD, // App-specific password - teamId: process.env.APPLE_TEAM_ID, // Your Apple Developer team ID (optional) - }) + async function runNotarize() { - try { - const r = await notarize({ + console.log('NOTARIZING + ', `xcrun stapler staple "${appPath}"`) + console.log({ appBundleId: 'org.ethereum.remix-ide', // Your app's bundle ID appPath: `${appOutDir}/${appName}.app`, // Path to your .app appleId: process.env.APPLE_ID, // Your Apple ID @@ -80,24 +71,34 @@ exports.default = async function notarizing(context) { teamId: process.env.APPLE_TEAM_ID, // Your Apple Developer team ID (optional) }) - console.log(r) + try { + const r = await notarize({ + appBundleId: 'org.ethereum.remix-ide', // Your app's bundle ID + appPath: `${appOutDir}/${appName}.app`, // Path to your .app + appleId: process.env.APPLE_ID, // Your Apple ID + appleIdPassword: process.env.APPLE_ID_PASSWORD, // App-specific password + teamId: process.env.APPLE_TEAM_ID, // Your Apple Developer team ID (optional) + }) - // Stapling the app - console.log('STAPLING', `xcrun stapler staple "${appPath}"`) + console.log(r) - await execShellCommand(`xcrun stapler staple "${appPath}"`) + // Stapling the app + console.log('STAPLING', `xcrun stapler staple "${appPath}"`) - } catch (error) { - console.error('Error during notarization:', error) - throw new Error('Error during notarization', error) - } + await execShellCommand(`xcrun stapler staple "${appPath}"`) - } + } catch (error) { + console.error('Error during notarization:', error) + throw new Error('Error during notarization', error) + } - if(!await checkStapleStatus()){ - await runNotarize() - await checkStapleStatus() - }else{ - return [] + } + + if (!await checkStapleStatus()) { + await runNotarize() + await checkStapleStatus() + } else { + return [] + } } -} +} \ No newline at end of file From 4b0bcc16da833ebcb20aa5775d0afbe78b29d584 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Fri, 13 Sep 2024 14:43:42 +0200 Subject: [PATCH 248/312] lint --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 37d7122091..981bc2e29b 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -17,7 +17,7 @@ import { customAction } from '@remixproject/plugin-api' import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { ElectronMenu } from './components/electron-menu' import { ElectronWorkspaceName } from './components/electron-workspace-name' -import { branch} from '@remix-api' +import { branch } from '@remix-api' import { gitUIPanels } from '@remix-ui/git' import { createModalMessage } from './components/createModal' From 811559cd1eccfe064019790a0e3e3d18e0e86d41 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 15 Sep 2024 10:13:02 +0200 Subject: [PATCH 249/312] node externals --- apps/remixdesktop/tsconfig.json | 2 +- apps/remixdesktop/webpack.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index a0a80c174c..8af54922ec 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "target": "ES2015", "allowJs": true, - "module": "ES2015", + "module": "CommonJS", "skipLibCheck": true, "esModuleInterop": true, "noImplicitAny": false, diff --git a/apps/remixdesktop/webpack.config.js b/apps/remixdesktop/webpack.config.js index 4b2c1a5bf8..5167a4783d 100644 --- a/apps/remixdesktop/webpack.config.js +++ b/apps/remixdesktop/webpack.config.js @@ -10,7 +10,7 @@ module.exports = { preload: './src/preload.ts', }, target: 'electron-main', - externals: [nodeExternals()], + //externals: [nodeExternals()], module: { rules: [ { From 8e9cf5c4cc52ab75bbc6265fd7d5112543b6077d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 15 Sep 2024 10:56:23 +0200 Subject: [PATCH 250/312] node-loader --- apps/remixdesktop/package.json | 1 + apps/remixdesktop/webpack.config.js | 5 ++++- apps/remixdesktop/yarn.lock | 28 +++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 08def30488..e30c05d5cb 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -45,6 +45,7 @@ "electron-builder": "24.9.1", "electron-devtools-installer": "^3.2.0", "nightwatch": "2.3", + "node-loader": "^2.0.0", "selenium-standalone": "^9.3.1", "tree-kill": "^1.2.2", "ts-loader": "^9.5.1", diff --git a/apps/remixdesktop/webpack.config.js b/apps/remixdesktop/webpack.config.js index 5167a4783d..93e15e7970 100644 --- a/apps/remixdesktop/webpack.config.js +++ b/apps/remixdesktop/webpack.config.js @@ -10,13 +10,16 @@ module.exports = { preload: './src/preload.ts', }, target: 'electron-main', - //externals: [nodeExternals()], module: { rules: [ { test: /\.ts$/, include: /src/, use: [{ loader: 'ts-loader' }] + }, + { + test: /\.node$/, + use: 'node-loader' } ] }, diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index 88e1110897..4d8ce079f4 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -1749,6 +1749,11 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + bignumber.js@^9.0.0: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" @@ -2806,6 +2811,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -4433,7 +4443,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.0, json5@^2.2.2: +json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -4545,6 +4555,15 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5173,6 +5192,13 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== +node-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562" + integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q== + dependencies: + loader-utils "^2.0.0" + node-pty@^0.10.1: version "0.10.1" resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" From 503e008e1b07d92d4fbd598d52165ff091178ae9 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 16 Sep 2024 08:39:36 +0200 Subject: [PATCH 251/312] esbuild --- apps/remixdesktop/package.json | 2 + apps/remixdesktop/rundist.bash | 8 +- apps/remixdesktop/rundist_webpack.bash | 24 ++++ apps/remixdesktop/yarn.lock | 150 +++++++++++++++++++++++++ 4 files changed, 180 insertions(+), 4 deletions(-) create mode 100755 apps/remixdesktop/rundist_webpack.bash diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index e30c05d5cb..2cf091f2dd 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -25,6 +25,7 @@ "start:dev": "yarn webpack --config webpack.config.js && electron --inspect=5858 .", "start:production": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron .", "dist": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron-builder -p never", + "esbuild": "cross-env NODE_ENV=production node build-main.js && electron-builder -p never", "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "postinstall": "electron-builder install-app-deps", @@ -44,6 +45,7 @@ "electron": "^26.0.0", "electron-builder": "24.9.1", "electron-devtools-installer": "^3.2.0", + "esbuild": "^0.23.1", "nightwatch": "2.3", "node-loader": "^2.0.0", "selenium-standalone": "^9.3.1", diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash index 66a3a9a0dc..dfda14a074 100755 --- a/apps/remixdesktop/rundist.bash +++ b/apps/remixdesktop/rundist.bash @@ -5,13 +5,13 @@ version=$(awk -F'"' '/"version":/ {print $4}' package.json) # Determine the command to run based on the version if [[ $version == *"beta"* ]]; then - command="yarn dist -c beta.json" + command="yarn esbuild -c beta.json" elif [[ $version == *"alpha"* ]]; then - command="yarn dist -c alpha.json" + command="yarn esbuild -c alpha.json" elif [[ $version == *"insiders"* ]]; then - command="yarn dist -c insiders.json" + command="yarn esbuild -c insiders.json" else - command="yarn dist -c latest.json" + command="yarn esbuild -c latest.json" fi # Append any arguments passed in CLI diff --git a/apps/remixdesktop/rundist_webpack.bash b/apps/remixdesktop/rundist_webpack.bash new file mode 100755 index 0000000000..66a3a9a0dc --- /dev/null +++ b/apps/remixdesktop/rundist_webpack.bash @@ -0,0 +1,24 @@ +#!/bin/bash + +# Read the version from package.json +version=$(awk -F'"' '/"version":/ {print $4}' package.json) + +# Determine the command to run based on the version +if [[ $version == *"beta"* ]]; then + command="yarn dist -c beta.json" +elif [[ $version == *"alpha"* ]]; then + command="yarn dist -c alpha.json" +elif [[ $version == *"insiders"* ]]; then + command="yarn dist -c insiders.json" +else + command="yarn dist -c latest.json" +fi + +# Append any arguments passed in CLI +for arg in "$@"; do + command+=" $arg" +done + +# Print and run the command +echo "Running command: $command" +$command diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index 4d8ce079f4..ac06e09bfa 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -112,6 +112,126 @@ dependencies: "@babel/runtime" "^7.8.3" +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== + "@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.6.4": version "2.6.5" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" @@ -3000,6 +3120,36 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: d "^1.0.1" ext "^1.1.2" +esbuild@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" From ebe52cdb93f70d67f9a50eaa3b758e75d1159b6c Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 16 Sep 2024 08:49:06 +0200 Subject: [PATCH 252/312] esbuild --- apps/remixdesktop/esbuild.js | 12 ++++++++++++ apps/remixdesktop/package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 apps/remixdesktop/esbuild.js diff --git a/apps/remixdesktop/esbuild.js b/apps/remixdesktop/esbuild.js new file mode 100644 index 0000000000..cca1b88b29 --- /dev/null +++ b/apps/remixdesktop/esbuild.js @@ -0,0 +1,12 @@ +const esbuild = require('esbuild'); + +esbuild.build({ + entryPoints: ['src/main.ts'], // Your TypeScript entry point + outfile: 'build/main.js', // Output bundled file + bundle: true, // Bundle all dependencies + platform: 'node', // Target Node.js platform + external: ['electron', 'fsevents', 'node-pty'], // Exclude native modules + target: ['node20'], // Match the Node.js version for Electron + tsconfig: 'tsconfig.json', // Your TypeScript config + minify: false, // Optional: Minify for production +}).catch(() => process.exit(1)); diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 2cf091f2dd..cefe90086b 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -25,7 +25,7 @@ "start:dev": "yarn webpack --config webpack.config.js && electron --inspect=5858 .", "start:production": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron .", "dist": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron-builder -p never", - "esbuild": "cross-env NODE_ENV=production node build-main.js && electron-builder -p never", + "esbuild": "cross-env NODE_ENV=production node esbuild.js && electron-builder -p never", "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "postinstall": "electron-builder install-app-deps", From ffe5a77b488b6aada7c79bcb7bb9a7ef122c35cc Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 16 Sep 2024 09:21:13 +0200 Subject: [PATCH 253/312] after pack --- .circleci/config.yml | 4 +++- apps/remixdesktop/after-pack.js | 13 +++++++++++++ apps/remixdesktop/insiders.json | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 apps/remixdesktop/after-pack.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 225d772c75..cf58482679 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -483,6 +483,7 @@ jobs: cat release/latest-mac.yml mv release/latest-mac.yml release/latest-mac-<< parameters.arch >>.yml fi + find build - run: name: Notarize the app command: | @@ -545,7 +546,8 @@ jobs: nvm use 20 cd apps/remixdesktop yarn installRipGrepMacOXarm64 - PUBLISH_FOR_PULL_REQUEST='false' DO_NOT_NOTARIZE='true' USE_HARD_LINKS=false ./rundist.bash --arm64 + PUBLISH_FOR_PULL_REQUEST='false' DO_NOT_NOTARIZE='true' USE_HARD_LINKS=false ./rundist.bash --arm64 + find build - run: name: "Run tests" command: | diff --git a/apps/remixdesktop/after-pack.js b/apps/remixdesktop/after-pack.js new file mode 100644 index 0000000000..8feae5ccab --- /dev/null +++ b/apps/remixdesktop/after-pack.js @@ -0,0 +1,13 @@ +const fs = require('fs-extra'); +const path = require('path'); + +exports.default = async function (context) { + const resourcesPath = context.appOutDir; + console.log('resourcesPath', resourcesPath); + console.log('context outdir', context.appOutDir); + // Copy the node-pty module to the app folder + await fs.copy( + path.join(context.appOutDir, 'node_modules', 'node-pty'), + path.join(resourcesPath, 'node_modules', 'node-pty') + ); +}; diff --git a/apps/remixdesktop/insiders.json b/apps/remixdesktop/insiders.json index 0968d6df7b..0215309b50 100644 --- a/apps/remixdesktop/insiders.json +++ b/apps/remixdesktop/insiders.json @@ -7,6 +7,7 @@ "files": [ "build/**/*" ], + "afterPack": "after-pack.js", "afterSign": "aftersign.js", "afterAllArtifactBuild": "afterbuild.js", "publish": [ From 0d0f8bef67331d3c34ed8c480a32d868b0bfca91 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Mon, 16 Sep 2024 09:28:14 +0200 Subject: [PATCH 254/312] check files --- apps/remixdesktop/after-pack.js | 3 ++- apps/remixdesktop/insiders.json | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/after-pack.js b/apps/remixdesktop/after-pack.js index 8feae5ccab..692890f813 100644 --- a/apps/remixdesktop/after-pack.js +++ b/apps/remixdesktop/after-pack.js @@ -2,12 +2,13 @@ const fs = require('fs-extra'); const path = require('path'); exports.default = async function (context) { + console.log('Running after-pack hook', context); const resourcesPath = context.appOutDir; console.log('resourcesPath', resourcesPath); console.log('context outdir', context.appOutDir); // Copy the node-pty module to the app folder await fs.copy( - path.join(context.appOutDir, 'node_modules', 'node-pty'), + path.join('./node_modules', 'node-pty'), path.join(resourcesPath, 'node_modules', 'node-pty') ); }; diff --git a/apps/remixdesktop/insiders.json b/apps/remixdesktop/insiders.json index 0215309b50..0968d6df7b 100644 --- a/apps/remixdesktop/insiders.json +++ b/apps/remixdesktop/insiders.json @@ -7,7 +7,6 @@ "files": [ "build/**/*" ], - "afterPack": "after-pack.js", "afterSign": "aftersign.js", "afterAllArtifactBuild": "afterbuild.js", "publish": [ From c23d7d4c014ee03b8af366bf376be8ac5c7c35b3 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Mon, 16 Sep 2024 10:34:58 +0200 Subject: [PATCH 255/312] sync tsconfig --- apps/remixdesktop/tsconfig.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index 8af54922ec..7551c18c32 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -1,13 +1,11 @@ { "compilerOptions": { - "target": "ES2015", + "target": "ES6", "allowJs": true, "module": "CommonJS", "skipLibCheck": true, "esModuleInterop": true, "noImplicitAny": false, - "allowSyntheticDefaultImports": true, - "isolatedModules": true, "sourceMap": true, "baseUrl": ".", "outDir": "./build", From e901cc1726b53f7048c54b109929c1a8116605b9 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Mon, 16 Sep 2024 11:23:04 +0200 Subject: [PATCH 256/312] tsc build --- apps/remixdesktop/package.json | 3 ++- apps/remixdesktop/rundist.bash | 8 ++++---- apps/remixdesktop/rundist_esbuild.bash | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100755 apps/remixdesktop/rundist_esbuild.bash diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index cefe90086b..2c39f076a5 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -1,7 +1,7 @@ { "name": "remixdesktop", "version": "1.0.8-insiders", - "main": "build/main.js", + "main": "build/apps/remixdesktop/src/main.js", "license": "MIT", "type": "commonjs", "description": "Remix IDE Desktop", @@ -25,6 +25,7 @@ "start:dev": "yarn webpack --config webpack.config.js && electron --inspect=5858 .", "start:production": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron .", "dist": "cross-env NODE_ENV=production yarn webpack --config webpack.config.js && electron-builder -p never", + "tscbuild": "tsc && cp -R node_modules/yarn build/tools/ && electron-builder -p never", "esbuild": "cross-env NODE_ENV=production node esbuild.js && electron-builder -p never", "installRipGrepMacOXx64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=x64 node node_modules/@vscode/ripgrep/lib/postinstall.js", "installRipGrepMacOXarm64": "rm -rf node_modules/@vscode/ripgrep/bin && npm_config_arch=arm64 node node_modules/@vscode/ripgrep/lib/postinstall.js", diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash index dfda14a074..886032ec62 100755 --- a/apps/remixdesktop/rundist.bash +++ b/apps/remixdesktop/rundist.bash @@ -5,13 +5,13 @@ version=$(awk -F'"' '/"version":/ {print $4}' package.json) # Determine the command to run based on the version if [[ $version == *"beta"* ]]; then - command="yarn esbuild -c beta.json" + command="yarn tscbuild -c beta.json" elif [[ $version == *"alpha"* ]]; then - command="yarn esbuild -c alpha.json" + command="yarn tscbuild -c alpha.json" elif [[ $version == *"insiders"* ]]; then - command="yarn esbuild -c insiders.json" + command="yarn tscbuild -c insiders.json" else - command="yarn esbuild -c latest.json" + command="yarn tscbuild -c latest.json" fi # Append any arguments passed in CLI diff --git a/apps/remixdesktop/rundist_esbuild.bash b/apps/remixdesktop/rundist_esbuild.bash new file mode 100755 index 0000000000..dfda14a074 --- /dev/null +++ b/apps/remixdesktop/rundist_esbuild.bash @@ -0,0 +1,24 @@ +#!/bin/bash + +# Read the version from package.json +version=$(awk -F'"' '/"version":/ {print $4}' package.json) + +# Determine the command to run based on the version +if [[ $version == *"beta"* ]]; then + command="yarn esbuild -c beta.json" +elif [[ $version == *"alpha"* ]]; then + command="yarn esbuild -c alpha.json" +elif [[ $version == *"insiders"* ]]; then + command="yarn esbuild -c insiders.json" +else + command="yarn esbuild -c latest.json" +fi + +# Append any arguments passed in CLI +for arg in "$@"; do + command+=" $arg" +done + +# Print and run the command +echo "Running command: $command" +$command From 305ed16877644390d35a91c4b2aef7f3eb5eadfb Mon Sep 17 00:00:00 2001 From: filip mertens Date: Mon, 16 Sep 2024 11:40:43 +0200 Subject: [PATCH 257/312] include modules --- apps/remixdesktop/insiders.json | 3 ++- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/rundist.bash | 8 ++++---- .../{rundist_esbuild.bash => rundist_tsc.bash} | 8 ++++---- 4 files changed, 11 insertions(+), 10 deletions(-) rename apps/remixdesktop/{rundist_esbuild.bash => rundist_tsc.bash} (73%) diff --git a/apps/remixdesktop/insiders.json b/apps/remixdesktop/insiders.json index 0968d6df7b..4b5bd39c00 100644 --- a/apps/remixdesktop/insiders.json +++ b/apps/remixdesktop/insiders.json @@ -5,7 +5,8 @@ "generateUpdatesFilesForAllChannels": false, "icon": "assets", "files": [ - "build/**/*" + "build/**/*", + "node_modules/node-pty/**/*" ], "afterSign": "aftersign.js", "afterAllArtifactBuild": "afterbuild.js", diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 2c39f076a5..40a9a9f8d5 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -1,7 +1,7 @@ { "name": "remixdesktop", "version": "1.0.8-insiders", - "main": "build/apps/remixdesktop/src/main.js", + "main": "build/main.js", "license": "MIT", "type": "commonjs", "description": "Remix IDE Desktop", diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash index 886032ec62..dfda14a074 100755 --- a/apps/remixdesktop/rundist.bash +++ b/apps/remixdesktop/rundist.bash @@ -5,13 +5,13 @@ version=$(awk -F'"' '/"version":/ {print $4}' package.json) # Determine the command to run based on the version if [[ $version == *"beta"* ]]; then - command="yarn tscbuild -c beta.json" + command="yarn esbuild -c beta.json" elif [[ $version == *"alpha"* ]]; then - command="yarn tscbuild -c alpha.json" + command="yarn esbuild -c alpha.json" elif [[ $version == *"insiders"* ]]; then - command="yarn tscbuild -c insiders.json" + command="yarn esbuild -c insiders.json" else - command="yarn tscbuild -c latest.json" + command="yarn esbuild -c latest.json" fi # Append any arguments passed in CLI diff --git a/apps/remixdesktop/rundist_esbuild.bash b/apps/remixdesktop/rundist_tsc.bash similarity index 73% rename from apps/remixdesktop/rundist_esbuild.bash rename to apps/remixdesktop/rundist_tsc.bash index dfda14a074..886032ec62 100755 --- a/apps/remixdesktop/rundist_esbuild.bash +++ b/apps/remixdesktop/rundist_tsc.bash @@ -5,13 +5,13 @@ version=$(awk -F'"' '/"version":/ {print $4}' package.json) # Determine the command to run based on the version if [[ $version == *"beta"* ]]; then - command="yarn esbuild -c beta.json" + command="yarn tscbuild -c beta.json" elif [[ $version == *"alpha"* ]]; then - command="yarn esbuild -c alpha.json" + command="yarn tscbuild -c alpha.json" elif [[ $version == *"insiders"* ]]; then - command="yarn esbuild -c insiders.json" + command="yarn tscbuild -c insiders.json" else - command="yarn esbuild -c latest.json" + command="yarn tscbuild -c latest.json" fi # Append any arguments passed in CLI From 352ab510a848ff7980fccf392a33ecdb072299d9 Mon Sep 17 00:00:00 2001 From: lianahus Date: Fri, 13 Sep 2024 10:55:26 +0200 Subject: [PATCH 258/312] cookbook last cell --- .../templates-selection-plugin.tsx | 16 ++++++++++++++-- .../grid-view/src/lib/remix-ui-grid-cell.tsx | 2 +- .../grid-view/src/lib/remix-ui-grid-section.tsx | 3 --- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 138ac3a7a4..712b1519fe 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -157,8 +157,6 @@ export class TemplatesSelectionPlugin extends ViewPlugin { key={template.name} title={template.name} tooltipTitle={template.tooltip} - onClick={template.onClick} - onClickLabel={template.onClickLabel} hScrollable={false} > {template.items.map(item => { @@ -214,6 +212,20 @@ export class TemplatesSelectionPlugin extends ViewPlugin {
})} + { template.name === 'Cookbook' && +
+ Discover more templates! + template.onClick() }>{ template.onClickLabel } +
+
} })} diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx index 3055d0d4e7..96deee2398 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx @@ -47,7 +47,7 @@ export const RemixUIGridCell = (props: RemixUIGridCellProps) => { // check for filter if (filterCon.filter != '') enabled = (props.title?.toLowerCase().includes(filterCon.filter?.toLowerCase()) || - props.searchKeywords?.map(keyword => keyword.toLowerCase()).some(searchKeyword => searchKeyword.toLowerCase().includes(filterCon.filter.toLocaleLowerCase()))) + props.searchKeywords?.map(keyword => keyword?.toLowerCase()).some(searchKeyword => searchKeyword?.toLowerCase().includes(filterCon.filter?.toLocaleLowerCase()))) setAnyEnabled(enabled) }, [filterCon, props.tagList]) diff --git a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx index 5947db70b1..33fb25fb48 100644 --- a/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx +++ b/libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx @@ -14,8 +14,6 @@ const _paq = window._paq = window._paq || [] interface RemixUIGridSectionProps { plugin: any title?: string - onClick?: () => void - onClickLabel?: string tooltipTitle?: string hScrollable: boolean classList?: string @@ -67,7 +65,6 @@ export const RemixUIGridSection = (props: RemixUIGridSectionProps) => { >
{ props.title &&
{ props.title }
} - { props.onClick && props.onClick() }>{ props.onClickLabel } }
{ !hasChildCell(children) && No items found } { props.children } From 5f4d2b8782401613879c395882f40af172b3b1c2 Mon Sep 17 00:00:00 2001 From: lianahus Date: Fri, 13 Sep 2024 11:11:16 +0200 Subject: [PATCH 259/312] data moved outside --- .../plugins/templates-selection/templates-selection-plugin.tsx | 2 +- apps/remix-ide/src/app/plugins/templates-selection/templates.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 712b1519fe..7ff0e5559f 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -222,7 +222,7 @@ export class TemplatesSelectionPlugin extends ViewPlugin { classList='TSCellStyle' >
- Discover more templates! + { template.description } template.onClick() }>{ template.onClickLabel }
} diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 1a70bcd906..3783044487 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -265,6 +265,7 @@ export const templates = (intl, plugin) => { plugin.call('menuicons', 'showContent', 'cookbookdev') }, onClickLabel: 'Open Cookbook Plugin', + description: 'Discover more templates!', items: [ { value: "token-sale", displayName: 'Token Sale' }, { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, From 5379de04e5824297cd314352ba1ae1622508c2d0 Mon Sep 17 00:00:00 2001 From: lianahus Date: Wed, 11 Sep 2024 17:01:09 +0200 Subject: [PATCH 260/312] fixed updating moduls --- .../workspace/src/lib/remix-ui-workspace.tsx | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) 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 2e035ac018..d0040cb884 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -1254,22 +1254,32 @@ export function Workspace() {
GIT
{ selectedWorkspace.hasGitSubmodules? - } - > +
- { global.fs.browser.isRequestingCloning ? : - } + { global.fs.browser.isRequestingCloning ? + + + : + } + > + + + }
-
: null } Date: Thu, 12 Sep 2024 09:18:25 +0200 Subject: [PATCH 261/312] linting --- .../workspace/src/lib/remix-ui-workspace.tsx | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) 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 d0040cb884..3b3acc4ecb 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -1254,32 +1254,32 @@ export function Workspace() {
GIT
{ selectedWorkspace.hasGitSubmodules? - -
- { global.fs.browser.isRequestingCloning ? - - - : - } - > - + : + } + > + - - } -
+ + + } +
: null } Date: Fri, 13 Sep 2024 12:13:44 +0200 Subject: [PATCH 262/312] refactor width updates --- .../src/app/components/vertical-icons.tsx | 7 ----- apps/remix-ide/src/app/panels/layout.ts | 23 ++++++++------- .../remix-app/components/dragbar/dragbar.tsx | 29 ++++++++++++------- .../app/src/lib/remix-app/remix-app.tsx | 16 ++++++++++ 4 files changed, 47 insertions(+), 28 deletions(-) diff --git a/apps/remix-ide/src/app/components/vertical-icons.tsx b/apps/remix-ide/src/app/components/vertical-icons.tsx index eb5ea60863..865c4fa468 100644 --- a/apps/remix-ide/src/app/components/vertical-icons.tsx +++ b/apps/remix-ide/src/app/components/vertical-icons.tsx @@ -16,8 +16,6 @@ const profile = { events: ['toggleContent', 'showContent'] } -const toMaximize = ['LearnEth'] - export class VerticalIcons extends Plugin { events: EventEmitter htmlElement: HTMLDivElement @@ -128,11 +126,6 @@ export class VerticalIcons extends Plugin { // TODO: Only keep `this.emit` (issue#2210) this.emit('showContent', name) this.events.emit('showContent', name) - if (toMaximize.includes(name)) { - setTimeout(_ => { - this.call('layout', 'maximiseSidePanel') - }, 500) - } } /** diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index 51149c3859..c96f7ffc52 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -30,11 +30,12 @@ export type PanelConfiguration = { export class Layout extends Plugin { event: any panels: panels - maximised: { [key: string]: boolean } + enhanced: { [key: string]: boolean } constructor () { super(profile) - this.maximised = { - 'dgit': true + this.enhanced = { + 'dgit': true, + 'LearnEth': true } this.event = new EventEmitter() } @@ -80,8 +81,8 @@ export class Layout extends Plugin { }) this.on('sidePanel', 'focusChanged', async (name) => { const current = await this.call('sidePanel', 'currentFocus') - if (this.maximised[current]) { - this.event.emit('maximisesidepanel') + if (this.enhanced[current]) { + this.event.emit('enhancesidepanel') } else { this.event.emit('resetsidepanel') } @@ -89,8 +90,8 @@ export class Layout extends Plugin { this.on('pinnedPanel', 'pinnedPlugin', async (name) => { const current = await this.call('pinnedPanel', 'currentFocus') - if (this.maximised[current]) { - this.event.emit('maximisepinnedpanel') + if (this.enhanced[current]) { + this.event.emit('enhancepinnedpanel') } else { this.event.emit('resetpinnedpanel') } @@ -128,13 +129,13 @@ export class Layout extends Plugin { async maximiseSidePanel () { const current = await this.call('sidePanel', 'currentFocus') - this.maximised[current] = true + this.enhanced[current] = true this.event.emit('maximisesidepanel') } async maximisePinnedPanel () { const current = await this.call('pinnedPanel', 'currentFocus') - this.maximised[current] = true + this.enhanced[current] = true this.event.emit('maximisepinnedpanel') } @@ -146,13 +147,13 @@ export class Layout extends Plugin { async resetSidePanel () { const current = await this.call('sidePanel', 'currentFocus') - this.maximised[current] = false + this.enhanced[current] = false this.event.emit('resetsidepanel') } async resetPinnedPanel () { const current = await this.call('pinnedPanel', 'currentFocus') - this.maximised[current] = false + this.enhanced[current] = false this.event.emit('resetpinnedpanel') } } diff --git a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx index 009cb410b6..e726050067 100644 --- a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx @@ -8,6 +8,7 @@ interface IRemixDragBarUi { hidden: boolean minWidth: number maximiseTrigger: number + enhanceTrigger: number resetTrigger: number layoutPosition: 'left' | 'right' } @@ -40,32 +41,40 @@ const DragBar = (props: IRemixDragBarUi) => { } }, [props.hidden, offset]) - useEffect(() => { - if (props.maximiseTrigger > 0) { - if (props.layoutPosition === 'left') { - const width = 0.4 * window.innerWidth + const triggerWidth = (maximiseTrigger, layoutPosition, refObject, coeff) => { + if (maximiseTrigger > 0) { + if (layoutPosition === 'left') { + const width = coeff * window.innerWidth - if (width > props.refObject.current.offsetWidth) { + if (width > refObject.current.offsetWidth) { props.refObject.current.style.width = width + 'px' setTimeout(() => { setDragBarPosX(offset + width) }, 300) } - } else if (props.layoutPosition === 'right') { - const width = 0.4 * window.innerWidth + } else if (layoutPosition === 'right') { + const width = coeff * window.innerWidth - if (width > props.refObject.current.offsetWidth) { - props.refObject.current.style.width = width + 'px' + if (width > refObject.current.offsetWidth) { + refObject.current.style.width = width + 'px' setTimeout(() => { setDragBarPosX(window.innerWidth - width) }, 300) } } } + } + + useEffect(() => { + triggerWidth(props.maximiseTrigger, props.layoutPosition, props.refObject, 0.4) }, [props.maximiseTrigger]) useEffect(() => { - if (props.maximiseTrigger > 0) { + triggerWidth(props.enhanceTrigger, props.layoutPosition, props.refObject, 0.25) + }, [props.enhanceTrigger]) + + useEffect(() => { + if (props.maximiseTrigger > 0 || props.enhanceTrigger) { if (props.layoutPosition === 'left') { props.refObject.current.style.width = initialWidth.current + 'px' setTimeout(() => { diff --git a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx index 07e57d5051..805f8f3407 100644 --- a/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/remix-app.tsx @@ -32,8 +32,10 @@ const RemixApp = (props: IRemixAppUi) => { const [hideSidePanel, setHideSidePanel] = useState(false) const [hidePinnedPanel, setHidePinnedPanel] = useState(true) const [maximiseLeftTrigger, setMaximiseLeftTrigger] = useState(0) + const [enhanceLeftTrigger, setEnhanceLeftTrigger] = useState(0) const [resetLeftTrigger, setResetLeftTrigger] = useState(0) const [maximiseRightTrigger, setMaximiseRightTrigger] = useState(0) + const [enhanceRightTrigger, setEnhanceRightTrigger] = useState(0) const [resetRightTrigger, setResetRightTrigger] = useState(0) const [online, setOnline] = useState(true) const [locale, setLocale] = useState<{ code: string; messages: any }>({ @@ -98,6 +100,12 @@ const RemixApp = (props: IRemixAppUi) => { }) }) + props.app.layout.event.on('enhancesidepanel', () => { + setEnhanceLeftTrigger((prev) => { + return prev + 1 + }) + }) + props.app.layout.event.on('resetsidepanel', () => { setResetLeftTrigger((prev) => { return prev + 1 @@ -110,6 +118,12 @@ const RemixApp = (props: IRemixAppUi) => { }) }) + props.app.layout.event.on('enhancepinnedpanel', () => { + setEnhanceRightTrigger((prev) => { + return prev + 1 + }) + }) + props.app.layout.event.on('resetpinnedpanel', () => { setResetRightTrigger((prev) => { return prev + 1 @@ -205,6 +219,7 @@ const RemixApp = (props: IRemixAppUi) => { {props.app.sidePanel.render()}
{ { !hidePinnedPanel && Date: Fri, 13 Sep 2024 14:26:18 +0200 Subject: [PATCH 263/312] fix maximized --- apps/remix-ide/src/app/panels/layout.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index c96f7ffc52..f7060a237c 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -31,8 +31,10 @@ export class Layout extends Plugin { event: any panels: panels enhanced: { [key: string]: boolean } + maximized: { [key: string]: boolean } constructor () { super(profile) + this.maximized = {} this.enhanced = { 'dgit': true, 'LearnEth': true @@ -129,13 +131,13 @@ export class Layout extends Plugin { async maximiseSidePanel () { const current = await this.call('sidePanel', 'currentFocus') - this.enhanced[current] = true + this.maximized[current] = true this.event.emit('maximisesidepanel') } async maximisePinnedPanel () { const current = await this.call('pinnedPanel', 'currentFocus') - this.enhanced[current] = true + this.maximized[current] = true this.event.emit('maximisepinnedpanel') } From 3c2e91983a1814579a12c8e0f88aa6e07817bb2a Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 16 Sep 2024 13:10:35 +0200 Subject: [PATCH 264/312] fix maximize panel --- apps/remix-ide/src/app/panels/layout.ts | 16 +++++++++++++-- .../remix-app/components/dragbar/dragbar.tsx | 20 ++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index f7060a237c..539a9b1c48 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -85,7 +85,13 @@ export class Layout extends Plugin { const current = await this.call('sidePanel', 'currentFocus') if (this.enhanced[current]) { this.event.emit('enhancesidepanel') - } else { + } + + if (this.maximized[current]) { + this.event.emit('maximisesidepanel') + } + + if (!this.enhanced[current] && !this.maximized[current]) { this.event.emit('resetsidepanel') } }) @@ -94,7 +100,13 @@ export class Layout extends Plugin { const current = await this.call('pinnedPanel', 'currentFocus') if (this.enhanced[current]) { this.event.emit('enhancepinnedpanel') - } else { + } + + if (this.maximized[current]) { + this.event.emit('maximisepinnedpanel') + } + + if (!this.enhanced[current] && !this.maximized[current]) { this.event.emit('resetpinnedpanel') } }) diff --git a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx index e726050067..7bab81df79 100644 --- a/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx @@ -46,21 +46,17 @@ const DragBar = (props: IRemixDragBarUi) => { if (layoutPosition === 'left') { const width = coeff * window.innerWidth - if (width > refObject.current.offsetWidth) { - props.refObject.current.style.width = width + 'px' - setTimeout(() => { - setDragBarPosX(offset + width) - }, 300) - } + props.refObject.current.style.width = width + 'px' + setTimeout(() => { + setDragBarPosX(offset + width) + }, 300) } else if (layoutPosition === 'right') { const width = coeff * window.innerWidth - if (width > refObject.current.offsetWidth) { - refObject.current.style.width = width + 'px' - setTimeout(() => { - setDragBarPosX(window.innerWidth - width) - }, 300) - } + refObject.current.style.width = width + 'px' + setTimeout(() => { + setDragBarPosX(window.innerWidth - width) + }, 300) } } } From 65fe6bc5ca2c4ba7b1665f7fe4cd2b0dbd3ebac6 Mon Sep 17 00:00:00 2001 From: lianahus Date: Mon, 16 Sep 2024 13:54:27 +0200 Subject: [PATCH 265/312] pointer on sign in --- libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 3b3acc4ecb..a7bf75cb4a 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -987,7 +987,7 @@ export function Workspace() { } - + { (!appContext.appState.gitHubUser || !appContext.appState.gitHubUser.isConnected) &&
logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem', cursor: 'pointer' }} aria-hidden="true"> - logInGithub() } className="ml-1 style={{ cursor: 'pointer' }} "> Sign in + logInGithub() } className="ml-1"> Sign in
} From 1afb567c9d1b7e10d3ef8ff479a9a7c21da2184f Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 16:51:35 +0530 Subject: [PATCH 266/312] Minor updates --- apps/remix-ide/src/app/tabs/locales/en/filePanel.json | 4 ++-- libs/remix-ui/git/src/lib/gitactions.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index ae518d686f..6b02520e94 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -12,7 +12,7 @@ "filePanel.restore": "Restore", "filePanel.name": "Name", "filePanel.save": "Save", - "filePanel.workspace.create": "Create Workspace using template", + "filePanel.workspace.create": "Create Workspace Using Template", "filePanel.workspace.createBlank": "Create Blank Workspace", "filePanel.workspace.create.desktop": "Create project in new folder", "filePanel.workspace.rename": "Rename Workspace", @@ -71,7 +71,7 @@ "filePanel.createNewFile": "Create new file", "filePanel.createNewFolder": "Create new folder", "filePanel.publishToGist": "Publish to Gist", - "filePanel.workspace.publishToGist": "Publish workspace to GitHub gist", + "filePanel.workspace.publishToGist": "Publish Workspace to GitHub Gist", "filePanel.uploadFile": "Open a File from your File System", "filePanel.uploadFolder": "Upload folder", "filePanel.updateGist": "Update Gist", diff --git a/libs/remix-ui/git/src/lib/gitactions.ts b/libs/remix-ui/git/src/lib/gitactions.ts index b884091d6b..a94273badd 100644 --- a/libs/remix-ui/git/src/lib/gitactions.ts +++ b/libs/remix-ui/git/src/lib/gitactions.ts @@ -99,7 +99,6 @@ export const getCommits = async (depth: number) => { } export const gitlog = async (depth: number) => { - console.log('gitlog start') dispatch(setLoading(true)) let commits = [] try { From 1efa13ae3e2b2b945329fb8719f557c77737a9ea Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 17:10:24 +0530 Subject: [PATCH 267/312] UUPS --- .../src/app/plugins/templates-selection/templates.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 3783044487..c5941d01aa 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -132,7 +132,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "UUPS ERC20", - description: "UUSP ERC20 contract with:", + description: "UUPS ERC20 contract with:", opts: { upgradeable: 'uups', mintable: true @@ -142,7 +142,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "UUPS ERC20", - description: "UUSP ERC20 contract with:", + description: "UUPS ERC20 contract with:", opts: { upgradeable: 'uups', mintable: true, @@ -153,7 +153,7 @@ export const templates = (intl, plugin) => { { value: "ozerc20", displayName: "UUPS ERC20", - description: "UUSP ERC20 contract with:", + description: "UUPS ERC20 contract with:", opts: { upgradeable: 'uups', mintable: true, From 1e1dd27c1c86edf9ac2a0f436f4eabb6c4ae9b09 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 17:12:43 +0530 Subject: [PATCH 268/312] 0x --- apps/remix-ide/src/app/plugins/templates-selection/templates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index c5941d01aa..7382e7bf20 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -282,7 +282,7 @@ export const templates = (intl, plugin) => { ] }, { - name: "OxProject", + name: "0xProject", items: [ { value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A fungible token contract by 0xProject" } ] From 950ac212a275cd59e0b92094df3961d0b5864d75 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 17:28:24 +0530 Subject: [PATCH 269/312] more text updates --- .../plugins/templates-selection/templates.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 7382e7bf20..5bde8d57ef 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -47,13 +47,13 @@ export const templates = (intl, plugin) => { }, { value: "ozerc721", - displayName: "ERC721", + displayName: "ERC721 (NFT)", tagList: ["ERC721", "Solidity"], description: 'A simple non-fungible token (NFT) contract' }, { value: "ozerc721", - displayName: "ERC721", + displayName: "ERC721 (NFT)", description: "An ERC721 contract with:", tagList: ["Solidity", "ERC721"], opts: { @@ -163,7 +163,7 @@ export const templates = (intl, plugin) => { }, { value: "ozerc721", - displayName: "UUPS ERC721", + displayName: "UUPS ERC721 (NFT)", description: "A simple UUPS ERC721 contract", opts: { upgradeable: 'uups' @@ -172,7 +172,7 @@ export const templates = (intl, plugin) => { }, { value: "ozerc721", - displayName: "UUPS ERC721", + displayName: "UUPS ERC721 (NFT)", description: "UUPS ERC721 contract with:", opts: { upgradeable: 'uups', @@ -183,7 +183,7 @@ export const templates = (intl, plugin) => { { value: "ozerc721", displayName: "UUPS ERC721 (NFT)", - description: "Non-fungible Token Standard", + description: "UUPS ERC721 contract with:", opts: { upgradeable: 'uups', mintable: true, @@ -194,7 +194,7 @@ export const templates = (intl, plugin) => { { value: "ozerc721", displayName: "UUPS ERC721 (NFT)", - description: "UUPS ERC721 with: ", + description: "UUPS ERC721 contract with:", opts: { upgradeable: 'uups', mintable: true, @@ -290,7 +290,7 @@ export const templates = (intl, plugin) => { { name: "Gnosis Safe", items: [ - { value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or customize the Gnosis Safe.' } + { value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or customize the Gnosis Safe MultiSig Wallet' } ] }, { @@ -317,12 +317,12 @@ export const templates = (intl, plugin) => { items: [ { value: "uniswapV4Template", displayName: intl.formatMessage({ id: 'filePanel.uniswapV4Template' }), - description: 'Use an Uniswap hook' + description: 'Use a Uniswap hook' }, { value: "breakthroughLabsUniswapv4Hooks", displayName: intl.formatMessage({ id: 'filePanel.breakthroughLabsUniswapv4Hooks' }), - description: 'Use an Uniswap hook developed by Breakthrough Labs' + description: 'Use a Uniswap hook developed by Breakthrough Labs' }, { value: "uniswapV4HookBookMultiSigSwapHook", @@ -353,25 +353,25 @@ export const templates = (intl, plugin) => { { value: "etherscanScripts", displayName: intl.formatMessage({ id: 'filePanel.addscriptetherscan' }), - description: 'Script for verifying a Contract in Etherscan.' + description: 'Script for verifying a Contract in Etherscan' }, ], }, { - name: 'Github Actions', + name: 'GitHub Actions', items: [ { value: "runJsTestAction", displayName: intl.formatMessage({ id: 'filePanel.tssoltestghaction' }), - description: 'A Mocha Chai test workflow in a GitHub CI.' + description: 'A Mocha Chai test workflow in a GitHub CI' }, { value: "runSolidityUnittestingAction", displayName: intl.formatMessage({ id: 'filePanel.solghaction' }), - description: 'Run a Solidity unit test workflow in a GitHub CI.' + description: 'Run a Solidity unit test workflow in a GitHub CI' }, { value: "runSlitherAction", displayName: intl.formatMessage({ id: 'filePanel.slitherghaction' }), - description: 'Run a Slither security analysis in a GitHub CI.' + description: 'Run a Slither security analysis in a GitHub CI' } ], IsArtefact: true From d0e3396a0ea05df47e14de8cc80c88223679d443 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 2 Sep 2024 15:24:02 +0200 Subject: [PATCH 270/312] add partner plugin --- apps/remix-ide/src/remixAppManager.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index f823069585..dc370bd5d5 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -93,6 +93,8 @@ const dependentModules = ['foundry', 'hardhat', 'truffle', 'slither'] const loadLocalPlugins = ['doc-gen', 'doc-viewer', 'etherscan', 'vyper', 'solhint', 'walletconnect', 'circuit-compiler', 'learneth', 'quick-dapp'] +const partnerPlugins = ['cookbookdev'] + const sensitiveCalls = { fileManager: ['writeFile', 'copyFile', 'rename', 'copyDir'], contentImport: ['resolveAndSave'], @@ -206,6 +208,11 @@ export class RemixAppManager extends PluginManager { return true } + // skipping partner plugins' requests + if (partnerPlugins[from]) { + return true + } + // ask the user for permission return await this.call('permissionhandler', 'askPermission', this.profiles[from], this.profiles[to], method, message, isSensitiveCall) } From b101a4a567a134b8c56f5e5b93913cbe1388e703 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 2 Sep 2024 17:29:36 +0200 Subject: [PATCH 271/312] add more template --- .../workspace/src/lib/utils/constants.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/libs/remix-ui/workspace/src/lib/utils/constants.ts b/libs/remix-ui/workspace/src/lib/utils/constants.ts index f0d150afb1..1d28b8d40a 100644 --- a/libs/remix-ui/workspace/src/lib/utils/constants.ts +++ b/libs/remix-ui/workspace/src/lib/utils/constants.ts @@ -88,6 +88,36 @@ export const TEMPLATE_METADATA: Record = { name: 'cookbookdev', endpoint: 'openContract', params: ['multi-collection-nft-with-burnable-nfts-and-pausable-transfers'] + }, + 'OpenSea-Seaport': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openProtocol', + params: ['OpenSea-Seaport'] + }, + 'Ethereum-Name-Service': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openProtocol', + params: ['Ethereum-Name-Service'] + }, + 'Umbra-Cash': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openProtocol', + params: ['Umbra-Cash'] + }, + 'Aave-V3': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openProtocol', + params: ['Aave-V3'] + }, + 'ChainLink': { + type: 'plugin', + name: 'cookbookdev', + endpoint: 'openProtocol', + params: ['ChainLink'] } } From 672927bdacc7465e0051ca229d0652f27abe2d8f Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 3 Sep 2024 10:15:18 +0200 Subject: [PATCH 272/312] update action in grid section --- apps/remix-ide/src/app/plugins/templates-selection/templates.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 5bde8d57ef..0d3fe23b0d 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -264,7 +264,6 @@ export const templates = (intl, plugin) => { await plugin.call('manager', 'activatePlugin', 'cookbookdev') plugin.call('menuicons', 'showContent', 'cookbookdev') }, - onClickLabel: 'Open Cookbook Plugin', description: 'Discover more templates!', items: [ { value: "token-sale", displayName: 'Token Sale' }, From d280627ea2be69deaa0ad7dfd029b59de98789dd Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 3 Sep 2024 11:31:40 +0200 Subject: [PATCH 273/312] update css label --- .../templates-selection/templates-selection-plugin.css | 9 ++++++++- .../templates-selection/templates-selection-plugin.tsx | 4 ++-- .../src/app/plugins/templates-selection/templates.ts | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css index f6e9f504f1..c01c4027fd 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css @@ -1,5 +1,12 @@ .TSCellStyle { - min-height: 8.5rem; + min-height: 9rem; + max-width: 13rem; + min-width: 13rem; + max-height: 8.5rem; +} + +.TSCellStyleShort { + min-height: 5rem; max-width: 13rem; min-width: 13rem; max-height: 8.5rem; diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 7ff0e5559f..86ee7b38ad 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -167,14 +167,14 @@ export class TemplatesSelectionPlugin extends ViewPlugin { id={item.name} searchKeywords={[item.displayName, item.description, template.name]} tagList={item.tagList} - classList='TSCellStyle' + classList={'TSCellStyle' + (!item.description ? 'Short' : '')} >
{item.description && {item.description}}
-
+
{(item.opts && item.opts.upgradeable && item.opts.upgradeable === 'uupds') && Upgradeable-UUPS} {(item.opts && item.opts.mintable) && mintable} {(item.opts && item.opts.burnable) && burnable} diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 0d3fe23b0d..5bde8d57ef 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -264,6 +264,7 @@ export const templates = (intl, plugin) => { await plugin.call('manager', 'activatePlugin', 'cookbookdev') plugin.call('menuicons', 'showContent', 'cookbookdev') }, + onClickLabel: 'Open Cookbook Plugin', description: 'Discover more templates!', items: [ { value: "token-sale", displayName: 'Token Sale' }, From 7f8566f509f1847d3508f49dec9bec5c9ccae973 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 16 Sep 2024 14:55:07 +0200 Subject: [PATCH 274/312] rollback using short cell --- .../templates-selection/templates-selection-plugin.css | 9 +-------- .../templates-selection/templates-selection-plugin.tsx | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css index c01c4027fd..f6e9f504f1 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.css @@ -1,12 +1,5 @@ .TSCellStyle { - min-height: 9rem; - max-width: 13rem; - min-width: 13rem; - max-height: 8.5rem; -} - -.TSCellStyleShort { - min-height: 5rem; + min-height: 8.5rem; max-width: 13rem; min-width: 13rem; max-height: 8.5rem; diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx index 86ee7b38ad..943021b3ae 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx @@ -167,7 +167,7 @@ export class TemplatesSelectionPlugin extends ViewPlugin { id={item.name} searchKeywords={[item.displayName, item.description, template.name]} tagList={item.tagList} - classList={'TSCellStyle' + (!item.description ? 'Short' : '')} + classList={'TSCellStyle'} >
From 61a8c4c0a071f65ab4c12a9c5d4b6b942deb9b9c Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 18:56:31 +0530 Subject: [PATCH 275/312] added cookbook templates desc --- .../plugins/templates-selection/templates.ts | 57 +++++++++++++++---- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index 5bde8d57ef..a92b952bd9 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -267,17 +267,52 @@ export const templates = (intl, plugin) => { onClickLabel: 'Open Cookbook Plugin', description: 'Discover more templates!', items: [ - { value: "token-sale", displayName: 'Token Sale' }, - { value: "simple-nft-sale", displayName: 'Simple Nft Sale' }, - { value: "Azuki-ERC721A-NFT-Sale-basic", displayName: 'Azuki ERC721A NFT Sale basic' }, - { value: "Azuki-ERC721A-ERC721A", displayName: 'Azuki ERC721A' }, - { value: "token-staking-with-infinite-rewards", displayName: 'Token Staking with infinite rewards' }, - { value: "nft-staking-with-infinite-rewards", displayName: 'Nft Staking with infinite rewards' }, - { value: "basic-dao", displayName: 'Basic DAO' }, - { value: "soulbound-nft", displayName: 'Soulbound Nft' }, - { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection NFT', description: "Multi collection NFT with:", opts: { - burnable: true, - pausable: true + { + value: "token-sale", + displayName: 'Token Sale', + description: "ERC20 token sale contact. Sell tokens for ETH" + }, + { + value: "simple-nft-sale", + displayName: 'Simple Nft Sale', + description: "ERC721 NFT with an adjustable price & to mint free NFTs" + }, + { + value: "Azuki-ERC721A-NFT-Sale-basic", + displayName: 'Azuki ERC721A NFT Sale basic', + description: "An implementation of the ERC721A standard" + }, + { + value: "Azuki-ERC721A-NFT-Sale", + displayName: 'Azuki ERC721A NFT Sale', + description: "An extension of the ERC721A standard with wallet limit" + }, + { + value: "token-staking-with-infinite-rewards", + displayName: 'Token Staking with infinite rewards', + description: "Token staking contract to reward ERC20 tokens for every token staked" + }, + { + value: "nft-staking-with-infinite-rewards", + displayName: 'NFT Staking with infinite rewards', + description: "NFT staking contract to reward exact number of ERC20 tokens per day" + }, + { + value: "basic-dao", + displayName: 'Basic DAO', + description: "A very simple implementation of a DAO" + }, + { + value: "soulbound-nft", + displayName: 'Soulbound NFT', + description: "ERC721 Soulbound NFT with no transfer capability" + }, + { value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", + displayName: 'Multi collection NFT', + description: "Multi collection NFT with:", + opts: { + burnable: true, + pausable: true }, }, ] }, From 28b25d08084ff0dd952f2cd649dbcd1c1ab30e01 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 19:03:30 +0530 Subject: [PATCH 276/312] linting fix --- .../plugins/templates-selection/templates.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts index a92b952bd9..2a6ae5fc15 100644 --- a/apps/remix-ide/src/app/plugins/templates-selection/templates.ts +++ b/apps/remix-ide/src/app/plugins/templates-selection/templates.ts @@ -267,42 +267,42 @@ export const templates = (intl, plugin) => { onClickLabel: 'Open Cookbook Plugin', description: 'Discover more templates!', items: [ - { + { value: "token-sale", displayName: 'Token Sale', description: "ERC20 token sale contact. Sell tokens for ETH" }, - { + { value: "simple-nft-sale", displayName: 'Simple Nft Sale', - description: "ERC721 NFT with an adjustable price & to mint free NFTs" + description: "ERC721 NFT with an adjustable price & to mint free NFTs" }, - { + { value: "Azuki-ERC721A-NFT-Sale-basic", displayName: 'Azuki ERC721A NFT Sale basic', description: "An implementation of the ERC721A standard" }, - { + { value: "Azuki-ERC721A-NFT-Sale", displayName: 'Azuki ERC721A NFT Sale', description: "An extension of the ERC721A standard with wallet limit" }, - { + { value: "token-staking-with-infinite-rewards", displayName: 'Token Staking with infinite rewards', description: "Token staking contract to reward ERC20 tokens for every token staked" }, - { + { value: "nft-staking-with-infinite-rewards", displayName: 'NFT Staking with infinite rewards', - description: "NFT staking contract to reward exact number of ERC20 tokens per day" + description: "NFT staking contract to reward exact number of ERC20 tokens per day" }, - { + { value: "basic-dao", displayName: 'Basic DAO', description: "A very simple implementation of a DAO" }, - { + { value: "soulbound-nft", displayName: 'Soulbound NFT', description: "ERC721 Soulbound NFT with no transfer capability" @@ -313,7 +313,7 @@ export const templates = (intl, plugin) => { opts: { burnable: true, pausable: true - }, }, + }, }, ] }, { From f84b94bfb754baa20543ef061976877f5993d934 Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 19:31:23 +0530 Subject: [PATCH 277/312] publish libs for v0.54.0 --- libs/ghaction-helper/package.json | 8 ++++---- libs/remix-analyzer/package.json | 8 ++++---- libs/remix-astwalker/package.json | 6 +++--- libs/remix-debug/package.json | 12 ++++++------ libs/remix-lib/package.json | 4 ++-- libs/remix-simulator/package.json | 6 +++--- libs/remix-solidity/package.json | 6 +++--- libs/remix-tests/package.json | 10 +++++----- libs/remix-url-resolver/package.json | 4 ++-- libs/remix-ws-templates/package.json | 4 ++-- libs/remixd/package.json | 2 +- 11 files changed, 35 insertions(+), 35 deletions(-) diff --git a/libs/ghaction-helper/package.json b/libs/ghaction-helper/package.json index d3ee5050b8..1292b907b4 100644 --- a/libs/ghaction-helper/package.json +++ b/libs/ghaction-helper/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/ghaction-helper", - "version": "0.1.36", + "version": "0.1.37", "description": "Solidity Tests GitHub Action Helper", "main": "src/index.js", "scripts": { @@ -19,17 +19,17 @@ }, "homepage": "https://github.com/ethereum/remix-project#readme", "devDependencies": { - "@remix-project/remix-solidity": "^0.5.42", + "@remix-project/remix-solidity": "^0.5.43", "@types/chai": "^4.3.4", "typescript": "^4.9.3" }, "dependencies": { "@ethereum-waffle/chai": "^3.4.4", - "@remix-project/remix-simulator": "^0.2.56", + "@remix-project/remix-simulator": "^0.2.57", "chai": "^4.3.7", "ethers": "^5.7.2", "web3": "^4.1.1" }, "types": "./src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444" + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01" } \ No newline at end of file diff --git a/libs/remix-analyzer/package.json b/libs/remix-analyzer/package.json index 3e39770dc4..3a44ff1ebf 100644 --- a/libs/remix-analyzer/package.json +++ b/libs/remix-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-analyzer", - "version": "0.5.65", + "version": "0.5.66", "description": "Tool to perform static analysis on Solidity smart contracts", "scripts": { "test": "./../../node_modules/.bin/ts-node --project ../../tsconfig.base.json --require tsconfig-paths/register ./../../node_modules/.bin/tape ./test/tests.ts" @@ -25,8 +25,8 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@remix-project/remix-astwalker": "^0.0.86", - "@remix-project/remix-lib": "^0.5.63", + "@remix-project/remix-astwalker": "^0.0.87", + "@remix-project/remix-lib": "^0.5.64", "async": "^2.6.2", "ethers": "^5.4.2", "ethjs-util": "^0.1.6", @@ -50,6 +50,6 @@ "typescript": "^3.7.5" }, "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444", + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01", "main": "./src/index.js" } \ No newline at end of file diff --git a/libs/remix-astwalker/package.json b/libs/remix-astwalker/package.json index 9780d528f9..8414467d03 100644 --- a/libs/remix-astwalker/package.json +++ b/libs/remix-astwalker/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-astwalker", - "version": "0.0.86", + "version": "0.0.87", "description": "Tool to walk through Solidity AST", "main": "src/index.js", "scripts": { @@ -37,7 +37,7 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@remix-project/remix-lib": "^0.5.63", + "@remix-project/remix-lib": "^0.5.64", "@types/tape": "^4.2.33", "async": "^2.6.2", "ethers": "^5.4.2", @@ -53,6 +53,6 @@ "tap-spec": "^5.0.0" }, "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444", + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01", "types": "./src/index.d.ts" } \ No newline at end of file diff --git a/libs/remix-debug/package.json b/libs/remix-debug/package.json index 46d64c7e8f..4f37b7bcac 100644 --- a/libs/remix-debug/package.json +++ b/libs/remix-debug/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-debug", - "version": "0.5.56", + "version": "0.5.57", "description": "Tool to debug Ethereum transactions", "contributors": [ { @@ -26,10 +26,10 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@remix-project/remix-astwalker": "^0.0.86", - "@remix-project/remix-lib": "^0.5.63", - "@remix-project/remix-simulator": "^0.2.56", - "@remix-project/remix-solidity": "^0.5.42", + "@remix-project/remix-astwalker": "^0.0.87", + "@remix-project/remix-lib": "^0.5.64", + "@remix-project/remix-simulator": "^0.2.57", + "@remix-project/remix-solidity": "^0.5.43", "ansi-gray": "^0.1.1", "async": "^2.6.2", "color-support": "^1.1.3", @@ -69,6 +69,6 @@ }, "homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-debug#readme", "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444", + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01", "types": "./src/index.d.ts" } \ No newline at end of file diff --git a/libs/remix-lib/package.json b/libs/remix-lib/package.json index 3dc590e3e8..2f5f7d8938 100644 --- a/libs/remix-lib/package.json +++ b/libs/remix-lib/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-lib", - "version": "0.5.63", + "version": "0.5.64", "description": "Library to various Remix tools", "contributors": [ { @@ -55,6 +55,6 @@ }, "homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-lib#readme", "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444", + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01", "types": "./src/index.d.ts" } \ No newline at end of file diff --git a/libs/remix-simulator/package.json b/libs/remix-simulator/package.json index 9095287fd4..689dfd9055 100644 --- a/libs/remix-simulator/package.json +++ b/libs/remix-simulator/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-simulator", - "version": "0.2.56", + "version": "0.2.57", "description": "Ethereum IDE and tools for the web", "contributors": [ { @@ -23,7 +23,7 @@ "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", "@metamask/eth-sig-util": "^7.0.2", - "@remix-project/remix-lib": "^0.5.63", + "@remix-project/remix-lib": "^0.5.64", "ansi-gray": "^0.1.1", "async": "^3.1.0", "body-parser": "^1.18.2", @@ -71,6 +71,6 @@ }, "homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-simulator#readme", "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444", + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01", "types": "./src/index.d.ts" } \ No newline at end of file diff --git a/libs/remix-solidity/package.json b/libs/remix-solidity/package.json index 00d89faf89..382c41bf51 100644 --- a/libs/remix-solidity/package.json +++ b/libs/remix-solidity/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-solidity", - "version": "0.5.42", + "version": "0.5.43", "description": "Tool to load and run Solidity compiler", "main": "src/index.js", "types": "src/index.d.ts", @@ -19,7 +19,7 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@remix-project/remix-lib": "^0.5.63", + "@remix-project/remix-lib": "^0.5.64", "async": "^2.6.2", "eslint-scope": "^5.0.0", "ethers": "^5.4.2", @@ -57,5 +57,5 @@ }, "homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-solidity#readme", "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444" + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01" } \ No newline at end of file diff --git a/libs/remix-tests/package.json b/libs/remix-tests/package.json index b4942a7a40..3628384bc1 100644 --- a/libs/remix-tests/package.json +++ b/libs/remix-tests/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-tests", - "version": "0.2.56", + "version": "0.2.57", "description": "Tool to test Solidity smart contracts", "main": "src/index.js", "types": "./src/index.d.ts", @@ -41,9 +41,9 @@ "@ethereumjs/tx": "5.4.0", "@ethereumjs/util": "9.1.0", "@ethereumjs/vm": "8.1.1", - "@remix-project/remix-lib": "^0.5.63", - "@remix-project/remix-simulator": "^0.2.56", - "@remix-project/remix-solidity": "^0.5.42", + "@remix-project/remix-lib": "^0.5.64", + "@remix-project/remix-simulator": "^0.2.57", + "@remix-project/remix-solidity": "^0.5.43", "@remix-project/remix-url-resolver": "^0.0.42", "ansi-gray": "^0.1.1", "async": "^2.6.0", @@ -89,5 +89,5 @@ "@ethereumjs/trie": "6.2.1" }, "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444" + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01" } \ No newline at end of file diff --git a/libs/remix-url-resolver/package.json b/libs/remix-url-resolver/package.json index 415143f95d..f775b72458 100644 --- a/libs/remix-url-resolver/package.json +++ b/libs/remix-url-resolver/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-url-resolver", - "version": "0.0.85", + "version": "0.0.86", "description": "Solidity import url resolver engine", "main": "src/index.js", "types": "src/index.d.ts", @@ -41,5 +41,5 @@ "typescript": "^3.1.6" }, "typings": "src/index.d.ts", - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444" + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01" } \ No newline at end of file diff --git a/libs/remix-ws-templates/package.json b/libs/remix-ws-templates/package.json index c26118f563..1787101d43 100644 --- a/libs/remix-ws-templates/package.json +++ b/libs/remix-ws-templates/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remix-ws-templates", - "version": "1.0.50", + "version": "1.0.51", "description": "Create a Remix IDE workspace using different templates", "main": "src/index.js", "types": "src/index.d.ts", @@ -24,5 +24,5 @@ "ethers": "^5.4.2", "web3": "^4.1.1" }, - "gitHead": "57f4196f41faf8a2879a8013327f5e275e623444" + "gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01" } \ No newline at end of file diff --git a/libs/remixd/package.json b/libs/remixd/package.json index 118affc943..0da157670c 100644 --- a/libs/remixd/package.json +++ b/libs/remixd/package.json @@ -1,6 +1,6 @@ { "name": "@remix-project/remixd", - "version": "0.6.36", + "version": "0.6.37", "description": "remix server: allow accessing file system from remix.ethereum.org and start a dev environment (see help section)", "main": "index.js", "types": "./index.d.ts", From 3f03d5647264cc8cc7e27ac1f0e9373c3980ecc7 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Tue, 17 Sep 2024 08:35:28 +0200 Subject: [PATCH 278/312] nvm --- .circleci/config.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cf58482679..892258b6b9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -452,19 +452,15 @@ jobs: ls -la dist/apps/remix-ide nvm install 20 nvm use 20 - - restore_cache: - keys: - - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} + - run: command: | nvm use 20 cd apps/remixdesktop yarn || yarn + find ./node_modules yarn add @remix-project/remix-ws-templates - - save_cache: - key: remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - paths: - - apps/remixdesktop/node_modules + # use USE_HARD_LINK=false https://github.com/electron-userland/electron-builder/issues/3179 - run: command: | From e572a7b62ad615330e174979acff52ad1fc08cbe Mon Sep 17 00:00:00 2001 From: filip mertens Date: Tue, 17 Sep 2024 08:56:37 +0200 Subject: [PATCH 279/312] nodev --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 892258b6b9..e63e6b6891 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -450,7 +450,7 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20 + nvm install 20.0.0 nvm use 20 - run: From 1b9f442344a54520f5c0688bfff4bb0fa868e0a1 Mon Sep 17 00:00:00 2001 From: filip mertens Date: Tue, 17 Sep 2024 09:46:49 +0200 Subject: [PATCH 280/312] restore cache --- .circleci/config.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e63e6b6891..31cde2a8cb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -452,7 +452,9 @@ jobs: ls -la dist/apps/remix-ide nvm install 20.0.0 nvm use 20 - + - restore_cache: + keys: + - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | nvm use 20 @@ -460,7 +462,10 @@ jobs: yarn || yarn find ./node_modules yarn add @remix-project/remix-ws-templates - + - save_cache: + key: remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} + paths: + - apps/remixdesktop/node_modules # use USE_HARD_LINK=false https://github.com/electron-userland/electron-builder/issues/3179 - run: command: | From 2930021238397fe98ce5855688a6afc1092099ed Mon Sep 17 00:00:00 2001 From: filip mertens Date: Tue, 17 Sep 2024 09:51:04 +0200 Subject: [PATCH 281/312] add preload --- apps/remixdesktop/esbuild.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/esbuild.js b/apps/remixdesktop/esbuild.js index cca1b88b29..88ce4045eb 100644 --- a/apps/remixdesktop/esbuild.js +++ b/apps/remixdesktop/esbuild.js @@ -1,8 +1,8 @@ const esbuild = require('esbuild'); esbuild.build({ - entryPoints: ['src/main.ts'], // Your TypeScript entry point - outfile: 'build/main.js', // Output bundled file + entryPoints: ['src/main.ts', 'src/preload.ts'], // Your TypeScript entry point + outdir: 'build', // Output bundled file bundle: true, // Bundle all dependencies platform: 'node', // Target Node.js platform external: ['electron', 'fsevents', 'node-pty'], // Exclude native modules From 3d8717c3684d811eef889e991f15cf6252c22787 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 15:01:45 +0200 Subject: [PATCH 282/312] pty update --- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/rundist.bash | 25 +-- apps/remixdesktop/rundist_esbuild.bash | 24 +++ apps/remixdesktop/tsconfig.json | 2 +- apps/remixdesktop/webpack.config.js | 1 + apps/remixdesktop/yarn.lock | 248 +++++++++++++++---------- 6 files changed, 178 insertions(+), 124 deletions(-) mode change 100755 => 120000 apps/remixdesktop/rundist.bash create mode 100755 apps/remixdesktop/rundist_esbuild.bash diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index 40a9a9f8d5..fca6ac29c5 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -76,7 +76,7 @@ "express": "^4.19.2", "isomorphic-git": "^1.24.2", "matomo-tracker": "^2.2.4", - "node-pty": "^0.10.1", + "node-pty": "^1.0.0", "octokit": "^3.1.2", "semver": "^7.5.4" }, diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash deleted file mode 100755 index dfda14a074..0000000000 --- a/apps/remixdesktop/rundist.bash +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Read the version from package.json -version=$(awk -F'"' '/"version":/ {print $4}' package.json) - -# Determine the command to run based on the version -if [[ $version == *"beta"* ]]; then - command="yarn esbuild -c beta.json" -elif [[ $version == *"alpha"* ]]; then - command="yarn esbuild -c alpha.json" -elif [[ $version == *"insiders"* ]]; then - command="yarn esbuild -c insiders.json" -else - command="yarn esbuild -c latest.json" -fi - -# Append any arguments passed in CLI -for arg in "$@"; do - command+=" $arg" -done - -# Print and run the command -echo "Running command: $command" -$command diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash new file mode 120000 index 0000000000..7139f5e09c --- /dev/null +++ b/apps/remixdesktop/rundist.bash @@ -0,0 +1 @@ +rundist_webpack.bash \ No newline at end of file diff --git a/apps/remixdesktop/rundist_esbuild.bash b/apps/remixdesktop/rundist_esbuild.bash new file mode 100755 index 0000000000..dfda14a074 --- /dev/null +++ b/apps/remixdesktop/rundist_esbuild.bash @@ -0,0 +1,24 @@ +#!/bin/bash + +# Read the version from package.json +version=$(awk -F'"' '/"version":/ {print $4}' package.json) + +# Determine the command to run based on the version +if [[ $version == *"beta"* ]]; then + command="yarn esbuild -c beta.json" +elif [[ $version == *"alpha"* ]]; then + command="yarn esbuild -c alpha.json" +elif [[ $version == *"insiders"* ]]; then + command="yarn esbuild -c insiders.json" +else + command="yarn esbuild -c latest.json" +fi + +# Append any arguments passed in CLI +for arg in "$@"; do + command+=" $arg" +done + +# Print and run the command +echo "Running command: $command" +$command diff --git a/apps/remixdesktop/tsconfig.json b/apps/remixdesktop/tsconfig.json index 7551c18c32..ef1cbf789f 100644 --- a/apps/remixdesktop/tsconfig.json +++ b/apps/remixdesktop/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES6", + "target": "ES2018", "allowJs": true, "module": "CommonJS", "skipLibCheck": true, diff --git a/apps/remixdesktop/webpack.config.js b/apps/remixdesktop/webpack.config.js index 93e15e7970..de122e7e1e 100644 --- a/apps/remixdesktop/webpack.config.js +++ b/apps/remixdesktop/webpack.config.js @@ -10,6 +10,7 @@ module.exports = { preload: './src/preload.ts', }, target: 'electron-main', + externals: [nodeExternals()], module: { rules: [ { diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index ac06e09bfa..266e148d1c 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -28,10 +28,11 @@ integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@electron/asar@^3.2.1": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.8.tgz#2ea722f3452583dbd4ffdcc4b4f5dc903f1d8178" - integrity sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg== + version "3.2.13" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.13.tgz#56565ea423ead184465adfa72663b2c70d9835f2" + integrity sha512-pY5z2qQSwbFzJsBdgfJIzXf5ElHTVMutC2dxh0FD60njknMu3n1NnTABOcQwbb5/v5soqE79m9UjaJryBf3epg== dependencies: + "@types/glob" "^7.1.0" commander "^5.0.0" glob "^7.1.6" minimatch "^3.0.4" @@ -61,9 +62,9 @@ promise-retry "^2.0.1" "@electron/notarize@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.3.0.tgz#9659cf6c92563dd69411afce229f52f9f7196227" - integrity sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w== + version "2.4.0" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.4.0.tgz#efa35dbd86b25d97b41d4a70cf19d1800f6e4603" + integrity sha512-ArHnRPIJJGrmV+uWNQSINAht+cM4gAo3uA3WFI54bYF93mzmD15gzhPQ0Dd+v/fkMhnRiiIO8NNkGdn87Vsy0g== dependencies: debug "^4.1.1" fs-extra "^9.0.1" @@ -658,7 +659,7 @@ "@malept/cross-spawn-promise@^1.1.0": version "1.1.1" - resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== dependencies: cross-spawn "^7.0.1" @@ -1157,23 +1158,7 @@ dependencies: "@types/ms" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.5": +"@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -1205,6 +1190,14 @@ dependencies: "@types/node" "*" +"@types/glob@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" @@ -1215,7 +1208,7 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== -"@types/json-schema@*", "@types/json-schema@^7.0.8": +"@types/json-schema@^7.0.8": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1244,6 +1237,11 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + "@types/ms@*": version "0.7.31" resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" @@ -1269,9 +1267,11 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^18.11.18": - version "18.16.18" - resolved "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz" - integrity sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw== + version "18.19.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.50.tgz#8652b34ee7c0e7e2004b3f08192281808d41bf5a" + integrity sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg== + dependencies: + undici-types "~5.26.4" "@types/pbkdf2@^3.0.0": version "3.1.1" @@ -1361,12 +1361,13 @@ integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== "@vscode/ripgrep@^1.15.6": - version "1.15.6" - resolved "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.15.6.tgz" - integrity sha512-mCtfHqZ/g+75qDDeIPB9ST1xyJDaJornaSujuRKkB0SMZ6FMVtuKUdvvvOITR+DcKo5KOwUVuOUUpt75jOY+Yw== + version "1.15.9" + resolved "https://registry.yarnpkg.com/@vscode/ripgrep/-/ripgrep-1.15.9.tgz#92279f7f28e1e49ad9a89603e10b17a4c7f9f5f1" + integrity sha512-4q2PXRvUvr3bF+LsfrifmUZgSPmCNcUZo6SbEAZgArIChchkezaxLoIeQMJe/z3CCKStvaVKpBXLxN3Z8lQjFQ== dependencies: https-proxy-agent "^7.0.2" proxy-from-env "^1.1.0" + yauzl "^2.9.2" "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" @@ -1640,7 +1641,7 @@ anymatch@~3.1.2: app-builder-bin@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== app-builder-lib@24.9.1: @@ -2095,6 +2096,14 @@ builder-util-runtime@9.2.3: debug "^4.3.4" sax "^1.2.4" +builder-util-runtime@9.2.5: + version "9.2.5" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.5.tgz#0afdffa0adb5c84c14926c7dd2cf3c6e96e9be83" + integrity sha512-HjIDfhvqx/8B3TDN4GbABQcgpewTU4LMRTQPkVpKYV3lsuxEJoIfvg09GyWTNmfVNSUAYf+fbTN//JX4TH20pg== + dependencies: + debug "^4.3.4" + sax "^1.2.4" + builder-util@24.8.1: version "24.8.1" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.8.1.tgz#594d45b0c86d1d17f5c7bebbb77405080b2571c2" @@ -2788,7 +2797,7 @@ dom-walk@^0.1.0: dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv@10.0.0: @@ -2798,7 +2807,7 @@ dotenv@10.0.0: dotenv@^9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== eastasianwidth@^0.2.0: @@ -2886,23 +2895,23 @@ electron-to-chromium@^1.4.796: integrity sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg== electron-updater@^6.1.8: - version "6.1.8" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.1.8.tgz#17637bca165322f4e526b13c99165f43e6f697d8" - integrity sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ== + version "6.3.4" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.3.4.tgz#3934bc89875bb524c2cbbd11041114e97c0c2496" + integrity sha512-uZUo7p1Y53G4tl6Cgw07X1yF8Jlz6zhaL7CQJDZ1fVVkOaBfE2cWtx80avwDVi8jHp+I/FWawrMgTAeCCNIfAg== dependencies: - builder-util-runtime "9.2.3" + builder-util-runtime "9.2.5" fs-extra "^10.1.0" js-yaml "^4.1.0" lazy-val "^1.0.5" lodash.escaperegexp "^4.1.2" lodash.isequal "^4.5.0" - semver "^7.3.8" + semver "^7.6.3" tiny-typed-emitter "^2.1.0" electron@^26.0.0: - version "26.6.7" - resolved "https://registry.yarnpkg.com/electron/-/electron-26.6.7.tgz#ba9a5d2b857f54f3f3cba9fe1d2da7c33f6501ab" - integrity sha512-2iG08Q2KAPTBlxPqEB3qmVUqDdmcPAvgGhiULggkeoLTznhg5yqkOJPe+Hpuc176i4gjsQVTpK7zbhq21Y3FoQ== + version "26.6.10" + resolved "https://registry.yarnpkg.com/electron/-/electron-26.6.10.tgz#01ca7610bd662033ed3ceb70804cbf940c7e6756" + integrity sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg== dependencies: "@electron/get" "^2.0.0" "@types/node" "^18.11.18" @@ -2948,7 +2957,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: version "5.17.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== @@ -2956,6 +2965,14 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + entities@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -3817,15 +3834,16 @@ glob@7.2.0: path-is-absolute "^1.0.0" glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^7.1.3, glob@^7.1.6, glob@^7.2.3: version "7.2.3" @@ -4518,10 +4536,10 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -4595,7 +4613,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: @@ -4906,7 +4924,7 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lru-cache@^10.0.0: +lru-cache@^10.0.0, lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== @@ -4918,11 +4936,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - matcher@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" @@ -5061,10 +5074,10 @@ minimatch@^5.0.1, minimatch@^5.1.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -5110,6 +5123,11 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -5249,10 +5267,10 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" -nan@^2.14.0: - version "2.17.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== +nan@^2.17.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== nano-json-stream-parser@^0.1.2: version "0.1.2" @@ -5349,12 +5367,12 @@ node-loader@^2.0.0: dependencies: loader-utils "^2.0.0" -node-pty@^0.10.1: - version "0.10.1" - resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== +node-pty@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd" + integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA== dependencies: - nan "^2.14.0" + nan "^2.17.0" node-releases@^2.0.14: version "2.0.14" @@ -5540,6 +5558,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + pako@^1.0.10, pako@~1.0.2: version "1.0.11" resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" @@ -5575,12 +5598,12 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.7: @@ -6112,6 +6135,11 @@ semver@^7.3.4: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -6379,7 +6407,16 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6438,7 +6475,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -6808,15 +6852,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.1.3: - version "5.1.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== - -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^5.1.3, typescript@^5.3.3: + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== ultron@~1.1.0: version "1.1.1" @@ -6833,6 +6872,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + universal-github-app-jwt@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz#8c1867a394d7d9d42cda34f11d1bcb023797d8df" @@ -7282,11 +7326,10 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.92.1: - version "5.92.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.92.1.tgz#eca5c1725b9e189cffbd86e8b6c3c7400efc5788" - integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA== + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== dependencies: - "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.12.1" "@webassemblyjs/wasm-edit" "^1.12.1" @@ -7295,7 +7338,7 @@ webpack@^5.92.1: acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" @@ -7387,7 +7430,16 @@ workerpool@6.2.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -7550,9 +7602,9 @@ yarn@^1.22.21: resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.21.tgz#1959a18351b811cdeedbd484a8f86c3cc3bbaf72" integrity sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg== -yauzl@^2.10.0: +yauzl@^2.10.0, yauzl@^2.9.2: version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" From 9d892dcf42465bbc4f4e7d0bf212759168e52df8 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 15:19:31 +0200 Subject: [PATCH 283/312] e2e target --- .circleci/config.yml | 6 +++--- apps/remixdesktop/tsconfig.e2e.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 31cde2a8cb..451962a1e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -199,7 +199,7 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20 + nvm install 20.0.0 nvm use 20 node -v npx -v @@ -261,7 +261,7 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20 + nvm install 20.0.0 nvm use 20 node -v npx -v @@ -520,7 +520,7 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20 + nvm install 20.0.0 nvm use 20 - restore_cache: keys: diff --git a/apps/remixdesktop/tsconfig.e2e.json b/apps/remixdesktop/tsconfig.e2e.json index 79ebd6cd16..b63b0a2f36 100644 --- a/apps/remixdesktop/tsconfig.e2e.json +++ b/apps/remixdesktop/tsconfig.e2e.json @@ -1,7 +1,8 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "build-e2e" + "outDir": "build-e2e", + "target": "ES6" }, "include": ["test/**/*.ts", "test/**/*.js", "../remix-ide-e2e/src/commands"] } \ No newline at end of file From db58fdd59e31af7ab2d8182167a032c22459c744 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 16:21:24 +0200 Subject: [PATCH 284/312] gist fix --- apps/remixdesktop/test/tests/app/gist.test.ts | 5 ++++- apps/remixdesktop/yarn.lock | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/test/tests/app/gist.test.ts b/apps/remixdesktop/test/tests/app/gist.test.ts index bbbb710ff7..b53c741910 100644 --- a/apps/remixdesktop/test/tests/app/gist.test.ts +++ b/apps/remixdesktop/test/tests/app/gist.test.ts @@ -5,7 +5,9 @@ const tests = { before: function (browser: NightwatchBrowser, done: VoidFunction) { done() }, - 'start gist': !function (browser: NightwatchBrowser) { + 'start gist': function (browser: NightwatchBrowser) { + browser.end() + /* browser .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('*[data-id="landingPageImportFromGist"]') @@ -25,6 +27,7 @@ const tests = { .click('[data-id="treeViewLitreeViewItemcontracts"]') .openFile('contracts/3_Ballot.sol') .end() + */ } } diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index 266e148d1c..8fa2b3a74d 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -6852,7 +6852,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.1.3, typescript@^5.3.3: +typescript@^5.3.3, typescript@^5.5.3: version "5.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== From 90268ec2678302a31f906db4dcdeb751bc254c04 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 16:21:39 +0200 Subject: [PATCH 285/312] gist --- apps/remixdesktop/yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index 8fa2b3a74d..266e148d1c 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -6852,7 +6852,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^5.3.3, typescript@^5.5.3: +typescript@^5.1.3, typescript@^5.3.3: version "5.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== From a7ac320722d85325173fad69b1af56fef2277661 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 17:10:07 +0200 Subject: [PATCH 286/312] 22 --- .circleci/config.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 451962a1e0..a1bee69bc0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -199,8 +199,8 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20.0.0 - nvm use 20 + nvm install 22 + nvm use 22 node -v npx -v npm install --global yarn @@ -261,8 +261,8 @@ jobs: key: node-20-windows-v3 - run: command: | - nvm install 20.0.0 - nvm use 20 + nvm install 22 + nvm use 22 node -v npx -v npm install --global yarn @@ -285,7 +285,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ - nvm use 20 + nvm use 22 node -v pip install setuptools yarn @@ -450,14 +450,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20.0.0 - nvm use 20 + nvm install 22 + nvm use 22 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop yarn || yarn find ./node_modules @@ -469,14 +469,14 @@ jobs: # use USE_HARD_LINK=false https://github.com/electron-userland/electron-builder/issues/3179 - run: command: | - nvm use 20 + nvm use 22 mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop yarn - run: command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop yarn installRipGrepMacOX<< parameters.arch >> PUBLISH_FOR_PULL_REQUEST='false' USE_HARD_LINKS=false ./rundist.bash --<< parameters.arch >> @@ -520,14 +520,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 20.0.0 - nvm use 20 + nvm install 22 + nvm use 22 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop yarn || yarn yarn add @remix-project/remix-ws-templates @@ -537,14 +537,14 @@ jobs: - apps/remixdesktop/node_modules - run: command: | - nvm use 20 + nvm use 22 mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop yarn - run: command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop yarn installRipGrepMacOXarm64 PUBLISH_FOR_PULL_REQUEST='false' DO_NOT_NOTARIZE='true' USE_HARD_LINKS=false ./rundist.bash --arm64 @@ -552,13 +552,13 @@ jobs: - run: name: "Run tests" command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop ./run_ci_test.sh - run: name: "Run isogit tests" command: | - nvm use 20 + nvm use 22 cd apps/remixdesktop ./run_git_ui_isogit_tests.sh - store_test_results: From 2d376859fc333cc3fefa6363dd7b9dd996488898 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 18:00:09 +0200 Subject: [PATCH 287/312] upgrade pip --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index a1bee69bc0..e0400b9482 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -217,6 +217,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ + python -m pip install --upgrade pip pip install setuptools yarn ./rundist.bash From d022ec708ef2c5f0bb359f283994d7a6fcb74e29 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 18:01:14 +0200 Subject: [PATCH 288/312] rm cache win --- .circleci/config.yml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e0400b9482..2b2d0737ff 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -205,13 +205,7 @@ jobs: npx -v npm install --global yarn yarn -v - - save_cache: - key: node-20-windows-v3 - paths: - - /ProgramData/nvm/v20.0.0 - - restore_cache: - keys: - - remixdesktop-windows-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} + - run: command: | mkdir apps/remixdesktop/build @@ -222,10 +216,7 @@ jobs: yarn ./rundist.bash rm -rf release/*-unpacked - - save_cache: - key: remixdesktop-windows-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} - paths: - - apps/remixdesktop/node_modules + - persist_to_workspace: root: apps/remixdesktop paths: From 0a6276752b8e13993dbea772294d2cf7e51f7429 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 18:09:14 +0200 Subject: [PATCH 289/312] rm cache --- .circleci/config.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2b2d0737ff..dc96cf4673 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -195,8 +195,7 @@ jobs: - attach_workspace: at: . - run: unzip ./persist/desktopbuild.zip - - restore_cache: - key: node-20-windows-v3 + - run: command: | nvm install 22 @@ -249,8 +248,7 @@ jobs: - attach_workspace: at: . - run: unzip ./persist/desktopbuild.zip - - restore_cache: - key: node-20-windows-v3 + - run: command: | nvm install 22 @@ -265,13 +263,7 @@ jobs: cd "apps/remixdesktop/" yarn -v shell: powershell.exe - - save_cache: - key: node-20-windows-v3 - paths: - - /ProgramData/nvm/v20.0.0 - - restore_cache: - keys: - - remixdesktop-windows-deps-{{ checksum "apps/remixdesktop/yarn.lock" }} + - run: command: | mkdir apps/remixdesktop/build From 4a706ee88218e8fe99bc47aac6601e52086edaa4 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 18:23:10 +0200 Subject: [PATCH 290/312] node-gyp --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index dc96cf4673..db083916d4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -203,6 +203,7 @@ jobs: node -v npx -v npm install --global yarn + npm install --global node-gyp yarn -v - run: From 2eab87afe7fe2bbae107ef3454e13a302407526b Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Tue, 17 Sep 2024 18:44:35 +0200 Subject: [PATCH 291/312] build 20 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index db083916d4..a0223dea39 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,8 +198,8 @@ jobs: - run: command: | - nvm install 22 - nvm use 22 + nvm install 20.0.0 + nvm use 20.0.0 node -v npx -v npm install --global yarn From 73236dfbb7b111ba57906259a4f78e6778919e34 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 07:28:48 +0200 Subject: [PATCH 292/312] rundist --- apps/remixdesktop/rundist.bash | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) mode change 120000 => 100755 apps/remixdesktop/rundist.bash diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash deleted file mode 120000 index 7139f5e09c..0000000000 --- a/apps/remixdesktop/rundist.bash +++ /dev/null @@ -1 +0,0 @@ -rundist_webpack.bash \ No newline at end of file diff --git a/apps/remixdesktop/rundist.bash b/apps/remixdesktop/rundist.bash new file mode 100755 index 0000000000..66a3a9a0dc --- /dev/null +++ b/apps/remixdesktop/rundist.bash @@ -0,0 +1,24 @@ +#!/bin/bash + +# Read the version from package.json +version=$(awk -F'"' '/"version":/ {print $4}' package.json) + +# Determine the command to run based on the version +if [[ $version == *"beta"* ]]; then + command="yarn dist -c beta.json" +elif [[ $version == *"alpha"* ]]; then + command="yarn dist -c alpha.json" +elif [[ $version == *"insiders"* ]]; then + command="yarn dist -c insiders.json" +else + command="yarn dist -c latest.json" +fi + +# Append any arguments passed in CLI +for arg in "$@"; do + command+=" $arg" +done + +# Print and run the command +echo "Running command: $command" +$command From 6533f2aaca67ca1d0256e44ee26e5f5097d9382f Mon Sep 17 00:00:00 2001 From: aniket-engg Date: Mon, 16 Sep 2024 22:28:44 +0530 Subject: [PATCH 293/312] bump dev version --- .github/workflows/pr-reminder.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-reminder.yml b/.github/workflows/pr-reminder.yml index eaedd51125..ee24eebb0b 100644 --- a/.github/workflows/pr-reminder.yml +++ b/.github/workflows/pr-reminder.yml @@ -14,4 +14,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }} - freeze-date: '2024-09-09T18:00:00Z' + freeze-date: '2024-10-07T18:00:00Z' diff --git a/package.json b/package.json index a34b90e2b6..a04e76886f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-project", - "version": "0.54.0-dev", + "version": "0.55.0-dev", "license": "MIT", "description": "Ethereum Remix Monorepo", "main": "index.js", From 2f6d91b5fbed9bba1e67342811b6513fbd1ec2c4 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 07:45:51 +0200 Subject: [PATCH 294/312] test win 20 --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a0223dea39..59e26460bc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -252,8 +252,8 @@ jobs: - run: command: | - nvm install 22 - nvm use 22 + nvm install 20.0.0 + nvm use 20 node -v npx -v npm install --global yarn @@ -270,7 +270,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ - nvm use 22 + nvm use 20 node -v pip install setuptools yarn From c668c24f403c68aaf78b9b3271d5db3b1ed223e1 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 08:04:23 +0200 Subject: [PATCH 295/312] build win 21 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 59e26460bc..d6bf887fb9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,8 +198,8 @@ jobs: - run: command: | - nvm install 20.0.0 - nvm use 20.0.0 + nvm install 21 + nvm use 21 node -v npx -v npm install --global yarn From dea3b5e362ecfde9666ec9421875990d76897cbc Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 08:05:34 +0200 Subject: [PATCH 296/312] test wind --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index d6bf887fb9..d5a4d52fa3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -257,6 +257,7 @@ jobs: node -v npx -v npm install --global yarn + npm install --global node-gyp yarn -v - run: name: start selenium @@ -272,6 +273,7 @@ jobs: cd apps/remixdesktop/ nvm use 20 node -v + python -m pip install --upgrade pip pip install setuptools yarn ./rundist.bash From 241e2e1f268e9d7f55d922a9e4874f7c601f9683 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 08:05:47 +0200 Subject: [PATCH 297/312] 21 --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5a4d52fa3..4925011937 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -252,8 +252,8 @@ jobs: - run: command: | - nvm install 20.0.0 - nvm use 20 + nvm install 21 + nvm use 21 node -v npx -v npm install --global yarn @@ -271,7 +271,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ - nvm use 20 + nvm use 21 node -v python -m pip install --upgrade pip pip install setuptools From d24848a650fe80ac4473204ae415b01a37946325 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:15:17 +0000 Subject: [PATCH 298/312] Bump dompurify from 2.4.1 to 2.5.6 Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.4.1 to 2.5.6. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](https://github.com/cure53/DOMPurify/compare/2.4.1...2.5.6) --- updated-dependencies: - dependency-name: dompurify 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 bdbde9a3d9..0db49976c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14030,9 +14030,9 @@ domhandler@^4.2.0: domelementtype "^2.2.0" dompurify@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631" - integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA== + version "2.5.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.6.tgz#8402b501611eaa7fb3786072297fcbe2787f8592" + integrity sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ== domutils@^2.6.0: version "2.8.0" From 7693a29333722cc6d1883dc51e36b19cf49a1a61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 06:08:20 +0000 Subject: [PATCH 299/312] Bump express from 4.19.2 to 4.20.0 in /apps/remixdesktop Bumps [express](https://github.com/expressjs/express) from 4.19.2 to 4.20.0. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0) --- updated-dependencies: - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/yarn.lock | 160 ++++++++++++++++++++++++++------- 2 files changed, 129 insertions(+), 33 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index f95fc5c8c7..0651bff88b 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -52,7 +52,7 @@ "axios": "^1.7.4", "byline": "^5.0.0", "chokidar": "^3.5.3", - "express": "^4.19.2", + "express": "^4.20.0", "isomorphic-git": "^1.24.2", "node-pty": "^0.10.1", "semver": "^7.5.4" diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index b4d80fb9e0..caa85e0eb9 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -1259,10 +1259,10 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.2, body-parser@^1.16.0: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@1.20.3, body-parser@^1.16.0: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" @@ -1272,7 +1272,7 @@ body-parser@1.20.2, body-parser@^1.16.0: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" + qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -1486,6 +1486,17 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1841,6 +1852,15 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.3: version "1.2.0" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" @@ -2061,6 +2081,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" @@ -2130,6 +2155,18 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -2375,37 +2412,37 @@ exponential-backoff@^3.1.1: resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== -express@^4.14.0, express@^4.19.2: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== +express@^4.14.0, express@^4.20.0: + version "4.20.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48" + integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" finalhandler "1.2.0" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.10" proxy-addr "~2.0.7" qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.0" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -2693,6 +2730,17 @@ get-intrinsic@^1.1.1: has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -2860,6 +2908,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" @@ -3526,10 +3581,10 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== methods@~1.1.2: version "1.1.2" @@ -4036,10 +4091,10 @@ path-scurry@^1.7.0: lru-cache "^9.1.1" minipass "^5.0.0 || ^6.0.2" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== pbkdf2@^3.0.17: version "3.1.2" @@ -4160,12 +4215,12 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== +qs@6.13.0, qs@^6.11.2: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" qs@~6.5.2: version "6.5.3" @@ -4460,6 +4515,25 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + serialize-error@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" @@ -4467,10 +4541,10 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92" + integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -4503,6 +4577,18 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + set-function-name@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -4551,6 +4637,16 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" From 15a411ff5cd8203a1662de50eeb3e6bcf50432f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 06:56:40 +0000 Subject: [PATCH 300/312] Bump express in /apps/remix-ide-e2e/src/githttpbackend Bumps [express](https://github.com/expressjs/express) from 4.19.2 to 4.20.0. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.20.0) --- updated-dependencies: - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .../src/githttpbackend/package.json | 2 +- .../src/githttpbackend/yarn.lock | 87 +++++++++++++------ 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/apps/remix-ide-e2e/src/githttpbackend/package.json b/apps/remix-ide-e2e/src/githttpbackend/package.json index 23c5fdb3fd..ab8288965c 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/package.json +++ b/apps/remix-ide-e2e/src/githttpbackend/package.json @@ -5,7 +5,7 @@ "dependencies": { "body-parser": "^1.20.2", "child_process": "^1.0.2", - "express": "^4.19.2", + "express": "^4.20.0", "git-http-backend": "^1.1.2", "path": "^0.12.7", "zlib": "^1.0.5" diff --git a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock index b426315cd1..7a2d5a0d4a 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock +++ b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock @@ -22,10 +22,10 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -body-parser@1.20.2, body-parser@^1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@1.20.3, body-parser@^1.20.2: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" @@ -35,7 +35,7 @@ body-parser@1.20.2, body-parser@^1.20.2: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" + qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -119,6 +119,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -141,37 +146,37 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -express@^4.19.2: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== +express@^4.20.0: + version "4.20.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48" + integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" finalhandler "1.2.0" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.10" proxy-addr "~2.0.7" qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.0" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -299,10 +304,10 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== methods@~1.1.2: version "1.1.2" @@ -358,10 +363,10 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== path@^0.12.7: version "0.12.7" @@ -391,6 +396,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -435,10 +447,29 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.16.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92" + integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -462,7 +493,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -side-channel@^1.0.4: +side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== From 53b0a0ac854956ab17cfbd94e77cf54efada5e0d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 09:44:50 +0200 Subject: [PATCH 301/312] 20.02 --- .circleci/config.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4925011937..fa5ac0b11e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,8 +198,8 @@ jobs: - run: command: | - nvm install 21 - nvm use 21 + nvm install 20.2 + nvm use 20.2 node -v npx -v npm install --global yarn @@ -252,8 +252,8 @@ jobs: - run: command: | - nvm install 21 - nvm use 21 + nvm install 20.2 + nvm use 20.2 node -v npx -v npm install --global yarn @@ -271,7 +271,7 @@ jobs: mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ - nvm use 21 + nvm use 20.2 node -v python -m pip install --upgrade pip pip install setuptools @@ -437,14 +437,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 22 - nvm use 22 + nvm install 20.2 + nvm use 20.2 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop yarn || yarn find ./node_modules @@ -456,14 +456,14 @@ jobs: # use USE_HARD_LINK=false https://github.com/electron-userland/electron-builder/issues/3179 - run: command: | - nvm use 22 + nvm use 20.2 mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop yarn - run: command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop yarn installRipGrepMacOX<< parameters.arch >> PUBLISH_FOR_PULL_REQUEST='false' USE_HARD_LINKS=false ./rundist.bash --<< parameters.arch >> @@ -507,14 +507,14 @@ jobs: - run: command: | ls -la dist/apps/remix-ide - nvm install 22 - nvm use 22 + nvm install 20.2 + nvm use 20.2 - restore_cache: keys: - remixdesktop-deps-mac-{{ checksum "apps/remixdesktop/yarn.lock" }} - run: command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop yarn || yarn yarn add @remix-project/remix-ws-templates @@ -524,14 +524,14 @@ jobs: - apps/remixdesktop/node_modules - run: command: | - nvm use 22 + nvm use 20.2 mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop yarn - run: command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop yarn installRipGrepMacOXarm64 PUBLISH_FOR_PULL_REQUEST='false' DO_NOT_NOTARIZE='true' USE_HARD_LINKS=false ./rundist.bash --arm64 @@ -539,13 +539,13 @@ jobs: - run: name: "Run tests" command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop ./run_ci_test.sh - run: name: "Run isogit tests" command: | - nvm use 22 + nvm use 20.2 cd apps/remixdesktop ./run_git_ui_isogit_tests.sh - store_test_results: From 34b6307c33a892e970749360c167ea22263ffbab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 06:56:43 +0000 Subject: [PATCH 302/312] Bump body-parser in /apps/remix-ide-e2e/src/githttpbackend Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.2 to 1.20.3. - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3) --- updated-dependencies: - dependency-name: body-parser dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .../src/githttpbackend/package.json | 2 +- .../src/githttpbackend/yarn.lock | 29 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide-e2e/src/githttpbackend/package.json b/apps/remix-ide-e2e/src/githttpbackend/package.json index 23c5fdb3fd..2c66c85f19 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/package.json +++ b/apps/remix-ide-e2e/src/githttpbackend/package.json @@ -3,7 +3,7 @@ "start:server": "tsc && node ./dist/server.js" }, "dependencies": { - "body-parser": "^1.20.2", + "body-parser": "^1.20.3", "child_process": "^1.0.2", "express": "^4.19.2", "git-http-backend": "^1.1.2", diff --git a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock index b426315cd1..1791fc475b 100644 --- a/apps/remix-ide-e2e/src/githttpbackend/yarn.lock +++ b/apps/remix-ide-e2e/src/githttpbackend/yarn.lock @@ -22,7 +22,7 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -body-parser@1.20.2, body-parser@^1.20.2: +body-parser@1.20.2: version "1.20.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== @@ -40,6 +40,24 @@ body-parser@1.20.2, body-parser@^1.20.2: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -391,6 +409,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -462,7 +487,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -side-channel@^1.0.4: +side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== From 8e7cd113067215d8e478ede53a4359fa3a6cebc5 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 18:50:05 +0200 Subject: [PATCH 303/312] windows kill terminal --- apps/remixdesktop/package.json | 3 + apps/remixdesktop/src/plugins/xtermPlugin.ts | 83 +++++++++++--------- package.json | 2 +- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index fca6ac29c5..cbfe87635a 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -13,6 +13,9 @@ "name": "Remix Team", "email": "remix@ethereum.org" }, + "engines": { + "node": "20.2.0" + }, "bugs": { "url": "https://github.com/ethereum/remix-project/issues" }, diff --git a/apps/remixdesktop/src/plugins/xtermPlugin.ts b/apps/remixdesktop/src/plugins/xtermPlugin.ts index 8bbfdf629b..6c8f16ca28 100644 --- a/apps/remixdesktop/src/plugins/xtermPlugin.ts +++ b/apps/remixdesktop/src/plugins/xtermPlugin.ts @@ -1,32 +1,29 @@ -import { PluginClient } from '@remixproject/plugin' -import { Profile } from '@remixproject/plugin-utils' -import { - ElectronBasePlugin, - ElectronBasePluginClient, -} from '@remixproject/plugin-electron' +import {PluginClient} from '@remixproject/plugin' +import {Profile} from '@remixproject/plugin-utils' +import {ElectronBasePlugin, ElectronBasePluginClient} from '@remixproject/plugin-electron' import os from 'os' import * as pty from 'node-pty' import process from 'node:process' -import { userInfo } from 'node:os' -import { findExecutable } from '../utils/findExecutable' -import { spawnSync } from 'child_process' -import { stripAnsi } from '../lib' -import { DataBatcher } from '../lib/databatcher' +import {userInfo} from 'node:os' +import {findExecutable} from '../utils/findExecutable' +import {exec, spawnSync} from 'child_process' +import {stripAnsi} from '../lib' +import {DataBatcher} from '../lib/databatcher' export const detectDefaultShell = () => { - const { env } = process + const {env} = process if (process.platform === 'win32') { return env.SHELL || 'powershell.exe' } try { - const { shell } = userInfo() + const {shell} = userInfo() if (shell) { return shell } - } catch { } + } catch {} if (process.platform === 'darwin') { return env.SHELL || '/bin/zsh' @@ -38,10 +35,7 @@ export const detectDefaultShell = () => { // Stores default shell when imported. const defaultShell = detectDefaultShell() -const getShellEnvArgs = [ - '-ilc', - 'echo -n "_SHELL_ENV_DELIMITER_"; env; echo -n "_SHELL_ENV_DELIMITER_"; exit', -] +const getShellEnvArgs = ['-ilc', 'echo -n "_SHELL_ENV_DELIMITER_"; env; echo -n "_SHELL_ENV_DELIMITER_"; exit'] const getShellEnvEnv = { // Disables Oh My Zsh auto-update thing that can block the process. @@ -117,9 +111,9 @@ class XtermPluginClient extends ElectronBasePluginClient { this.workingDir = await this.call('fs' as any, 'getWorkingDir') console.log('workingDir', this.workingDir) }) - + if (!(process.platform === 'win32')) { - const { stdout } = spawnSync(defaultShell, getShellEnvArgs, { + const {stdout} = spawnSync(defaultShell, getShellEnvArgs, { encoding: 'utf8', }) this.parsedEnv = parseEnv(stdout) @@ -149,7 +143,6 @@ class XtermPluginClient extends ElectronBasePluginClient { async createTerminal(path?: string, shell?: string): Promise { const start_time = Date.now() console.log('createTerminal', path, shell || defaultShell) - const env = this.parsedEnv || process.env @@ -160,11 +153,10 @@ class XtermPluginClient extends ElectronBasePluginClient { cwd: path || this.workingDir || process.cwd(), env: env, encoding: 'utf8', - }); + }) const dataBatcher = new DataBatcher(ptyProcess.pid) this.dataBatchers[ptyProcess.pid] = dataBatcher ptyProcess.onData((data: string) => { - //console.log('data', data) dataBatcher.write(Buffer.from(data)) }) ptyProcess.onExit(() => { @@ -181,27 +173,48 @@ class XtermPluginClient extends ElectronBasePluginClient { } async closeTerminal(pid: number): Promise { - if (this.terminals) { - if (this.terminals[pid]) { - try { - this.terminals[pid].kill() - } catch (err) { - // ignore + console.log('closeTerminal', pid) + + try { + if (this.terminals) { + + if (this.dataBatchers[pid]) delete this.dataBatchers[pid] + + if (this.terminals[pid]) { + try { + if (os.platform() === 'win32') { + // For Windows, use taskkill to terminate the process + exec(`taskkill /PID ${pid} /T /F`, (error, stdout, stderr) => { + if (error) { + console.error(`Error killing process: ${error}`); + }else{ + console.log(`stdout: ${stdout}`); + console.error(`stderr: ${stderr}`); + } + }); + } else { + this.terminals[pid].kill(); + } + } catch (err) { + console.error(err) + // ignore + } + delete this.terminals[pid] } - delete this.terminals[pid] } - if (this.dataBatchers[pid]) - delete this.dataBatchers[pid] + this.emit('close', pid) + } catch (err) { + console.error(err) } - this.emit('close', pid) + } - async resize({ cols, rows }: { cols: number; rows: number }, pid: number) { + async resize({cols, rows}: {cols: number; rows: number}, pid: number) { if (this.terminals[pid]) { try { this.terminals[pid].resize(cols, rows) } catch (_err) { - const err = _err as { stack: any } + const err = _err as {stack: any} console.error(err.stack) } } else { diff --git a/package.json b/package.json index 193212f484..b60e0c8079 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "remix-ide": "./apps/remix-ide/bin/remix-ide" }, "engines": { - "node": "^20.0.0", + "node": "^20.2.0", "npm": "^6.14.15" }, "scripts": { From 95e5dcef8e43085f66cf4781d1c93eb4e14c8560 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 18:54:11 +0200 Subject: [PATCH 304/312] package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b60e0c8079..193212f484 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "remix-ide": "./apps/remix-ide/bin/remix-ide" }, "engines": { - "node": "^20.2.0", + "node": "^20.0.0", "npm": "^6.14.15" }, "scripts": { From d1d19df5113bb8d0a87f56b23292d74fa46f48d0 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:02:05 +0200 Subject: [PATCH 305/312] linux --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index fa5ac0b11e..07b0d5c4e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -120,6 +120,8 @@ jobs: - run: unzip ./persist/desktopbuild.zip - run: command: | + nvm install 20.2 + nvm use 20.2 node -v mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build @@ -157,6 +159,8 @@ jobs: - run: unzip ./persist/desktopbuild.zip - run: command: | + nvm install 20.2 + nvm use 20.2 node -v mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build From d3f7202ad840fb9c8e2f3e1eea50fbf5ef9f4821 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:07:24 +0200 Subject: [PATCH 306/312] install yarn --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 07b0d5c4e6..3f7499dfe4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -162,6 +162,7 @@ jobs: nvm install 20.2 nvm use 20.2 node -v + npm install --global yarn mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ From e1b369e5aaf149bbb95d5f912ca770b00321d60a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:08:00 +0200 Subject: [PATCH 307/312] install yarn --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3f7499dfe4..3425048d8e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -123,6 +123,7 @@ jobs: nvm install 20.2 nvm use 20.2 node -v + npm install --global yarn mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ From 5067383d543af499cd18120af0efd484f8b40e06 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:12:38 +0200 Subject: [PATCH 308/312] node-gyp --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3425048d8e..a7d431cbde 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -123,7 +123,7 @@ jobs: nvm install 20.2 nvm use 20.2 node -v - npm install --global yarn + npm install --global yarn node-gyp mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ @@ -163,7 +163,7 @@ jobs: nvm install 20.2 nvm use 20.2 node -v - npm install --global yarn + npm install --global yarn node-gyp mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ From b988ddfa2c967368de8f70f658f3fb45779c7cad Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:21:12 +0200 Subject: [PATCH 309/312] setuptools --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index a7d431cbde..030dac9535 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -124,6 +124,8 @@ jobs: nvm use 20.2 node -v npm install --global yarn node-gyp + python -m pip install --upgrade pip + pip install setuptools mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ @@ -164,6 +166,8 @@ jobs: nvm use 20.2 node -v npm install --global yarn node-gyp + python -m pip install --upgrade pip + pip install setuptools mkdir apps/remixdesktop/build cp -r dist/apps/remix-ide apps/remixdesktop/build cd apps/remixdesktop/ From 375104215c4a871c0ffde0e631ba99df89964784 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Wed, 18 Sep 2024 19:31:46 +0200 Subject: [PATCH 310/312] nvm --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 030dac9535..1502767549 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -136,11 +136,13 @@ jobs: - run: name: "Run tests" command: | + nvm use 20.2 cd apps/remixdesktop/ ./run_ci_test.sh - run: name: "Run isogit tests" command: | + nvm use 20.2 cd apps/remixdesktop/ ./run_git_ui_isogit_tests.sh - store_test_results: From 7e3b06bab9b15a14ef3b251c57188c75f198443d Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 19 Sep 2024 06:18:59 +0200 Subject: [PATCH 311/312] disable foundry --- apps/remixdesktop/package.json | 2 +- apps/remixdesktop/test/nighwatch.app.ts | 1 + .../test/tests/app/foundry.test.ts | 2 +- apps/remixdesktop/yarn.lock | 33 +++---------------- 4 files changed, 7 insertions(+), 31 deletions(-) diff --git a/apps/remixdesktop/package.json b/apps/remixdesktop/package.json index cbfe87635a..264dc9792d 100644 --- a/apps/remixdesktop/package.json +++ b/apps/remixdesktop/package.json @@ -43,7 +43,7 @@ "@types/byline": "^4.2.35", "@types/express": "^4.17.21", "@types/nightwatch": "^2.3.23", - "chromedriver": "^116", + "chromedriver": "116", "cross-env": "^7.0.3", "deep-equal": "^2.2.3", "electron": "^26.0.0", diff --git a/apps/remixdesktop/test/nighwatch.app.ts b/apps/remixdesktop/test/nighwatch.app.ts index 5c34abd683..77ff0f9b7f 100644 --- a/apps/remixdesktop/test/nighwatch.app.ts +++ b/apps/remixdesktop/test/nighwatch.app.ts @@ -92,6 +92,7 @@ module.exports = { break; } + console.log('binaryPath', binaryPath); return { binary: binaryPath, args: args diff --git a/apps/remixdesktop/test/tests/app/foundry.test.ts b/apps/remixdesktop/test/tests/app/foundry.test.ts index c525d900ff..3aa370882a 100644 --- a/apps/remixdesktop/test/tests/app/foundry.test.ts +++ b/apps/remixdesktop/test/tests/app/foundry.test.ts @@ -153,5 +153,5 @@ async function buildFoundryProject(): Promise { module.exports = { - ...process.platform.startsWith('linux') ? tests : {} + ...{}//...process.platform.startsWith('linux') ? tests : {} } \ No newline at end of file diff --git a/apps/remixdesktop/yarn.lock b/apps/remixdesktop/yarn.lock index 266e148d1c..ca1a8366d6 100644 --- a/apps/remixdesktop/yarn.lock +++ b/apps/remixdesktop/yarn.lock @@ -2249,7 +2249,7 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -chromedriver@^116: +chromedriver@116: version "116.0.0" resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-116.0.0.tgz#3f5d07b5427953270461791651d7b68cb6afe9fe" integrity sha512-/TQaRn+RUAYnVqy5Vx8VtU8DvtWosU8QLM2u7BoNM5h55PRQPXF/onHAehEi8Sj/CehdKqH50NFdiumQAUr0DQ== @@ -6407,16 +6407,7 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6475,14 +6466,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -7430,16 +7414,7 @@ workerpool@6.2.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From 511a746c28a7debb9257225ff9da8c139546ca55 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Thu, 19 Sep 2024 07:13:32 +0200 Subject: [PATCH 312/312] window size --- apps/remixdesktop/src/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/remixdesktop/src/main.ts b/apps/remixdesktop/src/main.ts index fc4663e7d1..863cdf6512 100644 --- a/apps/remixdesktop/src/main.ts +++ b/apps/remixdesktop/src/main.ts @@ -36,8 +36,8 @@ const windowSet = new Set([]); export const createWindow = async (dir?: string): Promise => { // Create the browser window. const mainWindow = new BrowserWindow({ - width: 2560,// (isE2E ? 3840 : screen.getPrimaryDisplay().size.width * 0.8), - height: 1140, //(isE2E ? 2160 : screen.getPrimaryDisplay().size.height * 0.8), + width: (isE2E ? 2560 : screen.getPrimaryDisplay().size.width * 0.8), + height: (isE2E ? 1140 : screen.getPrimaryDisplay().size.height * 0.8), frame: true, webPreferences: { preload: path.join(__dirname, 'preload.js')