From c5eb220a3eb5b2791a350055f02cf828e6bcdff3 Mon Sep 17 00:00:00 2001 From: Le Vivilet <72156503+levivilet@users.noreply.github.com> Date: Mon, 13 Jan 2025 22:34:47 +0100 Subject: [PATCH] feature: add new execute command (#16) * feature: add new execute command * fix * rename * simplify code * remove unused code * build * remove unused code * build * build * build --- package.json | 2 +- packages/build/src/build.js | 18 ++++-------- packages/extension/extension.json | 4 +-- .../extension/src/parts/AssetDir/AssetDir.ts | 1 - .../FilterAggregates/FilterAggregates.ts | 18 ------------ .../GetOrCreateWorker/GetOrCreateWorker.ts | 23 --------------- .../LaunchRestClientWorker.ts | 15 ---------- packages/extension/src/parts/Main/Main.ts | 28 +------------------ .../RestClientWorker/RestClientWorker.ts | 6 ---- .../RestClientWorkerUrl.ts | 3 -- .../src/parts/CommandMap/CommandMap.ts | 10 +++++-- .../src/parts/Create/Create.ts | 4 ++- .../src/parts/Create2/Create2.ts | 2 +- .../src/parts/Execute2/Execute2.ts | 8 ++++++ .../src/parts/WebView/WebView.ts | 2 ++ .../src/parts/WrapCommand/WrapCommand.ts | 7 +++++ 16 files changed, 38 insertions(+), 113 deletions(-) delete mode 100644 packages/extension/src/parts/AssetDir/AssetDir.ts delete mode 100644 packages/extension/src/parts/FilterAggregates/FilterAggregates.ts delete mode 100644 packages/extension/src/parts/GetOrCreateWorker/GetOrCreateWorker.ts delete mode 100644 packages/extension/src/parts/LaunchRestClientWorker/LaunchRestClientWorker.ts delete mode 100644 packages/extension/src/parts/RestClientWorker/RestClientWorker.ts delete mode 100644 packages/extension/src/parts/RestClientWorkerUrl/RestClientWorkerUrl.ts create mode 100644 packages/rest-client-worker/src/parts/Execute2/Execute2.ts create mode 100644 packages/rest-client-worker/src/parts/WrapCommand/WrapCommand.ts diff --git a/package.json b/package.json index 2221137..c31f557 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "test:watch": "node --unhandled-rejections=warn --experimental-vm-modules ./node_modules/jest/bin/jest.js --watch", "e2e": "cd packages/e2e && npm run e2e", "e2e:headless": "cd packages/e2e && npm run e2e:headless", - "build": "node scripts/build.js" + "build": "node packages/build/src/build-static.js" }, "keywords": [], "author": "", diff --git a/packages/build/src/build.js b/packages/build/src/build.js index 6b39927..4b0959f 100644 --- a/packages/build/src/build.js +++ b/packages/build/src/build.js @@ -31,24 +31,16 @@ fs.cpSync(join(restClientWorker, 'src'), join(root, 'dist', 'rest-client-worker' recursive: true, }) -const workerUrlFilePath = path.join(root, 'dist', 'src', 'parts', 'RestClientWorkerUrl', 'RestClientWorkerUrl.ts') await replace({ - path: workerUrlFilePath, - occurrence: 'src/restClientWorkerMain.ts', - replacement: 'dist/restClientWorkerMain.js', -}) - -const assetDirPath = path.join(root, 'dist', 'src', 'parts', 'AssetDir', 'AssetDir.ts') -await replace({ - path: assetDirPath, - occurrence: '../../../../', - replacement: '../', + path: join(root, 'dist', 'extension.json'), + occurrence: 'src/restClientMain.ts', + replacement: 'dist/restClientMain.js', }) await replace({ path: join(root, 'dist', 'extension.json'), - occurrence: 'src/restClientMain.ts', - replacement: 'dist/restClientMain.js', + occurrence: '../rest-client-worker/src/restClientWorkerMain.ts', + replacement: '../rest-client-worker/dist/restClientWorkerMain.js', }) await bundleJs( diff --git a/packages/extension/extension.json b/packages/extension/extension.json index eeff4dc..85ae26f 100644 --- a/packages/extension/extension.json +++ b/packages/extension/extension.json @@ -10,14 +10,14 @@ "id": "builtin.rest-client.rest-client-worker", "type": "web-worker", "name": "Rest Client Worker", - "url": "../rest-client-worler/src/restClientWorkerMain.ts", + "url": "../rest-client-worker/src/restClientWorkerMain.ts", "contentSecurityPolicy": ["default-src 'none'"] } ], "webViews": [ { "id": "builtin.rest-client", - "rpc": true, + "rpc": "builtin.rest-client.rest-client-worker", "selector": [".rest"], "sandbox": ["allow-forms"], "contentSecurityPolicy": ["default-src 'none'", "script-src 'self'", "style-src 'self'"], diff --git a/packages/extension/src/parts/AssetDir/AssetDir.ts b/packages/extension/src/parts/AssetDir/AssetDir.ts deleted file mode 100644 index 390b4a0..0000000 --- a/packages/extension/src/parts/AssetDir/AssetDir.ts +++ /dev/null @@ -1 +0,0 @@ -export const assetDir = new URL('../../../../', import.meta.url).toString() diff --git a/packages/extension/src/parts/FilterAggregates/FilterAggregates.ts b/packages/extension/src/parts/FilterAggregates/FilterAggregates.ts deleted file mode 100644 index ae2d3f8..0000000 --- a/packages/extension/src/parts/FilterAggregates/FilterAggregates.ts +++ /dev/null @@ -1,18 +0,0 @@ -const matchesFilterValue = (item: any, filterValueLower: string) => { - if (!filterValueLower) { - return true - } - const nameLower = item.name.toLowerCase() - return nameLower.includes(filterValueLower) -} - -export const filterAggregates = (aggregates: any[], filterValue: string) => { - const filtered: any[] = [] - const filterValueLower = filterValue.toLowerCase() - for (const item of aggregates) { - if (matchesFilterValue(item, filterValueLower)) { - filtered.push(item) - } - } - return filtered -} diff --git a/packages/extension/src/parts/GetOrCreateWorker/GetOrCreateWorker.ts b/packages/extension/src/parts/GetOrCreateWorker/GetOrCreateWorker.ts deleted file mode 100644 index 875b271..0000000 --- a/packages/extension/src/parts/GetOrCreateWorker/GetOrCreateWorker.ts +++ /dev/null @@ -1,23 +0,0 @@ -const workers = new Map() - -const getOrCreate = (fn) => { - if (!workers.has(fn)) { - workers.set(fn, fn()) - } - return workers.get(fn) -} - -export const getOrCreateWorker = (fn) => { - return { - async invoke(method, ...params) { - const rpc = await getOrCreate(fn) - return rpc.invoke(method, ...params) - }, - async dispose() { - const promise = workers.get(fn) - workers.delete(fn) - const rpc = await promise - rpc.dispose() - }, - } -} diff --git a/packages/extension/src/parts/LaunchRestClientWorker/LaunchRestClientWorker.ts b/packages/extension/src/parts/LaunchRestClientWorker/LaunchRestClientWorker.ts deleted file mode 100644 index 452bf67..0000000 --- a/packages/extension/src/parts/LaunchRestClientWorker/LaunchRestClientWorker.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as RestClientWorkerUrl from '../RestClientWorkerUrl/RestClientWorkerUrl.ts' - -const execute = (method, ...params) => { - return {} -} - -export const launchRestClientWorker = async () => { - // @ts-ignore - const rpc = await vscode.createRpc({ - url: RestClientWorkerUrl.restClientWorkerUrl, - name: 'Rest Client Worker', - execute, - }) - return rpc -} diff --git a/packages/extension/src/parts/Main/Main.ts b/packages/extension/src/parts/Main/Main.ts index 4afb57d..fef9fe2 100644 --- a/packages/extension/src/parts/Main/Main.ts +++ b/packages/extension/src/parts/Main/Main.ts @@ -1,27 +1 @@ -import * as RestClientWorker from '../RestClientWorker/RestClientWorker.ts' - -const webViewProvider = { - id: 'builtin.rest-client', - async create(webView, uri) { - // @ts-ignore - const content = await vscode.readFile(uri) - const [method, url] = content.split(' ') - await webView.invoke('initialize', method, url) - // @ts-ignore - this.webView = webView - }, - async open(uri, webView) {}, - commands: { - async handleSubmit(method, url) { - const result = await RestClientWorker.invoke('RestClient.execute', method, url) - // @ts-ignore - const webView = webViewProvider.webView - await webView.invoke('setOutput', result) - }, - }, -} - -export const activate = () => { - // @ts-ignore - vscode.registerWebViewProvider(webViewProvider) -} +export const activate = () => {} diff --git a/packages/extension/src/parts/RestClientWorker/RestClientWorker.ts b/packages/extension/src/parts/RestClientWorker/RestClientWorker.ts deleted file mode 100644 index eadc3e3..0000000 --- a/packages/extension/src/parts/RestClientWorker/RestClientWorker.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as GetOrCreateWorker from '../GetOrCreateWorker/GetOrCreateWorker.ts' -import * as LaunchRestClientWorker from '../LaunchRestClientWorker/LaunchRestClientWorker.ts' - -const { invoke } = GetOrCreateWorker.getOrCreateWorker(LaunchRestClientWorker.launchRestClientWorker) - -export { invoke } diff --git a/packages/extension/src/parts/RestClientWorkerUrl/RestClientWorkerUrl.ts b/packages/extension/src/parts/RestClientWorkerUrl/RestClientWorkerUrl.ts deleted file mode 100644 index 517819c..0000000 --- a/packages/extension/src/parts/RestClientWorkerUrl/RestClientWorkerUrl.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as AssetDir from '../AssetDir/AssetDir.ts' - -export const restClientWorkerUrl = `${AssetDir.assetDir}/rest-client-worker/src/restClientWorkerMain.ts` diff --git a/packages/rest-client-worker/src/parts/CommandMap/CommandMap.ts b/packages/rest-client-worker/src/parts/CommandMap/CommandMap.ts index 871bf17..70a30f8 100644 --- a/packages/rest-client-worker/src/parts/CommandMap/CommandMap.ts +++ b/packages/rest-client-worker/src/parts/CommandMap/CommandMap.ts @@ -1,7 +1,13 @@ -import * as Execute from '../Execute/Execute.ts' import * as Create2 from '../Create2/Create2.ts' +import * as Execute from '../Execute/Execute.ts' +import * as Execute2 from '../Execute2/Execute2.ts' +import * as WrapCommand from '../WrapCommand/WrapCommand.ts' export const commandMap = { - 'RestClient.execute': Execute.execute, + // new + handleSubmit: WrapCommand.wrapCommand(Execute2.execute2), 'Webview.create': Create2.create2, + + // old + 'RestClient.execute': Execute.execute, } diff --git a/packages/rest-client-worker/src/parts/Create/Create.ts b/packages/rest-client-worker/src/parts/Create/Create.ts index 5f57a2d..61cf696 100644 --- a/packages/rest-client-worker/src/parts/Create/Create.ts +++ b/packages/rest-client-worker/src/parts/Create/Create.ts @@ -1,9 +1,11 @@ import type { WebView } from '../WebView/WebView.ts' import * as WebViewStates from '../WebViewStates/WebViewStates.ts' -export const create = (id: number, port: MessagePort): void => { +export const create = (id: number, port: MessagePort, method: string, url: string): void => { const webview: WebView = { port, + method, + url, } WebViewStates.set(id, webview) } diff --git a/packages/rest-client-worker/src/parts/Create2/Create2.ts b/packages/rest-client-worker/src/parts/Create2/Create2.ts index 554e649..e591b41 100644 --- a/packages/rest-client-worker/src/parts/Create2/Create2.ts +++ b/packages/rest-client-worker/src/parts/Create2/Create2.ts @@ -5,7 +5,7 @@ import * as Rpc from '../Rpc/Rpc.ts' export const create2 = async ({ port, savedState, webViewId, uri }) => { const content = await Rpc.invoke('WebView.readFile', uri) const [method, url] = content.split(' ') - Create.create(id, port) + Create.create(id, port, method, uri) await port.invoke('initialize', method, url) return {} } diff --git a/packages/rest-client-worker/src/parts/Execute2/Execute2.ts b/packages/rest-client-worker/src/parts/Execute2/Execute2.ts new file mode 100644 index 0000000..7dba624 --- /dev/null +++ b/packages/rest-client-worker/src/parts/Execute2/Execute2.ts @@ -0,0 +1,8 @@ +import * as Execute from '../Execute/Execute.ts' +import * as WebViewStates from '../WebViewStates/WebViewStates.ts' + +export const execute2 = async (id: number) => { + const { method, url, port } = WebViewStates.get(id) + const result = await Execute.execute(method, url) + await port.invoke('setOutput', result) +} diff --git a/packages/rest-client-worker/src/parts/WebView/WebView.ts b/packages/rest-client-worker/src/parts/WebView/WebView.ts index c8cfb9d..b45d61d 100644 --- a/packages/rest-client-worker/src/parts/WebView/WebView.ts +++ b/packages/rest-client-worker/src/parts/WebView/WebView.ts @@ -1,3 +1,5 @@ export interface WebView { readonly port: any + readonly method: string + readonly url: string } diff --git a/packages/rest-client-worker/src/parts/WrapCommand/WrapCommand.ts b/packages/rest-client-worker/src/parts/WrapCommand/WrapCommand.ts new file mode 100644 index 0000000..1860c62 --- /dev/null +++ b/packages/rest-client-worker/src/parts/WrapCommand/WrapCommand.ts @@ -0,0 +1,7 @@ +import { id } from '../Id/Id.ts' + +export const wrapCommand = (fn) => { + return async (...args) => { + await fn(id, ...args) + } +}