From c4985b926e570be7d5a1bb743e22b7e33915e087 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Sun, 30 Jun 2024 23:07:14 +0800 Subject: [PATCH 1/9] feat: add xterm-addon-zmodem Signed-off-by: warjiang <1096409085@qq.com> --- ui/package.json | 5 + .../xterm-addon-zmodem/.prettierignore | 5 + ui/packages/xterm-addon-zmodem/.prettierrc | 7 + ui/packages/xterm-addon-zmodem/package.json | 43 ++++ ui/packages/xterm-addon-zmodem/src/index.ts | 205 ++++++++++++++++++ ui/packages/xterm-addon-zmodem/tsconfig.json | 25 +++ .../xterm-addon-zmodem/tsconfig.node.json | 11 + ui/packages/xterm-addon-zmodem/tsup.config.ts | 10 + ui/packages/xterm-addon-zmodem/typing.d.ts | 35 +++ ui/patches/zmodem.js@0.1.10.patch | 34 +++ 10 files changed, 380 insertions(+) create mode 100644 ui/packages/xterm-addon-zmodem/.prettierignore create mode 100644 ui/packages/xterm-addon-zmodem/.prettierrc create mode 100644 ui/packages/xterm-addon-zmodem/package.json create mode 100644 ui/packages/xterm-addon-zmodem/src/index.ts create mode 100644 ui/packages/xterm-addon-zmodem/tsconfig.json create mode 100644 ui/packages/xterm-addon-zmodem/tsconfig.node.json create mode 100644 ui/packages/xterm-addon-zmodem/tsup.config.ts create mode 100644 ui/packages/xterm-addon-zmodem/typing.d.ts create mode 100644 ui/patches/zmodem.js@0.1.10.patch diff --git a/ui/package.json b/ui/package.json index 4ffbaff2..dee32319 100644 --- a/ui/package.json +++ b/ui/package.json @@ -28,5 +28,10 @@ }, "dependencies": { "dayjs": "^1.11.11" + }, + "pnpm": { + "patchedDependencies": { + "zmodem.js@0.1.10": "patches/zmodem.js@0.1.10.patch" + } } } diff --git a/ui/packages/xterm-addon-zmodem/.prettierignore b/ui/packages/xterm-addon-zmodem/.prettierignore new file mode 100644 index 00000000..08ddad8c --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/.prettierignore @@ -0,0 +1,5 @@ +node_modules +build +coverage +dist +pnpm-* diff --git a/ui/packages/xterm-addon-zmodem/.prettierrc b/ui/packages/xterm-addon-zmodem/.prettierrc new file mode 100644 index 00000000..01d4b744 --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/.prettierrc @@ -0,0 +1,7 @@ +{ + "trailingComma": "all", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "endOfLine": "auto" +} diff --git a/ui/packages/xterm-addon-zmodem/package.json b/ui/packages/xterm-addon-zmodem/package.json new file mode 100644 index 00000000..d49e9e94 --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/package.json @@ -0,0 +1,43 @@ +{ + "name": "@karmada/xterm-addon-zmodem", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "description": "", + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs" + } + }, + "types": "dist/index.d.ts", + "scripts": { + "prepublish": "tsup --config ./tsup.config.ts", + "build": "tsup --config ./tsup.config.ts" + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx,json,css,md}": [ + "prettier --write" + ] + }, + "keywords": [ + "terminal", + "xterm", + "xterm.js" + ], + "author": "", + "license": "ISC", + "dependencies": { + "@karmada/xterm-addon-zmodem": "link:", + "file-saver": "^2.0.5", + "trzsz": "^1.1.5", + "zmodem.js": "^0.1.10" + }, + "devDependencies": { + "@types/file-saver": "^2.0.7" + }, + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } +} diff --git a/ui/packages/xterm-addon-zmodem/src/index.ts b/ui/packages/xterm-addon-zmodem/src/index.ts new file mode 100644 index 00000000..6ce0a2f7 --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/src/index.ts @@ -0,0 +1,205 @@ +import { saveAs } from 'file-saver'; +import { IDisposable, ITerminalAddon, Terminal } from '@xterm/xterm'; +// we've made some patch for the zmodem.js package, but pnpm doesn't support +// sub package patchedDependencies field :https://github.com/pnpm/pnpm/issues/6048 +// so we hoist the patchedDependencies to the root dir of pnpm monorepo: `ui` dir +import * as Zmodem from 'zmodem.js/src/zmodem_browser'; +import { TrzszFilter } from 'trzsz'; + +export interface ZmodemOptions { + zmodem: boolean; + trzsz: boolean; + windows: boolean; + trzszDragInitTimeout: number; + onSend: () => void; + sender: (data: string | Uint8Array) => void; + writer: (data: string | Uint8Array) => void; +} + +class ZmodemAddon implements ITerminalAddon { + private disposables: IDisposable[] = []; + private terminal: Terminal | null = null; + private sentry!: Zmodem.Sentry; + private session: Zmodem.Session; + private denier: () => void = () => {}; + private trzszFilter: TrzszFilter | null = null; + + constructor(private options: ZmodemOptions) {} + + activate(terminal: Terminal) { + this.terminal = terminal; + if (this.options.zmodem) this.zmodemInit(); + if (this.options.trzsz) this.trzszInit(); + } + + dispose() { + for (const d of this.disposables) { + d.dispose(); + } + this.disposables.length = 0; + } + + consume(data: ArrayBuffer) { + try { + if (this.options.trzsz) { + this.trzszFilter?.processServerOutput(data); + } else { + this.sentry.consume(data); + } + } catch (e) { + console.error('[ttyd] zmodem consume: ', e); + this.reset(); + } + } + + private reset() { + if (!this.terminal) return; + this.terminal.options.disableStdin = false; + this.terminal.focus(); + } + + private addDisposableListener( + target: EventTarget, + type: string, + listener: EventListener, + ) { + target.addEventListener(type, listener); + this.disposables.push({ + dispose: () => target.removeEventListener(type, listener), + }); + } + + private trzszInit() { + const { terminal } = this; + if (!terminal) return; + const { sender, writer, zmodem } = this.options; + this.trzszFilter = new TrzszFilter({ + writeToTerminal: (data) => { + if (!this.trzszFilter) return; + if (!this.trzszFilter.isTransferringFiles() && zmodem) { + this.sentry.consume(data); + } else { + writer( + typeof data === 'string' + ? data + : new Uint8Array(data as ArrayBuffer), + ); + } + }, + sendToServer: (data) => sender(data), + terminalColumns: terminal.cols, + isWindowsShell: this.options.windows, + dragInitTimeout: this.options.trzszDragInitTimeout, + }); + const element = terminal.element as EventTarget; + this.addDisposableListener(element, 'dragover', (event) => + event.preventDefault(), + ); + this.addDisposableListener(element, 'drop', (event) => { + event.preventDefault(); + if (!this.trzszFilter) return; + this.trzszFilter + .uploadFiles( + (event as DragEvent).dataTransfer?.items as DataTransferItemList, + ) + .then(() => console.log('[ttyd] upload success')) + .catch((err) => console.log('[ttyd] upload failed: ' + err)); + }); + this.disposables.push( + terminal.onResize((size) => + this.trzszFilter?.setTerminalColumns(size.cols), + ), + ); + } + + private zmodemInit() { + const { sender, writer } = this.options; + const { terminal, reset, zmodemDetect } = this; + if (!terminal) return; + this.session = null; + this.sentry = new Zmodem.Sentry({ + to_terminal: (octets: Iterable) => writer(new Uint8Array(octets)), + sender: (octets: Iterable) => sender(new Uint8Array(octets)), + on_retract: () => reset(), + on_detect: (detection: Zmodem.Detection) => zmodemDetect(detection), + }); + this.disposables.push( + terminal.onKey((e) => { + const event = e.domEvent; + if (event.ctrlKey && event.key === 'c') { + if (this.denier) this.denier(); + } + }), + ); + } + + private zmodemDetect(detection: Zmodem.Detection): void { + if (!this.terminal) return; + const { terminal, receiveFile } = this; + terminal.options.disableStdin = true; + + this.denier = () => detection.deny(); + this.session = detection.confirm(); + this.session.on('session_end', () => this.reset()); + + if (this.session.type === 'send') { + this.options.onSend(); + } else { + receiveFile(); + } + } + + public sendFile(files: FileList) { + const { session, writeProgress } = this; + Zmodem.Browser.send_files(session, files, { + on_progress: (_: any, offer: Zmodem.Offer) => writeProgress(offer), + }) + .then(() => session.close()) + .catch(() => this.reset()); + } + + private receiveFile() { + const { session, writeProgress } = this; + + session.on('offer', (offer: Zmodem.Offer) => { + offer.on('input', () => writeProgress(offer)); + offer + .accept() + .then((payloads: any) => { + const blob = new Blob(payloads, { type: 'application/octet-stream' }); + saveAs(blob, offer.get_details().name); + }) + .catch(() => this.reset()); + }); + + session.start(); + } + + private writeProgress(offer: Zmodem.Offer) { + const { bytesHuman } = this; + const file = offer.get_details(); + const name = file.name; + const size = file.size; + const offset = offer.get_offset(); + const percent = ((100 * offset) / size).toFixed(2); + + this.options.writer( + `${name} ${percent}% ${bytesHuman(offset, 2)}/${bytesHuman(size, 2)}\r`, + ); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private bytesHuman(bytes: any, precision: number): string { + if (!/^([-+])?|(\.\d+)(\d+(\.\d+)?|(\d+\.)|Infinity)$/.test(bytes)) { + return '-'; + } + if (bytes === 0) return '0'; + if (typeof precision === 'undefined') precision = 1; + const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; + const num = Math.floor(Math.log(bytes) / Math.log(1024)); + const value = (bytes / Math.pow(1024, Math.floor(num))).toFixed(precision); + return `${value} ${units[num]}`; + } +} + +export default ZmodemAddon; diff --git a/ui/packages/xterm-addon-zmodem/tsconfig.json b/ui/packages/xterm-addon-zmodem/tsconfig.json new file mode 100644 index 00000000..fff8947e --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "typing.d.ts"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/ui/packages/xterm-addon-zmodem/tsconfig.node.json b/ui/packages/xterm-addon-zmodem/tsconfig.node.json new file mode 100644 index 00000000..97ede7ee --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/packages/xterm-addon-zmodem/tsup.config.ts b/ui/packages/xterm-addon-zmodem/tsup.config.ts new file mode 100644 index 00000000..51fd75c6 --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/tsup.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + splitting: false, + sourcemap: true, + clean: true, + format: ['cjs', 'esm'], + dts: true, +}); diff --git a/ui/packages/xterm-addon-zmodem/typing.d.ts b/ui/packages/xterm-addon-zmodem/typing.d.ts new file mode 100644 index 00000000..cb14a72d --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/typing.d.ts @@ -0,0 +1,35 @@ +declare module 'zmodem.js/src/zmodem_browser' { + type to_terminal = (octets: Iterable) => void; + + export function sender(octets: Iterable): void; + + export function on_retract(): void; + + export function on_detect(detection: Detection): void; + + export function on_progress(_: any, offer: Zmodem.Offer): void; + + class Sentry { + constructor({ + to_terminal: to_terminal, + sender: sender, + on_retract: on_retract, + on_detect: on_detect, + }); + + consume(data: string | ArrayBuffer | Uint8Array | Blob): void; + } + + type Session = any; + type Detection = any; + type Offer = any; + + type send_files = ( + session: Session, + files: FileList, + { on_progress: on_progress }, + ) => Promise; + const Browser = { + send_files: send_files, + }; +} diff --git a/ui/patches/zmodem.js@0.1.10.patch b/ui/patches/zmodem.js@0.1.10.patch new file mode 100644 index 00000000..21fdcf40 --- /dev/null +++ b/ui/patches/zmodem.js@0.1.10.patch @@ -0,0 +1,34 @@ +diff --git a/src/zsession.js b/src/zsession.js +index 5f0b8f9d8afa6fba0acd6dd0477afa186f7aad9a..c7ea98e0f08c97d63d321f784a5dd8bf66888743 100644 +--- a/src/zsession.js ++++ b/src/zsession.js +@@ -548,20 +548,17 @@ Zmodem.Session.Receive = class ZmodemReceiveSession extends Zmodem.Session { + if (this._got_ZFIN) { + if (this._input_buffer.length < 2) return; + +- //if it’s OO, then set this._bytes_after_OO +- if (Zmodem.ZMLIB.find_subarray(this._input_buffer, OVER_AND_OUT) === 0) { ++ if (Zmodem.ZMLIB.find_subarray(this._input_buffer, OVER_AND_OUT) !== 0) { ++ console.warn( "PROTOCOL: Only thing after ZFIN should be “OO” (79,79), not: " + this._input_buffer.join() ); ++ } + +- //This doubles as an indication that the session has ended. +- //We need to set this right away so that handlers like +- //"session_end" will have access to it. +- this._bytes_after_OO = _trim_OO(this._bytes_being_consumed.slice(0)); +- this._on_session_end(); ++ //This doubles as an indication that the session has ended. ++ //We need to set this right away so that handlers like ++ //"session_end" will have access to it. ++ this._bytes_after_OO = _trim_OO(this._bytes_being_consumed.slice(0)); ++ this._on_session_end(); + +- return; +- } +- else { +- throw( "PROTOCOL: Only thing after ZFIN should be “OO” (79,79), not: " + this._input_buffer.join() ); +- } ++ return; + } + + var parsed; From 40337a7e12263a39b4a3fa8b9c4500cd83b1fac8 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Sun, 30 Jun 2024 23:07:37 +0800 Subject: [PATCH 2/9] feat: add xterm-addon-overlay Signed-off-by: warjiang <1096409085@qq.com> --- .../xterm-addon-overlay/.prettierignore | 5 ++ ui/packages/xterm-addon-overlay/.prettierrc | 7 ++ ui/packages/xterm-addon-overlay/package.json | 34 +++++++++ ui/packages/xterm-addon-overlay/src/index.ts | 73 +++++++++++++++++++ ui/packages/xterm-addon-overlay/tsconfig.json | 25 +++++++ .../xterm-addon-overlay/tsconfig.node.json | 11 +++ .../xterm-addon-overlay/tsup.config.ts | 10 +++ 7 files changed, 165 insertions(+) create mode 100644 ui/packages/xterm-addon-overlay/.prettierignore create mode 100644 ui/packages/xterm-addon-overlay/.prettierrc create mode 100644 ui/packages/xterm-addon-overlay/package.json create mode 100644 ui/packages/xterm-addon-overlay/src/index.ts create mode 100644 ui/packages/xterm-addon-overlay/tsconfig.json create mode 100644 ui/packages/xterm-addon-overlay/tsconfig.node.json create mode 100644 ui/packages/xterm-addon-overlay/tsup.config.ts diff --git a/ui/packages/xterm-addon-overlay/.prettierignore b/ui/packages/xterm-addon-overlay/.prettierignore new file mode 100644 index 00000000..08ddad8c --- /dev/null +++ b/ui/packages/xterm-addon-overlay/.prettierignore @@ -0,0 +1,5 @@ +node_modules +build +coverage +dist +pnpm-* diff --git a/ui/packages/xterm-addon-overlay/.prettierrc b/ui/packages/xterm-addon-overlay/.prettierrc new file mode 100644 index 00000000..01d4b744 --- /dev/null +++ b/ui/packages/xterm-addon-overlay/.prettierrc @@ -0,0 +1,7 @@ +{ + "trailingComma": "all", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "endOfLine": "auto" +} diff --git a/ui/packages/xterm-addon-overlay/package.json b/ui/packages/xterm-addon-overlay/package.json new file mode 100644 index 00000000..44142029 --- /dev/null +++ b/ui/packages/xterm-addon-overlay/package.json @@ -0,0 +1,34 @@ +{ + "name": "@karmada/xterm-addon-overlay", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "description": "", + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs" + } + }, + "types": "dist/index.d.ts", + "scripts": { + "prepublish": "tsup --config ./tsup.config.ts", + "build": "tsup --config ./tsup.config.ts" + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx,json,css,md}": [ + "prettier --write" + ] + }, + "keywords": [ + "terminal", + "xterm", + "xterm.js" + ], + "author": "", + "license": "ISC", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } +} diff --git a/ui/packages/xterm-addon-overlay/src/index.ts b/ui/packages/xterm-addon-overlay/src/index.ts new file mode 100644 index 00000000..78945f75 --- /dev/null +++ b/ui/packages/xterm-addon-overlay/src/index.ts @@ -0,0 +1,73 @@ +// ported from hterm.Terminal.prototype.showOverlay +// https://chromium.googlesource.com/apps/libapps/+/master/hterm/js/hterm_terminal.js +import { ITerminalAddon, Terminal } from '@xterm/xterm'; + +class OverlayAddon implements ITerminalAddon { + private terminal: Terminal | null = null; + private overlayNode: HTMLElement; + private overlayTimeout?: number; + + constructor() { + this.overlayNode = document.createElement('div'); + this.overlayNode.style.cssText = `border-radius: 15px; +font-size: xx-large; +opacity: 0.75; +padding: 0.2em 0.5em 0.2em 0.5em; +position: absolute; +-webkit-user-select: none; +-webkit-transition: opacity 180ms ease-in; +-moz-user-select: none; +-moz-transition: opacity 180ms ease-in;`; + + this.overlayNode.addEventListener( + 'mousedown', + (e) => { + e.preventDefault(); + e.stopPropagation(); + }, + true, + ); + } + + activate(terminal: Terminal): void { + this.terminal = terminal; + } + + dispose(): void {} + + showOverlay(msg: string, timeout?: number): void { + const { terminal, overlayNode } = this; + if (!terminal || !terminal.element) return; + + overlayNode.style.color = '#101010'; + overlayNode.style.backgroundColor = '#f0f0f0'; + overlayNode.textContent = msg; + overlayNode.style.opacity = '0.75'; + + if (!overlayNode.parentNode) { + terminal.element.appendChild(overlayNode); + } + + const divSize = terminal.element.getBoundingClientRect(); + const overlaySize = overlayNode.getBoundingClientRect(); + + overlayNode.style.top = (divSize.height - overlaySize.height) / 2 + 'px'; + overlayNode.style.left = (divSize.width - overlaySize.width) / 2 + 'px'; + + if (this.overlayTimeout) clearTimeout(this.overlayTimeout); + if (!timeout) return; + + this.overlayTimeout = window.setTimeout(() => { + overlayNode.style.opacity = '0'; + this.overlayTimeout = window.setTimeout(() => { + if (overlayNode.parentNode) { + overlayNode.parentNode.removeChild(overlayNode); + } + this.overlayTimeout = undefined; + overlayNode.style.opacity = '0.75'; + }, 200); + }, timeout || 1500); + } +} + +export default OverlayAddon; diff --git a/ui/packages/xterm-addon-overlay/tsconfig.json b/ui/packages/xterm-addon-overlay/tsconfig.json new file mode 100644 index 00000000..a7fc6fbf --- /dev/null +++ b/ui/packages/xterm-addon-overlay/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/ui/packages/xterm-addon-overlay/tsconfig.node.json b/ui/packages/xterm-addon-overlay/tsconfig.node.json new file mode 100644 index 00000000..97ede7ee --- /dev/null +++ b/ui/packages/xterm-addon-overlay/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/packages/xterm-addon-overlay/tsup.config.ts b/ui/packages/xterm-addon-overlay/tsup.config.ts new file mode 100644 index 00000000..51fd75c6 --- /dev/null +++ b/ui/packages/xterm-addon-overlay/tsup.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.ts'], + splitting: false, + sourcemap: true, + clean: true, + format: ['cjs', 'esm'], + dts: true, +}); From 14910c50b70e1c4458ea3c1e23d07213ae94dc81 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Sun, 30 Jun 2024 23:08:45 +0800 Subject: [PATCH 3/9] feat: add karmada/terminal pkg Signed-off-by: warjiang <1096409085@qq.com> --- ui/packages/terminal/.prettierignore | 5 + ui/packages/terminal/.prettierrc | 7 + ui/packages/terminal/package.json | 56 ++++ ui/packages/terminal/src/base.ts | 190 ++++++++++++ ui/packages/terminal/src/index.tsx | 11 + ui/packages/terminal/src/ttyd.ts | 390 ++++++++++++++++++++++++ ui/packages/terminal/src/typing.d.ts | 42 +++ ui/packages/terminal/src/utils.ts | 25 ++ ui/packages/terminal/tsconfig.json | 25 ++ ui/packages/terminal/tsconfig.node.json | 11 + ui/packages/terminal/tsup.config.ts | 11 + 11 files changed, 773 insertions(+) create mode 100644 ui/packages/terminal/.prettierignore create mode 100644 ui/packages/terminal/.prettierrc create mode 100644 ui/packages/terminal/package.json create mode 100644 ui/packages/terminal/src/base.ts create mode 100644 ui/packages/terminal/src/index.tsx create mode 100644 ui/packages/terminal/src/ttyd.ts create mode 100644 ui/packages/terminal/src/typing.d.ts create mode 100644 ui/packages/terminal/src/utils.ts create mode 100644 ui/packages/terminal/tsconfig.json create mode 100644 ui/packages/terminal/tsconfig.node.json create mode 100644 ui/packages/terminal/tsup.config.ts diff --git a/ui/packages/terminal/.prettierignore b/ui/packages/terminal/.prettierignore new file mode 100644 index 00000000..08ddad8c --- /dev/null +++ b/ui/packages/terminal/.prettierignore @@ -0,0 +1,5 @@ +node_modules +build +coverage +dist +pnpm-* diff --git a/ui/packages/terminal/.prettierrc b/ui/packages/terminal/.prettierrc new file mode 100644 index 00000000..01d4b744 --- /dev/null +++ b/ui/packages/terminal/.prettierrc @@ -0,0 +1,7 @@ +{ + "trailingComma": "all", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "endOfLine": "auto" +} diff --git a/ui/packages/terminal/package.json b/ui/packages/terminal/package.json new file mode 100644 index 00000000..ec059363 --- /dev/null +++ b/ui/packages/terminal/package.json @@ -0,0 +1,56 @@ +{ + "name": "@karmada/terminal", + "version": "1.0.0", + "publishConfig": { + "access": "public" + }, + "description": "", + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs" + } + }, + "types": "dist/index.d.ts", + "scripts": { + "prepublish": "tsup --config ./tsup.config.ts", + "build": "tsup --config ./tsup.config.ts" + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx,json,css,md}": [ + "prettier --write" + ] + }, + "keywords": [ + "terminal", + "xterm", + "xterm.js" + ], + "author": "", + "license": "ISC", + "dependencies": { + "@karmada/xterm-addon-overlay": "workspace:*", + "@karmada/xterm-addon-zmodem": "workspace:*", + "@xterm/addon-canvas": "^0.7.0", + "@xterm/addon-clipboard": "^0.1.0", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-ligatures": "^0.9.0", + "@xterm/addon-search": "^0.15.0", + "@xterm/addon-unicode11": "^0.8.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/addon-webgl": "^0.18.0", + "@xterm/xterm": "^5.0.0", + "debug": "^4.3.5", + "lodash.isempty": "^4.4.0" + }, + "devDependencies": { + "@types/debug": "^4.1.12", + "@types/lodash.isempty": "^4.4.9", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0" + }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18" + } +} diff --git a/ui/packages/terminal/src/base.ts b/ui/packages/terminal/src/base.ts new file mode 100644 index 00000000..8da77c12 --- /dev/null +++ b/ui/packages/terminal/src/base.ts @@ -0,0 +1,190 @@ +import { IDisposable, ITerminalAddon, Terminal } from '@xterm/xterm'; +import { FitAddon } from '@xterm/addon-fit'; +import { WebLinksAddon } from '@xterm/addon-web-links'; +import { SearchAddon } from '@xterm/addon-search'; +import { CanvasAddon } from '@xterm/addon-canvas'; +import { WebglAddon } from '@xterm/addon-webgl'; +import isEmpty from 'lodash.isempty'; +import { addEventListener, getDebugger } from './utils.ts'; +import { + AddonInfo, + AddonType, + innerTerminal, + RendererType, + BaseTerminalOptions, +} from './typing'; + +const log = getDebugger('BaseTerminal'); + +class BaseTerminal implements IDisposable { + // terminal is a xterm instance, use inherited type for add method on xterm instance + protected terminal!: innerTerminal; + // use `isXtermOpened` flag avoid create xterm instance multiple times + protected isXtermOpened: boolean = false; + /* + * baseTerminalOptions consists of clientOptions and xtermOptions + * clientOptions: custom options for terminal + * xtermOptions: options for xterm + */ + protected baseTerminalOptions: BaseTerminalOptions; + // disposables used for store clean function for resources + private disposables: IDisposable[] = []; + // addons store the addons of xterm + protected addons = {} as Record; + + constructor(options: BaseTerminalOptions) { + this.baseTerminalOptions = options; + this.addons = { + ...this.addons, + fit: { + name: 'fit', + ctor: new FitAddon(), + }, + webLinks: { + name: 'webLinks', + ctor: new WebLinksAddon(), + }, + search: { + name: 'search', + ctor: new SearchAddon(), + }, + }; + } + + public register = (...disposables: T[]): T[] => { + for (const disposable of disposables) { + this.disposables.push(disposable); + } + return disposables; + }; + + private initListeners() { + this.register( + addEventListener(window, 'resize', () => + this.mustGetAddon('fit').fit(), + ), + ); + } + + public dispose = () => { + for (const d of this.disposables) { + d.dispose(); + } + this.disposables.length = 0; + }; + + public setRendererType(value: RendererType) { + log('setRendererType', value); + switch (value) { + case 'canvas': + this.deleteAddon('webgl'); + this.setAddon('canvas', new CanvasAddon()); + log('[ttyd] canvas renderer loaded'); + break; + case 'webgl': + this.deleteAddon('canvas'); + this.setAddon('webgl', new WebglAddon()); + log('[ttyd] WebGL renderer loaded'); + break; + case 'dom': + this.deleteAddon('webgl'); + this.deleteAddon('canvas'); + log('[ttyd] dom renderer loaded'); + break; + default: + break; + } + } + + /** + * return the addon accoring to addon name, but the function doesn't ensure + * you can get the addon as expected, if the addon exist, it will return the addon, + * otherwise you'll get null + * @param name name of the addon + * */ + public getAddon = (name: AddonType): T | null => { + if (name in this.addons) { + return this.addons[name].ctor as unknown as T; + } + return null; + }; + + /** + * mustGetAddon will ensure you get the addon as expected, if the addon not exist, it + * will throw an expection. + * @param name name of the addon + */ + public mustGetAddon = (name: AddonType): T => { + if (name in this.addons) { + return this.addons[name].ctor as unknown as T; + } + throw Error(`Cannot find addon[${name}]`); + }; + + /** + * setAddon will store the addon into addons, and make the terminal load addon. + * If you setAddon multiple times, it will first invoke the dipose method of addon + * @param name name of the addon + * @param addon addon for xterm + */ + protected setAddon = ( + name: AddonType, + addon: T, + ) => { + this.getAddon(name)?.dispose(); + this.addons[name] = { + name: name, + ctor: addon, + }; + this.terminal.loadAddon(addon); + }; + + /** + * deleteAddon will remove the addon from addons, and inovke dipose method of addon. + * @param name name of the addon + */ + protected deleteAddon = (name: AddonType) => { + const addon = this.getAddon(name); + if (addon) { + addon.dispose(); + delete this.addons[name]; + } + }; + + public write = (data: string) => { + if (isEmpty(data)) return; + data.split('\n').map((line) => { + this.terminal.writeln(line); + }); + }; + + public open = (containerElement: HTMLElement) => { + if (this.isXtermOpened) return; + log('execute open method'); + log('termOptions', this.baseTerminalOptions.xtermOptions); + if (this.terminal) { + log('terminal already exists, dispose it first'); + this.terminal.dispose(); + // this.dispose(); + } + + const terminal = new Terminal( + this.baseTerminalOptions.xtermOptions, + ) as innerTerminal; + this.terminal = terminal; + terminal.fit = () => { + this.mustGetAddon('fit').fit(); + }; + for (const name in this.addons) { + log('load addon =>', name); + terminal.loadAddon(this.addons[name as AddonType].ctor); + } + terminal.open(containerElement); + this.setRendererType(this.baseTerminalOptions.clientOptions.rendererType); + this.initListeners(); + terminal.fit(); + this.isXtermOpened = true; + }; +} + +export default BaseTerminal; diff --git a/ui/packages/terminal/src/index.tsx b/ui/packages/terminal/src/index.tsx new file mode 100644 index 00000000..169dd42b --- /dev/null +++ b/ui/packages/terminal/src/index.tsx @@ -0,0 +1,11 @@ +import { createContext } from 'react'; +import BaseTerminal from './base.ts'; +import '@xterm/xterm/css/xterm.css'; + +export const TerminalContext = createContext<{ + terminal: BaseTerminal | null; +}>({ + terminal: null, +}); +export { default as TtydTerminal } from './ttyd'; +export { default as BaseTerminal } from './base'; diff --git a/ui/packages/terminal/src/ttyd.ts b/ui/packages/terminal/src/ttyd.ts new file mode 100644 index 00000000..249507b8 --- /dev/null +++ b/ui/packages/terminal/src/ttyd.ts @@ -0,0 +1,390 @@ +import type { ITerminalOptions } from '@xterm/xterm'; +import { addEventListener, getDebugger } from './utils'; +import BaseTerminal from './base.ts'; +import { BaseTerminalOptions, ClientOptions } from './typing'; +import OverlayAddon from '@karmada/xterm-addon-overlay'; +import ZmodemAddon from '@karmada/xterm-addon-zmodem'; + +type Preferences = ITerminalOptions & ClientOptions; + +const log = getDebugger('TtydTerminal'); + +interface TtydTerminalOptions { + wsUrl: string; + tokenUrl: string; + flowControl: FlowControl; +} + +export interface FlowControl { + limit: number; + highWater: number; + lowWater: number; +} + +enum Command { + // server side + OUTPUT = '0', + SET_WINDOW_TITLE = '1', + SET_PREFERENCES = '2', + + /* eslint-disable @typescript-eslint/no-duplicate-enum-values */ + // client side + INPUT = '0', + RESIZE_TERMINAL = '1', + PAUSE = '2', + RESUME = '3', + /* eslint-enable @typescript-eslint/no-duplicate-enum-values */ +} + +class TtydTerminal extends BaseTerminal { + private ttydTerminalOptions: TtydTerminalOptions; + private socket!: WebSocket; + private opened = false; + private reconnect = true; + private doReconnect = true; + private token: string = ''; + private textEncoder = new TextEncoder(); + private textDecoder = new TextDecoder(); + + private written = 0; + private pending = 0; + + private title?: string; + private titleFixed?: string; + private resizeOverlay = true; + private sendCb = () => {}; + + constructor(options: BaseTerminalOptions, ttydOptions: TtydTerminalOptions) { + super(options); + this.ttydTerminalOptions = ttydOptions; + this.addons = { + ...this.addons, + overlay: { + name: 'overlay', + ctor: new OverlayAddon(), + }, + }; + } + + private writeFunc = (data: ArrayBuffer) => { + return this.writeData(new Uint8Array(data)); + }; + + public writeData = (data: string | Uint8Array) => { + const { terminal, textEncoder } = this; + if (!terminal) return; + const { limit, highWater, lowWater } = this.ttydTerminalOptions.flowControl; + + this.written += data.length; + if (this.written > limit) { + terminal.write(data, () => { + this.pending = Math.max(this.pending - 1, 0); + if (this.pending < lowWater) { + this.socket.send(textEncoder.encode(Command.RESUME)); + } + }); + this.pending++; + this.written = 0; + if (this.pending > highWater) { + this.socket.send(textEncoder.encode(Command.PAUSE)); + } + } else { + terminal.write(data); + } + }; + + public sendData = (data: string | Uint8Array) => { + const { socket, textEncoder } = this; + if (socket.readyState !== WebSocket.OPEN) return; + + if (typeof data === 'string') { + const payload = new Uint8Array(data.length * 3 + 1); + payload[0] = Command.INPUT.charCodeAt(0); + const stats = textEncoder.encodeInto(data, payload.subarray(1)); + socket.send(payload.subarray(0, (stats.written as number) + 1)); + } else { + const payload = new Uint8Array(data.length + 1); + payload[0] = Command.INPUT.charCodeAt(0); + payload.set(data, 1); + socket.send(payload); + } + }; + + public refreshToken = async () => { + try { + const resp = await fetch(this.ttydTerminalOptions.tokenUrl); + if (resp.ok) { + const json = await resp.json(); + this.token = json.token; + } + } catch (e) { + log(`[ttyd] fetch ${this.ttydTerminalOptions.tokenUrl}: `, e); + } + }; + + private parseOptsFromUrlQuery = (query: string): Preferences => { + const { terminal } = this; + const clientOptions = this.baseTerminalOptions + .clientOptions as unknown as Record; + const prefs = {} as Record; + const queryObj = Array.from( + new URLSearchParams(query) as unknown as Iterable<[string, string]>, + ); + + for (const [k, queryVal] of queryObj) { + let v = clientOptions[k]; + if (v === undefined) v = (terminal?.options as Record)[k]; + switch (typeof v) { + case 'boolean': + prefs[k] = queryVal === 'true' || queryVal === '1'; + break; + case 'number': + case 'bigint': + prefs[k] = Number.parseInt(queryVal, 10); + break; + case 'string': + prefs[k] = queryVal; + break; + case 'object': + prefs[k] = JSON.parse(queryVal); + break; + default: + console.warn( + `[ttyd] maybe unknown option: ${k}=${queryVal}, treating as string`, + ); + prefs[k] = queryVal; + break; + } + } + + return prefs as unknown as Preferences; + }; + + private initTtydListeners = () => { + const { terminal } = this; + this.register( + terminal.onTitleChange((data) => { + if (data && data !== '' && !this.titleFixed) { + document.title = data + ' | ' + this.title; + } + }), + terminal.onData((data) => this.sendData(data)), + terminal.onResize(({ cols, rows }) => { + const msg = JSON.stringify({ columns: cols, rows: rows }); + this.socket.send( + this.textEncoder.encode(Command.RESIZE_TERMINAL + msg), + ); + if (this.resizeOverlay) { + this.getAddon('overlay')?.showOverlay( + `${cols}x${rows}`, + 300, + ); + } + }), + terminal.onSelectionChange(() => { + if (terminal.getSelection() === '') return; + try { + document.execCommand('copy'); + } catch (e) { + return; + } + this.getAddon('overlay')?.showOverlay('\u2702', 200); + }), + addEventListener(window, 'beforeunload', this.onWindowUnload), + ); + }; + + public connect = () => { + this.socket = new WebSocket(this.ttydTerminalOptions.wsUrl, ['tty']); + const { socket, register } = this; + socket.binaryType = 'arraybuffer'; + register( + addEventListener(socket, 'open', this.onSocketOpen), + addEventListener(socket, 'message', this.onSocketData as EventListener), + addEventListener(socket, 'close', this.onSocketClose as EventListener), + addEventListener(socket, 'error', () => (this.doReconnect = false)), + ); + }; + + private onSocketOpen = () => { + const { terminal, socket, textEncoder } = this; + if (socket.readyState != 1) { + return; + } + log('[ttyd] websocket connection opened', socket.readyState); + + const msg = JSON.stringify({ + AuthToken: this.token, + columns: terminal.cols, + rows: terminal.rows, + }); + socket.send(textEncoder.encode(msg)); + + if (this.opened && terminal) { + terminal.reset(); + terminal.options.disableStdin = false; + } else { + this.opened = true; + } + + this.doReconnect = this.reconnect; + this.initTtydListeners(); + terminal.focus(); + }; + private onSocketClose = (event: CloseEvent) => { + log(`[ttyd] websocket connection closed with code: ${event.code}`); + const { refreshToken, connect, doReconnect, terminal } = this; + this.dispose(); + + // 1000: CLOSE_NORMAL + if (event.code !== 1000 && doReconnect) { + refreshToken().then(connect); + } else { + const keyDispose = terminal.onKey((e) => { + const event = e.domEvent; + if (event.key === 'Enter') { + keyDispose.dispose(); + refreshToken().then(connect); + } + }); + } + }; + private onSocketData = (event: MessageEvent) => { + const { textDecoder } = this; + const rawData = event.data as ArrayBuffer; + const cmd = String.fromCharCode(new Uint8Array(rawData)[0]); + const data = rawData.slice(1); + + switch (cmd) { + case Command.OUTPUT: + this.writeFunc(data); + break; + case Command.SET_WINDOW_TITLE: + this.title = textDecoder.decode(data); + document.title = this.title; + break; + case Command.SET_PREFERENCES: + this.applyPreferences({ + ...this.baseTerminalOptions.clientOptions, + ...JSON.parse(textDecoder.decode(data)), + ...this.parseOptsFromUrlQuery(window.location.search), + } as Preferences); + break; + default: + log(`[ttyd] unknown command: ${cmd}`); + break; + } + }; + private onWindowUnload = (event: BeforeUnloadEvent) => { + event.preventDefault(); + if (this.socket.readyState === WebSocket.OPEN) { + return 'Close terminal? this will also terminate the command.'; + } + return undefined; + }; + + public applyPreferences = (prefs: Preferences) => { + log('preferences', prefs); + const { terminal } = this; + if (prefs.enableZmodem || prefs.enableTrzsz) { + const zmodemAddon = new ZmodemAddon({ + zmodem: prefs.enableZmodem, + trzsz: prefs.enableTrzsz, + windows: prefs.isWindows, + trzszDragInitTimeout: prefs.trzszDragInitTimeout, + onSend: this.sendCb, + sender: this.sendData, + writer: this.writeData, + }); + this.writeFunc = (data) => { + return this.getAddon('zmodem')?.consume(data); + }; + this.setAddon('zmodem', zmodemAddon); + } + const opts = { + ...(terminal?.options as Record), + }; + delete opts['cols']; + delete opts['rows']; + for (const [key, value] of Object.entries(prefs)) { + switch (key) { + case 'rendererType': + this.setRendererType(value); + break; + // case 'disableLeaveAlert': + // if (value) { + // window.removeEventListener('beforeunload', this.onWindowUnload); + // log('[ttyd] Leave site alert disabled'); + // } + // break; + // case 'disableResizeOverlay': + // if (value) { + // log('[ttyd] Resize overlay disabled'); + // this.resizeOverlay = false; + // } + // break; + // case 'disableReconnect': + // if (value) { + // log('[ttyd] Reconnect disabled'); + // this.reconnect = false; + // this.doReconnect = false; + // } + // break; + case 'enableZmodem': + if (value) log('[ttyd] Zmodem enabled'); + break; + case 'enableTrzsz': + if (value) log('[ttyd] trzsz enabled'); + break; + case 'trzszDragInitTimeout': + if (value) log(`[ttyd] trzsz drag init timeout: ${value}`); + break; + // case 'enableSixel': + // if (value) { + // terminal?.loadAddon(register(new ImageAddon())); + // log('[ttyd] Sixel enabled'); + // } + // break; + // case 'titleFixed': + // if (!value || value === '') return; + // log(`[ttyd] setting fixed title: ${value}`); + // this.titleFixed = value; + // document.title = value; + // break; + case 'isWindows': + if (value) log('[ttyd] is windows'); + break; + // case 'unicodeVersion': + // switch (value) { + // case 6: + // case '6': + // log('[ttyd] setting Unicode version: 6'); + // break; + // case 11: + // case '11': + // default: + // log('[ttyd] setting Unicode version: 11'); + // terminal?.loadAddon(new Unicode11Addon()); + // terminal && (terminal.unicode.activeVersion = '11'); + // break; + // } + // break; + default: + log(`[ttyd] option: ${key}=${JSON.stringify(value)}`); + if (opts[key] instanceof Object) { + opts[key] = Object.assign({}, opts[key], value); + } else { + opts[key] = value; + } + terminal && (terminal.options = opts); + + if (key.indexOf('font') === 0) { + terminal.fit(); + } + break; + } + } + }; +} + +export default TtydTerminal; diff --git a/ui/packages/terminal/src/typing.d.ts b/ui/packages/terminal/src/typing.d.ts new file mode 100644 index 00000000..50342905 --- /dev/null +++ b/ui/packages/terminal/src/typing.d.ts @@ -0,0 +1,42 @@ +import { ITerminalAddon, type ITerminalOptions, Terminal } from '@xterm/xterm'; + +export interface innerTerminal extends Terminal { + fit(): void; +} + +// AddonType should sync with `cat package.json|grep @xterm/addon-` +export type AddonType = + | 'webgl' + | 'canvas' + | 'fit' + | 'clipboard' + | 'search' + | 'webLinks' + | 'unicode11' + | 'ligatures' + | 'overlay' + | 'zmodem'; + +export interface AddonInfo { + name: string; + ctor: ITerminalAddon; +} + +export interface ClientOptions { + rendererType: RendererType; + disableLeaveAlert: boolean; + disableResizeOverlay: boolean; + enableZmodem: boolean; + enableSixel: boolean; + enableTrzsz: boolean; + trzszDragInitTimeout: number; + isWindows: boolean; + unicodeVersion: string; +} + +export interface BaseTerminalOptions { + clientOptions: ClientOptions; + xtermOptions: ITerminalOptions; +} + +export type RendererType = 'dom' | 'canvas' | 'webgl'; diff --git a/ui/packages/terminal/src/utils.ts b/ui/packages/terminal/src/utils.ts new file mode 100644 index 00000000..7bee9596 --- /dev/null +++ b/ui/packages/terminal/src/utils.ts @@ -0,0 +1,25 @@ +import type { IDisposable } from '@xterm/xterm'; +import debug from 'debug'; + +export function addEventListener( + target: EventTarget, + type: string, + listener: EventListener, +): IDisposable { + target.addEventListener(type, listener); + return toDisposable(() => target.removeEventListener(type, listener)); +} + +export function toDisposable(f: () => void): IDisposable { + return { dispose: f }; +} + +const debuggerStore: Record = {}; + +export function getDebugger(name: string) { + if (name in debuggerStore) { + return debuggerStore[name]; + } + debuggerStore[name] = debug(name); + return debuggerStore[name]; +} diff --git a/ui/packages/terminal/tsconfig.json b/ui/packages/terminal/tsconfig.json new file mode 100644 index 00000000..a7fc6fbf --- /dev/null +++ b/ui/packages/terminal/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/ui/packages/terminal/tsconfig.node.json b/ui/packages/terminal/tsconfig.node.json new file mode 100644 index 00000000..97ede7ee --- /dev/null +++ b/ui/packages/terminal/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/packages/terminal/tsup.config.ts b/ui/packages/terminal/tsup.config.ts new file mode 100644 index 00000000..7e442925 --- /dev/null +++ b/ui/packages/terminal/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/index.tsx'], + splitting: false, + sourcemap: true, + clean: true, + format: ['cjs', 'esm'], + // external: ['react'], + dts: true, +}); From 76b9e96216bfa7352787ee2c98e2cb78403f175f Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Sun, 30 Jun 2024 23:09:29 +0800 Subject: [PATCH 4/9] feat(git): ignore dist dir under the ui monorepo Signed-off-by: warjiang <1096409085@qq.com> --- ui/.gitignore | 4 +- ui/pnpm-lock.yaml | 695 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 675 insertions(+), 24 deletions(-) diff --git a/ui/.gitignore b/ui/.gitignore index 9df1413f..7230d7f0 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -3,7 +3,7 @@ node_modules/ # Dist .dist/ - +**/*/dist # Yarn .yarn/* !.yarn/patches @@ -11,4 +11,4 @@ node_modules/ !.yarn/releases !.yarn/sdks !.yarn/versions - +apps/demos diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 586a47d1..da5054df 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + zmodem.js@0.1.10: + hash: hu5xjluf4ypxmwfl72cvrgotsq + path: patches/zmodem.js@0.1.10.patch + importers: .: @@ -47,7 +52,7 @@ importers: version: 5.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: ^1.6.8 - version: 1.6.8 + version: 1.6.8(debug@4.3.5) clsx: specifier: ^2.1.0 version: 2.1.1 @@ -143,6 +148,100 @@ importers: specifier: ^4.2.0 version: 4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)) + apps/demos: + dependencies: + '@karmada/terminal': + specifier: workspace:* + version: link:../../packages/terminal + '@xterm/addon-attach': + specifier: ^0.11.0 + version: 0.11.0(@xterm/xterm@5.5.0) + '@xterm/addon-canvas': + specifier: ^0.7.0 + version: 0.7.0(@xterm/xterm@5.5.0) + '@xterm/addon-clipboard': + specifier: ^0.1.0 + version: 0.1.0(@xterm/xterm@5.5.0) + '@xterm/addon-fit': + specifier: ^0.10.0 + version: 0.10.0(@xterm/xterm@5.5.0) + '@xterm/addon-image': + specifier: ^0.8.0 + version: 0.8.0(@xterm/xterm@5.5.0) + '@xterm/addon-ligatures': + specifier: ^0.9.0 + version: 0.9.0(@xterm/xterm@5.5.0) + '@xterm/addon-search': + specifier: ^0.15.0 + version: 0.15.0(@xterm/xterm@5.5.0) + '@xterm/addon-serialize': + specifier: ^0.13.0 + version: 0.13.0(@xterm/xterm@5.5.0) + '@xterm/addon-unicode11': + specifier: ^0.8.0 + version: 0.8.0(@xterm/xterm@5.5.0) + '@xterm/addon-web-links': + specifier: ^0.11.0 + version: 0.11.0(@xterm/xterm@5.5.0) + '@xterm/addon-webgl': + specifier: ^0.18.0 + version: 0.18.0(@xterm/xterm@5.5.0) + '@xterm/xterm': + specifier: ^5.5.0 + version: 5.5.0 + ahooks: + specifier: ^3.8.0 + version: 3.8.0(react@18.3.1) + axios: + specifier: ^1.6.8 + version: 1.6.8(debug@4.3.5) + debug: + specifier: ^4.3.5 + version: 4.3.5 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/react': + specifier: ^18.3.3 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@typescript-eslint/eslint-plugin': + specifier: ^7.13.1 + version: 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.13.1 + version: 7.14.1(eslint@8.57.0)(typescript@5.4.5) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.3.1(@types/node@20.12.11)(less@4.2.0)) + autoprefixer: + specifier: ^10.4.19 + version: 10.4.19(postcss@8.4.38) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-plugin-react-hooks: + specifier: ^4.6.2 + version: 4.6.2(eslint@8.57.0) + eslint-plugin-react-refresh: + specifier: ^0.4.7 + version: 0.4.7(eslint@8.57.0) + typescript: + specifier: ^5.2.2 + version: 5.4.5 + vite: + specifier: ^5.3.1 + version: 5.3.1(@types/node@20.12.11)(less@4.2.0) + packages/eslint-config-ts: dependencies: '@typescript-eslint/eslint-plugin': @@ -202,6 +301,95 @@ importers: specifier: ^8.4.7 version: 8.56.10 + packages/terminal: + dependencies: + '@karmada/xterm-addon-overlay': + specifier: workspace:* + version: link:../xterm-addon-overlay + '@karmada/xterm-addon-zmodem': + specifier: workspace:* + version: link:../xterm-addon-zmodem + '@xterm/addon-canvas': + specifier: ^0.7.0 + version: 0.7.0(@xterm/xterm@5.5.0) + '@xterm/addon-clipboard': + specifier: ^0.1.0 + version: 0.1.0(@xterm/xterm@5.5.0) + '@xterm/addon-fit': + specifier: ^0.10.0 + version: 0.10.0(@xterm/xterm@5.5.0) + '@xterm/addon-ligatures': + specifier: ^0.9.0 + version: 0.9.0(@xterm/xterm@5.5.0) + '@xterm/addon-search': + specifier: ^0.15.0 + version: 0.15.0(@xterm/xterm@5.5.0) + '@xterm/addon-unicode11': + specifier: ^0.8.0 + version: 0.8.0(@xterm/xterm@5.5.0) + '@xterm/addon-web-links': + specifier: ^0.11.0 + version: 0.11.0(@xterm/xterm@5.5.0) + '@xterm/addon-webgl': + specifier: ^0.18.0 + version: 0.18.0(@xterm/xterm@5.5.0) + '@xterm/xterm': + specifier: ^5.0.0 + version: 5.5.0 + debug: + specifier: ^4.3.5 + version: 4.3.5 + lodash.isempty: + specifier: ^4.4.0 + version: 4.4.0 + react: + specifier: ^18 + version: 18.3.1 + react-dom: + specifier: ^18 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/lodash.isempty': + specifier: ^4.4.9 + version: 4.4.9 + '@types/react': + specifier: ^18.3.3 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + + packages/xterm-addon-overlay: + dependencies: + '@xterm/xterm': + specifier: ^5.0.0 + version: 5.5.0 + + packages/xterm-addon-zmodem: + dependencies: + '@karmada/xterm-addon-zmodem': + specifier: 'link:' + version: 'link:' + '@xterm/xterm': + specifier: ^5.0.0 + version: 5.5.0 + file-saver: + specifier: ^2.0.5 + version: 2.0.5 + trzsz: + specifier: ^1.1.5 + version: 1.1.5 + zmodem.js: + specifier: ^0.1.10 + version: 0.1.10(patch_hash=hu5xjluf4ypxmwfl72cvrgotsq) + devDependencies: + '@types/file-saver': + specifier: ^2.0.7 + version: 2.0.7 + packages: '@alloc/quick-lru@5.2.0': @@ -963,18 +1151,30 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/eslint@8.56.10': resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/file-saver@2.0.7': + resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/lodash.isempty@4.4.9': + resolution: {integrity: sha512-DPSFfnT2JmZiAWNWOU8IRZws/Ha6zyGF5m06TydfsY+0dVoQqby2J61Na2QU4YtwiZ+moC6cJS6zWYBJq4wBVw==} + '@types/lodash@4.17.1': resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/node@20.12.11': resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} @@ -987,6 +1187,9 @@ packages: '@types/react@18.3.1': resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1001,6 +1204,17 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@7.14.1': + resolution: {integrity: sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/eslint-plugin@7.8.0': resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1022,6 +1236,16 @@ packages: typescript: optional: true + '@typescript-eslint/parser@7.14.1': + resolution: {integrity: sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@7.8.0': resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1036,6 +1260,10 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@7.14.1': + resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.8.0': resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1050,6 +1278,16 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@7.14.1': + resolution: {integrity: sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/type-utils@7.8.0': resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1064,6 +1302,10 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@7.14.1': + resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@7.8.0': resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1077,6 +1319,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@7.14.1': + resolution: {integrity: sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/typescript-estree@7.8.0': resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1092,6 +1343,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@7.14.1': + resolution: {integrity: sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + '@typescript-eslint/utils@7.8.0': resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1102,6 +1359,10 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@7.14.1': + resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.8.0': resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1122,6 +1383,71 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-react@4.3.1': + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@xterm/addon-attach@0.11.0': + resolution: {integrity: sha512-JboCN0QAY6ZLY/SSB/Zl2cQ5zW1Eh4X3fH7BnuR1NB7xGRhzbqU2Npmpiw/3zFlxDaU88vtKzok44JKi2L2V2Q==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-canvas@0.7.0': + resolution: {integrity: sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-clipboard@0.1.0': + resolution: {integrity: sha512-zdoM7p53T5sv/HbRTyp4hY0kKmEQ3MZvAvEtiXqNIHc/JdpqwByCtsTaQF5DX2n4hYdXRPO4P/eOS0QEhX1nPw==} + peerDependencies: + '@xterm/xterm': ^5.4.0 + + '@xterm/addon-fit@0.10.0': + resolution: {integrity: sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-image@0.8.0': + resolution: {integrity: sha512-b/dqpFn3jUad2pUP5UpF4scPIh0WdxRQL/1qyiahGfUI85XZTCXo0py9G6AcOR2QYUw8eJ8EowGspT7BQcgw6A==} + peerDependencies: + '@xterm/xterm': ^5.2.0 + + '@xterm/addon-ligatures@0.9.0': + resolution: {integrity: sha512-zVV1AHV1SIm/rdzR5VDPyg+qUnR1SjH4H75iXiB7r6YDa1yEHIqc/EwnUIwz+yeeZozkh8hjbH80L7luEgtxtQ==} + engines: {node: '>8.0.0'} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-search@0.15.0': + resolution: {integrity: sha512-ZBZKLQ+EuKE83CqCmSSz5y1tx+aNOCUaA7dm6emgOX+8J9H1FWXZyrKfzjwzV+V14TV3xToz1goIeRhXBS5qjg==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-serialize@0.13.0': + resolution: {integrity: sha512-kGs8o6LWAmN1l2NpMp01/YkpxbmO4UrfWybeGu79Khw5K9+Krp7XhXbBTOTc3GJRRhd6EmILjpR8k5+odY39YQ==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-unicode11@0.8.0': + resolution: {integrity: sha512-LxinXu8SC4OmVa6FhgwsVCBZbr8WoSGzBl2+vqe8WcQ6hb1r6Gj9P99qTNdPiFPh4Ceiu2pC8xukZ6+2nnh49Q==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-web-links@0.11.0': + resolution: {integrity: sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/addon-webgl@0.18.0': + resolution: {integrity: sha512-xCnfMBTI+/HKPdRnSOHaJDRqEpq2Ugy8LEj9GiY4J3zJObo3joylIFaMvzBwbYRg8zLtkO0KQaStCeSfoaI2/w==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@xterm/xterm@5.5.0': + resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1132,6 +1458,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ahooks@3.8.0: + resolution: {integrity: sha512-M01m+mxLRNNeJ/PCT3Fom26UyreTj6oMqJBetUrJnK4VNI5j6eMA543Xxo53OBXn6XibA2FXKcCCgrT6YCTtKQ==} + engines: {node: '>=8.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1371,6 +1703,11 @@ packages: typescript: optional: true + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1398,8 +1735,8 @@ packages: dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1652,6 +1989,9 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-saver@2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1680,6 +2020,14 @@ packages: debug: optional: true + font-finder@1.1.0: + resolution: {integrity: sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==} + engines: {node: '>8.0.0'} + + font-ligatures@1.4.1: + resolution: {integrity: sha512-7W6zlfyhvCqShZ5ReUWqmSd9vBaUudW0Hxis+tqUjtHhsPU+L3Grf8mcZAtCiXHTzorhwdRTId2WeH/88gdFkw==} + engines: {node: '>8.0.0'} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -1736,6 +2084,10 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-system-fonts@2.0.2: + resolution: {integrity: sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==} + engines: {node: '>8.0.0'} + get-tsconfig@4.7.5: resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} @@ -1861,6 +2213,9 @@ packages: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} + intersection-observer@0.12.2: + resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -2015,6 +2370,12 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2094,6 +2455,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.isempty@4.4.0: + resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2121,6 +2485,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lucide-react@0.368.0: resolution: {integrity: sha512-soryVrCjheZs8rbXKdINw9B8iPi5OajBJZMJ1HORig89ljcOcEokKKAgGbg3QWxSXel7JwHOfDFUdDHAKyUAMw==} peerDependencies: @@ -2294,6 +2662,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + opentype.js@0.8.0: + resolution: {integrity: sha512-FQHR4oGP+a0m/f6yHoRpBOIbn/5ZWxKd4D/djHVJu8+KpBTYrJda0b7mLcgDEMWXE9xBCJm+qb0yv6FcvPjukg==} + hasBin: true + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2430,6 +2802,10 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + promise-stream-reader@1.0.1: + resolution: {integrity: sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==} + engines: {node: '>8.0.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -2812,6 +3188,10 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -2987,6 +3367,9 @@ packages: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} engines: {node: '>=12.22'} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -3005,6 +3388,10 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + trzsz@1.1.5: + resolution: {integrity: sha512-yjL25MBVp7TPnUJZ3aqMAmsUo0fECm96BYllLac0CbsgYT/JpKIi9Fv7wJmBfBwYGn2xf7b/YRVrCmkhed3Nmw==} + hasBin: true + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -3135,6 +3522,34 @@ packages: terser: optional: true + vite@5.3.1: + resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -3203,6 +3618,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.4.2: resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} @@ -3212,6 +3630,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zmodem.js@0.1.10: + resolution: {integrity: sha512-Z1DWngunZ/j3BmIzSJpFZVNV73iHkj89rxXX4IciJdU9ga3nZ7rJ5LkfjV/QDsKhc7bazDWTTJCLJ+iRXD82dw==} + zustand@4.5.4: resolution: {integrity: sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==} engines: {node: '>=12.7.0'} @@ -3293,7 +3714,7 @@ snapshots: '@babel/traverse': 7.24.5 '@babel/types': 7.24.5 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3412,7 +3833,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/parser': 7.24.5 '@babel/types': 7.24.7 - debug: 4.3.4 + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3583,7 +4004,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -3599,7 +4020,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3878,6 +4299,10 @@ snapshots: dependencies: '@babel/types': 7.24.7 + '@types/debug@4.1.12': + dependencies: + '@types/ms': 0.7.34 + '@types/eslint@8.56.10': dependencies: '@types/estree': 1.0.5 @@ -3885,10 +4310,18 @@ snapshots: '@types/estree@1.0.5': {} + '@types/file-saver@2.0.7': {} + '@types/json-schema@7.0.15': {} + '@types/lodash.isempty@4.4.9': + dependencies: + '@types/lodash': 4.17.1 + '@types/lodash@4.17.1': {} + '@types/ms@0.7.34': {} + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 @@ -3904,6 +4337,11 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/react@18.3.3': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + '@types/semver@7.5.8': {} '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': @@ -3913,7 +4351,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3925,6 +4363,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.14.1 + '@typescript-eslint/type-utils': 7.14.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.14.1 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 @@ -3933,7 +4389,7 @@ snapshots: '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -3950,7 +4406,20 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.5 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 7.14.1 + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.14.1 + debug: 4.3.5 eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 @@ -3963,7 +4432,7 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 @@ -3975,6 +4444,11 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/scope-manager@7.14.1': + dependencies: + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/visitor-keys': 7.14.1 + '@typescript-eslint/scope-manager@7.8.0': dependencies: '@typescript-eslint/types': 7.8.0 @@ -3984,7 +4458,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 tsutils: 3.21.0(typescript@5.4.5) optionalDependencies: @@ -3992,11 +4466,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@7.14.1(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.4.5) + '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.5 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -4006,13 +4492,15 @@ snapshots: '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types@7.14.1': {} + '@typescript-eslint/types@7.8.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 @@ -4022,11 +4510,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@7.14.1(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/visitor-keys': 7.14.1 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4 + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -4052,6 +4555,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@7.14.1(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 7.14.1 + '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -4071,6 +4585,11 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@7.14.1': + dependencies: + '@typescript-eslint/types': 7.14.1 + eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@7.8.0': dependencies: '@typescript-eslint/types': 7.8.0 @@ -4094,12 +4613,85 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.3.1(vite@5.3.1(@types/node@20.12.11)(less@4.2.0))': + dependencies: + '@babel/core': 7.24.5 + '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.3.1(@types/node@20.12.11)(less@4.2.0) + transitivePeerDependencies: + - supports-color + + '@xterm/addon-attach@0.11.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-canvas@0.7.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-clipboard@0.1.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + js-base64: 3.7.7 + + '@xterm/addon-fit@0.10.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-image@0.8.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-ligatures@0.9.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + font-finder: 1.1.0 + font-ligatures: 1.4.1 + + '@xterm/addon-search@0.15.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-serialize@0.13.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-unicode11@0.8.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-web-links@0.11.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/addon-webgl@0.18.0(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@xterm/xterm@5.5.0': {} + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 acorn@8.11.3: {} + ahooks@3.8.0(react@18.3.1): + dependencies: + '@babel/runtime': 7.24.5 + dayjs: 1.11.11 + intersection-observer: 0.12.2 + js-cookie: 2.2.1 + lodash: 4.17.21 + react: 18.3.1 + react-fast-compare: 3.2.2 + resize-observer-polyfill: 1.5.1 + screenfull: 5.2.0 + tslib: 2.6.2 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4274,9 +4866,9 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@1.6.8: + axios@1.6.8(debug@4.3.5): dependencies: - follow-redirects: 1.15.6 + follow-redirects: 1.15.6(debug@4.3.5) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -4416,6 +5008,8 @@ snapshots: optionalDependencies: typescript: 5.4.5 + crc-32@1.2.2: {} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -4446,7 +5040,7 @@ snapshots: dayjs@1.11.11: {} - debug@4.3.4: + debug@4.3.5: dependencies: ms: 2.1.2 @@ -4739,7 +5333,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4841,6 +5435,8 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-saver@2.0.5: {} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -4862,7 +5458,20 @@ snapshots: flatted@3.3.1: {} - follow-redirects@1.15.6: {} + follow-redirects@1.15.6(debug@4.3.5): + optionalDependencies: + debug: 4.3.5 + + font-finder@1.1.0: + dependencies: + get-system-fonts: 2.0.2 + promise-stream-reader: 1.0.1 + + font-ligatures@1.4.1: + dependencies: + font-finder: 1.1.0 + lru-cache: 6.0.0 + opentype.js: 0.8.0 for-each@0.3.3: dependencies: @@ -4919,6 +5528,8 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 + get-system-fonts@2.0.2: {} + get-tsconfig@4.7.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -5043,6 +5654,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.0.6 + intersection-observer@0.12.2: {} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -5181,6 +5794,10 @@ snapshots: joycon@3.1.1: {} + js-base64@3.7.7: {} + + js-cookie@2.2.1: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -5245,7 +5862,7 @@ snapshots: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.4 + debug: 4.3.5 execa: 8.0.1 lilconfig: 3.1.1 listr2: 8.2.3 @@ -5271,6 +5888,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.isempty@4.4.0: {} + lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} @@ -5299,6 +5918,10 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + lucide-react@0.368.0(react@18.3.1): dependencies: react: 18.3.1 @@ -5472,6 +6095,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + opentype.js@0.8.0: + dependencies: + tiny-inflate: 1.0.3 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5581,6 +6208,8 @@ snapshots: prettier@2.8.8: {} + promise-stream-reader@1.0.1: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -6074,6 +6703,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + screenfull@5.2.0: {} + scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.0 @@ -6285,6 +6916,8 @@ snapshots: throttle-debounce@5.0.0: {} + tiny-inflate@1.0.3: {} + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -6299,6 +6932,8 @@ snapshots: tree-kill@1.2.2: {} + trzsz@1.1.5: {} + ts-api-utils@1.3.0(typescript@5.4.5): dependencies: typescript: 5.4.5 @@ -6314,7 +6949,7 @@ snapshots: bundle-require: 4.2.1(esbuild@0.21.5) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.4 + debug: 4.3.5 esbuild: 0.21.5 execa: 5.1.1 globby: 11.1.0 @@ -6430,6 +7065,16 @@ snapshots: fsevents: 2.3.3 less: 4.2.0 + vite@5.3.1(@types/node@20.12.11)(less@4.2.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + '@types/node': 20.12.11 + fsevents: 2.3.3 + less: 4.2.0 + void-elements@3.1.0: {} vscode-jsonrpc@8.2.0: {} @@ -6519,10 +7164,16 @@ snapshots: yallist@3.1.1: {} + yallist@4.0.0: {} + yaml@2.4.2: {} yocto-queue@0.1.0: {} + zmodem.js@0.1.10(patch_hash=hu5xjluf4ypxmwfl72cvrgotsq): + dependencies: + crc-32: 1.2.2 + zustand@4.5.4(@types/react@18.3.1)(react@18.3.1): dependencies: use-sync-external-store: 1.2.0(react@18.3.1) From 8b1e9fdff521fd0a066b63d4cfbe4e6bda5011f1 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Mon, 1 Jul 2024 12:16:38 +0800 Subject: [PATCH 5/9] feat: add turborepo to manage monorepo Signed-off-by: warjiang <1096409085@qq.com> --- .gitignore | 1 + ui/package.json | 9 ++++--- ui/pnpm-lock.yaml | 64 +++++++++++++++++++++++++++++++++++++++++++++++ ui/turbo.json | 14 +++++++++++ 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 ui/turbo.json diff --git a/.gitignore b/.gitignore index b135904e..ec8e39e1 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ _output # sub chart tgz charts/*/charts cmd/ops +.turbo diff --git a/ui/package.json b/ui/package.json index dee32319..118bc0e3 100644 --- a/ui/package.json +++ b/ui/package.json @@ -4,8 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "dashboard:dev": "cd apps/dashboard && pnpm run dev", - "dashboard:build": "cd apps/dashboard && pnpm run build", + "dashboard:dev": "turbo dev --filter @karmada/dashboard", + "demos:dev": "turbo dev --filter @karmada/demos", + "dashboard:build": "turbo build --filter @karmada/dashboard", "prepare": "cd .. && husky install ui/.husky" }, "engines": { @@ -24,11 +25,13 @@ "husky": "^8.0.0", "lint-staged": "^15.2.7", "tsup": "^8.1.0", - "tsx": "^4.15.6" + "tsx": "^4.15.6", + "turbo": "^2.0.6" }, "dependencies": { "dayjs": "^1.11.11" }, + "packageManager": "pnpm@9.1.2", "pnpm": { "patchedDependencies": { "zmodem.js@0.1.10": "patches/zmodem.js@0.1.10.patch" diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index da5054df..fe8b3d5f 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: tsx: specifier: ^4.15.6 version: 4.15.6 + turbo: + specifier: ^2.0.6 + version: 2.0.6 apps/dashboard: dependencies: @@ -3437,6 +3440,40 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + turbo-darwin-64@2.0.6: + resolution: {integrity: sha512-XpgBwWj3Ggmz/gQVqXdMKXHC1iFPMDiuwugLwSzE7Ih0O13JuNtYZKhQnopvbDQnFQCeRq2Vsm5OTWabg/oB/g==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.0.6: + resolution: {integrity: sha512-RfeZYXIAkiA21E8lsvfptGTqz/256YD+eI1x37fedfvnHFWuIMFZGAOwJxtZc6QasQunDZ9TRRREbJNI68tkIw==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.0.6: + resolution: {integrity: sha512-92UDa0xNQQbx0HdSp9ag3YSS3xPdavhc7q9q9mxIAcqyjjD6VElA4Y85m4F/DDGE5SolCrvBz2sQhVmkOd6Caw==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.0.6: + resolution: {integrity: sha512-eQKu6utCVUkIH2kqOzD8OS6E0ba6COjWm6PRDTNCHQRljZW503ycaTUIdMOiJrVg1MkEjDyOReUg8s8D18aJ4Q==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.0.6: + resolution: {integrity: sha512-+9u4EPrpoeHYCQ46dRcou9kbkSoelhOelHNcbs2d86D6ruYD/oIAHK9qgYK8LeARRz0jxhZIA/dWYdYsxJJWkw==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.0.6: + resolution: {integrity: sha512-rdrKL+p+EjtdDVg0wQ/7yTbzkIYrnb0Pw4IKcjsy3M0RqUM9UcEi67b94XOAyTa5a0GqJL1+tUj2ebsFGPgZbg==} + cpu: [arm64] + os: [win32] + + turbo@2.0.6: + resolution: {integrity: sha512-/Ftmxd5Mq//a9yMonvmwENNUN65jOVTwhhBPQjEtNZutYT9YKyzydFGLyVM1nzhpLWahQSMamRc/RDBv5EapzA==} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6979,6 +7016,33 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + turbo-darwin-64@2.0.6: + optional: true + + turbo-darwin-arm64@2.0.6: + optional: true + + turbo-linux-64@2.0.6: + optional: true + + turbo-linux-arm64@2.0.6: + optional: true + + turbo-windows-64@2.0.6: + optional: true + + turbo-windows-arm64@2.0.6: + optional: true + + turbo@2.0.6: + optionalDependencies: + turbo-darwin-64: 2.0.6 + turbo-darwin-arm64: 2.0.6 + turbo-linux-64: 2.0.6 + turbo-linux-arm64: 2.0.6 + turbo-windows-64: 2.0.6 + turbo-windows-arm64: 2.0.6 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 diff --git a/ui/turbo.json b/ui/turbo.json new file mode 100644 index 00000000..73115b5c --- /dev/null +++ b/ui/turbo.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**"] + }, + "dev": { + "persistent": true, + "cache": false, + "dependsOn": ["^build"] + } + } +} \ No newline at end of file From 6f263c52cbc62593265b62d9913b40f542966023 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Mon, 1 Jul 2024 12:26:23 +0800 Subject: [PATCH 6/9] feat: add changeset & publish terminal package Signed-off-by: warjiang <1096409085@qq.com> --- ui/.changeset/README.md | 8 + ui/.changeset/config.json | 11 + ui/package.json | 1 + ui/packages/terminal/CHANGELOG.md | 10 + ui/packages/terminal/package.json | 2 +- ui/packages/xterm-addon-overlay/CHANGELOG.md | 8 + ui/packages/xterm-addon-overlay/package.json | 2 +- ui/packages/xterm-addon-zmodem/CHANGELOG.md | 7 + ui/packages/xterm-addon-zmodem/package.json | 2 +- ui/pnpm-lock.yaml | 603 ++++++++++++++++++- ui/turbo.json | 2 +- 11 files changed, 646 insertions(+), 10 deletions(-) create mode 100644 ui/.changeset/README.md create mode 100644 ui/.changeset/config.json create mode 100644 ui/packages/terminal/CHANGELOG.md create mode 100644 ui/packages/xterm-addon-overlay/CHANGELOG.md create mode 100644 ui/packages/xterm-addon-zmodem/CHANGELOG.md diff --git a/ui/.changeset/README.md b/ui/.changeset/README.md new file mode 100644 index 00000000..e5b6d8d6 --- /dev/null +++ b/ui/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/ui/.changeset/config.json b/ui/.changeset/config.json new file mode 100644 index 00000000..8639ae56 --- /dev/null +++ b/ui/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/ui/package.json b/ui/package.json index 118bc0e3..03c379b8 100644 --- a/ui/package.json +++ b/ui/package.json @@ -21,6 +21,7 @@ "author": "", "license": "ISC", "devDependencies": { + "@changesets/cli": "^2.27.6", "@types/node": "^20.12.11", "husky": "^8.0.0", "lint-staged": "^15.2.7", diff --git a/ui/packages/terminal/CHANGELOG.md b/ui/packages/terminal/CHANGELOG.md new file mode 100644 index 00000000..23d075b1 --- /dev/null +++ b/ui/packages/terminal/CHANGELOG.md @@ -0,0 +1,10 @@ +# @karmada/terminal + +## 1.0.1 + +### Patch Changes + +- add ttyd terminal +- Updated dependencies + - @karmada/xterm-addon-overlay@1.0.1 + - @karmada/xterm-addon-zmodem@1.0.1 diff --git a/ui/packages/terminal/package.json b/ui/packages/terminal/package.json index ec059363..c43e748e 100644 --- a/ui/packages/terminal/package.json +++ b/ui/packages/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@karmada/terminal", - "version": "1.0.0", + "version": "1.0.1", "publishConfig": { "access": "public" }, diff --git a/ui/packages/xterm-addon-overlay/CHANGELOG.md b/ui/packages/xterm-addon-overlay/CHANGELOG.md new file mode 100644 index 00000000..32c833da --- /dev/null +++ b/ui/packages/xterm-addon-overlay/CHANGELOG.md @@ -0,0 +1,8 @@ +# @karmada/xterm-addon-overlay + +## 1.0.1 + +### Patch Changes + +- update cjs&esm export for xterm-addon-overlay +- add ttyd terminal diff --git a/ui/packages/xterm-addon-overlay/package.json b/ui/packages/xterm-addon-overlay/package.json index 44142029..9a540b0b 100644 --- a/ui/packages/xterm-addon-overlay/package.json +++ b/ui/packages/xterm-addon-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@karmada/xterm-addon-overlay", - "version": "1.0.0", + "version": "1.0.1", "publishConfig": { "access": "public" }, diff --git a/ui/packages/xterm-addon-zmodem/CHANGELOG.md b/ui/packages/xterm-addon-zmodem/CHANGELOG.md new file mode 100644 index 00000000..a0f3b137 --- /dev/null +++ b/ui/packages/xterm-addon-zmodem/CHANGELOG.md @@ -0,0 +1,7 @@ +# @karmada/xterm-addon-zmodem + +## 1.0.1 + +### Patch Changes + +- update cjs&esm export for xterm-addon-zmodem diff --git a/ui/packages/xterm-addon-zmodem/package.json b/ui/packages/xterm-addon-zmodem/package.json index d49e9e94..9ebfcf53 100644 --- a/ui/packages/xterm-addon-zmodem/package.json +++ b/ui/packages/xterm-addon-zmodem/package.json @@ -1,6 +1,6 @@ { "name": "@karmada/xterm-addon-zmodem", - "version": "1.0.0", + "version": "1.0.1", "publishConfig": { "access": "public" }, diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index fe8b3d5f..2ddae2e2 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: specifier: ^1.11.11 version: 1.11.11 devDependencies: + '@changesets/cli': + specifier: ^2.27.6 + version: 2.27.6 '@types/node': specifier: ^20.12.11 version: 20.12.11 @@ -551,6 +554,61 @@ packages: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} + '@changesets/apply-release-plan@7.0.3': + resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==} + + '@changesets/assemble-release-plan@6.0.2': + resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/cli@2.27.6': + resolution: {integrity: sha512-PB7KS5JkCQ4WSXlnfThn8CXAHVwYxFdZvYTimhi12fls/tzj9iimUhKsYwkrKSbw1AiVlGCZtihj5Wkt6siIjA==} + hasBin: true + + '@changesets/config@3.0.1': + resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.1.0': + resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==} + + '@changesets/get-release-plan@4.0.2': + resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + + '@changesets/should-skip-package@0.1.0': + resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.1': + resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} + '@ctrl/tinycolor@3.6.1': resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} @@ -888,6 +946,12 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@monaco-editor/loader@1.4.0': resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==} peerDependencies: @@ -1178,6 +1242,9 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@20.12.11': resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} @@ -1470,6 +1537,10 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-escapes@6.2.1: resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} @@ -1510,6 +1581,9 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1571,6 +1645,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1635,10 +1713,17 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -1711,6 +1796,9 @@ packages: engines: {node: '>=0.8'} hasBin: true + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1762,6 +1850,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1798,6 +1890,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1935,6 +2031,11 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -1969,6 +2070,13 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2003,10 +2111,17 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2045,6 +2160,14 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2169,6 +2292,9 @@ packages: html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2185,6 +2311,10 @@ packages: i18next@23.11.4: resolution: {integrity: sha512-CCUjtd5TfaCl+mLUzAA0uPSN+AVn4fP/kWCYt/hocPUwusTpMVczdrRyOBUwk6N05iH40qiKx6q1DoNJtBIwdg==} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2330,6 +2460,10 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -2352,6 +2486,10 @@ packages: is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -2382,6 +2520,10 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2414,6 +2556,9 @@ packages: jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -2454,6 +2599,14 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -2467,6 +2620,9 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -2485,6 +2641,9 @@ packages: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2574,6 +2733,10 @@ packages: peerDependencies: monaco-editor: '>=0.36' + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2673,14 +2836,41 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2747,6 +2937,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -2792,6 +2986,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + preferred-pm@3.1.3: + resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} + engines: {node: '>=10'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2818,6 +3016,9 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3114,6 +3315,10 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3222,10 +3427,18 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -3268,6 +3481,12 @@ packages: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} @@ -3313,6 +3532,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -3356,6 +3579,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -3373,6 +3600,10 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -3509,6 +3740,10 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + update-browserslist-db@1.0.15: resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true @@ -3624,10 +3859,18 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3652,6 +3895,9 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -3887,6 +4133,162 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@changesets/apply-release-plan@7.0.3': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/config': 3.0.1 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.6.2 + + '@changesets/assemble-release-plan@6.0.2': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.6.2 + + '@changesets/changelog-git@0.2.0': + dependencies: + '@changesets/types': 6.0.0 + + '@changesets/cli@2.27.6': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/apply-release-plan': 7.0.3 + '@changesets/assemble-release-plan': 6.0.2 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/get-release-plan': 4.0.2 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.1 + '@manypkg/get-packages': 1.1.3 + '@types/semver': 7.5.8 + ansi-colors: 4.1.3 + chalk: 2.4.2 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + mri: 1.2.0 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.1.3 + resolve-from: 5.0.0 + semver: 7.6.2 + spawndamnit: 2.0.0 + term-size: 2.2.1 + + '@changesets/config@3.0.1': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.7 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.0': + dependencies: + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.6.2 + + '@changesets/get-release-plan@4.0.2': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/assemble-release-plan': 6.0.2 + '@changesets/config': 3.0.1 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.0': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.7 + spawndamnit: 2.0.0 + + '@changesets/logger@0.1.0': + dependencies: + chalk: 2.4.2 + + '@changesets/parse@0.4.0': + dependencies: + '@changesets/types': 6.0.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.0': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.0': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + + '@changesets/should-skip-package@0.1.0': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.1': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/types': 6.0.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + '@ctrl/tinycolor@3.6.1': {} '@emotion/hash@0.8.0': {} @@ -4092,6 +4494,22 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.24.5 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.24.5 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + '@monaco-editor/loader@1.4.0(monaco-editor@0.48.0)': dependencies: monaco-editor: 0.48.0 @@ -4359,6 +4777,8 @@ snapshots: '@types/ms@0.7.34': {} + '@types/node@12.20.55': {} + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 @@ -4736,6 +5156,8 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ansi-colors@4.1.3: {} + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -4818,6 +5240,10 @@ snapshots: arg@5.0.2: {} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} array-buffer-byte-length@1.0.1: @@ -4913,6 +5339,10 @@ snapshots: balanced-match@1.0.2: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + binary-extensions@2.3.0: {} brace-expansion@1.1.11: @@ -4975,6 +5405,8 @@ snapshots: chalk@5.3.0: {} + chardet@0.7.0: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -4987,6 +5419,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + ci-info@3.9.0: {} + classnames@2.5.1: {} cli-cursor@4.0.0: @@ -5047,6 +5481,12 @@ snapshots: crc-32@1.2.2: {} + cross-spawn@5.1.0: + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -5097,6 +5537,8 @@ snapshots: delayed-stream@1.0.0: {} + detect-indent@6.1.0: {} + didyoumean@1.2.2: {} dir-glob@3.0.1: @@ -5128,6 +5570,11 @@ snapshots: emoji-regex@9.2.2: {} + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + entities@4.5.0: {} errno@0.1.8: @@ -5406,6 +5853,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.5.0: dependencies: estraverse: 5.3.0 @@ -5448,6 +5897,14 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + extendable-error@0.1.7: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -5482,11 +5939,21 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + find-yarn-workspace-root2@1.2.16: + dependencies: + micromatch: 4.0.7 + pkg-dir: 4.2.0 + flat-cache@3.2.0: dependencies: flatted: 3.3.1 @@ -5527,6 +5994,18 @@ snapshots: fraction.js@4.3.7: {} + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -5620,8 +6099,7 @@ snapshots: dependencies: get-intrinsic: 1.2.4 - graceful-fs@4.2.11: - optional: true + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -5651,6 +6129,8 @@ snapshots: dependencies: void-elements: 3.1.0 + human-id@1.0.2: {} + human-signals@2.1.0: {} human-signals@5.0.0: {} @@ -5661,6 +6141,10 @@ snapshots: dependencies: '@babel/runtime': 7.24.5 + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -5788,6 +6272,10 @@ snapshots: dependencies: has-tostringtag: 1.0.2 + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 @@ -5809,6 +6297,8 @@ snapshots: is-what@3.14.1: {} + is-windows@1.0.2: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -5837,6 +6327,11 @@ snapshots: js-tokens@4.0.0: {} + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -5859,6 +6354,10 @@ snapshots: jsonc-parser@3.2.1: {} + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -5921,6 +6420,17 @@ snapshots: load-tsconfig@0.2.5: {} + load-yaml-file@0.2.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -5931,6 +6441,8 @@ snapshots: lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} + lodash@4.17.21: {} log-update@6.0.0: @@ -5951,6 +6463,11 @@ snapshots: lru-cache@10.2.2: {} + lru-cache@4.1.5: + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -6041,6 +6558,8 @@ snapshots: vscode-uri: 3.0.8 yaml: 2.4.2 + mri@1.2.0: {} + ms@2.1.2: {} mz@2.7.0: @@ -6145,14 +6664,34 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + os-tmpdir@1.0.2: {} + + outdent@0.5.0: {} + + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-map@2.1.0: {} + + p-try@2.2.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -6193,11 +6732,14 @@ snapshots: pify@2.3.0: {} - pify@4.0.1: - optional: true + pify@4.0.1: {} pirates@4.0.6: {} + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + possible-typed-array-names@1.0.0: {} postcss-import@15.1.0(postcss@8.4.38): @@ -6237,6 +6779,13 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + preferred-pm@3.1.3: + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -6258,6 +6807,8 @@ snapshots: prr@1.0.1: optional: true + pseudomap@1.0.2: {} + punycode@2.3.1: {} qrcode.react@3.1.0(react@18.3.1): @@ -6635,6 +7186,13 @@ snapshots: dependencies: pify: 2.3.0 + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -6730,8 +7288,7 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 - safer-buffer@2.1.2: - optional: true + safer-buffer@2.1.2: {} sax@1.3.0: optional: true @@ -6771,10 +7328,16 @@ snapshots: shallowequal@1.1.0: {} + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 + shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} side-channel@1.0.6: @@ -6814,6 +7377,13 @@ snapshots: dependencies: whatwg-url: 7.1.0 + spawndamnit@2.0.0: + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + + sprintf-js@1.0.3: {} + state-local@1.0.7: {} string-argv@0.3.2: {} @@ -6880,6 +7450,8 @@ snapshots: dependencies: ansi-regex: 6.0.1 + strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -6941,6 +7513,8 @@ snapshots: transitivePeerDependencies: - ts-node + term-size@2.2.1: {} + text-table@0.2.0: {} thenify-all@1.6.0: @@ -6955,6 +7529,10 @@ snapshots: tiny-inflate@1.0.3: {} + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + to-fast-properties@2.0.0: {} to-regex-range@5.0.1: @@ -7092,6 +7670,8 @@ snapshots: undici-types@5.26.5: {} + universalify@0.1.2: {} + update-browserslist-db@1.0.15(browserslist@4.23.0): dependencies: browserslist: 4.23.0 @@ -7192,6 +7772,11 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 + which-pm@2.0.0: + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -7200,6 +7785,10 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -7226,6 +7815,8 @@ snapshots: wrappy@1.0.2: {} + yallist@2.1.2: {} + yallist@3.1.1: {} yallist@4.0.0: {} diff --git a/ui/turbo.json b/ui/turbo.json index 73115b5c..1965bc4d 100644 --- a/ui/turbo.json +++ b/ui/turbo.json @@ -11,4 +11,4 @@ "dependsOn": ["^build"] } } -} \ No newline at end of file +} From 085c13001f8a4a9c988590f711738240db97b6ce Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Tue, 2 Jul 2024 10:42:13 +0800 Subject: [PATCH 7/9] feat: add container terminal for k8s pod Signed-off-by: warjiang <1096409085@qq.com> --- ui/package.json | 1 + ui/packages/terminal/package.json | 6 +- ui/packages/terminal/src/base.ts | 18 +++ ui/packages/terminal/src/container.ts | 159 ++++++++++++++++++++++++++ ui/packages/terminal/src/index.tsx | 2 + ui/packages/terminal/tsconfig.json | 2 +- ui/packages/terminal/typings.d.ts | 5 + ui/pnpm-lock.yaml | 146 +++++++++++++++++++++++ 8 files changed, 336 insertions(+), 3 deletions(-) create mode 100644 ui/packages/terminal/src/container.ts create mode 100644 ui/packages/terminal/typings.d.ts diff --git a/ui/package.json b/ui/package.json index 03c379b8..321841e5 100644 --- a/ui/package.json +++ b/ui/package.json @@ -30,6 +30,7 @@ "turbo": "^2.0.6" }, "dependencies": { + "@karmada/terminal": "^1.0.1", "dayjs": "^1.11.11" }, "packageManager": "pnpm@9.1.2", diff --git a/ui/packages/terminal/package.json b/ui/packages/terminal/package.json index c43e748e..44806879 100644 --- a/ui/packages/terminal/package.json +++ b/ui/packages/terminal/package.json @@ -41,13 +41,15 @@ "@xterm/addon-webgl": "^0.18.0", "@xterm/xterm": "^5.0.0", "debug": "^4.3.5", - "lodash.isempty": "^4.4.0" + "lodash.isempty": "^4.4.0", + "sockjs-client": "^1.6.1" }, "devDependencies": { "@types/debug": "^4.1.12", "@types/lodash.isempty": "^4.4.9", "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0" + "@types/react-dom": "^18.3.0", + "@types/sockjs-client": "^1.5.4" }, "peerDependencies": { "react": "^18", diff --git a/ui/packages/terminal/src/base.ts b/ui/packages/terminal/src/base.ts index 8da77c12..64f3b49b 100644 --- a/ui/packages/terminal/src/base.ts +++ b/ui/packages/terminal/src/base.ts @@ -151,6 +151,11 @@ class BaseTerminal implements IDisposable { } }; + /** + * write support write a bunch of data into terminal, it will split input data + * by '\n' and iterate the return lines by writing line to the terminal + * @param data + */ public write = (data: string) => { if (isEmpty(data)) return; data.split('\n').map((line) => { @@ -158,6 +163,12 @@ class BaseTerminal implements IDisposable { }); }; + /** + * open method is used to initialize the BaseTerminal instance, inside the open + * method, we will pass the containerElement to initialize the xterm, loading build-in + * addons and init esssential listeners for the xterm + * @param containerElement dom element which is used to initialize Terminal + */ public open = (containerElement: HTMLElement) => { if (this.isXtermOpened) return; log('execute open method'); @@ -185,6 +196,13 @@ class BaseTerminal implements IDisposable { terminal.fit(); this.isXtermOpened = true; }; + + /** + * return the terminal object for some special use-cases + */ + public getTerminal = () => { + return this.terminal; + }; } export default BaseTerminal; diff --git a/ui/packages/terminal/src/container.ts b/ui/packages/terminal/src/container.ts new file mode 100644 index 00000000..289e77d8 --- /dev/null +++ b/ui/packages/terminal/src/container.ts @@ -0,0 +1,159 @@ +import SockJS from 'sockjs-client/dist/sockjs'; +import BaseTerminal from './base.ts'; +import { BaseTerminalOptions } from './typing'; +import { getDebugger } from './utils.ts'; + +interface ContainerTerminalOptions { + namespace: string; + pod: string; + container: string; + sessionIdUrl: string; +} + +export interface SockJSSimpleEvent { + type: string; + + toString(): string; +} + +export interface SJSCloseEvent extends SockJSSimpleEvent { + code: number; + reason: string; + wasClean: boolean; +} + +export interface SJSMessageEvent extends SockJSSimpleEvent { + data: string; +} + +export interface ShellFrame { + Op: string; + Data?: string; + SessionID?: string; + Rows?: number; + Cols?: number; +} + +const log = getDebugger('ContainerTerminal'); + +class ContainerTerminal extends BaseTerminal { + private containerOptions: ContainerTerminalOptions; + private sessionId!: string; + private socket!: WebSocket; + private connected: boolean = false; + private connecting: boolean = false; + // @ts-ignore + private connectionClosed: boolean = true; + + constructor( + options: BaseTerminalOptions, + containerOptions: ContainerTerminalOptions, + ) { + super(options); + this.containerOptions = containerOptions; + } + + public getSessionId = async () => { + try { + const url = this.containerOptions.sessionIdUrl; + const replacedUrl = url + .replace('{{namespace}}', this.containerOptions.namespace) + .replace('{{pod}}', this.containerOptions.pod) + .replace('{{container}}', this.containerOptions.container); + log(`request url: ${replacedUrl}`); + const resp = await fetch(replacedUrl); + if (resp.ok) { + const json = await resp.json(); + this.sessionId = json.data.id; + } + } catch (e) { + log(`[ttyd] fetch ${this.containerOptions.sessionIdUrl}: `, e); + } + }; + + private initContainerListeners = () => { + const { terminal } = this; + this.register( + terminal.onData(this.onTerminalSendString.bind(this)), + terminal.onResize(this.onTerminalResize.bind(this)), + ); + }; + + public connect = () => { + if (this.connected || this.connecting) return; + this.connecting = true; + this.connectionClosed = false; + + this.socket = new SockJS(`/api/sockjs?${this.sessionId}`); + const { socket } = this; + socket.onopen = this.onConnectionOpen.bind(this, this.sessionId); + socket.onmessage = this.onConnectionMessage.bind(this); + socket.onclose = this.onConnectionClose.bind(this); + }; + + private onConnectionOpen = (sessionId: string) => { + const startData = { Op: 'bind', SessionID: sessionId }; + this.socket.send(JSON.stringify(startData)); + this.connected = true; + this.connecting = false; + this.connectionClosed = false; + + // Make sure the terminal is with correct display size. + this.onTerminalResize(); + + this.initContainerListeners(); + + // Focus on connection + this.terminal.focus(); + }; + + private onConnectionMessage = (evt: SJSMessageEvent) => { + const msg = JSON.parse(evt.data); + this.handleConnectionMessage(msg); + }; + + private handleConnectionMessage = (frame: ShellFrame) => { + if (frame.Op === 'stdout') { + this.terminal.write(frame.Data || ''); + } + if (frame.Op === 'toast') { + } + }; + + private onConnectionClose = (_evt?: SJSCloseEvent) => { + if (!this.connected) { + return; + } + this.socket.close(); + this.connected = false; + this.connecting = false; + this.connectionClosed = true; + }; + + private onTerminalResize(): void { + if (this.connected) { + this.socket.send( + JSON.stringify({ + Op: 'resize', + Cols: this.terminal.cols, + Rows: this.terminal.rows, + }), + ); + } + } + + private onTerminalSendString = (str: string) => { + if (this.connected) { + this.socket.send( + JSON.stringify({ + Op: 'stdin', + Data: str, + Cols: this.terminal.cols, + Rows: this.terminal.rows, + }), + ); + } + }; +} + +export default ContainerTerminal; diff --git a/ui/packages/terminal/src/index.tsx b/ui/packages/terminal/src/index.tsx index 169dd42b..a6c3bb00 100644 --- a/ui/packages/terminal/src/index.tsx +++ b/ui/packages/terminal/src/index.tsx @@ -7,5 +7,7 @@ export const TerminalContext = createContext<{ }>({ terminal: null, }); +export { default as ContainerTerminal } from './container'; export { default as TtydTerminal } from './ttyd'; export { default as BaseTerminal } from './base'; +export * from '@xterm/xterm'; diff --git a/ui/packages/terminal/tsconfig.json b/ui/packages/terminal/tsconfig.json index a7fc6fbf..9253b79c 100644 --- a/ui/packages/terminal/tsconfig.json +++ b/ui/packages/terminal/tsconfig.json @@ -20,6 +20,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, - "include": ["src"], + "include": ["src", "typings.d.ts"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/ui/packages/terminal/typings.d.ts b/ui/packages/terminal/typings.d.ts new file mode 100644 index 00000000..c5ee28a2 --- /dev/null +++ b/ui/packages/terminal/typings.d.ts @@ -0,0 +1,5 @@ +declare module 'sockjs-client/dist/sockjs' { + import SockJS from '@types/sockjs-client'; + export = SockJS; + export as namespace SockJS; +} diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 2ddae2e2..827cb10e 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -13,6 +13,9 @@ importers: .: dependencies: + '@karmada/terminal': + specifier: ^1.0.1 + version: 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dayjs: specifier: ^1.11.11 version: 1.11.11 @@ -354,6 +357,9 @@ importers: react-dom: specifier: ^18 version: 18.3.1(react@18.3.1) + sockjs-client: + specifier: ^1.6.1 + version: 1.6.1 devDependencies: '@types/debug': specifier: ^4.1.12 @@ -367,6 +373,9 @@ importers: '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 + '@types/sockjs-client': + specifier: ^1.5.4 + version: 1.5.4 packages/xterm-addon-overlay: dependencies: @@ -946,6 +955,22 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@karmada/terminal@1.0.1': + resolution: {integrity: sha512-mD67K0QY0xxR9PIwE49cc9kYVUCMFuGo/7/m6n4paDdDWZzP+slk9aJ1lgP086vgvf1odmjIj/HD0IMgKGQ0LA==} + peerDependencies: + react: ^18 + react-dom: ^18 + + '@karmada/xterm-addon-overlay@1.0.1': + resolution: {integrity: sha512-LyrzzNzAW4eQEaGXG6dAY6cKsBKG7MeuDkr0xCGio+i0g/AmNX52VV2BLk10MTjYT57/xw4Z9j+kT6+ASybECA==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + + '@karmada/xterm-addon-zmodem@1.0.1': + resolution: {integrity: sha512-GMblSSFJCZaR3lUjDWpF7sxipzngrfm8uWsF2ut/xeDMZ/SVkVxMDigdfTYM1M3PkZjoMigPE/T0YzNKMH3V/Q==} + peerDependencies: + '@xterm/xterm': ^5.0.0 + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -1263,6 +1288,9 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/sockjs-client@1.5.4': + resolution: {integrity: sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==} + '@typescript-eslint/eslint-plugin@5.62.0': resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1826,6 +1854,14 @@ packages: dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.5: resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} @@ -2062,6 +2098,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventsource@2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2096,6 +2136,10 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2292,6 +2336,9 @@ packages: html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} @@ -3028,6 +3075,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3334,6 +3384,9 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} @@ -3383,6 +3436,9 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -3469,6 +3525,10 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + sockjs-client@1.6.1: + resolution: {integrity: sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==} + engines: {node: '>=12'} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -3753,6 +3813,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -3845,6 +3908,14 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -4494,6 +4565,38 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@karmada/terminal@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@karmada/xterm-addon-overlay': 1.0.1(@xterm/xterm@5.5.0) + '@karmada/xterm-addon-zmodem': 1.0.1(@xterm/xterm@5.5.0) + '@xterm/addon-canvas': 0.7.0(@xterm/xterm@5.5.0) + '@xterm/addon-clipboard': 0.1.0(@xterm/xterm@5.5.0) + '@xterm/addon-fit': 0.10.0(@xterm/xterm@5.5.0) + '@xterm/addon-ligatures': 0.9.0(@xterm/xterm@5.5.0) + '@xterm/addon-search': 0.15.0(@xterm/xterm@5.5.0) + '@xterm/addon-unicode11': 0.8.0(@xterm/xterm@5.5.0) + '@xterm/addon-web-links': 0.11.0(@xterm/xterm@5.5.0) + '@xterm/addon-webgl': 0.18.0(@xterm/xterm@5.5.0) + '@xterm/xterm': 5.5.0 + debug: 4.3.5 + lodash.isempty: 4.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - supports-color + + '@karmada/xterm-addon-overlay@1.0.1(@xterm/xterm@5.5.0)': + dependencies: + '@xterm/xterm': 5.5.0 + + '@karmada/xterm-addon-zmodem@1.0.1(@xterm/xterm@5.5.0)': + dependencies: + '@karmada/xterm-addon-zmodem': 'link:' + '@xterm/xterm': 5.5.0 + file-saver: 2.0.5 + trzsz: 1.1.5 + zmodem.js: 0.1.10(patch_hash=hu5xjluf4ypxmwfl72cvrgotsq) + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.24.5 @@ -4801,6 +4904,8 @@ snapshots: '@types/semver@7.5.8': {} + '@types/sockjs-client@1.5.4': {} + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 @@ -5517,6 +5622,10 @@ snapshots: dayjs@1.11.11: {} + debug@3.2.7: + dependencies: + ms: 2.1.2 + debug@4.3.5: dependencies: ms: 2.1.2 @@ -5873,6 +5982,8 @@ snapshots: eventemitter3@5.0.1: {} + eventsource@2.0.2: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -5925,6 +6036,10 @@ snapshots: dependencies: reusify: 1.0.4 + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -6129,6 +6244,8 @@ snapshots: dependencies: void-elements: 3.1.0 + http-parser-js@0.5.8: {} + human-id@1.0.2: {} human-signals@2.1.0: {} @@ -6815,6 +6932,8 @@ snapshots: dependencies: react: 18.3.1 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} rc-cascader@3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -7216,6 +7335,8 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + requires-port@1.0.0: {} + resize-observer-polyfill@1.5.1: {} resolve-from@4.0.0: {} @@ -7282,6 +7403,8 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -7368,6 +7491,16 @@ snapshots: dot-case: 3.0.4 tslib: 2.6.2 + sockjs-client@1.6.1: + dependencies: + debug: 3.2.7 + eventsource: 2.0.2 + faye-websocket: 0.11.4 + inherits: 2.0.4 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + source-map-js@1.2.0: {} source-map@0.6.1: @@ -7682,6 +7815,11 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + use-sync-external-store@1.2.0(react@18.3.1): dependencies: react: 18.3.1 @@ -7736,6 +7874,14 @@ snapshots: webidl-conversions@4.0.2: {} + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 From 3c73665c7170b36633dde101da2fc606b108ce9a Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Tue, 2 Jul 2024 10:44:10 +0800 Subject: [PATCH 8/9] chore(doc): update doc for karmada/terminal Signed-off-by: warjiang <1096409085@qq.com> --- ui/packages/terminal/CHANGELOG.md | 18 ++++++++++++++++++ ui/packages/terminal/package.json | 2 +- ui/packages/terminal/src/index.tsx | 10 +++++++++- ui/packages/terminal/src/ttyd.ts | 4 ++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ui/packages/terminal/CHANGELOG.md b/ui/packages/terminal/CHANGELOG.md index 23d075b1..ef3b97d7 100644 --- a/ui/packages/terminal/CHANGELOG.md +++ b/ui/packages/terminal/CHANGELOG.md @@ -1,5 +1,23 @@ # @karmada/terminal +## 1.0.4 + +### Patch Changes + +- update declare file for terminal + +## 1.0.3 + +### Major Changes + +- export typings of terminal + +## 1.0.2 + +### Patch Changes + +- add container terminal for k8s pod + ## 1.0.1 ### Patch Changes diff --git a/ui/packages/terminal/package.json b/ui/packages/terminal/package.json index 44806879..0ce6b5ab 100644 --- a/ui/packages/terminal/package.json +++ b/ui/packages/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@karmada/terminal", - "version": "1.0.1", + "version": "1.0.4", "publishConfig": { "access": "public" }, diff --git a/ui/packages/terminal/src/index.tsx b/ui/packages/terminal/src/index.tsx index a6c3bb00..b75a57c6 100644 --- a/ui/packages/terminal/src/index.tsx +++ b/ui/packages/terminal/src/index.tsx @@ -9,5 +9,13 @@ export const TerminalContext = createContext<{ }); export { default as ContainerTerminal } from './container'; export { default as TtydTerminal } from './ttyd'; +export type { FlowControl, Preferences, Command } from './ttyd'; export { default as BaseTerminal } from './base'; -export * from '@xterm/xterm'; +export type { ITerminalOptions, ITheme } from '@xterm/xterm'; +export type { + AddonType, + AddonInfo, + ClientOptions, + BaseTerminalOptions, + RendererType, +} from './typing.d.ts'; diff --git a/ui/packages/terminal/src/ttyd.ts b/ui/packages/terminal/src/ttyd.ts index 249507b8..547d3fd9 100644 --- a/ui/packages/terminal/src/ttyd.ts +++ b/ui/packages/terminal/src/ttyd.ts @@ -5,7 +5,7 @@ import { BaseTerminalOptions, ClientOptions } from './typing'; import OverlayAddon from '@karmada/xterm-addon-overlay'; import ZmodemAddon from '@karmada/xterm-addon-zmodem'; -type Preferences = ITerminalOptions & ClientOptions; +export type Preferences = ITerminalOptions & ClientOptions; const log = getDebugger('TtydTerminal'); @@ -21,7 +21,7 @@ export interface FlowControl { lowWater: number; } -enum Command { +export enum Command { // server side OUTPUT = '0', SET_WINDOW_TITLE = '1', From eb5e07ea28814d440fe9323f5923ad4967eed5a3 Mon Sep 17 00:00:00 2001 From: warjiang <1096409085@qq.com> Date: Mon, 8 Jul 2024 10:27:26 +0800 Subject: [PATCH 9/9] chore(ui): update pnpm lock Signed-off-by: warjiang <1096409085@qq.com> --- ui/package.json | 1 - ui/pnpm-lock.yaml | 245 ++++++++++++++++------------------------------ 2 files changed, 87 insertions(+), 159 deletions(-) diff --git a/ui/package.json b/ui/package.json index 321841e5..03c379b8 100644 --- a/ui/package.json +++ b/ui/package.json @@ -30,7 +30,6 @@ "turbo": "^2.0.6" }, "dependencies": { - "@karmada/terminal": "^1.0.1", "dayjs": "^1.11.11" }, "packageManager": "pnpm@9.1.2", diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 827cb10e..5bba70ff 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -13,9 +13,6 @@ importers: .: dependencies: - '@karmada/terminal': - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dayjs: specifier: ^1.11.11 version: 1.11.11 @@ -162,75 +159,90 @@ importers: '@karmada/terminal': specifier: workspace:* version: link:../../packages/terminal - '@xterm/addon-attach': - specifier: ^0.11.0 - version: 0.11.0(@xterm/xterm@5.5.0) - '@xterm/addon-canvas': - specifier: ^0.7.0 - version: 0.7.0(@xterm/xterm@5.5.0) - '@xterm/addon-clipboard': - specifier: ^0.1.0 - version: 0.1.0(@xterm/xterm@5.5.0) - '@xterm/addon-fit': - specifier: ^0.10.0 - version: 0.10.0(@xterm/xterm@5.5.0) - '@xterm/addon-image': - specifier: ^0.8.0 - version: 0.8.0(@xterm/xterm@5.5.0) - '@xterm/addon-ligatures': - specifier: ^0.9.0 - version: 0.9.0(@xterm/xterm@5.5.0) - '@xterm/addon-search': - specifier: ^0.15.0 - version: 0.15.0(@xterm/xterm@5.5.0) - '@xterm/addon-serialize': - specifier: ^0.13.0 - version: 0.13.0(@xterm/xterm@5.5.0) - '@xterm/addon-unicode11': - specifier: ^0.8.0 - version: 0.8.0(@xterm/xterm@5.5.0) - '@xterm/addon-web-links': - specifier: ^0.11.0 - version: 0.11.0(@xterm/xterm@5.5.0) - '@xterm/addon-webgl': - specifier: ^0.18.0 - version: 0.18.0(@xterm/xterm@5.5.0) - '@xterm/xterm': - specifier: ^5.5.0 - version: 5.5.0 + '@monaco-editor/react': + specifier: ^4.6.0 + version: 4.6.0(monaco-editor@0.48.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-query': + specifier: ^5.29.2 + version: 5.36.0(react@18.3.1) + '@uidotdev/usehooks': + specifier: ^2.4.1 + version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ahooks: specifier: ^3.8.0 version: 3.8.0(react@18.3.1) + antd: + specifier: ^5.17.3 + version: 5.17.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) axios: specifier: ^1.6.8 version: 1.6.8(debug@4.3.5) + clsx: + specifier: ^2.1.0 + version: 2.1.1 debug: specifier: ^4.3.5 version: 4.3.5 + i18next: + specifier: ^23.11.1 + version: 23.11.4 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + lucide-react: + specifier: ^0.368.0 + version: 0.368.0(react@18.3.1) + monaco-editor: + specifier: ^0.48.0 + version: 0.48.0 + monaco-yaml: + specifier: ^5.1.0 + version: 5.1.0(monaco-editor@0.48.0) react: - specifier: ^18.3.1 + specifier: ^18.2.0 version: 18.3.1 react-dom: - specifier: ^18.3.1 + specifier: ^18.2.0 version: 18.3.1(react@18.3.1) + react-helmet-async: + specifier: ^2.0.4 + version: 2.0.5(react@18.3.1) + react-i18next: + specifier: ^14.1.0 + version: 14.1.1(i18next@23.11.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: + specifier: ^6.22.3 + version: 6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwind-merge: + specifier: ^2.2.2 + version: 2.3.0 + yaml: + specifier: ^2.4.2 + version: 2.4.2 devDependencies: + '@karmada/eslint-config-ts-react': + specifier: workspace:* + version: link:../../packages/eslint-config-ts-react '@types/debug': specifier: ^4.1.12 version: 4.1.12 + '@types/lodash': + specifier: ^4.17.0 + version: 4.17.1 '@types/react': - specifier: ^18.3.3 + specifier: ^18.2.66 version: 18.3.3 '@types/react-dom': - specifier: ^18.3.0 + specifier: ^18.2.22 version: 18.3.0 '@typescript-eslint/eslint-plugin': - specifier: ^7.13.1 + specifier: ^7.2.0 version: 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.13.1 + specifier: ^7.2.0 version: 7.14.1(eslint@8.57.0)(typescript@5.4.5) '@vitejs/plugin-react': - specifier: ^4.3.1 + specifier: ^4.2.1 version: 4.3.1(vite@5.3.1(@types/node@20.12.11)(less@4.2.0)) autoprefixer: specifier: ^10.4.19 @@ -239,17 +251,29 @@ importers: specifier: ^8.57.0 version: 8.57.0 eslint-plugin-react-hooks: - specifier: ^4.6.2 + specifier: ^4.6.0 version: 4.6.2(eslint@8.57.0) eslint-plugin-react-refresh: - specifier: ^0.4.7 + specifier: ^0.4.6 version: 0.4.7(eslint@8.57.0) + less: + specifier: ^4.2.0 + version: 4.2.0 + postcss: + specifier: ^8.4.38 + version: 8.4.38 + tailwindcss: + specifier: ^3.4.3 + version: 3.4.3 typescript: specifier: ^5.2.2 version: 5.4.5 vite: - specifier: ^5.3.1 + specifier: ^5.2.0 version: 5.3.1(@types/node@20.12.11)(less@4.2.0) + vite-plugin-svgr: + specifier: ^4.2.0 + version: 4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.3.1(@types/node@20.12.11)(less@4.2.0)) packages/eslint-config-ts: dependencies: @@ -955,22 +979,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@karmada/terminal@1.0.1': - resolution: {integrity: sha512-mD67K0QY0xxR9PIwE49cc9kYVUCMFuGo/7/m6n4paDdDWZzP+slk9aJ1lgP086vgvf1odmjIj/HD0IMgKGQ0LA==} - peerDependencies: - react: ^18 - react-dom: ^18 - - '@karmada/xterm-addon-overlay@1.0.1': - resolution: {integrity: sha512-LyrzzNzAW4eQEaGXG6dAY6cKsBKG7MeuDkr0xCGio+i0g/AmNX52VV2BLk10MTjYT57/xw4Z9j+kT6+ASybECA==} - peerDependencies: - '@xterm/xterm': ^5.0.0 - - '@karmada/xterm-addon-zmodem@1.0.1': - resolution: {integrity: sha512-GMblSSFJCZaR3lUjDWpF7sxipzngrfm8uWsF2ut/xeDMZ/SVkVxMDigdfTYM1M3PkZjoMigPE/T0YzNKMH3V/Q==} - peerDependencies: - '@xterm/xterm': ^5.0.0 - '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -1487,11 +1495,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@xterm/addon-attach@0.11.0': - resolution: {integrity: sha512-JboCN0QAY6ZLY/SSB/Zl2cQ5zW1Eh4X3fH7BnuR1NB7xGRhzbqU2Npmpiw/3zFlxDaU88vtKzok44JKi2L2V2Q==} - peerDependencies: - '@xterm/xterm': ^5.0.0 - '@xterm/addon-canvas@0.7.0': resolution: {integrity: sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw==} peerDependencies: @@ -1507,11 +1510,6 @@ packages: peerDependencies: '@xterm/xterm': ^5.0.0 - '@xterm/addon-image@0.8.0': - resolution: {integrity: sha512-b/dqpFn3jUad2pUP5UpF4scPIh0WdxRQL/1qyiahGfUI85XZTCXo0py9G6AcOR2QYUw8eJ8EowGspT7BQcgw6A==} - peerDependencies: - '@xterm/xterm': ^5.2.0 - '@xterm/addon-ligatures@0.9.0': resolution: {integrity: sha512-zVV1AHV1SIm/rdzR5VDPyg+qUnR1SjH4H75iXiB7r6YDa1yEHIqc/EwnUIwz+yeeZozkh8hjbH80L7luEgtxtQ==} engines: {node: '>8.0.0'} @@ -1523,11 +1521,6 @@ packages: peerDependencies: '@xterm/xterm': ^5.0.0 - '@xterm/addon-serialize@0.13.0': - resolution: {integrity: sha512-kGs8o6LWAmN1l2NpMp01/YkpxbmO4UrfWybeGu79Khw5K9+Krp7XhXbBTOTc3GJRRhd6EmILjpR8k5+odY39YQ==} - peerDependencies: - '@xterm/xterm': ^5.0.0 - '@xterm/addon-unicode11@0.8.0': resolution: {integrity: sha512-LxinXu8SC4OmVa6FhgwsVCBZbr8WoSGzBl2+vqe8WcQ6hb1r6Gj9P99qTNdPiFPh4Ceiu2pC8xukZ6+2nnh49Q==} peerDependencies: @@ -1687,10 +1680,6 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2147,10 +2136,6 @@ packages: file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2714,10 +2699,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -2750,10 +2731,6 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.1: - resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -4565,38 +4542,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@karmada/terminal@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@karmada/xterm-addon-overlay': 1.0.1(@xterm/xterm@5.5.0) - '@karmada/xterm-addon-zmodem': 1.0.1(@xterm/xterm@5.5.0) - '@xterm/addon-canvas': 0.7.0(@xterm/xterm@5.5.0) - '@xterm/addon-clipboard': 0.1.0(@xterm/xterm@5.5.0) - '@xterm/addon-fit': 0.10.0(@xterm/xterm@5.5.0) - '@xterm/addon-ligatures': 0.9.0(@xterm/xterm@5.5.0) - '@xterm/addon-search': 0.15.0(@xterm/xterm@5.5.0) - '@xterm/addon-unicode11': 0.8.0(@xterm/xterm@5.5.0) - '@xterm/addon-web-links': 0.11.0(@xterm/xterm@5.5.0) - '@xterm/addon-webgl': 0.18.0(@xterm/xterm@5.5.0) - '@xterm/xterm': 5.5.0 - debug: 4.3.5 - lodash.isempty: 4.4.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - supports-color - - '@karmada/xterm-addon-overlay@1.0.1(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 - - '@karmada/xterm-addon-zmodem@1.0.1(@xterm/xterm@5.5.0)': - dependencies: - '@karmada/xterm-addon-zmodem': 'link:' - '@xterm/xterm': 5.5.0 - file-saver: 2.0.5 - trzsz: 1.1.5 - zmodem.js: 0.1.10(patch_hash=hu5xjluf4ypxmwfl72cvrgotsq) - '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.24.5 @@ -5186,10 +5131,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@xterm/addon-attach@0.11.0(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 - '@xterm/addon-canvas@0.7.0(@xterm/xterm@5.5.0)': dependencies: '@xterm/xterm': 5.5.0 @@ -5203,10 +5144,6 @@ snapshots: dependencies: '@xterm/xterm': 5.5.0 - '@xterm/addon-image@0.8.0(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 - '@xterm/addon-ligatures@0.9.0(@xterm/xterm@5.5.0)': dependencies: '@xterm/xterm': 5.5.0 @@ -5217,10 +5154,6 @@ snapshots: dependencies: '@xterm/xterm': 5.5.0 - '@xterm/addon-serialize@0.13.0(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 - '@xterm/addon-unicode11@0.8.0(@xterm/xterm@5.5.0)': dependencies: '@xterm/xterm': 5.5.0 @@ -5459,10 +5392,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -6026,7 +5955,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 fast-json-stable-stringify@2.1.0: {} @@ -6046,10 +5975,6 @@ snapshots: file-saver@2.0.5: {} - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6178,7 +6103,7 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.1.1 + minipass: 7.1.2 path-scurry: 1.11.1 glob@7.2.3: @@ -6607,11 +6532,6 @@ snapshots: merge2@1.4.1: {} - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -6638,8 +6558,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minipass@7.1.1: {} - minipass@7.1.2: {} monaco-editor@0.48.0: {} @@ -7631,7 +7549,7 @@ snapshots: is-glob: 4.0.3 jiti: 1.21.0 lilconfig: 2.1.0 - micromatch: 4.0.5 + micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 @@ -7837,6 +7755,17 @@ snapshots: - supports-color - typescript + vite-plugin-svgr@4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.3.1(@types/node@20.12.11)(less@4.2.0)): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@svgr/core': 8.1.0(typescript@5.4.5) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) + vite: 5.3.1(@types/node@20.12.11)(less@4.2.0) + transitivePeerDependencies: + - rollup + - supports-color + - typescript + vite@5.2.11(@types/node@20.12.11)(less@4.2.0): dependencies: esbuild: 0.20.2