diff --git a/package.json b/package.json index d8fe44a8..682854bd 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,9 @@ "lint": "jlpm run prettier && jlpm run eslint", "test": "lerna run test", "dev": "python scripts/dev-install.py", - "watch": "lerna run --stream watch" + "watch:lib": "lerna run --stream watch", + "watch": "lerna watch --scope @jupytercad/jupytercad-lab -- lerna run build --since", + "build:lab": "lerna run --ignore @jupytercad/jupytercad-app build" }, "resolutions": { "@jupyterlab/apputils": "~4.0.0", diff --git a/packages/base/package.json b/packages/base/package.json index 83d690d7..9b5dcf65 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -39,7 +39,6 @@ "@jupyter/collaboration": "^1.0.0", "@jupyter/docprovider": "^1.0.0", "@jupyter/ydoc": "^0.3.4 || ^1.0.2", - "@jupytercad/occ-worker": "^0.3.3", "@jupytercad/opencascade": "^0.3.3", "@jupytercad/schema": "^0.3.3", "@jupyterlab/application": "^4.0.0", diff --git a/packages/base/src/index.ts b/packages/base/src/index.ts index ee0e4f63..3124447c 100644 --- a/packages/base/src/index.ts +++ b/packages/base/src/index.ts @@ -28,7 +28,6 @@ export * from './commands'; export * from './formdialog'; export * from './mainview'; -export * from './token'; export * from './tools'; export * from './types'; export * from './widget'; diff --git a/packages/base/src/mainview.tsx b/packages/base/src/mainview.tsx index 7ed13354..25184d9f 100644 --- a/packages/base/src/mainview.tsx +++ b/packages/base/src/mainview.tsx @@ -11,6 +11,8 @@ import { IAnnotation, IDict, IJcadObjectDocChange, + IJCadWorker, + IJCadWorkerRegistry, IJupyterCadClientState, IJupyterCadDoc, IJupyterCadModel @@ -34,7 +36,6 @@ import { v4 as uuid } from 'uuid'; import { FloatingAnnotation } from './annotation/view'; import { getCSSVariableColor, throttle } from './tools'; import { AxeHelper, CameraSettings, ExplodedView } from './types'; -import { IJCadWorker, IJCadWorkerRegistry } from './token'; // Apply the BVH extension THREE.BufferGeometry.prototype.computeBoundsTree = computeBoundsTree; @@ -103,8 +104,13 @@ export class MainView extends React.Component { const lightTheme = document.body.getAttribute('data-jp-theme-light') === 'true'; + this._worker = props.workerRegistry?.getWorker(OCC_WORKER_ID); + + const id = this._worker!.initChannel(); + this._worker!.registerHandler(id, this.messageHandler.bind(this)); + this.state = { - id: uuid(), + id, lightTheme, loading: true, annotations: {}, @@ -112,19 +118,9 @@ export class MainView extends React.Component { }; this._model = this.props.jcadModel; - this._worker = props.workerRegistry?.getWorker(OCC_WORKER_ID); - console.log('worker is ', this._worker); this._pointer = new THREE.Vector2(); this._collaboratorPointers = {}; - this._messageChannel = new MessageChannel(); - this._messageChannel.port1.onmessage = msgEvent => { - this.messageHandler(msgEvent.data); - }; - this._postMessage( - { action: WorkerAction.REGISTER, payload: { id: this.state.id } }, - this._messageChannel.port2 - ); this._model.themeChanged.connect(this._handleThemeChange, this); this._model.sharedObjectsChanged.connect( @@ -397,8 +393,6 @@ export class MainView extends React.Component { break; } case MainAction.INITIALIZED: { - console.log('im here11'); - if (!this._model) { return; } @@ -701,17 +695,10 @@ export class MainView extends React.Component { this.setState(old => ({ ...old, loading: false })); }; - private _postMessage = ( - msg: Omit, - port?: MessagePort - ) => { + private _postMessage = (msg: Omit) => { if (this._worker) { const newMsg = { ...msg, id: this.state.id }; - if (port) { - this._worker.postMessage(newMsg, [port]); - } else { - this._worker.postMessage(newMsg); - } + this._worker.postMessage(newMsg); } }; @@ -921,11 +908,12 @@ export class MainView extends React.Component { }); }; - private _onSharedObjectsChanged( + private async _onSharedObjectsChanged( _: IJupyterCadDoc, change: IJcadObjectDocChange - ): void { + ): Promise { if (change.objectChange) { + await this._worker!.ready; this._postMessage({ action: WorkerAction.LOAD_FILE, payload: { diff --git a/packages/base/src/panelview/leftpanel.tsx b/packages/base/src/panelview/leftpanel.tsx index a3ec55b5..f345d3d9 100644 --- a/packages/base/src/panelview/leftpanel.tsx +++ b/packages/base/src/panelview/leftpanel.tsx @@ -1,7 +1,10 @@ -import { IAnnotationModel, JupyterCadDoc } from '@jupytercad/schema'; +import { + IAnnotationModel, + JupyterCadDoc, + IJupyterCadTracker +} from '@jupytercad/schema'; import { SidePanel } from '@jupyterlab/ui-components'; -import { IJupyterCadTracker } from '../token'; import { IControlPanelModel } from '../types'; import { Annotations } from './annotations'; import { ControlPanelHeader } from './header'; diff --git a/packages/base/src/panelview/model.ts b/packages/base/src/panelview/model.ts index 60a2180f..0740feed 100644 --- a/packages/base/src/panelview/model.ts +++ b/packages/base/src/panelview/model.ts @@ -1,8 +1,8 @@ import { IJupyterCadDoc, IJupyterCadModel } from '@jupytercad/schema'; import { ISignal } from '@lumino/signaling'; -import { IJupyterCadTracker } from '../token'; -import { IControlPanelModel, IJupyterCadWidget } from '../types'; +import { IJupyterCadTracker, IJupyterCadWidget } from '@jupytercad/schema'; +import { IControlPanelModel } from '../types'; export class ControlPanelModel implements IControlPanelModel { constructor(options: ControlPanelModel.IOptions) { diff --git a/packages/base/src/token.ts b/packages/base/src/token.ts deleted file mode 100644 index b7a782d6..00000000 --- a/packages/base/src/token.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { IAnnotationModel } from '@jupytercad/schema'; -import { IWidgetTracker } from '@jupyterlab/apputils'; -import { Token } from '@lumino/coreutils'; - -import { IJupyterCadWidget } from './types'; - -export type IJupyterCadTracker = IWidgetTracker; - -export const IJupyterCadDocTracker = new Token( - 'jupyterCadDocTracker' -); - -export const IAnnotationToken = new Token( - 'jupytercadAnnotationModel' -); - -export interface IJCadWorker { - ready: Promise; - initialize(): string; - registerHandler( - messageHandler: ((msg: any) => void) | ((msg: any) => Promise), - thisArg?: any - ): void; - postMessage(msg: any): void; -} -export interface IJCadWorkerRegistry { - /** - * - * - * @param {string} workerId - * @param {IJCadWorker} worker - */ - registerWorker(workerId: string, worker: IJCadWorker): void; - - /** - * - * - * @param {string} workerId - */ - unregisterWorker(workerId: string): void; - - /** - * - * - * @param {string} workerId - * @return {*} {(IJCadWorker | undefined)} - */ - getWorker(workerId: string): IJCadWorker | undefined; - - /** - * - * - * @return {*} {IJCadWorker[]} - */ - getAllWorkers(): IJCadWorker[]; -} - -export const IJCadWorkerRegistry = new Token( - 'jupytercadWorkerRegistry' -); diff --git a/packages/base/src/types.ts b/packages/base/src/types.ts index c77ac5d9..9f663024 100644 --- a/packages/base/src/types.ts +++ b/packages/base/src/types.ts @@ -1,8 +1,6 @@ -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { ReactWidget } from '@jupyterlab/ui-components'; import { ISignal } from '@lumino/signaling'; import { IJupyterCadModel, IJupyterCadDoc, IDict } from '@jupytercad/schema'; -import { IJupyterCadTracker } from './token'; +import { IJupyterCadTracker, IJupyterCadWidget } from '@jupytercad/schema'; export { IDict }; export type ValueOf = T[keyof T]; @@ -30,8 +28,6 @@ export type CameraSettings = { type: 'Perspective' | 'Orthographic'; }; -export type IJupyterCadWidget = IDocumentWidget; - export interface IControlPanelModel { disconnect(f: any): void; documentChanged: ISignal; diff --git a/packages/base/src/widget.tsx b/packages/base/src/widget.tsx index 9327f520..a22936c5 100644 --- a/packages/base/src/widget.tsx +++ b/packages/base/src/widget.tsx @@ -7,13 +7,8 @@ import { ISignal, Signal } from '@lumino/signaling'; import * as React from 'react'; import { MainView } from './mainview'; -import { - AxeHelper, - CameraSettings, - ExplodedView, - IJupyterCadWidget -} from './types'; -import { IJCadWorkerRegistry } from './token'; +import { AxeHelper, CameraSettings, ExplodedView } from './types'; +import { IJCadWorkerRegistry, IJupyterCadWidget } from '@jupytercad/schema'; export class JupyterCadWidget extends DocumentWidget diff --git a/packages/occ-worker/src/occworker.ts b/packages/occ-worker/src/occworker.ts index de010042..1625d228 100644 --- a/packages/occ-worker/src/occworker.ts +++ b/packages/occ-worker/src/occworker.ts @@ -15,27 +15,38 @@ export class OccWorker implements IJCadWorker { return this._ready.promise; } - initialize(): string { + initChannel(): string { const messageChannel = new MessageChannel(); messageChannel.port1.onmessage = this._processMessage.bind(this); const id = uuid(); + this._messageChannels.set(id, messageChannel); const initMessage = { + id, action: WorkerAction.REGISTER, payload: { id } }; this._nativeWorker.postMessage(initMessage, [messageChannel.port2]); return id; } + removeChannel(id: string): void { + this._handlers.delete(id); + this._messageChannels.delete(id); + } registerHandler( + id: string, messageHandler: ((msg: any) => void) | ((msg: any) => Promise), thisArg?: any ): void { - if (!this._handlerSet.has(messageHandler)) { + if (!this._handlers.has(id)) { if (thisArg) { messageHandler.bind(thisArg); } - this._handlerSet.add(messageHandler); + this._handlers.set(id, messageHandler); + } else { + console.error( + `${id} is already registered, remove the handler first before re-registering ` + ); } } @@ -44,16 +55,17 @@ export class OccWorker implements IJCadWorker { } private _processMessage(msg: any): void { - if (msg.action === MainAction.INITIALIZED) { + if (msg.data.action === MainAction.INITIALIZED) { this._ready.resolve(); } else { - this._handlerSet.forEach(cb => cb(msg)); + this._handlers.forEach(cb => cb(msg.data)); } } private _ready = new PromiseDelegate(); - private _handlerSet = new Set(); - private _nativeWorker: Worker; + private _handlers = new Map(); + private _messageChannels = new Map(); + private _nativeWorker: Worker; } export namespace OccWorker { diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index f0a61ca0..cc78129e 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -1,2 +1,3 @@ export * from './interfaces'; export * from './model'; +export * from './token'; diff --git a/packages/schema/src/interfaces.ts b/packages/schema/src/interfaces.ts index 7e8f0488..b676b5c1 100644 --- a/packages/schema/src/interfaces.ts +++ b/packages/schema/src/interfaces.ts @@ -4,9 +4,11 @@ import { StateChange, YDocument } from '@jupyter/ydoc'; +import { IWidgetTracker } from '@jupyterlab/apputils'; import { IChangedArgs } from '@jupyterlab/coreutils'; -import { DocumentRegistry } from '@jupyterlab/docregistry'; +import { DocumentRegistry, IDocumentWidget } from '@jupyterlab/docregistry'; import { User } from '@jupyterlab/services'; +import { ReactWidget } from '@jupyterlab/ui-components'; import { JSONObject } from '@lumino/coreutils'; import { ISignal, Signal } from '@lumino/signaling'; @@ -178,3 +180,50 @@ export interface IAnnotation { contents: IAnnotationContent[]; parent: string; } + +export interface IJCadWorker { + ready: Promise; + initChannel(): string; + registerHandler( + id: string, + messageHandler: ((msg: any) => void) | ((msg: any) => Promise), + thisArg?: any + ): void; + removeChannel(id: string): void; + postMessage(msg: any): void; +} +export interface IJCadWorkerRegistry { + /** + * + * + * @param {string} workerId + * @param {IJCadWorker} worker + */ + registerWorker(workerId: string, worker: IJCadWorker): void; + + /** + * + * + * @param {string} workerId + */ + unregisterWorker(workerId: string): void; + + /** + * + * + * @param {string} workerId + * @return {*} {(IJCadWorker | undefined)} + */ + getWorker(workerId: string): IJCadWorker | undefined; + + /** + * + * + * @return {*} {IJCadWorker[]} + */ + getAllWorkers(): IJCadWorker[]; +} + +export type IJupyterCadWidget = IDocumentWidget; + +export type IJupyterCadTracker = IWidgetTracker; diff --git a/packages/schema/src/token.ts b/packages/schema/src/token.ts new file mode 100644 index 00000000..db35a7fc --- /dev/null +++ b/packages/schema/src/token.ts @@ -0,0 +1,19 @@ +import { Token } from '@lumino/coreutils'; + +import { + IJCadWorkerRegistry, + IJupyterCadTracker, + IAnnotationModel +} from './interfaces'; + +export const IJupyterCadDocTracker = new Token( + 'jupyterCadDocTracker' +); + +export const IAnnotationToken = new Token( + 'jupytercadAnnotationModel' +); + +export const IJCadWorkerRegistryToken = new Token( + 'jupytercadWorkerRegistry' +); diff --git a/packages/schema/src/types.ts b/packages/schema/src/types.ts index 500e06af..0fd7fa1c 100644 --- a/packages/schema/src/types.ts +++ b/packages/schema/src/types.ts @@ -13,3 +13,4 @@ export * from './_interface/sphere'; export * from './_interface/torus'; export * from './interfaces'; export * from './model'; +export * from './token'; diff --git a/python/jupytercad-core/package.json b/python/jupytercad-core/package.json index c4a74c3e..ae91deb1 100644 --- a/python/jupytercad-core/package.json +++ b/python/jupytercad-core/package.json @@ -56,6 +56,7 @@ "@jupytercad/base": "^0.3.3", "@jupytercad/occ-worker": "^0.3.3", "@jupytercad/opencascade": "^0.3.3", + "@jupytercad/schema": "^0.3.3", "@jupyterlab/application": "^4.0.0", "@jupyterlab/coreutils": "^6.0.0", "@jupyterlab/services": "^7.0.0" diff --git a/python/jupytercad-core/src/factory.ts b/python/jupytercad-core/src/factory.ts index cf9537d2..4eaa1aed 100644 --- a/python/jupytercad-core/src/factory.ts +++ b/python/jupytercad-core/src/factory.ts @@ -1,13 +1,15 @@ -import { JupyterCadModel } from '@jupytercad/schema'; +import { + JupyterCadModel, + IJupyterCadTracker, + IJCadWorkerRegistry +} from '@jupytercad/schema'; import { ABCWidgetFactory, DocumentRegistry } from '@jupyterlab/docregistry'; import { CommandRegistry } from '@lumino/commands'; import { JupyterCadPanel, JupyterCadWidget, - IJupyterCadTracker, - ToolbarWidget, - IJCadWorkerRegistry + ToolbarWidget } from '@jupytercad/base'; interface IOptions extends DocumentRegistry.IWidgetFactoryOptions { diff --git a/python/jupytercad-core/src/plugin.ts b/python/jupytercad-core/src/plugin.ts index 1196f643..7a0c5251 100644 --- a/python/jupytercad-core/src/plugin.ts +++ b/python/jupytercad-core/src/plugin.ts @@ -1,13 +1,13 @@ +import { AnnotationModel, JupyterCadWidget } from '@jupytercad/base'; +import { OCC_WORKER_ID, OccWorker } from '@jupytercad/occ-worker'; import { - AnnotationModel, + IAnnotationModel, IAnnotationToken, + IJCadWorkerRegistry, + IJCadWorkerRegistryToken, IJupyterCadDocTracker, - IJupyterCadTracker, - JupyterCadWidget -} from '@jupytercad/base'; -import { OCC_WORKER_ID, OccWorker } from '@jupytercad/occ-worker'; -import { IAnnotationModel } from '@jupytercad/schema'; -import { IJCadWorkerRegistry } from '@jupytercad/base'; + IJupyterCadTracker +} from '@jupytercad/schema'; import { JupyterFrontEnd, JupyterFrontEndPlugin @@ -61,7 +61,7 @@ export const workerRegistryPlugin: JupyterFrontEndPlugin = id: 'jupytercad:core:worker-registry', autoStart: true, requires: [], - provides: IJCadWorkerRegistry, + provides: IJCadWorkerRegistryToken, activate: (app: JupyterFrontEnd): IJCadWorkerRegistry => { const workerRegistry = new JupyterCadWorkerRegistry(); const worker = new Worker( diff --git a/python/jupytercad-core/src/workerregistry.ts b/python/jupytercad-core/src/workerregistry.ts index 847b8550..bab4115b 100644 --- a/python/jupytercad-core/src/workerregistry.ts +++ b/python/jupytercad-core/src/workerregistry.ts @@ -1,4 +1,4 @@ -import { IJCadWorker, IJCadWorkerRegistry } from '@jupytercad/base'; +import { IJCadWorker, IJCadWorkerRegistry } from '@jupytercad/schema'; export class JupyterCadWorkerRegistry implements IJCadWorkerRegistry { constructor() { @@ -8,7 +8,7 @@ export class JupyterCadWorkerRegistry implements IJCadWorkerRegistry { if (!this._registry.has(workerId)) { this._registry.set(workerId, worker); } else { - console.error('Worker is already registered'); + console.error('Worker is already registered!'); } } diff --git a/python/jupytercad-lab/package.json b/python/jupytercad-lab/package.json index 202a49b2..cd0d6da1 100644 --- a/python/jupytercad-lab/package.json +++ b/python/jupytercad-lab/package.json @@ -140,6 +140,10 @@ "singleton": true, "bundled": false }, + "@jupytercad/schema": { + "singleton": true, + "bundled": false + }, "@jupytercad/jupytercad-core": { "singleton": true, "bundled": false diff --git a/python/jupytercad-lab/src/index.ts b/python/jupytercad-lab/src/index.ts index 61d082b5..efd97f1b 100644 --- a/python/jupytercad-lab/src/index.ts +++ b/python/jupytercad-lab/src/index.ts @@ -14,15 +14,17 @@ import { ControlPanelModel, LeftPanelWidget, RightPanelWidget, - IJupyterCadDocTracker, - IJupyterCadTracker, jcLightIcon, addCommands, CommandIDs, - JupyterCadWidget, - IAnnotationToken + JupyterCadWidget } from '@jupytercad/base'; -import { IAnnotationModel } from '@jupytercad/schema'; +import { + IAnnotationModel, + IAnnotationToken, + IJupyterCadDocTracker, + IJupyterCadTracker +} from '@jupytercad/schema'; import { WidgetTracker } from '@jupyterlab/apputils'; // import { yJupyterCADWidgetPlugin } from './notebookrenderer'; @@ -42,9 +44,6 @@ const plugin: JupyterFrontEndPlugin = { ): void => { console.log('jupytercad:lab:main-menu is activated!'); translator = translator ?? nullTranslator; - /** - * Whether there is an active notebook. - */ const isEnabled = (): boolean => { return ( tracker.currentWidget !== null && diff --git a/python/jupytercad-lab/src/jcadplugin/plugins.ts b/python/jupytercad-lab/src/jcadplugin/plugins.ts index c8c78839..56ffc2ad 100644 --- a/python/jupytercad-lab/src/jcadplugin/plugins.ts +++ b/python/jupytercad-lab/src/jcadplugin/plugins.ts @@ -2,14 +2,16 @@ import { ICollaborativeDrive, SharedDocumentFactory } from '@jupyter/docprovider'; +import { JupyterCadWidgetFactory } from '@jupytercad/jupytercad-core'; import { + IAnnotationModel, IAnnotationToken, IJCadWorkerRegistry, + IJCadWorkerRegistryToken, IJupyterCadDocTracker, - IJupyterCadWidget -} from '@jupytercad/base'; -import { JupyterCadWidgetFactory } from '@jupytercad/jupytercad-core'; -import { IAnnotationModel, JupyterCadDoc } from '@jupytercad/schema'; + IJupyterCadWidget, + JupyterCadDoc +} from '@jupytercad/schema'; import { JupyterFrontEnd, JupyterFrontEndPlugin @@ -150,7 +152,7 @@ const jcadPlugin: JupyterFrontEndPlugin = { IAnnotationToken, IFileBrowserFactory, ICollaborativeDrive, - IJCadWorkerRegistry + IJCadWorkerRegistryToken ], optional: [ILauncher, ICommandPalette], autoStart: true, diff --git a/yarn.lock b/yarn.lock index 103e4cfd..20900a12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -897,7 +897,6 @@ __metadata: "@jupyter/collaboration": ^1.0.0 "@jupyter/docprovider": ^1.0.0 "@jupyter/ydoc": ^0.3.4 || ^1.0.2 - "@jupytercad/occ-worker": ^0.3.3 "@jupytercad/opencascade": ^0.3.3 "@jupytercad/schema": ^0.3.3 "@jupyterlab/application": ^4.0.0 @@ -1008,6 +1007,7 @@ __metadata: "@jupytercad/base": ^0.3.3 "@jupytercad/occ-worker": ^0.3.3 "@jupytercad/opencascade": ^0.3.3 + "@jupytercad/schema": ^0.3.3 "@jupyterlab/application": ^4.0.0 "@jupyterlab/builder": ^4.0.0 "@jupyterlab/coreutils": ^6.0.0 @@ -3217,8 +3217,8 @@ __metadata: linkType: hard "@rjsf/core@npm:^5.1.0": - version: 5.13.6 - resolution: "@rjsf/core@npm:5.13.6" + version: 5.14.1 + resolution: "@rjsf/core@npm:5.14.1" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 @@ -3228,13 +3228,13 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.12.x react: ^16.14.0 || >=17 - checksum: 7c8782030ac661fccd36226d84bca701af8e42717cb0560fb606784d358b1724288275f7ec2f9905b2a006ab65aa51525176d180908c6817b432afff4e989bdb + checksum: d87ed9f9d7e0330bf484694a576717978a22a2c7823b899c8a150fc32394e66a5dacc7f5bc774550f8036f4e1f5c559616f8280a485a4d2102b82ef5f07d3e04 languageName: node linkType: hard "@rjsf/utils@npm:^5.1.0": - version: 5.13.6 - resolution: "@rjsf/utils@npm:5.13.6" + version: 5.14.1 + resolution: "@rjsf/utils@npm:5.14.1" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -3243,13 +3243,13 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 1e6cdca9f547db4b96561752150c0aa4255426fa32ae84ea017b221e5816e7eb9ed985e9dbb73f1d83baaae36f892f1d10e2bf81d8a53f7e42b2bfc7df52d8e4 + checksum: f9dc6e3bb6ce5a7af4917ab5a56d4ebd012fbf346d245aaacce36aacd58a96ab56e534be47b8e9cf76735075c399e996eedd2121d00b94327006b5a74161f211 languageName: node linkType: hard "@rjsf/validator-ajv8@npm:^5.1.0": - version: 5.13.6 - resolution: "@rjsf/validator-ajv8@npm:5.13.6" + version: 5.14.1 + resolution: "@rjsf/validator-ajv8@npm:5.14.1" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 @@ -3257,7 +3257,7 @@ __metadata: lodash-es: ^4.17.21 peerDependencies: "@rjsf/utils": ^5.12.x - checksum: 1909cb6b23344dd32b6bc825cc49c5a0efef2aecda2df5a903c3e70449b0ee546d9d915c450bdebd89384490689e43584933b74c3d4439c624b4cd9e481c7c1d + checksum: 075ad10aaa65266f6d5f353ab597dfe0b15a560d705e2d6176633c764ebf9d8a6c057d4f8b0520912a2fca586491c35f9012d2d992afe05b8dff7afbd1208378 languageName: node linkType: hard @@ -4415,13 +4415,13 @@ __metadata: linkType: hard "axios@npm:^1.0.0": - version: 1.6.1 - resolution: "axios@npm:1.6.1" + version: 1.6.2 + resolution: "axios@npm:1.6.2" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 573f03f59b7487d54551b16f5e155d1d130ad4864ed32d1da93d522b78a57123b34e3bde37f822a65ee297e79f1db840f9ad6514addff50d3cbf5caeed39e8dc + checksum: 4a7429e2b784be0f2902ca2680964391eae7236faa3967715f30ea45464b98ae3f1c6f631303b13dfe721b17126b01f486c7644b9ef276bfc63112db9fd379f8 languageName: node linkType: hard @@ -4738,9 +4738,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001541": - version: 1.0.30001561 - resolution: "caniuse-lite@npm:1.0.30001561" - checksum: 949829fe037e23346595614e01d362130245920503a12677f2506ce68e1240360113d6383febed41e8aa38cd0f5fd9c69c21b0af65a71c0246d560db489f1373 + version: 1.0.30001562 + resolution: "caniuse-lite@npm:1.0.30001562" + checksum: 414ed45ae47a432607be1c9588bd478440acb033e46ede74c97501bfdb9ba4b1615e221d3ce7c7be55e1e0834725fd1ce5bf5e037bb9dd384c8e85b5e83dc6d1 languageName: node linkType: hard @@ -5687,9 +5687,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.535": - version: 1.4.582 - resolution: "electron-to-chromium@npm:1.4.582" - checksum: a87ea18b4fbad7c96ae5fe587c3273c3878ee52b08c8a7acd6156949d05fd370f91809691126b0cee223a6cdd4688e6ff2f086c6603a712d004485f36a4b9093 + version: 1.4.583 + resolution: "electron-to-chromium@npm:1.4.583" + checksum: 4fd0c79993613d3a8da18a15197e02750910e0d3005a706aa81ae5c83321694b35879d0e26e63fc6aa30746cfad53fd939641cf592f97ea9c010c89e93dd6ee0 languageName: node linkType: hard @@ -12029,8 +12029,8 @@ __metadata: linkType: hard "ts-loader@npm:^9.2.6": - version: 9.5.0 - resolution: "ts-loader@npm:9.5.0" + version: 9.5.1 + resolution: "ts-loader@npm:9.5.1" dependencies: chalk: ^4.1.0 enhanced-resolve: ^5.0.0 @@ -12040,7 +12040,7 @@ __metadata: peerDependencies: typescript: "*" webpack: ^5.0.0 - checksum: a319575faa07145917a7050ac6be7e7f8d97745c6b6ecf8097ac51cebd2d459e8f8b2519d0c39066a065f4d73ae331d2aba9de3d62ea38bc59fd84395794d428 + checksum: 7cf396e656d905388ea2a9b5e82f16d3c955fda8d3df2fbf219f4bee16ff50a3c995c44ae3e584634e9443f056cec70bb3151add3917ffb4588ecd7394bac0ec languageName: node linkType: hard