diff --git a/client/src/sections/wuyuanbiaoba/components/CameraView.jsx b/client/src/sections/wuyuanbiaoba/components/CameraView.jsx index 86e40bb..f7dcd38 100644 --- a/client/src/sections/wuyuanbiaoba/components/CameraView.jsx +++ b/client/src/sections/wuyuanbiaoba/components/CameraView.jsx @@ -575,7 +575,7 @@ const CameraView = ({ // 如果没有矩形框数据且没有正在绘制的预览矩形,也记录一下 if ((!rectangles || rectangles.length === 0) && !currentDrawingRect) { - console.log("redrawAllRectangles: 没有矩形框数据且没有预览矩形"); + // console.log("redrawAllRectangles: 没有矩形框数据且没有预览矩形"); return; } diff --git a/client/src/sections/wuyuanbiaoba/components/RealtimeCharts.jsx b/client/src/sections/wuyuanbiaoba/components/RealtimeCharts.jsx index a352d58..2dd6d74 100644 --- a/client/src/sections/wuyuanbiaoba/components/RealtimeCharts.jsx +++ b/client/src/sections/wuyuanbiaoba/components/RealtimeCharts.jsx @@ -1,5 +1,12 @@ -import React, { useMemo, useEffect, useRef, useState, useCallback } from "react"; -import { Typography, Badge, Button, Space } from "antd"; +import React, { + useMemo, + useEffect, + useRef, + useState, + useCallback, +} from "react"; +import { Typography, Badge, Button, Space,InputNumber } from "antd"; +import { DownloadOutlined } from "@ant-design/icons"; import { Chart as ChartJS, CategoryScale, @@ -25,7 +32,7 @@ ChartJS.register( const { Title } = Typography; -const RealtimeCharts = ({ tableData, lastUpdateTime }) => { +const RealtimeCharts = ({ tableData, lastUpdateTime, onDataExport,exportCount = 200, setExportCount }) => { const xChartRef = useRef(null); const yChartRef = useRef(null); @@ -119,7 +126,7 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { // 获取 deviceId 到 desc 的映射 const deviceDescMap = useMemo(() => { const map = {}; - tableData.forEach(item => { + tableData.forEach((item) => { if (item.deviceId && item.desc) { map[item.deviceId] = item.desc; } @@ -130,18 +137,18 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { useEffect(() => { if (deviceIds.length > 0) { const initialVisible = {}; - deviceIds.forEach(deviceId => { + deviceIds.forEach((deviceId) => { initialVisible[deviceId] = true; // 默认所有标靶都显示 }); - setVisibleTargets(prev => ({ ...initialVisible, ...prev })); + setVisibleTargets((prev) => ({ ...initialVisible, ...prev })); } - }, [deviceIds.join(',')]); + }, [deviceIds.join(",")]); // 切换标靶显示状态的函数 const toggleTargetVisibility = useCallback((deviceId) => { - setVisibleTargets(prev => ({ + setVisibleTargets((prev) => ({ ...prev, - [deviceId]: !prev[deviceId] + [deviceId]: !prev[deviceId], })); // 同时控制两个图表的显示状态 @@ -149,8 +156,12 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { const yChart = yChartRef.current; if (xChart && yChart) { - const xDatasetIndex = xChart.data.datasets.findIndex(dataset => dataset.label === deviceId); - const yDatasetIndex = yChart.data.datasets.findIndex(dataset => dataset.label === deviceId); + const xDatasetIndex = xChart.data.datasets.findIndex( + (dataset) => dataset.label === deviceId + ); + const yDatasetIndex = yChart.data.datasets.findIndex( + (dataset) => dataset.label === deviceId + ); if (xDatasetIndex !== -1 && yDatasetIndex !== -1) { const isVisible = xChart.isDatasetVisible(xDatasetIndex); @@ -167,29 +178,32 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { }, []); // 全部显示/隐藏的函数 - const toggleAllTargets = useCallback((visible) => { - const newVisibleTargets = {}; - deviceIds.forEach(deviceId => { - newVisibleTargets[deviceId] = visible; - }); - setVisibleTargets(newVisibleTargets); + const toggleAllTargets = useCallback( + (visible) => { + const newVisibleTargets = {}; + deviceIds.forEach((deviceId) => { + newVisibleTargets[deviceId] = visible; + }); + setVisibleTargets(newVisibleTargets); - // 同时控制两个图表 - const xChart = xChartRef.current; - const yChart = yChartRef.current; + // 同时控制两个图表 + const xChart = xChartRef.current; + const yChart = yChartRef.current; - if (xChart && yChart) { - xChart.data.datasets.forEach((_, index) => { - xChart.setDatasetVisibility(index, visible); - }); - yChart.data.datasets.forEach((_, index) => { - yChart.setDatasetVisibility(index, visible); - }); + if (xChart && yChart) { + xChart.data.datasets.forEach((_, index) => { + xChart.setDatasetVisibility(index, visible); + }); + yChart.data.datasets.forEach((_, index) => { + yChart.setDatasetVisibility(index, visible); + }); - xChart.update(); - yChart.update(); - } - }, [deviceIds]); + xChart.update(); + yChart.update(); + } + }, + [deviceIds] + ); // 准备X轴图表数据 const xChartData = useMemo(() => { @@ -229,7 +243,10 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { return { labels, datasets }; } catch (error) { - console.error(`${new Date().toLocaleString()} - 准备X轴图表数据出错:`, error); + console.error( + `${new Date().toLocaleString()} - 准备X轴图表数据出错:`, + error + ); return { labels: [], datasets: [] }; } }, [tableData, visibleTargets]); @@ -272,130 +289,142 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { return { labels, datasets }; } catch (error) { - console.error(`${new Date().toLocaleString()} - 准备Y轴图表数据出错:`, error); + console.error( + `${new Date().toLocaleString()} - 准备Y轴图表数据出错:`, + error + ); return { labels: [], datasets: [] }; } }, [tableData, visibleTargets]); // Chart.js配置选项 - 移到组件内部以访问 deviceDescMap - const chartOptions = useMemo(() => ({ - responsive: true, - maintainAspectRatio: false, - interaction: { - mode: "index", - intersect: false, - }, - plugins: { - legend: { - display: false, // 隐藏默认图例,使用自定义控制器 + const chartOptions = useMemo( + () => ({ + responsive: true, + maintainAspectRatio: false, + interaction: { + mode: "index", + intersect: false, }, - tooltip: { - filter: function (tooltipItem) { - return tooltipItem.parsed.y !== null; + plugins: { + legend: { + display: false, // 隐藏默认图例,使用自定义控制器 }, - callbacks: { - title: function(context) { - return context[0].label; // 显示时间 + tooltip: { + filter: function (tooltipItem) { + return tooltipItem.parsed.y !== null; }, - label: function(context) { - const deviceId = context.dataset.label; - const deviceDesc = deviceDescMap[deviceId] || deviceId; - const value = context.parsed.y; - return `${deviceDesc}: ${value}`; - } - } - }, - }, - scales: { - x: { - display: true, - title: { - display: true, - text: "时间", - }, - ticks: { - maxRotation: 45, - minRotation: 0, - font: { - size: 10, + callbacks: { + title: function (context) { + return context[0].label; // 显示时间 + }, + label: function (context) { + const deviceId = context.dataset.label; + const deviceDesc = deviceDescMap[deviceId] || deviceId; + const value = context.parsed.y; + return `${deviceDesc}: ${value}`; + }, }, }, }, - y: { - display: true, - title: { + scales: { + x: { display: true, - font: { - size: 12, + title: { + display: true, + text: "时间", + }, + ticks: { + maxRotation: 45, + minRotation: 0, + font: { + size: 10, + }, }, }, - ticks: { - font: { - size: 10, + y: { + display: true, + title: { + display: true, + font: { + size: 12, + }, + }, + ticks: { + font: { + size: 10, + }, }, }, }, - }, - elements: { - point: { - radius: 3, - hoverRadius: 5, - }, - line: { - tension: 0, + elements: { + point: { + radius: 3, + hoverRadius: 5, + }, + line: { + tension: 0, + }, }, - }, - }), [deviceDescMap]); + }), + [deviceDescMap] + ); // X轴图表配置 - const xChartOptions = useMemo(() => ({ - ...chartOptions, - plugins: { - ...chartOptions.plugins, - title: { - display: true, - text: "X轴位移数据", - font: { - size: 16, + const xChartOptions = useMemo( + () => ({ + ...chartOptions, + plugins: { + ...chartOptions.plugins, + title: { + display: true, + text: "X轴位移数据", + font: { + size: 16, + }, }, }, - }, - scales: { - ...chartOptions.scales, - y: { - ...chartOptions.scales.y, - title: { - ...chartOptions.scales.y.title, - text: "X值(mm)", + scales: { + ...chartOptions.scales, + y: { + ...chartOptions.scales.y, + title: { + ...chartOptions.scales.y.title, + text: "X值(mm)", + }, }, }, - }, - }), [chartOptions]); + }), + [chartOptions] + ); // Y轴图表配置 - const yChartOptions = useMemo(() => ({ - ...chartOptions, - plugins: { - ...chartOptions.plugins, - title: { - display: true, - text: "Y轴位移数据", - font: { - size: 16, + const yChartOptions = useMemo( + () => ({ + ...chartOptions, + plugins: { + ...chartOptions.plugins, + title: { + display: true, + text: "Y轴位移数据", + font: { + size: 16, + }, }, }, - }, - scales: { - ...chartOptions.scales, - y: { - ...chartOptions.scales.y, - title: { - ...chartOptions.scales.y.title, - text: "Y值(mm)", + scales: { + ...chartOptions.scales, + y: { + ...chartOptions.scales.y, + title: { + ...chartOptions.scales.y.title, + text: "Y值(mm)", + }, }, }, - }, - }), [chartOptions]); + }), + [chartOptions] + ); // 如果没有数据,显示空状态 if (!tableData || tableData.length === 0) { @@ -442,7 +471,14 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { flexDirection: "column", }} > - + <Title + level={4} + style={{ + marginBottom: "16px", + display: "flex", + alignItems: "center", + }} + > 实时数据图 <Badge status="processing" @@ -450,15 +486,50 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { style={{ marginLeft: "16px", fontSize: "12px" }} /> <Badge - status="default" + status="success" text={`图表数据采样频率:1Hz`} style={{ marginLeft: "16px", fontSize: "12px" }} /> + <Badge + status="default" + text={`导出数据条数配置`} + style={{ marginLeft: "16px", fontSize: "12px" }} + /> + <InputNumber + min={1} + max={1000} + value={exportCount} + onChange={setExportCount} + style={{ marginLeft: 16, width: 80 }} + step={1} + /> + <Button + style={{ marginLeft: 8 }} + icon={<DownloadOutlined />} + onClick={() => onDataExport(exportCount)} + > + 导出 + </Button> {/* 统一的图例控制器 */} -
-
显示控制
+
+
+ 显示控制 +
- {deviceIds.map((deviceId, index) => ( @@ -480,8 +548,12 @@ const RealtimeCharts = ({ tableData, lastUpdateTime }) => { type={visibleTargets[deviceId] ? "primary" : "default"} style={{ borderColor: getDeviceColor(index), - color: visibleTargets[deviceId] ? "#fff" : getDeviceColor(index), - backgroundColor: visibleTargets[deviceId] ? getDeviceColor(index) : "#fff" + color: visibleTargets[deviceId] + ? "#fff" + : getDeviceColor(index), + backgroundColor: visibleTargets[deviceId] + ? getDeviceColor(index) + : "#fff", }} onClick={() => toggleTargetVisibility(deviceId)} > diff --git a/client/src/sections/wuyuanbiaoba/container/index.jsx b/client/src/sections/wuyuanbiaoba/container/index.jsx index 4d22d9a..d3fe5de 100644 --- a/client/src/sections/wuyuanbiaoba/container/index.jsx +++ b/client/src/sections/wuyuanbiaoba/container/index.jsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react"; import { Tabs, Typography } from "antd"; -import { EyeOutlined } from "@ant-design/icons"; +import ExcelJS from "exceljs"; + import { CameraView, TargetList, @@ -17,7 +18,7 @@ import { } from "../actions/websocket.jsx"; import { useTemplateStorage } from "../hooks/useTemplateStorage.js"; import { useTargetStorage } from "../hooks/useTargetStorage.js"; - +import { useRef } from "react"; const { Title } = Typography; // 内部组件,使用WebSocket hook @@ -26,7 +27,29 @@ const WuyuanbiaobaContent = () => { // 订阅实时数据 const realtimeDataSubscription = useWebSocketSubscription("dev", "data"); - + const realtimeBufferRef = useRef([]); + const exportCountRef = useRef(200); + // 设置导出数据条数 + const setExportCount = (count) => { + exportCountRef.current = count; + }; + // 数据缓冲区数据维护函数 + const pushToRealtimeBuffer = (newDataGroup) => { + // newDataGroup: { time: "2025-09-29 01:40:57.091", data: [...] } + const now = Date.now(); + const group = { + ...newDataGroup, + _bufferTimestamp: now, + }; + + // 合并到缓冲区 + realtimeBufferRef.current = [...realtimeBufferRef.current, group]; + + // 只保留最近200条数据 + if (realtimeBufferRef.current.length > exportCountRef.current) { + realtimeBufferRef.current = realtimeBufferRef.current.slice(-exportCountRef.current); + } + }; const { templates: tempListData, loading: templatesLoading, @@ -78,7 +101,7 @@ const WuyuanbiaobaContent = () => { desc: item.desc, // 添加 desc 字段 xValue: item.x, yValue: item.y, - updateTime: data.time || new Date().toLocaleString(), + updateTime: data.time, })); }; @@ -87,7 +110,7 @@ const WuyuanbiaobaContent = () => { // 初始化空的实时数据表格 setRealtimeData([]); setTableData([]); - // console.log("数据已初始化,等待实时数据...", import.meta.env.MODE); + // console.log("数据已初始化,等待实时数据...", import.meta.env.MODE); }, []); // 模板数据加载完成后,默认选中内置模板 @@ -119,7 +142,7 @@ const WuyuanbiaobaContent = () => { // 调试实时数据订阅状态 useEffect(() => { - // console.log('实时数据订阅状态:', { + // console.log('实时数据订阅状态:', { // hasData: !!realtimeDataSubscription.latest, // dataCount: realtimeDataSubscription.data?.length || 0, // latestTimestamp: realtimeDataSubscription.latest?.timestamp, @@ -156,46 +179,143 @@ const WuyuanbiaobaContent = () => { })), ]; - // 只保留最近25个数据点(25秒) + // 只保留最近25个数据点 return updatedData.slice(-75); // 3个设备 * 25个时间点 }); // 更新实时数据表格(使用最新的采样数据) - setRealtimeData(newRealtimeData.map((point) => ({ - ...point, - key: `realtime_${point.key}`, - updateTime: new Date(currentTime).toLocaleString(), - }))); + setRealtimeData( + newRealtimeData.map((point) => ({ + ...point, + key: `realtime_${point.key}`, + updateTime: new Date(currentTime).toLocaleString(), + })) + ); } - + //维护两分钟的缓冲区 + pushToRealtimeBuffer(realtimeDataSubscription.latest.values); setLastUpdateTime(new Date()); } } - }, [realtimeDataSubscription.latest, lastSampleTime]); + }, [realtimeDataSubscription.latest]); + const dataExport = async () => { + const dataToExport = realtimeBufferRef.current; + if (dataToExport.length === 0) { + console.warn("没有数据可导出"); + return; + } + // console.log('导出数据:', dataToExport); + + // 收集所有出现过的desc,保持顺序且唯一 + const descSet = []; + dataToExport.forEach((group) => { + if (Array.isArray(group.data)) { + group.data.forEach((point) => { + if (point && !descSet.includes(point.desc)) { + descSet.push(point.desc); + } + }); + } + }); + + // 构造表头 + const columns = [{ header: "采集时间", key: "time", width: 24 }]; + descSet.forEach((desc) => { + columns.push( + { header: `标靶${desc}X`, key: `x_${desc}`, width: 12 }, + { header: `标靶${desc}Y`, key: `y_${desc}`, width: 12 } + ); + }); + + // 创建工作簿和工作表 + const workbook = new ExcelJS.Workbook(); + const worksheet = workbook.addWorksheet("两分钟内数据"); + worksheet.columns = columns; + + // 填充数据 + dataToExport.forEach((group) => { + const row = { time: group.time }; + // 先清空所有desc对应的列 + descSet.forEach((desc) => { + row[`x_${desc}`] = ""; + row[`y_${desc}`] = ""; + }); + // 填充本组数据 + group.data.forEach((point) => { + if (point && descSet.includes(point.desc)) { + row[`x_${point.desc}`] = point.x; + row[`y_${point.desc}`] = point.y; + } + }); + worksheet.addRow(row); + }); + + // 设置表头样式 + worksheet.getRow(1).font = { bold: true, color: { argb: "FF1F497D" } }; + worksheet.getRow(1).alignment = { + vertical: "middle", + horizontal: "center", + }; + + // 设置边框样式 + worksheet.eachRow((row, rowNumber) => { + row.eachCell((cell) => { + cell.border = { + top: { style: "thin" }, + left: { style: "thin" }, + bottom: { style: "thin" }, + right: { style: "thin" }, + }; + cell.alignment = { vertical: "middle", horizontal: "center" }; + }); + }); + + // 导出为文件 + const now = new Date(); + const pad = (n) => n.toString().padStart(2, "0"); + const localFileName = `${now.getFullYear()}-${pad( + now.getMonth() + 1 + )}-${pad(now.getDate())}-${pad(now.getHours())}-${pad( + now.getMinutes() + )}-${pad(now.getSeconds())}.xlsx`; + + const buffer = await workbook.xlsx.writeBuffer(); + const blob = new Blob([buffer], { + type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = localFileName; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + }; // 编辑标靶的处理函数 const handleEditTarget = (target) => { setCurrentEditTarget(target); setTargetDetailModalMode("edit"); setTargetDetailModalVisible(true); - // console.log("编辑标靶:", target); + // console.log("编辑标靶:", target); }; // 选中标靶的处理函数 const handleSelectTarget = (target) => { setSelectedTargetId(target.id); - // console.log("选中标靶:", target); + // console.log("选中标靶:", target); }; // 清除选中标靶的处理函数 const handleClearSelection = () => { setSelectedTargetId(null); - // console.log("清除标靶选中状态"); + // console.log("清除标靶选中状态"); }; // 处理矩形框点击事件 const handleRectangleClick = (targetData) => { - // console.log("矩形框被点击,打开标靶详情:", targetData); + // console.log("矩形框被点击,打开标靶详情:", targetData); setCurrentEditTarget(targetData); setTargetDetailModalMode("edit"); setTargetDetailModalVisible(true); @@ -204,7 +324,7 @@ const WuyuanbiaobaContent = () => { // 选择模板的处理函数 const handleTemplateSelect = (templateKey) => { setSelectedTemplate(templateKey); - // console.log("选中模板:", templateKey); + // console.log("选中模板:", templateKey); }; // 添加新模板的处理函数 @@ -223,7 +343,7 @@ const WuyuanbiaobaContent = () => { // 模态框确认处理函数 const handleTemplateModalOk = (templateInfo) => { - // console.log(templateInfo, "templateInfo"); + // console.log(templateInfo, "templateInfo"); let success = false; if (templateModalMode === "add") { @@ -285,7 +405,7 @@ const WuyuanbiaobaContent = () => { // 删除标靶处理函数 const handleDeleteTarget = (targetKey) => { - // console.log("开始删除标靶:", targetKey); + // console.log("开始删除标靶:", targetKey); const success = deleteTarget(targetKey); if (success) { @@ -308,7 +428,7 @@ const WuyuanbiaobaContent = () => { }; // 标靶-一键清零 const onClickClearAll = () => { - // console.log("一键清零操作"); + // console.log("一键清零操作"); sendMessage( JSON.stringify({ _from: "setup", @@ -431,6 +551,9 @@ const WuyuanbiaobaContent = () => { {/* Table 区域 - 使用采样数据显示 */} diff --git a/package-lock.json b/package-lock.json index dc2e88f..35391f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "wuyuanbiaoba-web", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wuyuanbiaoba-web", - "version": "1.0.0", + "version": "1.0.1", "license": "ISC", "dependencies": { "@koa/multer": "^3.0.2", "@peace/react_client": "^5.0.1", + "exceljs": "^4.4.0", "fs-extra": "^11.2.0", "ws": "^8.18.3" }, @@ -800,6 +801,47 @@ "node": ">=12" } }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmmirror.com/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1441,6 +1483,17 @@ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, + "node_modules/@types/node": { + "version": "24.5.2", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.5.2.tgz", + "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~7.12.0" + } + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.6", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", @@ -1587,18 +1640,174 @@ "license": "MIT", "peer": true }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "license": "MIT" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "license": "MIT" }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/browserslist": { "version": "4.25.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/browserslist/-/browserslist-4.25.2.tgz", @@ -1631,6 +1840,39 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1638,6 +1880,23 @@ "license": "MIT", "peer": true }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/busboy/-/busboy-1.6.0.tgz", @@ -1742,6 +2001,18 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/chalk/-/chalk-4.1.2.tgz", @@ -1901,6 +2172,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/compute-scroll-into-view": { "version": "3.1.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", @@ -1908,6 +2194,12 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/concat-stream/-/concat-stream-2.0.0.tgz", @@ -2009,6 +2301,31 @@ "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=", "license": "MIT" }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/csstype/-/csstype-3.1.3.tgz", @@ -2029,7 +2346,6 @@ "version": "1.11.13", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/dayjs/-/dayjs-1.11.13.tgz", "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "dev": true, "license": "MIT" }, "node_modules/debug": { @@ -2132,6 +2448,51 @@ "node": ">= 0.4" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/ee-first/-/ee-first-1.1.1.tgz", @@ -2159,6 +2520,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/errno/-/errno-0.1.8.tgz", @@ -2276,6 +2646,39 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "license": "MIT" }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -2368,6 +2771,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "11.3.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/fs-extra/-/fs-extra-11.3.1.tgz", @@ -2382,6 +2791,12 @@ "node": ">=14.14" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/fsevents/-/fsevents-2.3.3.tgz", @@ -2396,6 +2811,22 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/function-bind/-/function-bind-1.1.2.tgz", @@ -2460,6 +2891,27 @@ "node": ">= 0.4" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/gopd/-/gopd-1.2.0.tgz", @@ -2626,6 +3078,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/image-size": { "version": "0.5.5", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/image-size/-/image-size-0.5.5.tgz", @@ -2639,6 +3111,12 @@ "node": ">=0.10.0" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/immer": { "version": "10.1.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/immer/-/immer-10.1.1.tgz", @@ -2649,6 +3127,17 @@ "url": "https://opencollective.com/immer" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/inherits/-/inherits-2.0.4.tgz", @@ -2787,6 +3276,54 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/keygrip": { "version": "1.1.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/keygrip/-/keygrip-1.1.0.tgz", @@ -2906,6 +3443,54 @@ "node": ">= 0.6" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/less": { "version": "4.4.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/less/-/less-4.4.0.tgz", @@ -2932,6 +3517,21 @@ "source-map": "~0.6.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, "node_modules/loading-cli": { "version": "1.1.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/loading-cli/-/loading-cli-1.1.2.tgz", @@ -2957,6 +3557,85 @@ "node": ">=6" } }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3073,12 +3752,23 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3088,7 +3778,6 @@ "resolved": "https://nexus.ngaiot.com/repository/fs-npm/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "license": "MIT", - "peer": true, "dependencies": { "minimist": "^1.2.6" }, @@ -3190,6 +3879,15 @@ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/object-assign/-/object-assign-4.1.1.tgz", @@ -3274,6 +3972,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/param-case/-/param-case-3.0.4.tgz", @@ -3331,6 +4035,15 @@ "node": ">=4" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-match": { "version": "1.2.4", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/path-match/-/path-match-1.2.4.tgz", @@ -3428,6 +4141,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/prr/-/prr-1.0.1.tgz", @@ -4207,7 +4926,6 @@ "resolved": "https://nexus.ngaiot.com/repository/fs-npm/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4217,6 +4935,36 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/redux": { "version": "5.0.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/redux/-/redux-5.0.1.tgz", @@ -4266,6 +5014,19 @@ "dev": true, "license": "MIT" }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/rollup": { "version": "4.46.3", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/rollup/-/rollup-4.46.3.tgz", @@ -4356,6 +5117,18 @@ "license": "ISC", "optional": true }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/scheduler/-/scheduler-0.23.2.tgz", @@ -4402,6 +5175,12 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "license": "ISC" }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -4546,7 +5325,6 @@ "resolved": "https://nexus.ngaiot.com/repository/fs-npm/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -4635,6 +5413,22 @@ "node": ">=8" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/throttle-debounce": { "version": "5.0.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/throttle-debounce/-/throttle-debounce-5.0.2.tgz", @@ -4645,6 +5439,15 @@ "node": ">=12.22" } }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -4670,6 +5473,15 @@ "node": ">=6" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/tslib/-/tslib-2.8.1.tgz", @@ -4705,6 +5517,14 @@ "license": "MIT", "peer": true }, + "node_modules/undici-types": { + "version": "7.12.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.12.0.tgz", + "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/universalify/-/universalify-2.0.1.tgz", @@ -4714,6 +5534,60 @@ "node": ">= 10.0.0" } }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -4776,8 +5650,7 @@ "version": "1.0.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", @@ -4930,6 +5803,12 @@ } } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://nexus.ngaiot.com/repository/fs-npm/xtend/-/xtend-4.0.2.tgz", @@ -4988,6 +5867,41 @@ "engines": { "node": ">= 4.0.0" } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } } } } diff --git a/package.json b/package.json index d778449..34e27e4 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "dependencies": { "@koa/multer": "^3.0.2", "@peace/react_client": "^5.0.1", + "exceljs": "^4.4.0", "fs-extra": "^11.2.0", "ws": "^8.18.3" }