From ae02206a606d81da738a61a360d89e85f2069ed2 Mon Sep 17 00:00:00 2001 From: mozzie Date: Thu, 21 Dec 2023 12:49:50 +0800 Subject: [PATCH] feat: crosshair mpr --- apps/aorta/package.json | 6 +- apps/aorta/public/d-apple.json | 143 +++ apps/aorta/scripts/dev.proxy.ts | 2 +- apps/aorta/scripts/webpack.dev.ts | 2 +- .../createImageIdsAndCacheMetaData.ts | 57 +- .../getPTImageIdInstanceMetadata.ts | 211 ++++ .../initCornerstoneDicomImageLoader.ts | 17 +- .../modules/Root/Viewer/Crosshair/index.tsx | 252 +++-- .../util/convertMultiframeImageIds.js | 65 ++ .../util/createImageIdsAndCacheMetaData.js | 101 ++ .../util/getPixelSpacingInformation.js | 136 +++ .../util/initCornerstoneDICOMImageLoader.js | 47 + .../Root/Viewer/Crosshair/util/initDemo.js | 13 + .../Viewer/Crosshair/util/initProviders.js | 17 + .../Viewer/Crosshair/util/initVolumeLoader.js | 19 + .../util/ptScalingMetaDataProvider.js | 17 + .../Crosshair/util/removeInvalidTags.js | 33 + .../setCtTransferFunctionForVolumeActor.js} | 14 +- .../{VolumeViewer => StackViewer}/index.tsx | 6 +- .../{VolumeViewer => StackViewer}/type.d.ts | 0 apps/aorta/src/modules/Root/Viewer/index.tsx | 7 +- pnpm-lock.yaml | 935 +++--------------- 22 files changed, 1174 insertions(+), 926 deletions(-) create mode 100644 apps/aorta/public/d-apple.json create mode 100644 apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/getPTImageIdInstanceMetadata.ts create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/convertMultiframeImageIds.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/createImageIdsAndCacheMetaData.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/getPixelSpacingInformation.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/initCornerstoneDICOMImageLoader.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/initDemo.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/initProviders.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/initVolumeLoader.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/ptScalingMetaDataProvider.js create mode 100644 apps/aorta/src/modules/Root/Viewer/Crosshair/util/removeInvalidTags.js rename apps/aorta/src/modules/Root/Viewer/Crosshair/{setCtTransferFunctionForVolumeActor.ts => util/setCtTransferFunctionForVolumeActor.js} (52%) rename apps/aorta/src/modules/Root/Viewer/{VolumeViewer => StackViewer}/index.tsx (90%) rename apps/aorta/src/modules/Root/Viewer/{VolumeViewer => StackViewer}/type.d.ts (100%) diff --git a/apps/aorta/package.json b/apps/aorta/package.json index 4b45688..16e83a2 100644 --- a/apps/aorta/package.json +++ b/apps/aorta/package.json @@ -23,7 +23,6 @@ "js-cookie": "3.0.5", "three": "0.156.1", "path-to-regexp": "6.2.1", - "cornerstone-core": "2.6.1", "dicom-parser": "1.8.21", "@msgpack/msgpack": "3.0.0-beta2", "pako": "2.1.0", @@ -32,8 +31,9 @@ "@cornerstonejs/core": "1.41.0", "dcmjs": "0.30.0", "dicomweb-client": "0.10.3", - "@cornerstonejs/tools": "3.0.2", - "@cornerstonejs/streaming-image-volume-loader": "1.41.0" + "@cornerstonejs/tools": "1.41.0", + "@cornerstonejs/streaming-image-volume-loader": "1.41.0", + "@cornerstonejs/calculate-suv": "1.1.0" }, "devDependencies": { "@babel/core": "^7.21.8", diff --git a/apps/aorta/public/d-apple.json b/apps/aorta/public/d-apple.json new file mode 100644 index 0000000..94b5b12 --- /dev/null +++ b/apps/aorta/public/d-apple.json @@ -0,0 +1,143 @@ +[ + "5.0.37", + [ + "apple a14", + "14", + "a14 apple", + 0, + [ + [ + 2704, + 1756, + 120 + ] + ] + ], + [ + "apple m1", + "1", + "apple m1", + 0, + [ + [ + 2880, + 1800, + 198 + ] + ] + ], + [ + "apple m1 max", + "1", + "apple m1 max", + 0, + [ + [ + 3456, + 2234, + 556 + ] + ] + ], + [ + "apple m1 pro", + "1", + "apple m1 pro", + 0, + [ + [ + 3024, + 1964, + 342 + ] + ] + ], + [ + "apple m1 ultra", + "1", + "apple m1 ultra", + 0, + [ + [ + 5120, + 2880, + 437 + ] + ] + ], + [ + "apple m2", + "2", + "apple m2", + 0, + [ + [ + 2880, + 1800, + 60 + ], + [ + 2940, + 1912, + 209 + ] + ] + ], + [ + "apple m2 max", + "2", + "apple m2 max", + 0, + [ + [ + 3456, + 2234, + 120 + ] + ] + ], + [ + "apple m2 pro", + "2", + "apple m2 pro", + 0, + [ + [ + 3024, + 1964, + 120 + ], + [ + 5120, + 2880, + 60 + ] + ] + ], + [ + "apple m2 ultra", + "2", + "apple m2 ultra", + 0, + [ + [ + 5120, + 2880, + 60 + ] + ] + ], + [ + "apple paravirtual device", + "", + "apple device paravirtual", + 0, + [ + [ + 1024, + 768, + 30 + ] + ] + ] +] \ No newline at end of file diff --git a/apps/aorta/scripts/dev.proxy.ts b/apps/aorta/scripts/dev.proxy.ts index 2bc2669..ebd033a 100644 --- a/apps/aorta/scripts/dev.proxy.ts +++ b/apps/aorta/scripts/dev.proxy.ts @@ -31,5 +31,5 @@ export const proxyMap: TProxyMap = { target: "http://localhost:5000/", changeOrigin: true, pathRewrite: { "^/py": "" }, - }, + } }; diff --git a/apps/aorta/scripts/webpack.dev.ts b/apps/aorta/scripts/webpack.dev.ts index 78aec94..152bbdc 100644 --- a/apps/aorta/scripts/webpack.dev.ts +++ b/apps/aorta/scripts/webpack.dev.ts @@ -20,7 +20,7 @@ interface Configuration extends WebpackConfiguration { devServer?: WebpackDevServerConfiguration; } -const host = "127.0.0.1"; +const host = "0.0.0.0"; const port = 9000; // 合并公共配置,并添加开发环境配置 diff --git a/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/createImageIdsAndCacheMetaData.ts b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/createImageIdsAndCacheMetaData.ts index 144afa0..c7bccf7 100644 --- a/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/createImageIdsAndCacheMetaData.ts +++ b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/createImageIdsAndCacheMetaData.ts @@ -5,6 +5,9 @@ import cornerstoneDICOMImageLoader from "@cornerstonejs/dicom-image-loader"; import { getPixelSpacingInformation } from "./getPixelSpacingInformation"; import { convertMultiframeImageIds } from "./convertMultiframeImageIds"; import { removeInvalidTags } from "./removeInvalidTags"; +import getPTImageIdInstanceMetadata from "./getPTImageIdInstanceMetadata"; +import { calculateSUVScalingFactors } from "@cornerstonejs/calculate-suv"; +import ptScalingMetaDataProvider from "./ptScalingMetaDataProvider"; const { DicomMetaDictionary } = dcmjs.data; const { calibratedPixelSpacingMetadataProvider } = utilities; @@ -44,11 +47,22 @@ export const createImageIdsAndCacheMetaData = async ( console.log("modality", modality); let imageIds = instances.map((instanceMetaData: any) => { - const seriesInstanceUID = instanceMetaData[SERIES_INSTANCE_UID].Value[0]; - const sopInstanceUIDToUse = + const SeriesInstanceUID = instanceMetaData[SERIES_INSTANCE_UID].Value[0]; + const SOPInstanceUIDToUse = options.SOPInstanceUID || instanceMetaData[SOP_INSTANCE_UID].Value[0]; - const imageId = `wadors:${options.wadoRsRoot}/studies/${options.StudyInstanceUID}/series/${seriesInstanceUID}/instances/${sopInstanceUIDToUse}/frames/1`; + const prefix = "wadors:"; + + const imageId = + prefix + + options.wadoRsRoot + + "/studies/" + + options.StudyInstanceUID + + "/series/" + + SeriesInstanceUID + + "/instances/" + + SOPInstanceUIDToUse + + "/frames/1"; cornerstoneDICOMImageLoader.wadors.metaDataManager.add( imageId, @@ -62,6 +76,7 @@ export const createImageIdsAndCacheMetaData = async ( imageIds.forEach((imageId) => { let instanceMetaData = cornerstoneDICOMImageLoader.wadors.metaDataManager.get(imageId); + instanceMetaData = removeInvalidTags(instanceMetaData); if (instanceMetaData) { @@ -81,8 +96,44 @@ export const createImageIdsAndCacheMetaData = async ( } }); + if (modality === "PT") { + const InstanceMetadataArray: any = []; + imageIds.forEach((imageId) => { + const instanceMetadata = getPTImageIdInstanceMetadata(imageId); + + // TODO: Temporary fix because static-wado is producing a string, not an array of values + // (or maybe dcmjs isn't parsing it correctly?) + // It's showing up like 'DECY\\ATTN\\SCAT\\DTIM\\RAN\\RADL\\DCAL\\SLSENS\\NORM' + // but calculate-suv expects ['DECY', 'ATTN', ...] + if (typeof instanceMetadata.CorrectedImage === "string") { + instanceMetadata.CorrectedImage = + instanceMetadata.CorrectedImage.split("\\"); + } + + if (instanceMetadata) { + InstanceMetadataArray.push(instanceMetadata); + } + }); + if (InstanceMetadataArray.length) { + try { + const suvScalingFactors = calculateSUVScalingFactors( + InstanceMetadataArray + ); + InstanceMetadataArray.forEach((instanceMetadata, index) => { + ptScalingMetaDataProvider.addInstance( + imageIds[index], + suvScalingFactors[index] + ); + }); + } catch (error) { + console.log(error); + } + } + } + return imageIds; } catch (error) { + console.log(error); throw new Error("PACS 中数据不存在"); } }; diff --git a/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/getPTImageIdInstanceMetadata.ts b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/getPTImageIdInstanceMetadata.ts new file mode 100644 index 0000000..0090447 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/getPTImageIdInstanceMetadata.ts @@ -0,0 +1,211 @@ +import { metaData } from "@cornerstonejs/core"; +import type { InstanceMetadata } from "@cornerstonejs/calculate-suv"; + +export default function getPTImageIdInstanceMetadata( + imageId: string +): InstanceMetadata { + const petSequenceModule = metaData.get("petIsotopeModule", imageId); + const generalSeriesModule = metaData.get("generalSeriesModule", imageId); + const patientStudyModule = metaData.get("patientStudyModule", imageId); + + const ptSeriesModule = metaData.get("petSeriesModule", imageId); + const ptImageModule = metaData.get("petImageModule", imageId); + + if (!petSequenceModule) { + throw new Error("petSequenceModule metadata is required"); + } + + const radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo; + + const { seriesDate, seriesTime, acquisitionDate, acquisitionTime } = + generalSeriesModule; + const { patientWeight } = patientStudyModule; + const { correctedImage, units, decayCorrection } = ptSeriesModule; + + if ( + seriesDate === undefined || + seriesTime === undefined || + patientWeight === undefined || + acquisitionDate === undefined || + acquisitionTime === undefined || + correctedImage === undefined || + units === undefined || + decayCorrection === undefined || + radiopharmaceuticalInfo.radionuclideTotalDose === undefined || + radiopharmaceuticalInfo.radionuclideHalfLife === undefined || + (radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === undefined && + seriesDate === undefined && + radiopharmaceuticalInfo.radiopharmaceuticalStartTime === undefined) + // + ) { + throw new Error("required metadata are missing"); + } + + const instanceMetadata: InstanceMetadata = { + CorrectedImage: correctedImage, + Units: units, + RadionuclideHalfLife: radiopharmaceuticalInfo.radionuclideHalfLife, + RadionuclideTotalDose: radiopharmaceuticalInfo.radionuclideTotalDose, + DecayCorrection: decayCorrection, + PatientWeight: patientWeight, + SeriesDate: seriesDate, + SeriesTime: seriesTime, + AcquisitionDate: acquisitionDate, + AcquisitionTime: acquisitionTime, + }; + + if ( + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime && + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined && + typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime === "string" + ) { + instanceMetadata.RadiopharmaceuticalStartDateTime = + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime; + } + + if ( + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime && + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== undefined && + typeof radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime !== "string" + ) { + const dateString = convertInterfaceDateToString( + radiopharmaceuticalInfo.radiopharmaceuticalStartDateTime + ); + instanceMetadata.RadiopharmaceuticalStartDateTime = dateString; + } + + if ( + instanceMetadata.AcquisitionDate && + instanceMetadata.AcquisitionDate !== undefined && + typeof instanceMetadata.AcquisitionDate !== "string" + ) { + const dateString = convertInterfaceDateToString( + instanceMetadata.AcquisitionDate + ); + instanceMetadata.AcquisitionDate = dateString; + } + + if ( + instanceMetadata.SeriesDate && + instanceMetadata.SeriesDate !== undefined && + typeof instanceMetadata.SeriesDate !== "string" + ) { + const dateString = convertInterfaceDateToString( + instanceMetadata.SeriesDate + ); + instanceMetadata.SeriesDate = dateString; + } + + if ( + radiopharmaceuticalInfo.radiopharmaceuticalStartTime && + radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined && + typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime === "string" + ) { + instanceMetadata.RadiopharmaceuticalStartTime = + radiopharmaceuticalInfo.radiopharmaceuticalStartTime; + } + + if ( + radiopharmaceuticalInfo.radiopharmaceuticalStartTime && + radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== undefined && + typeof radiopharmaceuticalInfo.radiopharmaceuticalStartTime !== "string" + ) { + const timeString = convertInterfaceTimeToString( + radiopharmaceuticalInfo.radiopharmaceuticalStartTime + ); + instanceMetadata.RadiopharmaceuticalStartTime = timeString; + } + + if ( + instanceMetadata.AcquisitionTime && + instanceMetadata.AcquisitionTime !== undefined && + typeof instanceMetadata.AcquisitionTime !== "string" + ) { + const timeString = convertInterfaceTimeToString( + instanceMetadata.AcquisitionTime + ); + instanceMetadata.AcquisitionTime = timeString; + } + + if ( + instanceMetadata.SeriesTime && + instanceMetadata.SeriesTime !== undefined && + typeof instanceMetadata.SeriesTime !== "string" + ) { + const timeString = convertInterfaceTimeToString( + instanceMetadata.SeriesTime + ); + instanceMetadata.SeriesTime = timeString; + } + + if ( + ptImageModule.frameReferenceTime && + ptImageModule.frameReferenceTime !== undefined + ) { + instanceMetadata.FrameReferenceTime = ptImageModule.frameReferenceTime; + } + + if ( + ptImageModule.actualFrameDuration && + ptImageModule.actualFrameDuration !== undefined + ) { + instanceMetadata.ActualFrameDuration = ptImageModule.actualFrameDuration; + } + + if ( + patientStudyModule.patientSex && + patientStudyModule.patientSex !== undefined + ) { + instanceMetadata.PatientSex = patientStudyModule.patientSex; + } + + if ( + patientStudyModule.patientSize && + patientStudyModule.patientSize !== undefined + ) { + instanceMetadata.PatientSize = patientStudyModule.patientSize; + } + + // Todo: add private tags + // if ( + // dicomMetaData['70531000'] || + // dicomMetaData['70531000'] !== undefined || + // dicomMetaData['70531009'] || + // dicomMetaData['70531009'] !== undefined + // ) { + // const philipsPETPrivateGroup: PhilipsPETPrivateGroup = { + // SUVScaleFactor: dicomMetaData['70531000'], + // ActivityConcentrationScaleFactor: dicomMetaData['70531009'], + // }; + // instanceMetadata.PhilipsPETPrivateGroup = philipsPETPrivateGroup; + // } + + // if (dicomMetaData['0009100d'] && dicomMetaData['0009100d'] !== undefined) { + // instanceMetadata.GEPrivatePostInjectionDateTime = dicomMetaData['0009100d']; + // } + + return instanceMetadata; +} + +function convertInterfaceTimeToString(time): string { + const hours = `${time.hours || "00"}`.padStart(2, "0"); + const minutes = `${time.minutes || "00"}`.padStart(2, "0"); + const seconds = `${time.seconds || "00"}`.padStart(2, "0"); + + const fractionalSeconds = `${time.fractionalSeconds || "000000"}`.padEnd( + 6, + "0" + ); + + const timeString = `${hours}${minutes}${seconds}.${fractionalSeconds}`; + return timeString; +} + +function convertInterfaceDateToString(date): string { + const month = `${date.month}`.padStart(2, "0"); + const day = `${date.day}`.padStart(2, "0"); + const dateString = `${date.year}${month}${day}`; + return dateString; +} + +export { getPTImageIdInstanceMetadata }; diff --git a/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts index 147c378..da17d5d 100644 --- a/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts +++ b/apps/aorta/src/modules/Root/Viewer/CornerstoneDicomLoader/initCornerstoneDicomImageLoader.ts @@ -2,10 +2,19 @@ import dicomParser from "dicom-parser"; import * as cornerstone from "@cornerstonejs/core"; import cornerstoneDICOMImageLoader from "@cornerstonejs/dicom-image-loader"; +window.cornerstone = cornerstone; + export const initCornerstoneDICOMImageLoader = () => { const { preferSizeOverAccuracy, useNorm16Texture } = cornerstone.getConfiguration().rendering; + cornerstone.setConfiguration({ + detectGPUConfig: { + benchmarksURL: "http://localhost:9000", + }, + rendering: cornerstone.getConfiguration().rendering, + }); + cornerstoneDICOMImageLoader.external.cornerstone = cornerstone; cornerstoneDICOMImageLoader.external.dicomParser = dicomParser; cornerstoneDICOMImageLoader.configure({ @@ -16,8 +25,14 @@ export const initCornerstoneDICOMImageLoader = () => { }, }); + let maxWebWorkers = 1; + + if (navigator.hardwareConcurrency) { + maxWebWorkers = Math.min(navigator.hardwareConcurrency, 7); + } + const config = { - maxWebWorkers: navigator.hardwareConcurrency ?? 7, + maxWebWorkers, startWebWorkersOnDemand: false, taskConfiguration: { decodeTask: { diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/index.tsx b/apps/aorta/src/modules/Root/Viewer/Crosshair/index.tsx index f9522cf..bdda23c 100644 --- a/apps/aorta/src/modules/Root/Viewer/Crosshair/index.tsx +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/index.tsx @@ -1,18 +1,17 @@ +import { useEffect, useRef } from "react"; +import initDemo from "./util/initDemo.js"; import { - Enums, RenderingEngine, + Types, + Enums, setVolumesForViewports, volumeLoader, + getRenderingEngine, } from "@cornerstonejs/core"; -import { createImageIdsAndCacheMetaData } from "../CornerstoneDicomLoader/createImageIdsAndCacheMetaData"; -import { initCornerstone } from "../CornerstoneDicomLoader/init"; -import { useEffect, useRef } from "react"; import * as cornerstoneTools from "@cornerstonejs/tools"; -import { PublicViewportInput } from "@cornerstonejs/core/dist/types/types"; -import { setCtTransferFunctionForVolumeActor } from "./setCtTransferFunctionForVolumeActor"; -interface CorsshairProps { - children?: JSX.Element; -} +import createImageIdsAndCacheMetaData from "./util/createImageIdsAndCacheMetaData"; +import { PublicViewportInput } from "@cornerstonejs/core/dist/types/types/IViewport.js"; +import setCtTransferFunctionForVolumeActor from "./util/setCtTransferFunctionForVolumeActor"; const { ToolGroupManager, @@ -21,126 +20,185 @@ const { StackScrollMouseWheelTool, } = cornerstoneTools; -const toolGroupId = "MY_TOOLGROUP_ID"; +const { ViewportType } = Enums; + +interface CrosshairMprProps { + children?: JSX.Element; +} + +const viewportId1 = "CT_AXIAL"; +const viewportId2 = "CT_SAGITTAL"; +const viewportId3 = "CT_CORONAL"; +const toolGroupId = "group"; + +const viewportColors = { + [viewportId1]: "rgb(200, 0, 0)", + [viewportId2]: "rgb(200, 200, 0)", + [viewportId3]: "rgb(0, 200, 0)", +}; + +const viewportReferenceLineControllable = [ + viewportId1, + viewportId2, + viewportId3, +]; + +const viewportReferenceLineDraggableRotatable = [ + viewportId1, + viewportId2, + viewportId3, +]; + +const viewportReferenceLineSlabThicknessControlsOn = [ + viewportId1, + viewportId2, + viewportId3, +]; + +// Define a unique id for the volume const volumeName = "CT_VOLUME_ID"; // Id of the volume less loader prefix const volumeLoaderScheme = "cornerstoneStreamingImageVolume"; // Loader id which defines which volume loader to use const volumeId = `${volumeLoaderScheme}:${volumeName}`; // VolumeId with loader id + volume id -const renderingEngineId = "myRenderingEngine"; -const viewportA = "CT_AXIAL"; -const viewportB = "CT_SAGITTAL"; -const viewportC = "CT_CORONAL"; +function getReferenceLineColor(viewportId) { + return viewportColors[viewportId]; +} -const viewportColors = { - [viewportA]: "rgb(200, 0, 0)", - [viewportB]: "rgb(200, 200, 0)", - [viewportC]: "rgb(0, 200, 0)", -}; +function getReferenceLineControllable(viewportId) { + const index = viewportReferenceLineControllable.indexOf(viewportId); + return index !== -1; +} -const { ViewportType } = Enums; +function getReferenceLineDraggableRotatable(viewportId) { + const index = viewportReferenceLineDraggableRotatable.indexOf(viewportId); + return index !== -1; +} -const StudyInstanceUID = - "1.2.840.113564.345049290535.9692.637552042156233117.433089"; -const SeriesInstanceUID = - "1.3.12.2.1107.5.1.4.76315.30000021042706150001900118311"; +function getReferenceLineSlabThicknessControlsOn(viewportId) { + const index = + viewportReferenceLineSlabThicknessControlsOn.indexOf(viewportId); + return index !== -1; +} -export const Corsshair = (props: CorsshairProps) => { - const viewportA = useRef(null); - const viewportB = useRef(null); - const viewportC = useRef(null); +export const CrosshairMpr = (props: CrosshairMprProps) => { + const viewportId1Ref = useRef(null); + const viewportId2Ref = useRef(null); + const viewportId3Ref = useRef(null); + + cornerstoneTools.addTool(StackScrollMouseWheelTool); + cornerstoneTools.addTool(CrosshairsTool); const run = async () => { - await initCornerstone(); - // Get Cornerstone imageIds and fetch metadata into RAM + initDemo(); + + // Get Cornerstone imageIds for the source data and fetch metadata into RAM const imageIds = await createImageIdsAndCacheMetaData({ - StudyInstanceUID, - SeriesInstanceUID, + StudyInstanceUID: + "1.2.840.113564.345049290535.9692.637552042156233117.433089", + SeriesInstanceUID: + "1.3.12.2.1107.5.1.4.76315.30000021042706150001900118311", wadoRsRoot: "/dicom-web", }); + // Define a volume in memory const volume = await volumeLoader.createAndCacheVolume(volumeId, { imageIds, }); - console.log(volume) - // Instantiate a rendering engine - // const renderingEngine = new RenderingEngine(renderingEngineId); + const renderingEngineId = "myRenderingEngine"; + const renderingEngine = new RenderingEngine(renderingEngineId); - // if (viewportA.current && viewportB.current && viewportC.current) { - // // Create the viewports - // const viewportInputArray: PublicViewportInput[] = [ - // { - // viewportId: viewportA.current, - // type: ViewportType.ORTHOGRAPHIC, - // element: viewportA.current, - // defaultOptions: { - // orientation: Enums.OrientationAxis.AXIAL, - // background: [0, 0, 0], - // }, - // }, - // { - // viewportId: viewportB.current, - // type: ViewportType.ORTHOGRAPHIC, - // element: viewportB.current, - // defaultOptions: { - // orientation: Enums.OrientationAxis.SAGITTAL, - // background: [0, 0, 0], - // }, - // }, - // { - // viewportId: viewportC.current, - // type: ViewportType.ORTHOGRAPHIC, - // element: viewportC.current, - // defaultOptions: { - // orientation: Enums.OrientationAxis.CORONAL, - // background: [0, 0, 0], - // }, - // }, - // ]; + // Create the viewports + const viewportInputArray: PublicViewportInput[] = [ + { + viewportId: viewportId1, + type: ViewportType.ORTHOGRAPHIC, + element: viewportId1Ref.current!, + defaultOptions: { + orientation: Enums.OrientationAxis.AXIAL, + background: [0, 0, 0], + }, + }, + { + viewportId: viewportId2, + type: ViewportType.ORTHOGRAPHIC, + element: viewportId2Ref.current!, + defaultOptions: { + orientation: Enums.OrientationAxis.SAGITTAL, + background: [0, 0, 0], + }, + }, + { + viewportId: viewportId3, + type: ViewportType.ORTHOGRAPHIC, + element: viewportId3Ref.current!, + defaultOptions: { + orientation: Enums.OrientationAxis.CORONAL, + background: [0, 0, 0], + }, + }, + ]; - // renderingEngine.setViewports(viewportInputArray); + renderingEngine.setViewports(viewportInputArray); - // volume.load(); + // Set the volume to load + volume.load(); - // await setVolumesForViewports( - // renderingEngine, - // [ - // { - // volumeId, - // callback: () => setCtTransferFunctionForVolumeActor, - // }, - // ], - // [viewportA.current!, viewportB.current!, viewportC.current!] - // ); + // Set volumes on the viewports + await setVolumesForViewports( + renderingEngine, + [ + { + volumeId, + callback: setCtTransferFunctionForVolumeActor, + }, + ], + [viewportId1, viewportId2, viewportId3] + ); - // // Render the image - // renderingEngine.renderViewports([ - // viewportA.current!, - // viewportB.current!, - // viewportC.current!, - // ]); - // } + // Define tool groups to add the segmentation display tool to + const toolGroup = ToolGroupManager.createToolGroup(toolGroupId); + // For the crosshairs to operate, the viewports must currently be + // added ahead of setting the tool active. This will be improved in the future. + toolGroup.addViewport(viewportId1, renderingEngineId); + toolGroup.addViewport(viewportId2, renderingEngineId); + toolGroup.addViewport(viewportId3, renderingEngineId); + // Manipulation Tools + toolGroup.addTool(StackScrollMouseWheelTool.toolName); + // Add Crosshairs tool and configure it to link the three viewports + // These viewports could use different tool groups. See the PET-CT example + // for a more complicated used case. + + toolGroup.addTool(CrosshairsTool.toolName, { + getReferenceLineColor, + getReferenceLineControllable, + getReferenceLineDraggableRotatable, + getReferenceLineSlabThicknessControlsOn, + }); + + toolGroup.setToolActive(CrosshairsTool.toolName, { + bindings: [{ mouseButton: 1 }], + }); + // As the Stack Scroll mouse wheel is a tool using the `mouseWheelCallback` + // hook instead of mouse buttons, it does not need to assign any mouse button. + toolGroup.setToolActive(StackScrollMouseWheelTool.toolName); + + renderingEngine.renderViewports([viewportId1, viewportId2, viewportId3]); }; useEffect(() => { run(); }, []); - return ( -
-
-
-
+
+
+
+
+
+
); }; diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/convertMultiframeImageIds.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/convertMultiframeImageIds.js new file mode 100644 index 0000000..8f2c333 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/convertMultiframeImageIds.js @@ -0,0 +1,65 @@ +import { metaData } from '@cornerstonejs/core'; +import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'; +/** + * preloads imageIds metadata in memory + **/ +async function prefetchMetadataInformation(imageIdsToPrefetch) { + for (let i = 0; i < imageIdsToPrefetch.length; i++) { + await cornerstoneDICOMImageLoader.wadouri.loadImage(imageIdsToPrefetch[i]) + .promise; + } +} + +function getFrameInformation(imageId) { + if (imageId.includes('wadors:')) { + const frameIndex = imageId.indexOf('/frames/'); + const imageIdFrameless = + frameIndex > 0 ? imageId.slice(0, frameIndex + 8) : imageId; + return { + frameIndex, + imageIdFrameless, + }; + } else { + const frameIndex = imageId.indexOf('&frame='); + let imageIdFrameless = + frameIndex > 0 ? imageId.slice(0, frameIndex + 7) : imageId; + if (!imageIdFrameless.includes('&frame=')) { + imageIdFrameless = imageIdFrameless + '&frame='; + } + return { + frameIndex, + imageIdFrameless, + }; + } +} +/** + * Receives a list of imageids possibly referring to multiframe dicom images + * and returns a list of imageid where each imageid referes to one frame. + * For each imageId representing a multiframe image with n frames, + * it will create n new imageids, one for each frame, and returns the new list of imageids + * If a particular imageid no refer to a mutiframe image data, it will be just copied into the new list + * @returns new list of imageids where each imageid represents a frame + */ +function convertMultiframeImageIds(imageIds) { + const newImageIds = []; + imageIds.forEach((imageId) => { + const { imageIdFrameless } = getFrameInformation(imageId); + const instanceMetaData = metaData.get('multiframeModule', imageId); + if ( + instanceMetaData && + instanceMetaData.NumberOfFrames && + instanceMetaData.NumberOfFrames > 1 + ) { + const NumberOfFrames = instanceMetaData.NumberOfFrames; + for (let i = 0; i < NumberOfFrames; i++) { + const newImageId = imageIdFrameless + (i + 1); + newImageIds.push(newImageId); + } + } else { + newImageIds.push(imageId); + } + }); + return newImageIds; +} + +export { convertMultiframeImageIds, prefetchMetadataInformation }; diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/createImageIdsAndCacheMetaData.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/createImageIdsAndCacheMetaData.js new file mode 100644 index 0000000..4c7852c --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/createImageIdsAndCacheMetaData.js @@ -0,0 +1,101 @@ +import { api } from 'dicomweb-client'; +import dcmjs from 'dcmjs'; +import { utilities } from '@cornerstonejs/core'; +import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'; +import getPixelSpacingInformation from './getPixelSpacingInformation'; +import { convertMultiframeImageIds } from './convertMultiframeImageIds'; +import removeInvalidTags from './removeInvalidTags'; + +const { DicomMetaDictionary } = dcmjs.data; +const { calibratedPixelSpacingMetadataProvider } = utilities; + +/** +/** + * Uses dicomweb-client to fetch metadata of a study, cache it in cornerstone, + * and return a list of imageIds for the frames. + * + * Uses the app config to choose which study to fetch, and which + * dicom-web server to fetch it from. + * + * @returns {string[]} An array of imageIds for instances in the study. + */ + +export default async function createImageIdsAndCacheMetaData({ + StudyInstanceUID, + SeriesInstanceUID, + SOPInstanceUID = null, + wadoRsRoot, + client = null, +}) { + const SOP_INSTANCE_UID = '00080018'; + const SERIES_INSTANCE_UID = '0020000E'; + const MODALITY = '00080060'; + + const studySearchOptions = { + studyInstanceUID: StudyInstanceUID, + seriesInstanceUID: SeriesInstanceUID, + }; + + client = client || new api.DICOMwebClient({ url: wadoRsRoot }); + let instances = await client.retrieveSeriesMetadata(studySearchOptions); + + // if sop instance is provided we should filter the instances to only include the one we want + if (SOPInstanceUID) { + instances = instances.filter((instance) => { + return instance[SOP_INSTANCE_UID].Value[0] === SOPInstanceUID; + }); + } + + const modality = instances[0][MODALITY].Value[0]; + let imageIds = instances.map((instanceMetaData) => { + const SeriesInstanceUID = instanceMetaData[SERIES_INSTANCE_UID].Value[0]; + const SOPInstanceUIDToUse = + SOPInstanceUID || instanceMetaData[SOP_INSTANCE_UID].Value[0]; + + const prefix = 'wadors:'; + + const imageId = + prefix + + wadoRsRoot + + '/studies/' + + StudyInstanceUID + + '/series/' + + SeriesInstanceUID + + '/instances/' + + SOPInstanceUIDToUse + + '/frames/1'; + + cornerstoneDICOMImageLoader.wadors.metaDataManager.add( + imageId, + instanceMetaData + ); + return imageId; + }); + + // if the image ids represent multiframe information, creates a new list with one image id per frame + // if not multiframe data available, just returns the same list given + imageIds = convertMultiframeImageIds(imageIds); + + imageIds.forEach((imageId) => { + let instanceMetaData = + cornerstoneDICOMImageLoader.wadors.metaDataManager.get(imageId); + + // It was using JSON.parse(JSON.stringify(...)) before but it is 8x slower + instanceMetaData = removeInvalidTags(instanceMetaData); + + if (instanceMetaData) { + // Add calibrated pixel spacing + const metadata = DicomMetaDictionary.naturalizeDataset(instanceMetaData); + const pixelSpacing = getPixelSpacingInformation(metadata); + + if (pixelSpacing) { + calibratedPixelSpacingMetadataProvider.add(imageId, { + rowPixelSpacing: parseFloat(pixelSpacing[0]), + columnPixelSpacing: parseFloat(pixelSpacing[1]), + }); + } + } + }); + + return imageIds; +} diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/getPixelSpacingInformation.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/getPixelSpacingInformation.js new file mode 100644 index 0000000..5ddcde5 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/getPixelSpacingInformation.js @@ -0,0 +1,136 @@ +// See https://github.com/OHIF/Viewers/blob/94a9067fe3d291d30e25a1bda5913511388edea2/platform/core/src/utils/metadataProvider/getPixelSpacingInformation.js + +export default function getPixelSpacingInformation(instance) { + // See http://gdcm.sourceforge.net/wiki/index.php/Imager_Pixel_Spacing + + // TODO: Add Ultrasound region spacing + // TODO: Add manual calibration + + // TODO: Use ENUMS from dcmjs + const projectionRadiographSOPClassUIDs = [ + '1.2.840.10008.5.1.4.1.1.1', // CR Image Storage + '1.2.840.10008.5.1.4.1.1.1.1', // Digital X-Ray Image Storage – for Presentation + '1.2.840.10008.5.1.4.1.1.1.1.1', // Digital X-Ray Image Storage – for Processing + '1.2.840.10008.5.1.4.1.1.1.2', // Digital Mammography X-Ray Image Storage – for Presentation + '1.2.840.10008.5.1.4.1.1.1.2.1', // Digital Mammography X-Ray Image Storage – for Processing + '1.2.840.10008.5.1.4.1.1.1.3', // Digital Intra – oral X-Ray Image Storage – for Presentation + '1.2.840.10008.5.1.4.1.1.1.3.1', // Digital Intra – oral X-Ray Image Storage – for Processing + '1.2.840.10008.5.1.4.1.1.12.1', // X-Ray Angiographic Image Storage + '1.2.840.10008.5.1.4.1.1.12.1.1', // Enhanced XA Image Storage + '1.2.840.10008.5.1.4.1.1.12.2', // X-Ray Radiofluoroscopic Image Storage + '1.2.840.10008.5.1.4.1.1.12.2.1', // Enhanced XRF Image Storage + '1.2.840.10008.5.1.4.1.1.12.3', // X-Ray Angiographic Bi-plane Image Storage Retired + ]; + + const { + PixelSpacing, + ImagerPixelSpacing, + SOPClassUID, + PixelSpacingCalibrationType, + PixelSpacingCalibrationDescription, + EstimatedRadiographicMagnificationFactor, + SequenceOfUltrasoundRegions, + } = instance; + + const isProjection = projectionRadiographSOPClassUIDs.includes(SOPClassUID); + + const TYPES = { + NOT_APPLICABLE: 'NOT_APPLICABLE', + UNKNOWN: 'UNKNOWN', + CALIBRATED: 'CALIBRATED', + DETECTOR: 'DETECTOR', + }; + + if (!isProjection) { + return PixelSpacing; + } + + if (isProjection && !ImagerPixelSpacing) { + // If only Pixel Spacing is present, and this is a projection radiograph, + // PixelSpacing should be used, but the user should be informed that + // what it means is unknown + return { + PixelSpacing, + type: TYPES.UNKNOWN, + isProjection, + }; + } else if ( + PixelSpacing && + ImagerPixelSpacing && + PixelSpacing === ImagerPixelSpacing + ) { + // If Imager Pixel Spacing and Pixel Spacing are present and they have the same values, + // then the user should be informed that the measurements are at the detector plane + return { + PixelSpacing, + type: TYPES.DETECTOR, + isProjection, + }; + } else if ( + PixelSpacing && + ImagerPixelSpacing && + PixelSpacing !== ImagerPixelSpacing + ) { + // If Imager Pixel Spacing and Pixel Spacing are present and they have different values, + // then the user should be informed that these are "calibrated" + // (in some unknown manner if Pixel Spacing Calibration Type and/or + // Pixel Spacing Calibration Description are absent) + return { + PixelSpacing, + type: TYPES.CALIBRATED, + isProjection, + PixelSpacingCalibrationType, + PixelSpacingCalibrationDescription, + }; + } else if (!PixelSpacing && ImagerPixelSpacing) { + let CorrectedImagerPixelSpacing = ImagerPixelSpacing; + if (EstimatedRadiographicMagnificationFactor) { + // Note that in IHE Mammo profile compliant displays, the value of Imager Pixel Spacing is required to be corrected by + // Estimated Radiographic Magnification Factor and the user informed of that. + // TODO: should this correction be done before all of this logic? + CorrectedImagerPixelSpacing = ImagerPixelSpacing.map( + (pixelSpacing) => + pixelSpacing / EstimatedRadiographicMagnificationFactor + ); + } else { + console.warn( + 'EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing.' + ); + } + + return { + PixelSpacing: CorrectedImagerPixelSpacing, + isProjection, + }; + } else if ( + SequenceOfUltrasoundRegions && + typeof SequenceOfUltrasoundRegions === 'object' + ) { + const { PhysicalDeltaX, PhysicalDeltaY } = SequenceOfUltrasoundRegions; + const USPixelSpacing = [PhysicalDeltaX * 10, PhysicalDeltaY * 10]; + + return { + PixelSpacing: USPixelSpacing, + }; + } else if ( + SequenceOfUltrasoundRegions && + Array.isArray(SequenceOfUltrasoundRegions) && + SequenceOfUltrasoundRegions.length > 1 + ) { + console.warn( + 'Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.' + ); + } else if (isProjection === false && !ImagerPixelSpacing) { + // If only Pixel Spacing is present, and this is not a projection radiograph, + // we can stop here + return { + PixelSpacing, + type: TYPES.NOT_APPLICABLE, + isProjection, + }; + } + + console.warn( + 'Unknown combination of PixelSpacing and ImagerPixelSpacing identified. Unable to determine spacing.' + ); +} diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initCornerstoneDICOMImageLoader.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initCornerstoneDICOMImageLoader.js new file mode 100644 index 0000000..1bafa53 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initCornerstoneDICOMImageLoader.js @@ -0,0 +1,47 @@ +import dicomParser from 'dicom-parser'; +import * as cornerstone from '@cornerstonejs/core'; +import * as cornerstoneTools from '@cornerstonejs/tools'; +import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader'; + +window.cornerstone = cornerstone; +window.cornerstoneTools = cornerstoneTools; +const { preferSizeOverAccuracy, useNorm16Texture } = + cornerstone.getConfiguration().rendering; + +export default function initCornerstoneDICOMImageLoader() { + // TODO: 此处非常的蛇皮 + cornerstone.setUseSharedArrayBuffer(false) + cornerstone.setConfiguration({ + detectGPUConfig: { + benchmarksURL: "http://localhost:9000" + } + }) + cornerstoneDICOMImageLoader.external.cornerstone = cornerstone; + cornerstoneDICOMImageLoader.external.dicomParser = dicomParser; + cornerstoneDICOMImageLoader.configure({ + useWebWorkers: true, + decodeConfig: { + convertFloatPixelDataToInt: false, + use16BitDataType: preferSizeOverAccuracy || useNorm16Texture, + }, + }); + + let maxWebWorkers = 1; + + if (navigator.hardwareConcurrency) { + maxWebWorkers = Math.min(navigator.hardwareConcurrency, 7); + } + + var config = { + maxWebWorkers, + startWebWorkersOnDemand: false, + taskConfiguration: { + decodeTask: { + initializeCodecsOnStartup: false, + strict: false, + }, + }, + }; + + cornerstoneDICOMImageLoader.webWorkerManager.initialize(config); +} diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initDemo.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initDemo.js new file mode 100644 index 0000000..ec5eb4e --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initDemo.js @@ -0,0 +1,13 @@ +import initProviders from './initProviders.js'; +import initCornerstoneDICOMImageLoader from './initCornerstoneDICOMImageLoader'; +import initVolumeLoader from './initVolumeLoader'; +import { init as csRenderInit } from '@cornerstonejs/core'; +import { init as csToolsInit } from '@cornerstonejs/tools'; + +export default async function initDemo() { + initProviders(); + initCornerstoneDICOMImageLoader(); + initVolumeLoader(); + await csRenderInit(); + await csToolsInit(); +} \ No newline at end of file diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initProviders.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initProviders.js new file mode 100644 index 0000000..3d12f3f --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initProviders.js @@ -0,0 +1,17 @@ +import * as cornerstone from '@cornerstonejs/core'; +import ptScalingMetaDataProvider from './ptScalingMetaDataProvider'; + +const { calibratedPixelSpacingMetadataProvider } = cornerstone.utilities; + +export default function initProviders() { + cornerstone.metaData.addProvider( + ptScalingMetaDataProvider.get.bind(ptScalingMetaDataProvider), + 10000 + ); + cornerstone.metaData.addProvider( + calibratedPixelSpacingMetadataProvider.get.bind( + calibratedPixelSpacingMetadataProvider + ), + 11000 + ); +} diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initVolumeLoader.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initVolumeLoader.js new file mode 100644 index 0000000..22a81d6 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/initVolumeLoader.js @@ -0,0 +1,19 @@ +import { volumeLoader } from '@cornerstonejs/core'; +import { + cornerstoneStreamingImageVolumeLoader, + cornerstoneStreamingDynamicImageVolumeLoader, +} from '@cornerstonejs/streaming-image-volume-loader'; + +export default function initVolumeLoader() { + volumeLoader.registerUnknownVolumeLoader( + cornerstoneStreamingImageVolumeLoader + ); + volumeLoader.registerVolumeLoader( + 'cornerstoneStreamingImageVolume', + cornerstoneStreamingImageVolumeLoader + ); + volumeLoader.registerVolumeLoader( + 'cornerstoneStreamingDynamicImageVolume', + cornerstoneStreamingDynamicImageVolumeLoader + ); +} diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/ptScalingMetaDataProvider.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/ptScalingMetaDataProvider.js new file mode 100644 index 0000000..52fa9c8 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/ptScalingMetaDataProvider.js @@ -0,0 +1,17 @@ +import { utilities as csUtils } from '@cornerstonejs/core'; + +const scalingPerImageId = {}; + +function addInstance(imageId, scalingMetaData) { + const imageURI = csUtils.imageIdToURI(imageId); + scalingPerImageId[imageURI] = scalingMetaData; +} + +function get(type, imageId) { + if (type === 'scalingModule') { + const imageURI = csUtils.imageIdToURI(imageId); + return scalingPerImageId[imageURI]; + } +} + +export default { addInstance, get }; diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/util/removeInvalidTags.js b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/removeInvalidTags.js new file mode 100644 index 0000000..abf7652 --- /dev/null +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/removeInvalidTags.js @@ -0,0 +1,33 @@ +/** + * Remove invalid tags from a metadata and return a new object. + * + * At this time it is only removing tags that has `null` or `undefined` values + * which is our main goal because that breaks when `naturalizeDataset(...)` is + * called. + * + * Validating the tag id using regex like /^[a-fA-F0-9]{8}$/ make it run + * +50% slower and looping through all characteres (split+every+Set or simple + * FOR+Set) double the time it takes to run. It is currently taking +12ms/1k + * images on average which can change depending on the machine. + * + * @param srcMetadata - source metadata + * @returns new metadata object without invalid tags + */ +function removeInvalidTags(srcMetadata) { + // Object.create(null) make it ~9% faster + const dstMetadata = Object.create(null); + const tagIds = Object.keys(srcMetadata); + let tagValue; + + tagIds.forEach((tagId) => { + tagValue = srcMetadata[tagId]; + + if (tagValue !== undefined && tagValue !== null) { + dstMetadata[tagId] = tagValue; + } + }); + + return dstMetadata; +} + +export { removeInvalidTags as default, removeInvalidTags }; diff --git a/apps/aorta/src/modules/Root/Viewer/Crosshair/setCtTransferFunctionForVolumeActor.ts b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/setCtTransferFunctionForVolumeActor.js similarity index 52% rename from apps/aorta/src/modules/Root/Viewer/Crosshair/setCtTransferFunctionForVolumeActor.ts rename to apps/aorta/src/modules/Root/Viewer/Crosshair/util/setCtTransferFunctionForVolumeActor.js index 3be3a65..acc9ab9 100644 --- a/apps/aorta/src/modules/Root/Viewer/Crosshair/setCtTransferFunctionForVolumeActor.ts +++ b/apps/aorta/src/modules/Root/Viewer/Crosshair/util/setCtTransferFunctionForVolumeActor.js @@ -1,20 +1,16 @@ -import { VolumeActor } from "@cornerstonejs/core/dist/types/types"; - const windowWidth = 400; const windowCenter = 40; const lower = windowCenter - windowWidth / 2.0; const upper = windowCenter + windowWidth / 2.0; -export const ctVoiRange = { lower, upper }; +const ctVoiRange = { lower, upper }; -export const setCtTransferFunctionForVolumeActor = ({ - volumeActor, -}: { - volumeActor: VolumeActor; -}) => { +export default function setCtTransferFunctionForVolumeActor({ volumeActor }) { volumeActor .getProperty() .getRGBTransferFunction(0) .setMappingRange(lower, upper); -}; +} + +export { ctVoiRange }; diff --git a/apps/aorta/src/modules/Root/Viewer/VolumeViewer/index.tsx b/apps/aorta/src/modules/Root/Viewer/StackViewer/index.tsx similarity index 90% rename from apps/aorta/src/modules/Root/Viewer/VolumeViewer/index.tsx rename to apps/aorta/src/modules/Root/Viewer/StackViewer/index.tsx index 23f559f..622f595 100644 --- a/apps/aorta/src/modules/Root/Viewer/VolumeViewer/index.tsx +++ b/apps/aorta/src/modules/Root/Viewer/StackViewer/index.tsx @@ -1,13 +1,13 @@ import { useEffect, useRef } from "react"; import { Enums, RenderingEngine, cache } from "@cornerstonejs/core"; -import { initCornerstone } from "../CornerstoneDicomLoader/initCornerstoneDicomImageLoader"; +import { initCornerstone } from "../CornerstoneDicomLoader/init"; import { createImageIdsAndCacheMetaData } from "../CornerstoneDicomLoader/createImageIdsAndCacheMetaData"; import { IStackViewport, PublicViewportInput, } from "@cornerstonejs/core/dist/types/types"; -interface VolumeViewerProps { +interface StackViewerProps { children?: JSX.Element; } @@ -21,7 +21,7 @@ const StudyInstanceUID = const SeriesInstanceUID = "1.3.12.2.1107.5.1.4.76315.30000021042706150001900118311"; -export const VolumeViewer = (props: VolumeViewerProps) => { +export const StackViewer = (props: StackViewerProps) => { const dicomRef = useRef(null); const run = async () => { diff --git a/apps/aorta/src/modules/Root/Viewer/VolumeViewer/type.d.ts b/apps/aorta/src/modules/Root/Viewer/StackViewer/type.d.ts similarity index 100% rename from apps/aorta/src/modules/Root/Viewer/VolumeViewer/type.d.ts rename to apps/aorta/src/modules/Root/Viewer/StackViewer/type.d.ts diff --git a/apps/aorta/src/modules/Root/Viewer/index.tsx b/apps/aorta/src/modules/Root/Viewer/index.tsx index e331896..1ccc4eb 100644 --- a/apps/aorta/src/modules/Root/Viewer/index.tsx +++ b/apps/aorta/src/modules/Root/Viewer/index.tsx @@ -1,7 +1,7 @@ -import { Corsshair } from "./Crosshair"; +import { CrosshairMpr } from "./Crosshair"; import { DiffViewer } from "./DiffViewer"; import { MprViewer } from "./MprViewer"; -import { VolumeViewer } from "./VolumeViewer"; +import { StackViewer } from "./StackViewer"; interface RootViewerProps { children?: JSX.Element; @@ -10,7 +10,8 @@ interface RootViewerProps { export const RootViewer = (props: RootViewerProps) => { return (
- + + {/* */}
); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2421a51..bc49621 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,12 @@ importers: apps/aorta: dependencies: + '@cornerstonejs/calculate-suv': + specifier: 1.1.0 + version: 1.1.0 '@cornerstonejs/core': specifier: 1.41.0 - version: 192.168.4.201+4873/@cornerstonejs/core@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) + version: 1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) '@cornerstonejs/dicom-image-loader': specifier: 1.41.0 version: 192.168.4.201+4873/@cornerstonejs/dicom-image-loader@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) @@ -24,8 +27,8 @@ importers: specifier: 1.41.0 version: 1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) '@cornerstonejs/tools': - specifier: 3.0.2 - version: 3.0.2 + specifier: 1.41.0 + version: 1.41.0(@babel/preset-env@7.21.5)(@kitware/vtk.js@29.2.0)(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(autoprefixer@10.4.15)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)(webpack@5.75.0)(wslink@1.11.4) '@kitware/vtk.js': specifier: 29.2.0 version: 192.168.4.201+4873/@kitware/vtk.js@29.2.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) @@ -44,12 +47,6 @@ importers: axios: specifier: 1.3.6 version: 1.3.6 - cornerstone-core: - specifier: 2.6.1 - version: 192.168.4.201+4873/cornerstone-core@2.6.1 - cornerstone-wado-image-loader: - specifier: 4.13.2 - version: 192.168.4.201+4873/cornerstone-wado-image-loader@4.13.2(@babel/core@7.21.8)(cornerstone-core@2.6.1)(eslint@8.44.0) dcmjs: specifier: 0.30.0 version: 0.30.0 @@ -1614,6 +1611,7 @@ packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + dev: true /@acuminous/bitsyntax@0.1.2: resolution: {integrity: sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==} @@ -2972,12 +2970,6 @@ packages: regenerator-runtime: 0.14.0 dev: false - /@babel/runtime@7.1.2: - resolution: {integrity: sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==, tarball: http://192.168.4.201:4873/@babel%2fruntime/-/runtime-7.1.2.tgz} - dependencies: - regenerator-runtime: 0.12.1 - dev: false - /@babel/runtime@7.17.9: resolution: {integrity: sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==, tarball: http://192.168.4.201:4873/@babel%2fruntime/-/runtime-7.17.9.tgz} engines: {node: '>=6.9.0'} @@ -3033,7 +3025,7 @@ packages: /@changesets/apply-release-plan@6.1.4: resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/config': 2.3.1 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 2.0.0 @@ -3051,7 +3043,7 @@ packages: /@changesets/assemble-release-plan@5.2.4: resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.6 '@changesets/types': 5.2.1 @@ -3135,7 +3127,7 @@ packages: /@changesets/get-release-plan@3.0.17: resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/assemble-release-plan': 5.2.4 '@changesets/config': 2.3.1 '@changesets/pre': 1.0.14 @@ -3151,7 +3143,7 @@ packages: /@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -3176,7 +3168,7 @@ packages: /@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -3186,7 +3178,7 @@ packages: /@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/git': 2.0.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.16 @@ -3207,7 +3199,7 @@ packages: /@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 @@ -3221,6 +3213,11 @@ packages: dev: true optional: true + /@cornerstonejs/calculate-suv@1.1.0: + resolution: {integrity: sha512-Q9XraiDJif9aMFArD2iEuDO/HXbcRVCqB7KfaHgDrdTTjgDFovS91Psbdim7crypRSvE6dh/+HKeFNHdvNkA6w==, tarball: http://192.168.4.201:4873/@cornerstonejs%2fcalculate-suv/-/calculate-suv-1.1.0.tgz} + engines: {node: '>=10'} + dev: false + /@cornerstonejs/core@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4): resolution: {integrity: sha512-bAHLDGixOgenDPQee+LaB7N7TSDix9RLAwVDFpXWVglFadYxWBtupWg3b6+lMGZGUL2PLfBI9z7nnGQOCV4pgw==, tarball: http://192.168.4.201:4873/@cornerstonejs%2fcore/-/core-1.41.0.tgz} dependencies: @@ -3248,12 +3245,31 @@ packages: - wslink dev: false - /@cornerstonejs/tools@3.0.2: - resolution: {integrity: sha512-RgPQbRey8gMIjvGUgEdMQ4E6kOxXZzqwFzmmY6YgwVc1YPubeODoESgPDhlIfasTN7DWAxcmoFRyHMQgcvu2lg==, tarball: http://192.168.4.201:4873/@cornerstonejs%2ftools/-/tools-3.0.2.tgz} - deprecated: Use cornerstone-tools instead if you are looking for cornerstone legacy, this package name will be reused for cornerstone3d tools soon + /@cornerstonejs/tools@1.41.0(@babel/preset-env@7.21.5)(@kitware/vtk.js@29.2.0)(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(autoprefixer@10.4.15)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)(webpack@5.75.0)(wslink@1.11.4): + resolution: {integrity: sha512-+UIFPrHFiTNzNN7xNDcTsNVDJqW7RuxzMuqCFm7nMDrKvkzNmTrykVc8BjnYUYokh7RGmOhzRGtWMnmO1lP0Tg==, tarball: http://192.168.4.201:4873/@cornerstonejs%2ftools/-/tools-1.41.0.tgz} + peerDependencies: + '@kitware/vtk.js': 27.3.1 + '@types/d3-array': ^3.0.4 + '@types/d3-interpolate': ^3.0.1 + d3-array: ^3.2.3 + d3-interpolate: ^3.0.1 + gl-matrix: ^3.4.3 dependencies: - '@babel/runtime': 7.1.2 - cornerstone-math: 0.1.10 + '@cornerstonejs/core': 1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) + '@kitware/vtk.js': 192.168.4.201+4873/@kitware/vtk.js@29.2.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) + '@types/d3-array': 3.2.1 + '@types/d3-interpolate': 3.0.4 + comlink: 4.4.1 + d3-array: 3.2.4 + d3-interpolate: 3.0.1 + gl-matrix: 3.4.3 + lodash.clonedeep: 4.5.0 + lodash.get: 4.4.2 + transitivePeerDependencies: + - '@babel/preset-env' + - autoprefixer + - webpack + - wslink dev: false /@cspotcode/source-map-support@0.8.1: @@ -3485,10 +3501,12 @@ packages: dependencies: eslint: 8.44.0 eslint-visitor-keys: 3.4.3 + dev: true /@eslint-community/regexpp@4.8.0: resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true /@eslint/eslintrc@2.1.2: resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} @@ -3505,10 +3523,12 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true /@eslint/js@8.44.0: resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true /@fingerprintjs/fingerprintjs@4.0.1: resolution: {integrity: sha512-utXfX0ntmU08MxQ1cfKRbri57xb+aqYNIt2UNYcPsT/fQgKhZsnIBGRIhEifMZ7NZDyGLAhctWaytDkC27fibA==} @@ -3525,13 +3545,16 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color + dev: true /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + dev: true /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true /@ioredis/commands@1.2.0: resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -3641,7 +3664,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -4152,10 +4175,12 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -4163,6 +4188,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + dev: true /@nuxtjs/opencollective@0.3.2: resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} @@ -4345,7 +4371,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.3.2 rc-align: 4.0.15(react-dom@18.2.0)(react@18.2.0) @@ -4542,6 +4568,20 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true + /@types/d3-array@3.2.1: + resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==, tarball: http://192.168.4.201:4873/@types%2fd3-array/-/d3-array-3.2.1.tgz} + dev: false + + /@types/d3-color@3.1.3: + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==, tarball: http://192.168.4.201:4873/@types%2fd3-color/-/d3-color-3.1.3.tgz} + dev: false + + /@types/d3-interpolate@3.0.4: + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==, tarball: http://192.168.4.201:4873/@types%2fd3-interpolate/-/d3-interpolate-3.0.4.tgz} + dependencies: + '@types/d3-color': 3.1.3 + dev: false + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -5261,6 +5301,7 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.10.0 + dev: true /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -6082,6 +6123,7 @@ packages: /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + dev: true /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -6604,10 +6646,6 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cornerstone-math@0.1.10: - resolution: {integrity: sha512-23XSAyP7t70ANvhFyqwvva+zFd1bQ2d5GL7tg9qKE932WmImjA2Y9tiy5n0iTtnf51W/78Png8Lia2o4dCdJaQ==, tarball: http://192.168.4.201:4873/cornerstone-math/-/cornerstone-math-0.1.10.tgz} - dev: false - /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -7008,6 +7046,7 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -7123,6 +7162,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 + dev: true /dom-align@1.12.4: resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} @@ -7447,6 +7487,7 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: true /eslint-config-prettier@8.8.0(eslint@8.44.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} @@ -7504,10 +7545,12 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + dev: true /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} @@ -7555,6 +7598,7 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color + dev: true /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -7563,6 +7607,7 @@ packages: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 + dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -7574,6 +7619,7 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 + dev: true /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -7761,6 +7807,7 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -7786,6 +7833,7 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 + dev: true /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} @@ -7817,6 +7865,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.1.0 + dev: true /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -7869,6 +7918,7 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} @@ -7884,6 +7934,7 @@ packages: flatted: 3.2.7 keyv: 4.5.3 rimraf: 3.0.2 + dev: true /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} @@ -8120,6 +8171,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -8163,9 +8215,10 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.20.2 + dev: true /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, tarball: http://192.168.4.201:4873/globalthis/-/globalthis-1.0.3.tgz} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 @@ -8207,6 +8260,7 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} @@ -8470,6 +8524,7 @@ packages: /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + dev: true /image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: http://192.168.4.201:4873/image-size/-/image-size-0.5.5.tgz} @@ -8485,6 +8540,7 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} @@ -8497,6 +8553,7 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -8780,6 +8837,7 @@ packages: /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + dev: true /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} @@ -8999,6 +9057,7 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -9011,6 +9070,7 @@ packages: /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true /json-stream@1.0.0: resolution: {integrity: sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==} @@ -9107,6 +9167,7 @@ packages: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: json-buffer: 3.0.1 + dev: true /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -9172,6 +9233,7 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true /libphonenumber-js@1.10.44: resolution: {integrity: sha512-svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ==} @@ -9231,6 +9293,7 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -9246,6 +9309,10 @@ packages: /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, tarball: http://192.168.4.201:4873/lodash.get/-/lodash.get-4.4.2.tgz} + dev: false + /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} @@ -9255,6 +9322,7 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -9852,6 +9920,7 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true /ndarray@1.0.19: resolution: {integrity: sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==, tarball: http://192.168.4.201:4873/ndarray/-/ndarray-1.0.19.tgz} @@ -10024,6 +10093,7 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} @@ -10103,6 +10173,7 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -10115,6 +10186,7 @@ packages: engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} @@ -10148,6 +10220,7 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -10643,6 +10716,7 @@ packages: /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + dev: true /prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} @@ -10771,6 +10845,7 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -11090,7 +11165,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@rc-component/trigger': 1.15.6(react-dom@18.2.0)(react@18.2.0) classnames: 2.3.2 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) @@ -11122,7 +11197,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 classnames: 2.3.2 rc-util: 5.37.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -11220,7 +11295,7 @@ packages: moment: optional: true dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@rc-component/trigger': 1.15.6(react-dom@18.2.0)(react@18.2.0) classnames: 2.3.2 dayjs: 1.11.9 @@ -11291,7 +11366,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 classnames: 2.3.2 rc-util: 5.37.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 @@ -11338,7 +11413,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 '@rc-component/trigger': 1.15.6(react-dom@18.2.0)(react@18.2.0) classnames: 2.3.2 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) @@ -11463,7 +11538,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 classnames: 2.3.2 rc-input: 1.1.1(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.3.1(react-dom@18.2.0)(react@18.2.0) @@ -11522,7 +11597,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 classnames: 2.3.2 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-util: 5.37.0(react-dom@18.2.0)(react@18.2.0) @@ -11550,7 +11625,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 16.13.1 @@ -11808,10 +11883,6 @@ packages: /regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - /regenerator-runtime@0.12.1: - resolution: {integrity: sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==, tarball: http://192.168.4.201:4873/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz} - dev: false - /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, tarball: http://192.168.4.201:4873/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} requiresBuild: true @@ -11823,7 +11894,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.22.15 + '@babel/runtime': 7.22.15 /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} @@ -11913,6 +11984,7 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -11941,6 +12013,7 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true /rgbcolor@1.0.1: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} @@ -12059,6 +12132,7 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true /rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} @@ -12328,7 +12402,7 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, tarball: http://192.168.4.201:4873/shelljs/-/shelljs-0.8.5.tgz} engines: {node: '>=4'} hasBin: true dependencies: @@ -12684,6 +12758,7 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + dev: true /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -12899,6 +12974,7 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} @@ -13171,6 +13247,7 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 + dev: true /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} @@ -13180,6 +13257,7 @@ packages: /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + dev: true /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} @@ -14322,234 +14400,7 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - - 192.168.4.201+4873/@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@ampproject%2fremapping/-/remapping-2.2.1.tgz} - name: '@ampproject/remapping' - version: 2.2.1 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 192.168.4.201+4873/@jridgewell/gen-mapping@0.3.3 - '@jridgewell/trace-mapping': 192.168.4.201+4873/@jridgewell/trace-mapping@0.3.19 - dev: false - - 192.168.4.201+4873/@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fcode-frame/-/code-frame-7.22.13.tgz} - name: '@babel/code-frame' - version: 7.22.13 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 192.168.4.201+4873/@babel/highlight@7.22.13 - chalk: 192.168.4.201+4873/chalk@2.4.2 - dev: false - - 192.168.4.201+4873/@babel/compat-data@7.22.9: - resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fcompat-data/-/compat-data-7.22.9.tgz} - name: '@babel/compat-data' - version: 7.22.9 - engines: {node: '>=6.9.0'} - dev: false - - 192.168.4.201+4873/@babel/core@7.22.15: - resolution: {integrity: sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fcore/-/core-7.22.15.tgz} - name: '@babel/core' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 192.168.4.201+4873/@ampproject/remapping@2.2.1 - '@babel/code-frame': 192.168.4.201+4873/@babel/code-frame@7.22.13 - '@babel/generator': 192.168.4.201+4873/@babel/generator@7.22.15 - '@babel/helper-compilation-targets': 192.168.4.201+4873/@babel/helper-compilation-targets@7.22.15 - '@babel/helper-module-transforms': 192.168.4.201+4873/@babel/helper-module-transforms@7.22.15(@babel/core@7.22.15) - '@babel/helpers': 192.168.4.201+4873/@babel/helpers@7.22.15 - '@babel/parser': 192.168.4.201+4873/@babel/parser@7.22.16 - '@babel/template': 192.168.4.201+4873/@babel/template@7.22.15 - '@babel/traverse': 192.168.4.201+4873/@babel/traverse@7.22.15 - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - convert-source-map: 192.168.4.201+4873/convert-source-map@1.9.0 - debug: 192.168.4.201+4873/debug@4.3.4 - gensync: 192.168.4.201+4873/gensync@1.0.0-beta.2 - json5: 192.168.4.201+4873/json5@2.2.3 - semver: 192.168.4.201+4873/semver@6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - 192.168.4.201+4873/@babel/eslint-parser@7.23.3(@babel/core@7.21.8)(eslint@8.44.0): - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2feslint-parser/-/eslint-parser-7.23.3.tgz} - id: 192.168.4.201+4873/@babel/eslint-parser/7.23.3 - name: '@babel/eslint-parser' - version: 7.23.3 - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.21.8 - '@nicolo-ribaudo/eslint-scope-5-internals': 192.168.4.201+4873/@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1 - eslint: 8.44.0 - eslint-visitor-keys: 192.168.4.201+4873/eslint-visitor-keys@2.1.0 - semver: 192.168.4.201+4873/semver@6.3.1 - dev: false - - 192.168.4.201+4873/@babel/generator@7.22.15: - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fgenerator/-/generator-7.22.15.tgz} - name: '@babel/generator' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - '@jridgewell/gen-mapping': 192.168.4.201+4873/@jridgewell/gen-mapping@0.3.3 - '@jridgewell/trace-mapping': 192.168.4.201+4873/@jridgewell/trace-mapping@0.3.19 - jsesc: 192.168.4.201+4873/jsesc@2.5.2 - dev: false - - 192.168.4.201+4873/@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz} - name: '@babel/helper-compilation-targets' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 192.168.4.201+4873/@babel/compat-data@7.22.9 - '@babel/helper-validator-option': 192.168.4.201+4873/@babel/helper-validator-option@7.22.15 - browserslist: 192.168.4.201+4873/browserslist@4.21.10 - lru-cache: 192.168.4.201+4873/lru-cache@5.1.1 - semver: 192.168.4.201+4873/semver@6.3.1 - dev: false - - 192.168.4.201+4873/@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz} - name: '@babel/helper-environment-visitor' - version: 7.22.5 - engines: {node: '>=6.9.0'} - dev: false - - 192.168.4.201+4873/@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-function-name/-/helper-function-name-7.22.5.tgz} - name: '@babel/helper-function-name' - version: 7.22.5 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 192.168.4.201+4873/@babel/template@7.22.15 - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz} - name: '@babel/helper-hoist-variables' - version: 7.22.5 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-module-imports/-/helper-module-imports-7.22.15.tgz} - name: '@babel/helper-module-imports' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-module-transforms@7.22.15(@babel/core@7.22.15): - resolution: {integrity: sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.22.15.tgz} - id: 192.168.4.201+4873/@babel/helper-module-transforms/7.22.15 - name: '@babel/helper-module-transforms' - version: 7.22.15 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 192.168.4.201+4873/@babel/core@7.22.15 - '@babel/helper-environment-visitor': 192.168.4.201+4873/@babel/helper-environment-visitor@7.22.5 - '@babel/helper-module-imports': 192.168.4.201+4873/@babel/helper-module-imports@7.22.15 - '@babel/helper-simple-access': 192.168.4.201+4873/@babel/helper-simple-access@7.22.5 - '@babel/helper-split-export-declaration': 192.168.4.201+4873/@babel/helper-split-export-declaration@7.22.6 - '@babel/helper-validator-identifier': 192.168.4.201+4873/@babel/helper-validator-identifier@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-simple-access/-/helper-simple-access-7.22.5.tgz} - name: '@babel/helper-simple-access' - version: 7.22.5 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz} - name: '@babel/helper-split-export-declaration' - version: 7.22.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-string-parser/-/helper-string-parser-7.22.5.tgz} - name: '@babel/helper-string-parser' - version: 7.22.5 - engines: {node: '>=6.9.0'} - dev: false - - 192.168.4.201+4873/@babel/helper-validator-identifier@7.22.15: - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz} - name: '@babel/helper-validator-identifier' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dev: false - - 192.168.4.201+4873/@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelper-validator-option/-/helper-validator-option-7.22.15.tgz} - name: '@babel/helper-validator-option' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dev: false - - 192.168.4.201+4873/@babel/helpers@7.22.15: - resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhelpers/-/helpers-7.22.15.tgz} - name: '@babel/helpers' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 192.168.4.201+4873/@babel/template@7.22.15 - '@babel/traverse': 192.168.4.201+4873/@babel/traverse@7.22.15 - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - transitivePeerDependencies: - - supports-color - dev: false - - 192.168.4.201+4873/@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fhighlight/-/highlight-7.22.13.tgz} - name: '@babel/highlight' - version: 7.22.13 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 192.168.4.201+4873/@babel/helper-validator-identifier@7.22.15 - chalk: 192.168.4.201+4873/chalk@2.4.2 - js-tokens: 192.168.4.201+4873/js-tokens@4.0.0 - dev: false - - 192.168.4.201+4873/@babel/parser@7.22.16: - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fparser/-/parser-7.22.16.tgz} - name: '@babel/parser' - version: 7.22.16 - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/runtime@7.17.9: - resolution: {integrity: sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fruntime/-/runtime-7.17.9.tgz} - name: '@babel/runtime' - version: 7.17.9 - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 192.168.4.201+4873/regenerator-runtime@0.13.11 - dev: false + dev: true 192.168.4.201+4873/@babel/runtime@7.22.11: resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2fruntime/-/runtime-7.22.11.tgz} @@ -14567,47 +14418,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 192.168.4.201+4873/regenerator-runtime@0.14.0 - - 192.168.4.201+4873/@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2ftemplate/-/template-7.22.15.tgz} - name: '@babel/template' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 192.168.4.201+4873/@babel/code-frame@7.22.13 - '@babel/parser': 192.168.4.201+4873/@babel/parser@7.22.16 - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - dev: false - - 192.168.4.201+4873/@babel/traverse@7.22.15: - resolution: {integrity: sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2ftraverse/-/traverse-7.22.15.tgz} - name: '@babel/traverse' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 192.168.4.201+4873/@babel/code-frame@7.22.13 - '@babel/generator': 192.168.4.201+4873/@babel/generator@7.22.15 - '@babel/helper-environment-visitor': 192.168.4.201+4873/@babel/helper-environment-visitor@7.22.5 - '@babel/helper-function-name': 192.168.4.201+4873/@babel/helper-function-name@7.22.5 - '@babel/helper-hoist-variables': 192.168.4.201+4873/@babel/helper-hoist-variables@7.22.5 - '@babel/helper-split-export-declaration': 192.168.4.201+4873/@babel/helper-split-export-declaration@7.22.6 - '@babel/parser': 192.168.4.201+4873/@babel/parser@7.22.16 - '@babel/types': 192.168.4.201+4873/@babel/types@7.22.15 - debug: 192.168.4.201+4873/debug@4.3.4 - globals: 192.168.4.201+4873/globals@11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - 192.168.4.201+4873/@babel/types@7.22.15: - resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@babel%2ftypes/-/types-7.22.15.tgz} - name: '@babel/types' - version: 7.22.15 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 192.168.4.201+4873/@babel/helper-string-parser@7.22.5 - '@babel/helper-validator-identifier': 192.168.4.201+4873/@babel/helper-validator-identifier@7.22.15 - to-fast-properties: 192.168.4.201+4873/to-fast-properties@2.0.0 dev: false 192.168.4.201+4873/@cornerstonejs/codec-charls@1.2.3: @@ -14638,24 +14448,6 @@ packages: engines: {node: '>=0.14'} dev: false - 192.168.4.201+4873/@cornerstonejs/core@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4): - resolution: {integrity: sha512-bAHLDGixOgenDPQee+LaB7N7TSDix9RLAwVDFpXWVglFadYxWBtupWg3b6+lMGZGUL2PLfBI9z7nnGQOCV4pgw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@cornerstonejs%2fcore/-/core-1.41.0.tgz} - id: 192.168.4.201+4873/@cornerstonejs/core/1.41.0 - name: '@cornerstonejs/core' - version: 1.41.0 - dependencies: - '@kitware/vtk.js': 192.168.4.201+4873/@kitware/vtk.js@27.3.1(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) - comlink: 192.168.4.201+4873/comlink@4.4.1 - detect-gpu: 192.168.4.201+4873/detect-gpu@5.0.37 - gl-matrix: 192.168.4.201+4873/gl-matrix@3.4.3 - lodash.clonedeep: 192.168.4.201+4873/lodash.clonedeep@4.5.0 - transitivePeerDependencies: - - '@babel/preset-env' - - autoprefixer - - webpack - - wslink - dev: false - 192.168.4.201+4873/@cornerstonejs/dicom-image-loader@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4): resolution: {integrity: sha512-HoCkx8uAkAKMVKTdMLgpEJjURS3pe9J7VDg7TDa7cPsjPz/d1pW6zwUQHenwxIoE0bVygtwpZXaUP2cX9Rfemg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@cornerstonejs%2fdicom-image-loader/-/dicom-image-loader-1.41.0.tgz} id: 192.168.4.201+4873/@cornerstonejs/dicom-image-loader/1.41.0 @@ -14666,7 +14458,7 @@ packages: '@cornerstonejs/codec-libjpeg-turbo-8bit': 192.168.4.201+4873/@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.2 '@cornerstonejs/codec-openjpeg': 192.168.4.201+4873/@cornerstonejs/codec-openjpeg@1.2.2 '@cornerstonejs/codec-openjph': 192.168.4.201+4873/@cornerstonejs/codec-openjph@2.4.5 - '@cornerstonejs/core': 192.168.4.201+4873/@cornerstonejs/core@1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) + '@cornerstonejs/core': 1.41.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4) dicom-parser: 192.168.4.201+4873/dicom-parser@1.8.21 pako: 192.168.4.201+4873/pako@2.1.0 uuid: 192.168.4.201+4873/uuid@9.0.0 @@ -14677,100 +14469,6 @@ packages: - wslink dev: false - 192.168.4.201+4873/@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@istanbuljs%2fschema/-/schema-0.1.3.tgz} - name: '@istanbuljs/schema' - version: 0.1.3 - engines: {node: '>=8'} - dev: false - - 192.168.4.201+4873/@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jridgewell%2fgen-mapping/-/gen-mapping-0.3.3.tgz} - name: '@jridgewell/gen-mapping' - version: 0.3.3 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 192.168.4.201+4873/@jridgewell/set-array@1.1.2 - '@jridgewell/sourcemap-codec': 192.168.4.201+4873/@jridgewell/sourcemap-codec@1.4.15 - '@jridgewell/trace-mapping': 192.168.4.201+4873/@jridgewell/trace-mapping@0.3.19 - dev: false - - 192.168.4.201+4873/@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jridgewell%2fresolve-uri/-/resolve-uri-3.1.1.tgz} - name: '@jridgewell/resolve-uri' - version: 3.1.1 - engines: {node: '>=6.0.0'} - dev: false - - 192.168.4.201+4873/@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jridgewell%2fset-array/-/set-array-1.1.2.tgz} - name: '@jridgewell/set-array' - version: 1.1.2 - engines: {node: '>=6.0.0'} - dev: false - - 192.168.4.201+4873/@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.4.15.tgz} - name: '@jridgewell/sourcemap-codec' - version: 1.4.15 - dev: false - - 192.168.4.201+4873/@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jridgewell%2ftrace-mapping/-/trace-mapping-0.3.19.tgz} - name: '@jridgewell/trace-mapping' - version: 0.3.19 - dependencies: - '@jridgewell/resolve-uri': 192.168.4.201+4873/@jridgewell/resolve-uri@3.1.1 - '@jridgewell/sourcemap-codec': 192.168.4.201+4873/@jridgewell/sourcemap-codec@1.4.15 - dev: false - - 192.168.4.201+4873/@jsdevtools/coverage-istanbul-loader@3.0.5: - resolution: {integrity: sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@jsdevtools%2fcoverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz} - name: '@jsdevtools/coverage-istanbul-loader' - version: 3.0.5 - dependencies: - convert-source-map: 192.168.4.201+4873/convert-source-map@1.9.0 - istanbul-lib-instrument: 192.168.4.201+4873/istanbul-lib-instrument@4.0.3 - loader-utils: 192.168.4.201+4873/loader-utils@2.0.4 - merge-source-map: 192.168.4.201+4873/merge-source-map@1.1.0 - schema-utils: 192.168.4.201+4873/schema-utils@2.7.1 - transitivePeerDependencies: - - supports-color - dev: false - - 192.168.4.201+4873/@kitware/vtk.js@27.3.1(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4): - resolution: {integrity: sha512-GvAXdOKtDDbkaSdO+UhKnDST4CW1C3fHgaDvA0wn1ZWTLm/6SFAMzarTjpzsVGYCPoEYIhCAAlBQ7K7aDcu3Vg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@kitware%2fvtk.js/-/vtk.js-27.3.1.tgz} - id: 192.168.4.201+4873/@kitware/vtk.js/27.3.1 - name: '@kitware/vtk.js' - version: 27.3.1 - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.17.10 - autoprefixer: ^10.4.7 - wslink: ^1.1.0 - dependencies: - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/runtime': 192.168.4.201+4873/@babel/runtime@7.17.9 - autoprefixer: 10.4.15(postcss@8.4.29) - commander: 192.168.4.201+4873/commander@9.2.0 - d3-scale: 192.168.4.201+4873/d3-scale@4.0.2 - fast-deep-equal: 192.168.4.201+4873/fast-deep-equal@3.1.3 - fflate: 192.168.4.201+4873/fflate@0.7.3 - gl-matrix: 192.168.4.201+4873/gl-matrix@3.4.3 - globalthis: 192.168.4.201+4873/globalthis@1.0.3 - seedrandom: 192.168.4.201+4873/seedrandom@3.0.5 - shader-loader: 192.168.4.201+4873/shader-loader@1.3.1 - shelljs: 192.168.4.201+4873/shelljs@0.8.5 - spark-md5: 192.168.4.201+4873/spark-md5@3.0.2 - stream-browserify: 192.168.4.201+4873/stream-browserify@3.0.0 - webworker-promise: 192.168.4.201+4873/webworker-promise@0.5.0 - worker-loader: 192.168.4.201+4873/worker-loader@3.0.8(webpack@5.75.0) - wslink: 1.11.4 - xmlbuilder2: 192.168.4.201+4873/xmlbuilder2@3.0.2 - transitivePeerDependencies: - - webpack - dev: false - 192.168.4.201+4873/@kitware/vtk.js@29.2.0(@babel/preset-env@7.21.5)(autoprefixer@10.4.15)(webpack@5.75.0)(wslink@1.11.4): resolution: {integrity: sha512-2EYcDfKT8o9Q7NZW90Xa9zLLVzV9RKqOzxtpmOq5+hOR4ksqmn+mP4u+P8Z8/Pr+9myA/zNuIP506GigDCnpTA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@kitware%2fvtk.js/-/vtk.js-29.2.0.tgz} id: 192.168.4.201+4873/@kitware/vtk.js/29.2.0 @@ -14805,14 +14503,6 @@ packages: - webpack dev: false - 192.168.4.201+4873/@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@nicolo-ribaudo%2feslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz} - name: '@nicolo-ribaudo/eslint-scope-5-internals' - version: 5.1.1-v1 - dependencies: - eslint-scope: 192.168.4.201+4873/eslint-scope@5.1.1 - dev: false - 192.168.4.201+4873/@oozcitak/dom@1.15.10: resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/@oozcitak%2fdom/-/dom-1.15.10.tgz} name: '@oozcitak/dom' @@ -14884,21 +14574,12 @@ packages: name: ajv version: 6.12.6 dependencies: - fast-deep-equal: 192.168.4.201+4873/fast-deep-equal@3.1.3 + fast-deep-equal: 3.1.3 fast-json-stable-stringify: 192.168.4.201+4873/fast-json-stable-stringify@2.1.0 json-schema-traverse: 192.168.4.201+4873/json-schema-traverse@0.4.1 uri-js: 192.168.4.201+4873/uri-js@4.4.1 dev: false - 192.168.4.201+4873/ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/ansi-styles/-/ansi-styles-3.2.1.tgz} - name: ansi-styles - version: 3.2.1 - engines: {node: '>=4'} - dependencies: - color-convert: 192.168.4.201+4873/color-convert@1.9.3 - dev: false - 192.168.4.201+4873/argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/argparse/-/argparse-1.0.10.tgz} name: argparse @@ -14928,56 +14609,6 @@ packages: concat-map: 192.168.4.201+4873/concat-map@0.0.1 dev: false - 192.168.4.201+4873/browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/browserslist/-/browserslist-4.21.10.tgz} - name: browserslist - version: 4.21.10 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 192.168.4.201+4873/caniuse-lite@1.0.30001527 - electron-to-chromium: 192.168.4.201+4873/electron-to-chromium@1.4.509 - node-releases: 192.168.4.201+4873/node-releases@2.0.13 - update-browserslist-db: 192.168.4.201+4873/update-browserslist-db@1.0.11(browserslist@4.21.10) - dev: false - - 192.168.4.201+4873/caniuse-lite@1.0.30001527: - resolution: {integrity: sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz} - name: caniuse-lite - version: 1.0.30001527 - dev: false - - 192.168.4.201+4873/chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/chalk/-/chalk-2.4.2.tgz} - name: chalk - version: 2.4.2 - engines: {node: '>=4'} - dependencies: - ansi-styles: 192.168.4.201+4873/ansi-styles@3.2.1 - escape-string-regexp: 192.168.4.201+4873/escape-string-regexp@1.0.5 - supports-color: 192.168.4.201+4873/supports-color@5.5.0 - dev: false - - 192.168.4.201+4873/color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/color-convert/-/color-convert-1.9.3.tgz} - name: color-convert - version: 1.9.3 - dependencies: - color-name: 192.168.4.201+4873/color-name@1.1.3 - dev: false - - 192.168.4.201+4873/color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/color-name/-/color-name-1.1.3.tgz} - name: color-name - version: 1.1.3 - dev: false - - 192.168.4.201+4873/comlink@4.4.1: - resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/comlink/-/comlink-4.4.1.tgz} - name: comlink - version: 4.4.1 - dev: false - 192.168.4.201+4873/commander@9.2.0: resolution: {integrity: sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/commander/-/commander-9.2.0.tgz} name: commander @@ -14991,54 +14622,6 @@ packages: version: 0.0.1 dev: false - 192.168.4.201+4873/convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/convert-source-map/-/convert-source-map-1.9.0.tgz} - name: convert-source-map - version: 1.9.0 - dev: false - - 192.168.4.201+4873/cornerstone-core@2.6.1: - resolution: {integrity: sha512-LAXjXwNnK2W65ZxpE7phVLjbijkYUrAQIGv5xqKjK8+dmIGlBxqvPHnyGwEqVDyKOWVrpXP6ymUPwrGGRwzgMg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/cornerstone-core/-/cornerstone-core-2.6.1.tgz} - name: cornerstone-core - version: 2.6.1 - dev: false - - 192.168.4.201+4873/cornerstone-wado-image-loader@4.13.2(@babel/core@7.21.8)(cornerstone-core@2.6.1)(eslint@8.44.0): - resolution: {integrity: sha512-NGqH44bY1VMY8OYuVykkLriNtZQrmoZU/S6f/1t1xX3rMc+WUMNN+yi4Nu3jp6nckLdH/bVGiigoJXrp0dTrAg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/cornerstone-wado-image-loader/-/cornerstone-wado-image-loader-4.13.2.tgz} - id: 192.168.4.201+4873/cornerstone-wado-image-loader/4.13.2 - name: cornerstone-wado-image-loader - version: 4.13.2 - peerDependencies: - cornerstone-core: ^2.6.0 - dependencies: - '@babel/eslint-parser': 192.168.4.201+4873/@babel/eslint-parser@7.23.3(@babel/core@7.21.8)(eslint@8.44.0) - '@cornerstonejs/codec-charls': 192.168.4.201+4873/@cornerstonejs/codec-charls@1.2.3 - '@cornerstonejs/codec-libjpeg-turbo-8bit': 192.168.4.201+4873/@cornerstonejs/codec-libjpeg-turbo-8bit@1.2.2 - '@cornerstonejs/codec-openjpeg': 192.168.4.201+4873/@cornerstonejs/codec-openjpeg@1.2.2 - '@cornerstonejs/codec-openjph': 192.168.4.201+4873/@cornerstonejs/codec-openjph@2.4.5 - cornerstone-core: 192.168.4.201+4873/cornerstone-core@2.6.1 - coverage-istanbul-loader: 192.168.4.201+4873/coverage-istanbul-loader@3.0.5 - date-format: 192.168.4.201+4873/date-format@4.0.14 - dicom-parser: 192.168.4.201+4873/dicom-parser@1.8.21 - pako: 192.168.4.201+4873/pako@2.1.0 - uuid: 192.168.4.201+4873/uuid@9.0.0 - transitivePeerDependencies: - - '@babel/core' - - eslint - - supports-color - dev: false - - 192.168.4.201+4873/coverage-istanbul-loader@3.0.5: - resolution: {integrity: sha512-xsw2phF0VNqUPk47V/vHXkdcTyl0tkMSmaZfLrTOhoPhPMXFelNju7utl5s7I93KXzipqDEK0YwofQSSflPz8A==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz} - name: coverage-istanbul-loader - version: 3.0.5 - engines: {node: '>=10'} - dependencies: - '@jsdevtools/coverage-istanbul-loader': 192.168.4.201+4873/@jsdevtools/coverage-istanbul-loader@3.0.5 - transitivePeerDependencies: - - supports-color - dev: false - 192.168.4.201+4873/d3-array@3.2.4: resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/d3-array/-/d3-array-3.2.4.tgz} name: d3-array @@ -15102,27 +14685,6 @@ packages: d3-array: 192.168.4.201+4873/d3-array@3.2.4 dev: false - 192.168.4.201+4873/date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/date-format/-/date-format-4.0.14.tgz} - name: date-format - version: 4.0.14 - engines: {node: '>=4.0'} - dev: false - - 192.168.4.201+4873/debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/debug/-/debug-4.3.4.tgz} - name: debug - version: 4.3.4 - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 192.168.4.201+4873/ms@2.1.2 - dev: false - 192.168.4.201+4873/define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/define-properties/-/define-properties-1.2.0.tgz} name: define-properties @@ -15133,26 +14695,12 @@ packages: object-keys: 192.168.4.201+4873/object-keys@1.1.1 dev: false - 192.168.4.201+4873/detect-gpu@5.0.37: - resolution: {integrity: sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/detect-gpu/-/detect-gpu-5.0.37.tgz} - name: detect-gpu - version: 5.0.37 - dependencies: - webgl-constants: 192.168.4.201+4873/webgl-constants@1.1.1 - dev: false - 192.168.4.201+4873/dicom-parser@1.8.21: resolution: {integrity: sha512-lYCweHQDsC8UFpXErPlg86Px2A8bay0HiUY+wzoG3xv5GzgqVHU3lziwSc/Gzn7VV7y2KeP072SzCviuOoU02w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/dicom-parser/-/dicom-parser-1.8.21.tgz} name: dicom-parser version: 1.8.21 dev: false - 192.168.4.201+4873/electron-to-chromium@1.4.509: - resolution: {integrity: sha512-G5KlSWY0zzhANtX15tkikHl4WB7zil2Y65oT52EZUL194abjUXBZym12Ht7Bhuwm/G3LJFEqMADyv2Cks56dmg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/electron-to-chromium/-/electron-to-chromium-1.4.509.tgz} - name: electron-to-chromium - version: 1.4.509 - dev: false - 192.168.4.201+4873/emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/emojis-list/-/emojis-list-3.0.0.tgz} name: emojis-list @@ -15160,37 +14708,6 @@ packages: engines: {node: '>= 4'} dev: false - 192.168.4.201+4873/escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/escalade/-/escalade-3.1.1.tgz} - name: escalade - version: 3.1.1 - engines: {node: '>=6'} - dev: false - - 192.168.4.201+4873/escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} - name: escape-string-regexp - version: 1.0.5 - engines: {node: '>=0.8.0'} - dev: false - - 192.168.4.201+4873/eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/eslint-scope/-/eslint-scope-5.1.1.tgz} - name: eslint-scope - version: 5.1.1 - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 192.168.4.201+4873/esrecurse@4.3.0 - estraverse: 192.168.4.201+4873/estraverse@4.3.0 - dev: false - - 192.168.4.201+4873/eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz} - name: eslint-visitor-keys - version: 2.1.0 - engines: {node: '>=10'} - dev: false - 192.168.4.201+4873/esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/esprima/-/esprima-4.0.1.tgz} name: esprima @@ -15199,29 +14716,6 @@ packages: hasBin: true dev: false - 192.168.4.201+4873/esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/esrecurse/-/esrecurse-4.3.0.tgz} - name: esrecurse - version: 4.3.0 - engines: {node: '>=4.0'} - dependencies: - estraverse: 192.168.4.201+4873/estraverse@5.3.0 - dev: false - - 192.168.4.201+4873/estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/estraverse/-/estraverse-4.3.0.tgz} - name: estraverse - version: 4.3.0 - engines: {node: '>=4.0'} - dev: false - - 192.168.4.201+4873/estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/estraverse/-/estraverse-5.3.0.tgz} - name: estraverse - version: 5.3.0 - engines: {node: '>=4.0'} - dev: false - 192.168.4.201+4873/fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} name: fast-deep-equal @@ -15252,13 +14746,6 @@ packages: version: 1.1.1 dev: false - 192.168.4.201+4873/gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/gensync/-/gensync-1.0.0-beta.2.tgz} - name: gensync - version: 1.0.0-beta.2 - engines: {node: '>=6.9.0'} - dev: false - 192.168.4.201+4873/get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/get-intrinsic/-/get-intrinsic-1.2.1.tgz} name: get-intrinsic @@ -15289,13 +14776,6 @@ packages: path-is-absolute: 192.168.4.201+4873/path-is-absolute@1.0.1 dev: false - 192.168.4.201+4873/globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/globals/-/globals-11.12.0.tgz} - name: globals - version: 11.12.0 - engines: {node: '>=4'} - dev: false - 192.168.4.201+4873/globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/globalthis/-/globalthis-1.0.3.tgz} name: globalthis @@ -15311,13 +14791,6 @@ packages: version: 4.2.11 dev: true - 192.168.4.201+4873/has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/has-flag/-/has-flag-3.0.0.tgz} - name: has-flag - version: 3.0.0 - engines: {node: '>=4'} - dev: false - 192.168.4.201+4873/has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz} name: has-property-descriptors @@ -15386,33 +14859,6 @@ packages: has: 192.168.4.201+4873/has@1.0.3 dev: false - 192.168.4.201+4873/istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz} - name: istanbul-lib-coverage - version: 3.2.2 - engines: {node: '>=8'} - dev: false - - 192.168.4.201+4873/istanbul-lib-instrument@4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz} - name: istanbul-lib-instrument - version: 4.0.3 - engines: {node: '>=8'} - dependencies: - '@babel/core': 192.168.4.201+4873/@babel/core@7.22.15 - '@istanbuljs/schema': 192.168.4.201+4873/@istanbuljs/schema@0.1.3 - istanbul-lib-coverage: 192.168.4.201+4873/istanbul-lib-coverage@3.2.2 - semver: 192.168.4.201+4873/semver@6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - 192.168.4.201+4873/js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/js-tokens/-/js-tokens-4.0.0.tgz} - name: js-tokens - version: 4.0.0 - dev: false - 192.168.4.201+4873/js-yaml@3.14.0: resolution: {integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/js-yaml/-/js-yaml-3.14.0.tgz} name: js-yaml @@ -15423,14 +14869,6 @@ packages: esprima: 192.168.4.201+4873/esprima@4.0.1 dev: false - 192.168.4.201+4873/jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/jsesc/-/jsesc-2.5.2.tgz} - name: jsesc - version: 2.5.2 - engines: {node: '>=4'} - hasBin: true - dev: false - 192.168.4.201+4873/json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} name: json-schema-traverse @@ -15476,28 +14914,6 @@ packages: json5: 192.168.4.201+4873/json5@2.2.3 dev: false - 192.168.4.201+4873/lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz} - name: lodash.clonedeep - version: 4.5.0 - dev: false - - 192.168.4.201+4873/lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/lru-cache/-/lru-cache-5.1.1.tgz} - name: lru-cache - version: 5.1.1 - dependencies: - yallist: 192.168.4.201+4873/yallist@3.1.1 - dev: false - - 192.168.4.201+4873/merge-source-map@1.1.0: - resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/merge-source-map/-/merge-source-map-1.1.0.tgz} - name: merge-source-map - version: 1.1.0 - dependencies: - source-map: 192.168.4.201+4873/source-map@0.6.1 - dev: false - 192.168.4.201+4873/minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/minimatch/-/minimatch-3.1.2.tgz} name: minimatch @@ -15512,18 +14928,6 @@ packages: version: 1.2.8 dev: false - 192.168.4.201+4873/ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/ms/-/ms-2.1.2.tgz} - name: ms - version: 2.1.2 - dev: false - - 192.168.4.201+4873/node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/node-releases/-/node-releases-2.0.13.tgz} - name: node-releases - version: 2.0.13 - dev: false - 192.168.4.201+4873/object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/object-keys/-/object-keys-1.1.1.tgz} name: object-keys @@ -15558,12 +14962,6 @@ packages: version: 1.0.7 dev: false - 192.168.4.201+4873/picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/picocolors/-/picocolors-1.0.0.tgz} - name: picocolors - version: 1.0.0 - dev: false - 192.168.4.201+4873/punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/punycode/-/punycode-2.3.0.tgz} name: punycode @@ -15591,17 +14989,11 @@ packages: resolve: 192.168.4.201+4873/resolve@1.22.4 dev: false - 192.168.4.201+4873/regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} - name: regenerator-runtime - version: 0.13.11 - requiresBuild: true - dev: false - 192.168.4.201+4873/regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz} name: regenerator-runtime version: 0.14.0 + dev: false 192.168.4.201+4873/resolve@1.22.4: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/resolve/-/resolve-1.22.4.tgz} @@ -15620,17 +15012,6 @@ packages: version: 5.2.1 dev: false - 192.168.4.201+4873/schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/schema-utils/-/schema-utils-2.7.1.tgz} - name: schema-utils - version: 2.7.1 - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 192.168.4.201+4873/@types/json-schema@7.0.12 - ajv: 192.168.4.201+4873/ajv@6.12.6 - ajv-keywords: 192.168.4.201+4873/ajv-keywords@3.5.2(ajv@6.12.6) - dev: false - 192.168.4.201+4873/schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/schema-utils/-/schema-utils-3.3.0.tgz} name: schema-utils @@ -15648,13 +15029,6 @@ packages: version: 3.0.5 dev: false - 192.168.4.201+4873/semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/semver/-/semver-6.3.1.tgz} - name: semver - version: 6.3.1 - hasBin: true - dev: false - 192.168.4.201+4873/shader-loader@1.3.1: resolution: {integrity: sha512-dt8F9K0x4rjmaFyHh7rNDfpt4LUiR64zhNIEwp2WbE99B3z4ALuvvmhftkElg93dUD6sTmv/aXa/z9SJiEddcA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/shader-loader/-/shader-loader-1.3.1.tgz} name: shader-loader @@ -15675,13 +15049,6 @@ packages: rechoir: 192.168.4.201+4873/rechoir@0.6.2 dev: false - 192.168.4.201+4873/source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/source-map/-/source-map-0.6.1.tgz} - name: source-map - version: 0.6.1 - engines: {node: '>=0.10.0'} - dev: false - 192.168.4.201+4873/spark-md5@3.0.2: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/spark-md5/-/spark-md5-3.0.2.tgz} name: spark-md5 @@ -15711,15 +15078,6 @@ packages: safe-buffer: 192.168.4.201+4873/safe-buffer@5.2.1 dev: false - 192.168.4.201+4873/supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/supports-color/-/supports-color-5.5.0.tgz} - name: supports-color - version: 5.5.0 - engines: {node: '>=4'} - dependencies: - has-flag: 192.168.4.201+4873/has-flag@3.0.0 - dev: false - 192.168.4.201+4873/supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} name: supports-preserve-symlinks-flag @@ -15727,27 +15085,6 @@ packages: engines: {node: '>= 0.4'} dev: false - 192.168.4.201+4873/to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz} - name: to-fast-properties - version: 2.0.0 - engines: {node: '>=4'} - dev: false - - 192.168.4.201+4873/update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz} - id: 192.168.4.201+4873/update-browserslist-db/1.0.11 - name: update-browserslist-db - version: 1.0.11 - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 192.168.4.201+4873/browserslist@4.21.10 - escalade: 192.168.4.201+4873/escalade@3.1.1 - picocolors: 192.168.4.201+4873/picocolors@1.0.0 - dev: false - 192.168.4.201+4873/uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/uri-js/-/uri-js-4.4.1.tgz} name: uri-js @@ -15769,12 +15106,6 @@ packages: hasBin: true dev: false - 192.168.4.201+4873/webgl-constants@1.1.1: - resolution: {integrity: sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/webgl-constants/-/webgl-constants-1.1.1.tgz} - name: webgl-constants - version: 1.1.1 - dev: false - 192.168.4.201+4873/webworker-promise@0.5.0: resolution: {integrity: sha512-14iR79jHAV7ozwvbfif+3wCaApT3I1g8Lo0rJZrwAu6wxZGx/08Y8KXz6as6ZLNUEEufeiEBBYrqyDBClXOsEw==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/webworker-promise/-/webworker-promise-0.5.0.tgz} name: webworker-promise @@ -15813,9 +15144,3 @@ packages: '@types/node': 192.168.4.201+4873/@types/node@20.3.3 js-yaml: 192.168.4.201+4873/js-yaml@3.14.0 dev: false - - 192.168.4.201+4873/yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, registry: http://npm.tavi.fit/, tarball: http://192.168.4.201:4873/yallist/-/yallist-3.1.1.tgz} - name: yallist - version: 3.1.1 - dev: false