From 70baa466b7437e94581736fda0852ad700f6bbd7 Mon Sep 17 00:00:00 2001 From: Curry Yang <1019yanglu@gmail.com> Date: Wed, 8 May 2024 16:25:57 +0800 Subject: [PATCH] fix: need save spectralRun ipc --- package-lock.json | 6 ++--- packages/insomnia/package.json | 6 ++--- packages/insomnia/src/main/ipc/main.ts | 36 +++++++++++++++++++++++--- packages/insomnia/src/preload.ts | 1 + 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb71b0ed2fd..77da8e53805 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22373,7 +22373,10 @@ "@seald-io/nedb": "^4.0.4", "@segment/analytics-node": "2.1.0", "@sentry/electron": "^3.0.7", + "@stoplight/spectral-core": "^1.18.3", + "@stoplight/spectral-formats": "^1.6.0", "@stoplight/spectral-ruleset-bundler": "1.5.2", + "@stoplight/spectral-rulesets": "^1.18.1", "apiconnect-wsdl": "1.8.31", "aws4": "^1.12.0", "chai": "^4.3.4", @@ -22421,9 +22424,6 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.0", "@getinsomnia/api-client": "0.0.4", - "@stoplight/spectral-core": "^1.18.3", - "@stoplight/spectral-formats": "^1.6.0", - "@stoplight/spectral-rulesets": "^1.18.1", "@tailwindcss/typography": "^0.5.12", "@tanstack/react-virtual": "3.2.0", "@testing-library/dom": "^9.3.4", diff --git a/packages/insomnia/package.json b/packages/insomnia/package.json index 6c39b6287bf..020715861fb 100644 --- a/packages/insomnia/package.json +++ b/packages/insomnia/package.json @@ -46,6 +46,9 @@ "@seald-io/nedb": "^4.0.4", "@segment/analytics-node": "2.1.0", "@sentry/electron": "^3.0.7", + "@stoplight/spectral-core": "^1.18.3", + "@stoplight/spectral-formats": "^1.6.0", + "@stoplight/spectral-rulesets": "^1.18.1", "@stoplight/spectral-ruleset-bundler": "1.5.2", "apiconnect-wsdl": "1.8.31", "aws4": "^1.12.0", @@ -84,9 +87,6 @@ "yaml-source-map": "^2.1.1" }, "devDependencies": { - "@stoplight/spectral-core": "^1.18.3", - "@stoplight/spectral-formats": "^1.6.0", - "@stoplight/spectral-rulesets": "^1.18.1", "@develohpanda/fluent-builder": "^2.1.2", "@fortawesome/fontawesome-svg-core": "^6.5.2", "@fortawesome/free-brands-svg-icons": "^6.5.2", diff --git a/packages/insomnia/src/main/ipc/main.ts b/packages/insomnia/src/main/ipc/main.ts index 146d50df98b..6d530d0549d 100644 --- a/packages/insomnia/src/main/ipc/main.ts +++ b/packages/insomnia/src/main/ipc/main.ts @@ -1,7 +1,9 @@ -import type { Ruleset } from '@stoplight/spectral-core'; +import type { ISpectralDiagnostic, Ruleset, RulesetDefinition } from '@stoplight/spectral-core'; +import { Spectral } from '@stoplight/spectral-core'; // @ts-expect-error - need to modify moduleResolution option in tsconfig import { bundleAndLoadRuleset } from '@stoplight/spectral-ruleset-bundler/with-loader'; -import { app, BrowserWindow, IpcRendererEvent, shell } from 'electron'; +import { oas } from '@stoplight/spectral-rulesets'; +import { app, BrowserWindow, IpcRendererEvent, net, shell } from 'electron'; import fs from 'fs'; import type { HiddenBrowserWindowBridgeAPI } from '../../hidden-window'; @@ -29,6 +31,7 @@ export interface RendererToMainBridgeAPI { setMenuBarVisibility: (visible: boolean) => void; installPlugin: typeof installPlugin; writeFile: (options: { path: string; content: string }) => Promise; + spectralRun: (options: { contents: string; rulesetPath: string }) => Promise; loadSpectralRuleset: (options: { rulesetPath: string }) => Promise; cancelCurlRequest: typeof cancelCurlRequest; curlRequest: typeof curlRequest; @@ -78,7 +81,7 @@ export function registerMainHandlers() { ipcMainHandle('loadSpectralRuleset', async (_, options: { rulesetPath: string }) => { const ruleset = await bundleAndLoadRuleset(options.rulesetPath, { fs, - fetch, + fetch: net.fetch, }); return ruleset; @@ -115,4 +118,31 @@ export function registerMainHandlers() { shell.openExternal(href); } }); + + ipcMainHandle('spectralRun', async (_, { contents, rulesetPath }: { + contents: string; + rulesetPath?: string; + }) => { + const spectral = new Spectral(); + + if (rulesetPath) { + try { + const ruleset = await bundleAndLoadRuleset(rulesetPath, { + fs, + fetch: net.fetch, + }); + + spectral.setRuleset(ruleset); + } catch (err) { + console.log('Error while parsing ruleset:', err); + spectral.setRuleset(oas as RulesetDefinition); + } + } else { + spectral.setRuleset(oas as RulesetDefinition); + } + + const diagnostics = await spectral.run(contents); + + return diagnostics; + }); } diff --git a/packages/insomnia/src/preload.ts b/packages/insomnia/src/preload.ts index d8ec7a6c5d6..e6a7ea109f6 100644 --- a/packages/insomnia/src/preload.ts +++ b/packages/insomnia/src/preload.ts @@ -55,6 +55,7 @@ const main: Window['main'] = { curlRequest: options => ipcRenderer.invoke('curlRequest', options), cancelCurlRequest: options => ipcRenderer.send('cancelCurlRequest', options), writeFile: options => ipcRenderer.invoke('writeFile', options), + spectralRun: options => ipcRenderer.invoke('spectralRun', options), loadSpectralRuleset: options => ipcRenderer.invoke('loadSpectralRuleset', options), on: (channel, listener) => { ipcRenderer.on(channel, listener);