feat(feat(init): serviceOfMachines):

This commit is contained in:
vbuglov 2024-03-26 16:03:24 +03:00
parent 6eb9973b61
commit f6ca446f92
22 changed files with 4644 additions and 458 deletions

View File

@ -1,12 +1,19 @@
HOOK_NAME=pre-push HOOK_NAME=pre-push
HOOK_PATH=.git/hooks/$(HOOK_NAME) HOOK_PATH=../.git/hooks/$(HOOK_NAME)
pre_hook: prehook:
@echo "Setting up pre-push hook..." @echo "Setting up pre-push hook..."
@rm -f $(HOOK_PATH) @rm -f $(HOOK_PATH)
@echo '#!/bin/sh' >> $(HOOK_PATH) @echo '#!/bin/sh' >> $(HOOK_PATH)
@echo 'echo "Running tests..."' >> $(HOOK_PATH) @echo 'echo "Running lint for proxy-ui-app"' >> $(HOOK_PATH)
@echo 'go test ./...' >> $(HOOK_PATH) @echo 'cd ./proxy-ui-app' >> $(HOOK_PATH)
@echo 'yarn lint' >> $(HOOK_PATH)
@echo 'if [ $$? -ne 0 ]; then' >> $(HOOK_PATH)
@echo ' echo "Tests failed, push aborted."' >> $(HOOK_PATH)
@echo ' exit 1' >> $(HOOK_PATH)
@echo 'fi' >> $(HOOK_PATH)
@echo 'echo "Running tests for proxy-ui"' >> $(HOOK_PATH)
@echo 'yarn test_ones' >> $(HOOK_PATH)
@echo 'if [ $$? -ne 0 ]; then' >> $(HOOK_PATH) @echo 'if [ $$? -ne 0 ]; then' >> $(HOOK_PATH)
@echo ' echo "Tests failed, push aborted."' >> $(HOOK_PATH) @echo ' echo "Tests failed, push aborted."' >> $(HOOK_PATH)
@echo ' exit 1' >> $(HOOK_PATH) @echo ' exit 1' >> $(HOOK_PATH)
@ -14,3 +21,10 @@ pre_hook:
@echo 'exit 0' >> $(HOOK_PATH) @echo 'exit 0' >> $(HOOK_PATH)
@chmod +x $(HOOK_PATH) @chmod +x $(HOOK_PATH)
@echo "Pre-push hook set successfully." @echo "Pre-push hook set successfully."
push:
ifeq ($(commit),)
$(error mn is not set)
endif
make prehook
git add . && git commit -m "feat($(commit)):" && git push

View File

@ -16,12 +16,14 @@
}, },
"dependencies": { "dependencies": {
"1-toolkits-helpers": "../repo/1-toolkits-helpers/", "1-toolkits-helpers": "../repo/1-toolkits-helpers/",
"D": "^1.0.0",
"axios": "^1.6.2", "axios": "^1.6.2",
"echarts": "^5.4.3", "echarts": "^5.4.3",
"flatpickr": "^4.6.13", "flatpickr": "^4.6.13",
"flowbite": "^2.2.0", "flowbite": "^2.2.0",
"flowbite-vue": "^0.1.1", "flowbite-vue": "^0.1.1",
"handlebars": "^4.7.8", "handlebars": "^4.7.8",
"happy-dom": "^14.3.1",
"lucide": "^0.298.0", "lucide": "^0.298.0",
"moment": "^2.29.4", "moment": "^2.29.4",
"ol": "^8.2.0", "ol": "^8.2.0",
@ -38,6 +40,7 @@
"devDependencies": { "devDependencies": {
"@tailwindcss/forms": "^0.5.7", "@tailwindcss/forms": "^0.5.7",
"@vitejs/plugin-vue": "^4.5.2", "@vitejs/plugin-vue": "^4.5.2",
"@vue/test-utils": "^2.4.5",
"autoprefixer": "^10.4.16", "autoprefixer": "^10.4.16",
"eslint": "^8.56.0", "eslint": "^8.56.0",
"eslint-plugin-vue": "^9.19.2", "eslint-plugin-vue": "^9.19.2",
@ -46,6 +49,7 @@
"postcss-apply": "^0.12.0", "postcss-apply": "^0.12.0",
"postcss-nesting": "^12.0.2", "postcss-nesting": "^12.0.2",
"tailwindcss": "^3.3.6", "tailwindcss": "^3.3.6",
"vite": "^5.0.8" "vite": "^5.0.8",
"vitest": "^1.4.0"
} }
} }

View File

@ -0,0 +1,38 @@
import {scandApiRequest} from '@helpers/apiHelpers.js'
import {Adapter} from '1-toolkits-helpers'
const {convertList} = Adapter
const machinesConfig = {
zav_nomer: 'zavNomer',
type: 'type',
railway_name: 'railwayName',
org_name: 'orgName',
nomer_zn8: 'nomerZn8',
machine_type: 'machineType',
machine_id: 'machineId',
imei: 'imei',
device_number: 'deviceNumber',
device_id: 'deviceId'
}
class AdapterOfMachines {
/**
*
* @param {String} url
*/
constructor(url) {
this.url = url
}
async getModalMachines() {
let result = await scandApiRequest('ScandApi.LiveMonitor.Machines', 'select_machines', [])
result = convertList(result, {
config: machinesConfig
})
return result
}
}
export default AdapterOfMachines

View File

@ -57,11 +57,11 @@ export default {
const urlParams = path.value === '/' && query?.value?.mode ? query.value.mode : '' const urlParams = path.value === '/' && query?.value?.mode ? query.value.mode : ''
const externalParams = {historyData: updatedData, urlParams: urlParams} const externalParams = {historyData: updatedData, urlParams: urlParams}
store.commit('machines/setHistoryData', updatedData) store.commit('layoutMachines/setHistoryData', updatedData)
store.dispatch('machines/uploadData', externalParams) store.dispatch('layoutMachines/uploadData', externalParams)
}, },
computed: { computed: {
...mapGetters('machines', ['searchModes', 'searchValue', 'selectedSearchMode', 'leftTopButtons', 'rightTopButtons', 'selectedMode', 'toggleFilter', 'activeFilterBtn', 'mapData', 'machinesData']), ...mapGetters('layoutMachines', ['searchModes', 'searchValue', 'selectedSearchMode', 'leftTopButtons', 'rightTopButtons', 'selectedMode', 'toggleFilter', 'activeFilterBtn', 'mapData', 'machinesData']),
...mapGetters('layout', ['isOpenMenu']), ...mapGetters('layout', ['isOpenMenu']),
}, },
mounted () { mounted () {
@ -81,7 +81,7 @@ export default {
}, },
unmounted() { unmounted() {
const store = useStore(); const store = useStore();
store.dispatch('machines/resetStore') store.dispatch('layoutMachines/resetStore')
}, },
watch: { watch: {
isSuccessSearch: { isSuccessSearch: {
@ -92,8 +92,8 @@ export default {
}, },
}, },
methods: { methods: {
...mapMutations('machines', ['setSearchMode', 'setSelectedMode', 'setToggleFilter', 'setActiveFilterBtn']), ...mapMutations('layoutMachines', ['setSearchMode', 'setSelectedMode', 'setToggleFilter', 'setActiveFilterBtn']),
...mapActions('machines', ['updateSearch', 'clearFilters']), ...mapActions('layoutMachines', ['updateSearch', 'clearFilters']),
updateSearchMode: function(selectedSearchMode) { updateSearchMode: function(selectedSearchMode) {
this.setSearchMode(selectedSearchMode) this.setSearchMode(selectedSearchMode)
}, },

View File

@ -69,9 +69,6 @@ export default {
<template> <template>
<div class="col-span-12"> <div class="col-span-12">
<div class="hidden" id="ignore:21QxOfq">
{{ console.log('selectedPage', selectedPage) }}
</div>
<div class="p-2 sm:px-5 pt-1 bg-light rounded-t-xl"> <div class="p-2 sm:px-5 pt-1 bg-light rounded-t-xl">
<div class="relative"> <div class="relative">
<div class="flex gap-3 sm:gap-7 w-full lg:w-[50%]"> <div class="flex gap-3 sm:gap-7 w-full lg:w-[50%]">

View File

@ -0,0 +1,54 @@
import axios from "axios";
const post = async (path, data, onError) => {
return axios.post(`${path}`, data)
.then(r => r.data)
.catch(error => {
onError && onError(error)
console.error('Error post request:', error)
})
}
const get = async (path) => {
return axios.get(`${path}`)
.then(r => r.data)
.catch(error => {
console.error('Error post request:', error)
})
}
const put = async (path, data, onError) => {
return axios.put(`${path}`, data)
.then(r => r.data)
.catch(error => {
onError && onError(error)
console.error('Error put request:', error)
})
}
const remove = async (path, onError) => {
return axios.delete(`${path}`)
.then(r => r.data)
.catch(error => {
onError && onError(error)
console.error('Error delete request:', error)
})
}
/**
* Function for request to scand api
* @param {String} module
* @param {String} functionName
* @param {Array} params
* @param {String | undefined} onError
* @returns {Promise<Promise<unknown | void | Array | Object> | *>}
*/
const scandApiRequest = async (module, functionName, params, onError= undefined) => {
return post('http://0.0.0.0:9999/scand/api/get_data', {
module,
function: functionName,
params
}, onError)
}
export {get, post, put, remove, scandApiRequest}

View File

@ -9,7 +9,7 @@ import "./helpers/dropdown.js"
createApp(App) createApp(App)
.use(Router) .use(Router)
.use(ramdaVue) .use(ramdaVue)
.use(store) .use(store)
.mount('#app') .mount('#app')

View File

@ -0,0 +1,24 @@
class ServiceOfMachines {
constructor(adapter, store) {
this.adapter = adapter
this.store = store
}
async fetchModalMachines() {
return await this.adapter.getModalMachines()
}
async putModalMachines(machines) {
const result = await this.store.dispatch('machines/saveModalMachines', machines)
return result
}
async makeFetchAndPutModalMachines() {
const machines = await this.fetchModalMachines()
await this.putModalMachines(machines)
return machines
}
}
export default ServiceOfMachines

View File

@ -1,6 +1,7 @@
import { createStore, createLogger } from 'vuex'; import { createStore, createLogger } from 'vuex';
import { store as main } from '@/store/modules/main'; import { store as main } from '@/store/modules/main';
import { store as machines } from '@/store/modules/machines'; import { store as machines } from '@/store/modules/machines';
import { store as layoutMachines } from '@/store/modules/machines';
import { store as finder_packs } from '@/store/modules/finder_packs'; import { store as finder_packs } from '@/store/modules/finder_packs';
import { store as add_users } from '@/store/modules/add_users'; import { store as add_users } from '@/store/modules/add_users';
import { store as layout } from '@/store/modules/layout'; import { store as layout } from '@/store/modules/layout';
@ -21,6 +22,7 @@ export const store = createStore({
plugins, plugins,
modules: { modules: {
main, main,
layoutMachines,
machines, machines,
finder_packs, finder_packs,
add_users, add_users,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,120 @@
import {isEmpty, uniq} from 'ramda'
import {pagination, searchModes} from './StaticData'
const prepareSelects = (selects, selectors) => {
const updatedSelects = selects.reduce((acc, el) => {
if (selectors[el.key]) {
const newEl = {...el, data: selectors[el.key]}
acc = [...acc, newEl]
} else {
acc
}
return acc
}, [])
// console.log('updSelects', updatedSelects)
const filteredSelects = updatedSelects.map((el) => ({...el, data: el.data.reduce((acc, select) => {
if (select) {
const newSelect = {name: select}
acc = [...acc, newSelect]
} else {
acc
}
return acc
}, [])
})).sort((a, b) => a.order - b.order)
// console.log('filteredSelects', filteredSelects)
return filteredSelects
}
const mergedMachines = (machinesData, historyData) => {
const orderHistoryData = historyData.map((el, idx) => ({...el, order: idx}))
const historyMachinesIds = orderHistoryData.filter((el, idx, arr) => arr.findIndex((item) => item.machine_id === el.machine_id) === idx).map((el) => el.machine_id)
const historyMachines = Array.from(machinesData).filter((el) => historyMachinesIds.find((id) => id === el.machine_id)).sort((a, b) => a.order - b.order)
const countHistoryNachines = historyMachines.length > 0 ? historyMachines.slice(0, 20).length : 0
const currentMachines = machinesData.slice(0, 20 - countHistoryNachines)
return [...historyMachines.slice(0, 20), ...currentMachines]
}
const colorSelection = (key, value) => {
if(key) {
const machinesContainer = document.querySelector('#listMachines')
const allSearchField = machinesContainer ? machinesContainer.querySelectorAll('[search-mode]') : null
if (allSearchField) {
allSearchField.forEach((el) => {
el.style = ''
})
}
if (value) {
const searchField = machinesContainer ? machinesContainer.querySelectorAll(`[search-mode=${key}]`) : null
if (searchField) {
searchField.forEach((el) => {
el.style.width = "fit-content"
el.style.padding = "2px"
// el.style.color = "#FFF"
el.style.borderRadius = "3px"
el.style.backgroundColor = "rgb(1 97 253 / 30%)"
})
}
}
}
}
const findMachine = (machine, filters) => {
const isArr = filters && Array.isArray(filters)
if (isArr) {
const filteredMachine = filters.filter((filter) => {
if (machine === filter) {
return machine
}
})
return filteredMachine.length > 0 ? true : false
}
if (!isArr) {
if (`${machine}`.includes(filters)) { // Для поиска неточное совпадение
return true
}
return false
}
}
const setUpdatedDataMachines = (machines, params) => {
const filters = params.filter
if(!isEmpty(filters)) {
const searchModeKeys = searchModes.map((el) => el.key)
const searchData = filters.find((filter) => (searchModeKeys.includes(Object.entries(filter)[0][0])))
const currentFilters = searchData ? [searchData] : filters
const filteredMachines = machines.filter((machine) => {
return currentFilters.find((filter) => {
const entries = Object.entries(filter)
if (!isEmpty(entries) && machine[entries[0][0]] && findMachine(machine[entries[0][0]], entries[0][1])) {
return machine
}
})
})
// console.log('filteredMachines', filteredMachines)
return filteredMachines
}
return machines
}
const loadingPagination = (machines, pagination) => {
pagination.paginationOptions.total = machines.length
pagination.paginationOptions.total_pages = Math.ceil(pagination.paginationOptions.total / pagination.paginationOptions.page_size)
return machines.slice(0, pagination.paginationOptions.page_size)
}
const setPagination = (machines, pagination, updatedData) => {
const pageNumber = Number(updatedData.pageNumber)
const pageSize = Number(updatedData.pageSize)
pagination.paginationOptions.total_pages = Math.ceil(pagination.paginationOptions.total / pageSize)
const updatedPaginationOptions = {...pagination.paginationOptions, page_number: pageNumber, page_size: pageSize}
const updatedPagination = {...pagination, paginationOptions: updatedPaginationOptions}
const beginPageDataIdx = pageSize === 1 ? 0 : (pageNumber - 1) * pageSize
const endPageDataIdx = beginPageDataIdx + pageSize
const isEndPageDataIdxMore = endPageDataIdx > machines.length
const currentTableData = isEndPageDataIdxMore ? machines.slice(beginPageDataIdx) : machines.slice(beginPageDataIdx, endPageDataIdx)
return {currentTableData, updatedPagination}
}
export { prepareSelects, mergedMachines, colorSelection, setUpdatedDataMachines, loadingPagination, setPagination }

View File

@ -0,0 +1,431 @@
import { chartsFilterParams, chartsGroupByParams, chartsGroupByParams2, chartsFilterKeysMl, chartsMountParams, chartsBarTypesParams, chartsBarTypesGroupByParams, chartsBarTypesWithoutLayoutParams } from "./StaticData"
import {cond, uniq, has, T} from 'ramda'
const setPeriodCharts = (filterKeys) => {
if (typeof filterKeys === 'array') return {period: 'dayly', title: '24 часа'}
switch(filterKeys) {
case 'commun': return {period: 'yearly', title: "год"}
case 'rors': return {period: 'dayly', title: "на данный момент"}
case 'routes': return {period: 'weekly', title: "две недели"}
default: return {period: 'dayly', title: "на данный момент"}
}
}
const setNamesMl = (filterKey) => {
if (!filterKey) return null
switch(filterKey) {
case 'routes_common': return 'Обычные'
case 'routes_emergency': return 'Аварийные'
case 'routes_other': return 'Прочие'
case 'routes_repair': return 'Ремонтные'
case 'routes_without_leaving': return 'Без выезда'
case 'routes_without_ml': return 'СПС без МЛ'
default: return ''
}
}
const setMachinesClass = (typeId) => {
if (typeId) {
switch(typeId) {
case 'mpt_types': return 'МРТ'
case 'gdsm_types': return 'ЖДСМ'
case 'sm_pss_types': return 'СМ'
default: return ''
}
}
}
const setFilterValues = (machineValue, filterParams) => {
if(filterParams.values.includes(machineValue.toLowerCase())) {
return {name: machineValue}
}
}
const setCountMachinesMl = (arr, counter = 0) => {
return arr.reduce((acc, item) => {
if (item && item.length > 0) {
return setCountMachinesMl(item, acc)
} else {
if (item.charts?.value) {
acc = acc + item.charts?.value
} else {
acc
}
}
return acc
}, counter)
}
/* Charts updated data */
const chartsPie = (data, filterParams) => {
// {list, _resp} = Agents.MachineList.get_machines(set_period_loading_charts(filterKey).period, params) apiHelpers
const countMachines = data?.length
const machines = data.reduce((acc, machine) => {
if (machine[filterParams.filterKey]) {
acc.push(setFilterValues(machine[filterParams.filterKey], filterParams))
} else {
acc
}
return acc
}, [])
// const isFilteredMachine = machines.find((el) => filterParams.values.includes(el.name.toLowerCase()))
const groupByfiltered = machines.reduce((acc, machine) => {
if (filterParams.values.includes(machine.name.toLowerCase())) {
const count = machines.filter((el) => el.name === machine.name).length
const filteredMachines = {name: machine.name, value: count}
acc = uniq([...acc, filteredMachines])
} else {
acc
}
return acc
}, [])
return {countMachines: countMachines, period: setPeriodCharts(filterParams.filterKey).title, machines: groupByfiltered}
}
const chartsPieGroupedBy = (data, groupByParams, filterParams) => {
const filteredGroupByParams = data.filter((machine) => machine[groupByParams.groupByKey] && machine[groupByParams.groupByKey].toLowerCase() === groupByParams.value)
const countMachines = filteredGroupByParams?.length
const machines = filteredGroupByParams.reduce((acc, machine) => {
if (machine[filterParams.filterKey]) {
acc.push(setFilterValues(machine[filterParams.filterKey], filterParams))
} else {
acc
}
return acc
}, [])
const filteredMachines = machines.reduce((acc, machine) => {
if (filterParams.values.includes(machine.name.toLowerCase())) {
const count = machines.filter((el) => el.name === machine.name).length
const filteredMachines = {name: machine.name, value: count}
acc = uniq([...acc, filteredMachines])
} else {
acc
}
return acc
}, [])
return {countMachines: countMachines, period: setPeriodCharts(filterParams.filterKey).title, machines: filteredMachines}
}
const chartsBarGroupedByMl = (data, filterKeysMl) => {
const machinesWithMl = filterKeysMl.map((filterKey) => {
const filteredWithMl = data.reduce((acc, machine) => {
if (machine[filterKey] === 0 || machine[filterKey]) {
acc = [...acc, {[filterKey]: machine[filterKey]}]
} else {
acc
}
return acc
}, [])
const count = filteredWithMl.reduce((acc, machine) => {
acc = acc + parseFloat(machine[filterKey])
return acc
}, 0)
return {key: filterKey, name: setNamesMl(filterKey), machinesCount: filteredWithMl.length, value: count}
})
// console.log('machinesWithMl', machinesWithMl)
const countMachinesWithMl = Math.floor((machinesWithMl.reduce((acc, machine) => {
return acc + machine.machinesCount
}, 0)) / filterKeysMl.length)
const machinesWithoutMl = filterKeysMl.map((filterKey) => {
const countNull = data.reduce((acc, machine) => {
if (machine[filterKey] === null) {
acc = acc + 1
} else {
acc
}
return acc
}, 0)
return {key: filterKey, value: countNull}
})
// console.log('machinesWithoutMl', machinesWithoutMl)
const countMachinesWithoutMl = Math.floor((machinesWithoutMl.reduce((acc, machine) => {
return acc + machine.value
}, 0)) / filterKeysMl.length // Либо только машины, если без деления тогда все null МЛ суммируются
)
machinesWithMl.push({key: 'routes_without_ml', name: setNamesMl('routes_without_ml'), value: countMachinesWithoutMl})
return {countMachinesWithMl: countMachinesWithMl, period: setPeriodCharts(filterKeysMl).title, machines: machinesWithMl}
}
const chartsBarMount = (data, groupByKey, filterKey, countKey) => {
const groupByData = Object.groupBy(data, (el) => el[groupByKey])
const yAxisData = Object.entries(groupByData).map(([key, val]) => ({key: key, val: val.reduce((acc, val) => acc + val[countKey], 0)}))
const xAxisData = Object.entries(groupByData).map(([key, groupArr]) => {
const groupByFilterData = Object.groupBy(groupArr, (el) => el[filterKey])
const newArr = Object.entries(groupByFilterData).map(([key, val]) => ({name: key, value: val.reduce((acc, val) => acc + val[countKey], 0)}))
return {yAxisData: key, totalCount: groupArr.length, charts: newArr}
})
const countMounts = yAxisData.reduce((acc, year) => (acc + year.val), 0)
return {yAxisData: yAxisData, xAxisData: xAxisData, countMounts: countMounts, filterKey: filterKey}
}
const chartsBarTypes = (data, groupByKey, filterKey, prevGroupByData, prevGroupByFilters) => {
const countMachines = data.length
const groupByData = Object.groupBy(data, (el) => el[groupByKey])
const yAxisData = Object.entries(groupByData).map(([key, val]) => ({key: key, val: val.length}))
const xAxisData = Object.entries(groupByData).map(([key, groupArr]) => {
const groupByFilterData = Object.groupBy(groupArr, (el) => el[filterKey])
const newArr = Object.entries(groupByFilterData).map(([key, val]) => ({name: key, value: val.length, linkData: groupByKey === 'machine_type' ? val.map((el) => ({machine_type: el.machine_type, device_number: el.device_number})) : ''}))
return {yAxisData: key, totalCount: groupArr.length, charts: newArr}
})
return {yAxisData: yAxisData, xAxisData: xAxisData, countMachines: countMachines, period: setPeriodCharts(filterKey).title, filterKey: filterKey, groupByKey: groupByKey, prevGroupByData: prevGroupByData, prevGroupByFilters: prevGroupByFilters}
}
const chartsBarTypesGroupedBy = (data, groupByKey, filterKey, prevGroupByData, prevGroupByFilters, typeId) => {
const machineClass = setMachinesClass(typeId)
const machinesFilteredClass = data.filter(({machine_class}) => machine_class === machineClass)
const groupByData = Object.groupBy(machinesFilteredClass, (el) => el[groupByKey])
const yAxisData = Object.entries(groupByData).map(([key, val]) => ({key: key, val: val.length}))
const xAxisData = Object.entries(groupByData).map(([key, groupArr]) => {
const groupByFilterData = Object.groupBy(groupArr, (el) => el[filterKey])
const newArr = Object.entries(groupByFilterData).map(([key, val]) => ({name: key, value: val.length, linkData: groupByKey === 'machine_type' ? val.map((el) => ({machine_type: el.machine_type, device_number: el.device_number})) : ''}))
return {yAxisData: key, totalCount: groupArr.length, charts: newArr}
})
const countMachines = yAxisData.reduce((acc, type) => acc + type.val, 0)
return {yAxisData: yAxisData, xAxisData: xAxisData, countMachines: countMachines, period: setPeriodCharts(filterKey).title, filterKey: filterKey, groupByKey: groupByKey, prevGroupByData: prevGroupByData, prevGroupByFilters: prevGroupByFilters, typeId: typeId}
}
const chartsBarTypesWithoutFirstLayout = (data, groupByKey, filterKey, prevGroupByData, prevGroupByFilters, groupByValue) => {
const groupByData = Object.groupBy(data, (el) => el['org_type_name'])
const filteredGroupByData = Object.entries(groupByData).filter(([key, val]) => key === groupByValue)
if (filteredGroupByData.length === 0) return {yAxisData: [], xAxisData: [], countMachines: 0, period: setPeriodCharts(filterKey).title, filterKey: filterKey, groupByKey: groupByKey, prevGroupByData: prevGroupByData, prevGroupByFilters: prevGroupByFilters, groupByValue: groupByValue}
const [groupedByGroupByKeyY] = filteredGroupByData.map(([key, groupArr]) => Object.groupBy(groupArr, (el) => el[groupByKey]))
const yAxisData = Object.entries(groupedByGroupByKeyY).map(([key, val]) => ({key: key, val: val.length}))
const [groupedByGroupByKeyX] = filteredGroupByData.map(([key, groupArr]) => Object.groupBy(groupArr, (el) => el[groupByKey]))
const xAxisData = Object.entries(groupedByGroupByKeyX).map(([key, groupArr]) => {
const groupByFilterData = Object.groupBy(groupArr, (el) => el[filterKey])
const newArr = Object.entries(groupByFilterData).map(([key, val]) => ({name: key, value: val.length, linkData: groupByKey === 'machine_type' ? val.map((el) => ({machine_type: el.machine_type, device_number: el.device_number})) : ''}))
return {yAxisData: key, totalCount: groupArr.length, charts: newArr}
})
const countMachines = yAxisData.reduce((acc, type) => acc + type.val, 0)
return {yAxisData: yAxisData, xAxisData: xAxisData, countMachines: countMachines, period: setPeriodCharts(filterKey).title, filterKey: filterKey, groupByKey: groupByKey, prevGroupByData: prevGroupByData, prevGroupByFilters: prevGroupByFilters, groupByValue: groupByValue}
}
const chartsBarTypesGroupedByMl = (data, groupByKey, filterKeys, prevGroupByData, prevGroupByFilters) => {
const groupByData = Object.groupBy(data, (el) => el[groupByKey])
const yAxisData = Object.entries(groupByData).map(([key, val]) => {
const allValuesArr = filterKeys.map((filterKey) => {
const machinesWithMl = val.reduce((acc, el) => {
if (el[filterKey] || el[filterKey] === 0) {
acc = acc + el[filterKey]
} else {
acc
}
return acc
}, 0)
const machinesWithoutMl = val.filter((el) => el[filterKey] === null).length
return {machinesWithMl: machinesWithMl, machinesWithoutMl: machinesWithoutMl}
})
// console.log('allValuesArr', allValuesArr)
const countMachinesWithMl = allValuesArr.reduce((acc, count) => (acc + count.machinesWithMl), 0)
const countMachinesWithoutMl = allValuesArr.reduce((acc, count) => (acc + count.machinesWithoutMl), 0) / filterKeys.length // Для исключения дублирования делим н а длину filterKeys
return {key: key, val: countMachinesWithMl + countMachinesWithoutMl}
})
const xAxisData = Object.entries(groupByData).map(([key, groupArr]) => {
return filterKeys.map((filterKey) => {
const groupByFilterData = Object.groupBy(groupArr, (el) => el[filterKey])
const newArr = Object.entries(groupByFilterData).map(([key, val]) => ({key: filterKey, name: key, value: val.reduce((acc, el) => el[filterKey] ? acc + el[filterKey] : acc, 0), linkData: groupByKey === 'machine_type' ? val.map((el) => ({machine_type: el.machine_type, device_number: el.device_number})) : ''}
))
const machinesWithMl = newArr.reduce((acc, type) => {
if (type.key === filterKey) {
acc = {filterKey: filterKey, name: setNamesMl(filterKey), value: acc?.value + type.value, linkData: type.linkData}
} else {
acc = {filterKey: filterKey, name: setNamesMl(filterKey), value: acc?.value, linkData: type.linkData}
}
return acc
}, {value: 0})
// console.log('machinesWithMl', machinesWithMl)
return {yAxisData: key, charts: machinesWithMl}
})
})
const machinesWithoutMl = Object.entries(groupByData).map(([key, val]) => {
const countWithoutMl = val.filter((el) => filterKeys.find((filterKey) => el[filterKey] === null)).length
return {yAxisData: key, charts: {filterKey: 'routes_without_ml', name: setNamesMl('routes_without_ml'), value: countWithoutMl, linkData: groupByKey === 'machine_type' ? val.map((el) => ({machine_type: el.machine_type, device_number: el.device_number})) : ''}}
})
const countMachinesWithMl = setCountMachinesMl(xAxisData)
const countMachinesWithoutMl = Math.floor(setCountMachinesMl(machinesWithoutMl)) / filterKeys.length
const updatedXAxisData = xAxisData.reduce((acc, group) => {
const isFindGroup = machinesWithoutMl.find((machine) => machine.yAxisData === group[0].yAxisData)
if (isFindGroup) {
const updatedGroup = [...group, isFindGroup]
acc.push(updatedGroup)
} else {
acc
}
return acc
}, [])
// console.log('updatedXAxisData', updatedXAxisData)
return {yAxisData: yAxisData, xAxisData: updatedXAxisData, countMachinesWithMl: countMachinesWithMl, countMachinesWithoutMl: countMachinesWithoutMl, period: setPeriodCharts(filterKeys).title, groupByKey: groupByKey, prevGroupByData: prevGroupByData, prevGroupByFilters: prevGroupByFilters}
}
/* Charts updated data end */
const loadingChartsData = ({chartsSetup, data, dataMount, prevGroupByData, prevGroupByFilters}) => {
// console.log('dataPie', chartsPie(data, chartsFilterParams[0]))
// console.log('dataPieValue', chartsPieGroupByValue(data, chartsGroupByParams[0], chartsFilterParams[0]))
// console.log('dataPieTypes', chartsPieGroupedBy(data, chartsGroupByParams2[0], chartsFilterParams[0]))
// console.log('dataBarMl', chartsBarGroupedByMl(data, chartsFilterKeysMl))
// console.log('dataBarMount', chartsBarMount(dataMount, 'year', 'client_type', 'device_count'))
// console.log('chartsBarTypesGroupedByMl', chartsBarTypesGroupedByMl(data, 'org_type_name', chartsFilterKeysMl, {}, {}))
const filteredPie = chartsFilterParams.reduce((acc, param) => {
const idChart = `${param.filterKey}_pie`
return {...acc, [idChart]: chartsPie(data, param)}}, {}) // Далее объединение всех типов графиков
const filteredPieGroupByValue = chartsGroupByParams.reduce((acc, param) => {
const idChart = `${chartsFilterParams[0].filterKey}_pie_${param.valueId}`
return {...acc, [idChart]: chartsPieGroupedBy(data, param, chartsFilterParams[0])}}, {})
const filteredPieGroupByTypes = chartsGroupByParams2.reduce((acc, param) => {
const idChart = `${chartsFilterParams[0].filterKey}_pie_${param.valueId}`
return {...acc, [idChart]: chartsPieGroupedBy(data, param, chartsFilterParams[0])}}, {})
const filteredBarGroupByMl = {[`${chartsFilterParams[1].filterKey}_bar`]: chartsBarGroupedByMl(data, chartsFilterKeysMl)}
const filteredBarMount = chartsMountParams.reduce((acc, param) => {
const idChart = `mount_${param.filterKey}_bar`
return {...acc, [idChart]: chartsBarMount(dataMount, param.groupByKey, param.filterKey, param.countKey)}}, {})
const filteredBarTypes = chartsBarTypesParams.reduce((acc, param) => {
const idChart = `${param.filterKey}_${param.valueId}_bar`
return {...acc, [idChart]: chartsBarTypes(data, param.groupByKey, param.filterKey, prevGroupByData, prevGroupByFilters)}}, {})
const filteredBarGroupByTypes = chartsBarTypesGroupByParams.reduce((acc, param) => {
const idChart = `${param.filterKey}_${param.valueId}_bar_${param.typeId}`
return {...acc, [idChart]: chartsBarTypesGroupedBy(data, param.groupByKey, param.filterKey, prevGroupByData, prevGroupByFilters, param.typeId)}}, {})
const filteredBarWithoutLayoutTypes = chartsBarTypesWithoutLayoutParams.reduce((acc, param) => {
const idChart = `${param.filterKey}_types_bar_${param.valueId}`
return {...acc, [idChart]: chartsBarTypesWithoutFirstLayout(data, param.groupByKey, param.filterKey, prevGroupByData, prevGroupByFilters, param.groupByValue)}}, {})
const filteredBarGroupByMlTypes = {[`${chartsFilterParams[1].filterKey}_types_bar_ml`]: chartsBarTypesGroupedByMl(data, 'org_type_name', chartsFilterKeysMl, prevGroupByData, prevGroupByFilters)}
const allCharts = {...filteredPie, ...filteredPieGroupByValue, ...filteredPieGroupByTypes, ...filteredBarGroupByMl, ...filteredBarMount, ...filteredBarTypes, ...filteredBarGroupByTypes, ...filteredBarWithoutLayoutTypes, ...filteredBarGroupByMlTypes}
console.log('allCharts', allCharts)
// console.log('this.charts', data)
const main = chartsSetup.main.reduce((acc, chart) => {
if (allCharts[chart.id]) {
const newChart = {...chart, data: allCharts[chart.id]}
acc = [...acc, newChart]
} else {
acc
}
return acc
}, [])
const types = chartsSetup.types.reduce((acc, chart) => {
if (allCharts[chart.id]) {
const newChart = {...chart, data: allCharts[chart.id]}
acc = [...acc, newChart]
} else {
acc
}
return acc
}, [])
return {...chartsSetup, main: main, types: types}
}
const setBarTypesChart = (activeChartParams, prevGroupByData, prevGroupByFilters, defaultData, currentData) => {
switch (activeChartParams.type) {
case 'default':
const dataDefault = chartsBarTypes(defaultData, activeChartParams.groupByKey, activeChartParams.filterKey, prevGroupByData, prevGroupByFilters)
// const updatedData = currentData.types.reduce((acc, chart) => {
// if (chart.id === activeChartParams.id) {
// const newChart = {...chart, data: data}
// acc = [...acc, newChart]
// } else {
// acc = [...acc, chart]
// }
// return acc
// }, [])
// return {main: currentData.main, types: updatedData}
return dataDefault
case 'without_first_layout':
const dataWithoutFirstLayout = chartsBarTypesWithoutFirstLayout(defaultData, activeChartParams.groupByKey, activeChartParams.filterKey, prevGroupByData, prevGroupByFilters, activeChartParams.groupByValue)
return dataWithoutFirstLayout
case 'types':
const dataGroupBy = chartsBarTypesGroupedBy(defaultData, activeChartParams.groupByKey, activeChartParams.filterKey, prevGroupByData, prevGroupByFilters, activeChartParams.groupByValue)
return dataGroupBy
case 'ml':
const dataMl = chartsBarTypesGroupedByMl(defaultData, activeChartParams.groupByKey, chartsFilterKeysMl, prevGroupByData, prevGroupByFilters)
return dataMl
}
}
const setNextLayoutGroupByKey = (groupByKey, prevGroupByValue) => {
if (prevGroupByValue === 'без типа') return null
switch (groupByKey) {
case 'org_type_name': return 'railway_name'
case 'railway_name': return 'org_name'
case 'org_name': return 'type'
case 'type': return 'machine_type'
case 'zav_nomer': return 'machine_type'
default: return null
}
}
const setBeforeLayoutGroupByData = (prevGroupByData, prevGroupByFilters, type) => {
return cond([
[has('type'), () => ({org_name: prevGroupByFilters['org_name']})],
[has('org_name'), () => ({railway_name: prevGroupByFilters['railway_name']})],
[has('railway_name'), () => (type === 'without_first_layout' ? {} : {org_type_name: prevGroupByFilters['org_type_name']})],
[T, () => {}],
])(prevGroupByData)
}
const typesCharts = (type) => {
switch (type) {
case 'pie': return true
case 'mount': return true
case 'mainMl': return true
default: return false
}
}
export { loadingChartsData, setBarTypesChart, setNextLayoutGroupByKey, setBeforeLayoutGroupByData, typesCharts }

View File

@ -0,0 +1,459 @@
import {toRaw} from 'vue'
import {searchModes, leftTopButtons, rightTopButtons, selects, selectors, charts, dataMachines, dataMount, pagination, machineInfo, reportPacks, report, packStructure, multiReport, multiPackStructure} from './StaticData'
import { chartsSetup } from '@/store/hooks/Echarts/staticData.js';
import { prepareSelects, mergedMachines, setUpdatedDataMachines, colorSelection, loadingPagination, setPagination } from './helpers';
import { loadingChartsData, setBarTypesChart, setNextLayoutGroupByKey, setBeforeLayoutGroupByData, typesCharts } from './helpersCharts';
import { fetchColumn, prepareSetPackColumns } from '@organisms/PackColumns';
import { get } from '../apiHelpers';
import {equals, isEmpty, uniq} from 'ramda'
const initState = {
leftTopButtons: leftTopButtons,
rightTopButtons: rightTopButtons,
searchModes: searchModes,
pagination: pagination,
toggleFilter: false,
openMenuChart: false,
initHistory: false,
selectedSearchMode: searchModes[0],
selectedMode: leftTopButtons[0].key,
selectedSelects: {},
activeFilterBtn: null,
activeChartData: null,
activeMenuChartData: {openMenuChart: false},
selectedPackStruct: null,
selectedPackMode: 'askr_logs',
searchValue: '',
selectedData: [],
selectsData: [],
machinesDataDefault: [],
machinesData: [],
tableData: [],
chartsData: [],
chartsMountData: [],
mapData: null,
machineInfo: null,
reportPacks: [],
structPackDefault: [],
selectPackStructs: [],
packData: {},
historyData: [],
historyMachines: [],
legendFiltersParams: [],
};
const state = {
...initState
};
const getters = {
pages: (state) => state.pages,
searchModes: (state) => state.searchModes,
leftTopButtons: (state) => state.leftTopButtons,
rightTopButtons: (state) => state.rightTopButtons,
toggleFilter: (state) => state.toggleFilter,
openMenuChart: (state) => state.openMenuChart,
initHistory: (state) => state.initHistory,
selectedPage: (state) => state.selectedPage,
selectedSearchMode: (state) => state.selectedSearchMode,
selectedMode: (state) => state.selectedMode,
selectedSelects: (state) => state.selectedSelects,
activeFilterBtn: (state) => state.activeFilterBtn,
activeChartData: (state) => state.activeChartData,
activeMenuChartData: (state) => state.activeMenuChartData,
selectedPackStruct: (state) => state.selectedPackStruct,
selectedPackMode: (state) => state.selectedPackMode,
searchValue: (state) => state.searchValue,
selectedData: (state) => state.selectedData,
selectsData: (state) => state.selectsData,
machinesDataDefault: (state) => state.machinesDataDefault,
machinesData: (state) => state.machinesData,
tableData: (state) => state.tableData,
chartsData: (state) => state.chartsData,
chartsMountData: (state) => state.chartsMountData,
historyData: (state) => state.historyData,
historyMachines: (state) => state.historyMachines,
legendFiltersParams: (state) => state.legendFiltersParams,
pagination: (state) => state.pagination,
mapData: (state) => state.mapData,
machineInfo: (state) => state.machineInfo,
reportPacks: (state) => state.reportPacks,
selectPackStructs: (state) => state.selectPackStructs,
packData: (state) => state.packData,
};
const mutations = {
setPage: (state, updval) => state.selectedPage = updval,
setToggleFilter: (state) => state.toggleFilter = !state.toggleFilter,
setOpenMenuChart: (state, updval) => state.openMenuChart = updval,
setInitHistory: (state, updval) => state.initHistory = updval,
setSearchMode: (state, updval) => state.selectedSearchMode = updval,
setSelectedMode: (state, updval) => state.selectedMode = updval,
setSelectedSelects: (state, updval) => state.selectedSelects = updval,
setSelectedMachines: (state, updval) => state.selectedMachines = updval,
setActiveFilterBtn: (state, updval) => state.activeFilterBtn = updval,
setActiveChartData: (state, updval) => state.activeChartData = updval,
setActiveMenuChartData: (state, updval) => state.activeMenuChartData = updval,
setSelectedPackStruct: (state, updval) => state.selectedPackStruct = updval,
setSelectedPackMode: (state, updval) => state.selectedPackMode = updval,
setSelectsData: (state, updval) => state.selectsData = updval,
setSearchValue: (state, updval) => state.searchValue = updval,
setSelectedData: (state, updval) => state.selectedData = updval,
setMachinesDataDefault: (state, updval) => state.machinesDataDefault = updval,
setMachinesData: (state, updval) => state.machinesData = updval,
setTableData: (state, updval) => state.tableData = updval,
setChartsData: (state, updval) => state.chartsData = updval,
setChartsDataMount: (state, updval) => state.chartsMountData = updval,
setHistoryData: (state, updval) => state.historyData = updval,
setHistoryMachines: (state, updval) => state.historyMachines = updval,
setLegendFiltersParams: (state, updval) => state.legendFiltersParams = updval,
setPagination: (state, updval) => state.pagination = updval,
setMapData: (state, updval) => state.mapData = updval,
setMachineInfo: (state, updval) => state.machineInfo = updval,
setReportPacks: (state, updval) => state.reportPacks = updval,
setStructPackDefault: (state, updval) => state.structPackDefault = updval,
setSelectPackStructs: (state, updval) => state.selectPackStructs = updval,
setPackData: (state, updval) => state.packData = updval,
resetStore: (state) => {
Object.entries(initState).forEach(([k,v]) => {
state[k] = v
})
},
};
const actions = {
uploadData: async ({commit, getters, state}, externalParams) => {
try{
// const machinesData = toRaw(getters.machinesData)
// const machinesDataDefault = toRaw(state.machinesDataDefault)
const pagination = toRaw(getters.pagination)
// const chartsData = toRaw(state.chartsData)
const historyData = externalParams.historyData ? externalParams.historyData : toRaw(state.historyData)
const chartsData = !isEmpty(dataMachines) ? dataMachines.filter((machine) => machine.machine_id !== null) : []
const chartsMountData = !isEmpty(dataMount) ? dataMount.filter((el) => el.client_type !== null) : []
const updatedData = loadingChartsData({chartsSetup: chartsSetup, data: chartsData, dataMount: chartsMountData, prevGroupByData: {}, prevGroupByFilters: {}})
const filteredSelects = prepareSelects(selects, selectors)
const mergedData = mergedMachines(dataMachines, historyData)
const currentTableData = loadingPagination(dataMachines, pagination)
const currentSelectedMode = externalParams.urlParams ? externalParams.urlParams : 'cards'
// console.log('updatedData', updatedData)
commit('setSelectedMode', currentSelectedMode)
commit('setTableData', currentTableData)
commit('setPagination', pagination)
commit('setSelectsData', filteredSelects)
commit('setChartsData', updatedData)
commit('setChartsDataMount', chartsMountData)
commit('setMachinesDataDefault', dataMachines)
commit('setMachinesData', mergedData)
} catch (err) {
console.error(err)
}
},
updateSearch: async ({commit, getters, state}, updatedSearchValue) => {
try {
const selectedSearchMode = toRaw(getters.selectedSearchMode)
const selectedData = toRaw(getters.selectedData)
const machinesDataDefault = toRaw(state.machinesDataDefault)
// const machinesData = toRaw(state.machinesData)
const isEmptyParams = isEmpty(selectedData)
let updatedFilters = []
if (updatedSearchValue) {
console.log('isEmptyParams', isEmptyParams)
console.log('selectedData', selectedData)
// updatedFilters = isEmptyParams ? [{[selectedSearchMode.key]: updatedSearchValue}] : [...selectedData.filter, {[selectedSearchMode.key]: updatedSearchValue}]
updatedFilters = [{[selectedSearchMode.key]: updatedSearchValue}]
}
if (!updatedSearchValue) {
updatedFilters = !isEmptyParams ? selectedData.filter.filter((el) => !el[selectedSearchMode.key]) : selectedData
}
const updatedFiltersForSend = {filter: updatedFilters}
// const currentData = !isEmptyParams && updatedSearchValue && !isEmpty(machinesData) ? machinesData : machinesDataDefault
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
commit('setSelectedData', updatedFiltersForSend)
commit('setSelectedSelects', {})
commit('setSearchValue', updatedSearchValue)
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
colorSelection(selectedSearchMode.key, updatedSearchValue)
// console.log('updatedFilters', updatedFilters)
// console.log('updatedData', updatedData)
} catch (err) {
console.error(err)
}
},
updateSelects: async ({dispatch, commit, getters, state}, updatedSelect) => {
try {
const allSelects = toRaw(getters.selectsData)
const selectedSelects = toRaw(getters.selectedSelects)
const machinesDataDefault = toRaw(state.machinesDataDefault)
dispatch('updateSearch', '')
const curUpdatedSelectName = updatedSelect.key === 'set' ? updatedSelect.value[0].name : updatedSelect.value.name
let updatedSelects = {}
for (let i = 0; i < allSelects.length; i++) {
const curSelect = allSelects[i]
const newSelected = curSelect.data.find((el) => el.name === curUpdatedSelectName)
if (!newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key]
}
if (updatedSelect.key === 'removed' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length === 0)) {
break
}
if (updatedSelect.key === 'removed' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key].filter((el) => el.name !== newSelected.name)
break
}
if (updatedSelect.key === 'set' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key]
break
}
}
const updatedFilters = Object.entries(updatedSelects).map(([key, value]) => ({[key]: value.map((el) => el.name)}))
// const mergedFilters = searchValue ? [...updatedFilters, {[selectedSearchMode.key]: searchValue}] : updatedFilters
// console.log('mergedFilters', mergedFilters)
// const currentData = !isEmptyParams ? machinesData : machinesDataDefault
const updatedFiltersForSend = {filter: updatedFilters}
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
// console.log('updatedData', updatedData)
// console.log('updatedFilters', updatedFilters)
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
commit('setSelectedSelects', updatedSelects)
commit('setSelectedData', updatedFiltersForSend)
} catch (err) {
console.error(err)
}
},
updateCharts: async ({commit, getters, state}, updatedData) => {
try {
switch(updatedData.action) {
case 'nextLayoutChart':
// console.log('updatedDataNext', updatedData)
const prevGroupByFiltersNext = updatedData.prevGroupByFilters
const updatedFiltersNext = {...prevGroupByFiltersNext, ...updatedData.prevGroupByData}
const prevGroupByValue = updatedData.prevGroupByData.type ? updatedData.prevGroupByData.type : null
const groupByKeyNext = setNextLayoutGroupByKey(updatedData.groupByKey, prevGroupByValue)
if (groupByKeyNext) {
const activeChartData = {id: updatedData.id, data: updatedData.data, groupByKey: groupByKeyNext, filterKey: updatedData.filterKey, type: updatedData.type, groupByValue: updatedData.groupByValue}
const newData = setBarTypesChart(activeChartData, updatedData.prevGroupByData, updatedFiltersNext, state.machinesDataDefault, toRaw(state.chartsData))
return commit('setActiveChartData', {...activeChartData, data: newData})
}
break
case 'beforeLayoutChart':
// console.log('updatedDataBefore', updatedData)
const prevGroupByData = updatedData.groupByInfo.prevGroupByData
const prevGroupByFiltersBefore = updatedData.groupByInfo.prevGroupByFilters
const groupByKeyBefore = Object.keys(prevGroupByData)[0] // Получаем уже предыдущее значение ключа
delete prevGroupByFiltersBefore[groupByKeyBefore] // Удаляем значение после вычисления prevGroupByData, так как подымаемся на уровень выше, сохраняя актуальное значение для фильтрации
const isOnlyFiltersParams = equals(prevGroupByData, prevGroupByFiltersBefore)
const updatedPrevGroupByDataBefore = isOnlyFiltersParams ? {} : setBeforeLayoutGroupByData(prevGroupByData, prevGroupByFiltersBefore, updatedData.groupByInfo.type)
if (groupByKeyBefore) {
const activeChartData = {id: updatedData.id, data: updatedData.data, groupByKey: groupByKeyBefore, filterKey: updatedData.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newData = setBarTypesChart(activeChartData, updatedPrevGroupByDataBefore, prevGroupByFiltersBefore, state.machinesDataDefault, toRaw(state.chartsData))
return commit('setActiveChartData', {...activeChartData, data: newData})
}
break
case 'openMenuChart':
// console.log('updatedDataOpen', updatedData)
const openMenuChart = toRaw(state.activeMenuChartData.openMenuChart)
updatedData.groupByInfo.data[0].type = updatedData.groupByInfo.type
const activeChartDataMenu = {chartId: updatedData.groupByInfo.chartId, data: updatedData.groupByInfo.data, groupByKey: updatedData.groupByInfo.groupByKey, filterKey: updatedData.groupByInfo.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newDataMenu = setBarTypesChart(activeChartDataMenu, updatedData.groupByInfo.prevGroupByData, updatedData.groupByInfo.prevGroupByFilters, state.machinesDataDefault, toRaw(state.chartsData))
const isNotTypesChartsMenu = typesCharts(updatedData.groupByInfo.type)
const toggleActiveMenuChartData = {openMenuChart: !openMenuChart, groupByInfo: {...activeChartDataMenu, data: isNotTypesChartsMenu ? updatedData.groupByInfo.data[0] : newDataMenu}}
commit('setActiveMenuChartData', toggleActiveMenuChartData)
break
case 'downloadChart':
// console.log('updatedDataDownload', updatedData)
const activeChartDataDownload = {chartId: updatedData.groupByInfo.chartId, isDownloadChart: updatedData.groupByInfo.isDownloadChart, data: updatedData.groupByInfo.data, groupByKey: updatedData.groupByInfo.groupByKey, prevGroupByData: updatedData.groupByInfo.prevGroupByData, prevGroupByFilters: updatedData.groupByInfo.prevGroupByFilters, filterKey: updatedData.groupByInfo.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newDataDownload = setBarTypesChart(activeChartDataDownload, updatedData.groupByInfo.prevGroupByData, updatedData.groupByInfo.prevGroupByFilters, state.machinesDataDefault, toRaw(state.chartsData))
const isNotTypesChartsDownload = typesCharts(updatedData.groupByInfo.type)
const downloadActiveMenuChartData = {openMenuChart: false, groupByInfo: {...updatedData.groupByInfo, data: isNotTypesChartsDownload ? updatedData.groupByInfo.data[0] : newDataDownload}}
commit('setActiveMenuChartData', downloadActiveMenuChartData)
break
case 'legendFiltersParams':
commit('setLegendFiltersParams', updatedData.data)
default: return false
}
} catch (err) {
console.error(err)
}
},
updatePagination: async ({commit, getters, state}, updatedData) => {
try {
const pagination = toRaw(getters.pagination)
const machinesDataDefault = toRaw(state.machinesDataDefault)
const newData = setPagination(machinesDataDefault, pagination, updatedData)
console.log('currentTableData', newData.currentTableData)
commit('setTableData', newData.currentTableData)
commit('setPagination', newData.updatedPagination)
} catch (err) {
console.error(err)
}
},
openMapModal: async ({commit, state}, machine) => {
try {
// Добавить запрос на получение координат
/*
machine_id = machine["machine_id"]
last_loc = Communicator.PackFetcher.last_locations([machine_id])
*/
const coords = [44.510345, 48.771025]
const params = {machine: machine, coords: coords}
commit('setMapData', params)
} catch (err) {
console.error(err)
}
},
openDataModal: async ({commit, state}, machine) => {
try {
// Добавить запрос на получение пакетов и информации о машине
/*
curr_machine_info = Communicator.Devices.askr_devices(where: "imei = #{imei}")
[{_, machine_name} | machine_info] =
Analyzer.reparse_machine_info(curr_machine_info, :imei)
|> Enum.reduce([], fn
{"Текущая машина", _} = cur, acc -> [cur] ++ acc
cur, acc -> acc ++ [cur]
end)
report_packs =
Enum.reduce(curr_machine_info, [], fn
%{imei: imei}, acc ->
acc ++
PacksFuncs.get_pack_nums(
imei,
Timex.now() |> Timex.beginning_of_day(),
Timex.now() |> Timex.end_of_day()
)
_, acc ->
acc
end)
|> DynamicStructDestroyer.destroy()
|> Enum.sort_by(& &1.packNumber)
*/
commit('setMachineInfo', machineInfo)
commit('setReportPacks', reportPacks)
} catch (err) {
console.error(err)
}
},
loadPack: async ({commit, state}, packNumber) => {
try {
/* Получение данных о пакете
report =
Enum.reduce(curr_machine_info, [], fn
%{imei: imei}, acc ->
acc ++ PacksFuncs.upload_machine_data(imei, pack_number, dt_start, dt_finish, 30) // Огреничение до 30 машин askr_logs
_, acc ->
acc
end)
|> DynamicStructDestroyer.destroy()
Получение структуры пакета
pack_structs = Helper.get_structs_of_pack(pack_number)
def get_structs_of_pack(pack_number) do
LiveMonitor.Packages.list_pack_struct()
|> Enum.filter(&(&1.pack == pack_number))
end
*/
console.log('packNumber', packNumber)
// const dataSource = !isEmpty(report) ? report.askr_logs.sort((a, b) => b.pack_dt - a.pack_dt) : []
const dataSource = !isEmpty(multiReport) ? multiReport.askr_logs.sort((a, b) => b.pack_dt - a.pack_dt).slice(0, 30) : [] // Огреничение до 30 машин askr_logs
// const columns = fetchColumn(packStructure, report)
const columns = fetchColumn(multiPackStructure, multiReport)
// const selectedPackStruct = packStructure.map((item) => ({id: item.id, name: item.name, packNumber: packNumber}))
console.log('multiPackStructure', multiPackStructure)
console.log('multiReport', multiReport)
console.log('columns', columns)
const selectPackStructs = multiPackStructure.map((item) => ({id: item.id, name: item.name, packNumber: packNumber}))
commit('setStructPackDefault', multiPackStructure)
commit('setSelectPackStructs', selectPackStructs)
commit('setSelectedPackStruct', selectPackStructs[0])
commit('setPackData', {dataSource, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
updateModePack: async ({commit, getters, state}, updatedMode) => {
try {
const structPackDefault = toRaw(state.structPackDefault)
const currentReport = multiReport[updatedMode] ? multiReport[updatedMode] : []
const columns = updatedMode === 'askr_logs' ? fetchColumn(structPackDefault, multiReport, null) : prepareSetPackColumns(updatedMode, currentReport)
console.log('columns', columns)
console.log('currentReport', currentReport)
commit('setSelectedPackMode', updatedMode)
commit('setPackData', {dataSource: currentReport, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
updateSelectStruct: async ({commit, getters, state}, updatedStructId) => {
try {
const updatedMode = toRaw(getters.selectedPackMode)
const currentReport = toRaw(state.packData.dataSource)
const structPackDefault = toRaw(state.structPackDefault)
const selectPackStructs = toRaw(getters.selectPackStructs)
const [selectedPackStruct] = selectPackStructs.filter((item) => item.id === updatedStructId)
console.log('selectedPackStruct', selectedPackStruct)
// const currentReport = multiReport[updatedMode] ? multiReport[updatedMode] : []
const columns = updatedMode === 'askr_logs' ? fetchColumn(structPackDefault, multiReport, updatedStructId) : prepareSetPackColumns(updatedMode, currentReport)
console.log('updatedMode', updatedMode)
console.log('structPackDefault', structPackDefault)
console.log('columns', columns)
console.log('currentReport', currentReport)
commit('setSelectedPackStruct', selectedPackStruct)
commit('setPackData', {dataSource: currentReport, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
clearFilters: async ({commit, state}) => {
try {
const machinesDataDefault = toRaw(state.machinesDataDefault)
const updatedFiltersForSend = {filter: []}
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
commit('setSelectedSelects', {})
commit('setSelectedData', [])
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
} catch (err) {
console.error(err)
}
},
resetStore: ({commit}) => {
commit('resetStore')
}
};
export const store = {
namespaced: true,
state,
getters,
mutations,
actions,
};

View File

@ -1,48 +1,7 @@
import {toRaw} from 'vue' import {equals, isEmpty} from 'ramda'
import {searchModes, leftTopButtons, rightTopButtons, selects, selectors, charts, dataMachines, dataMount, pagination, machineInfo, reportPacks, report, packStructure, multiReport, multiPackStructure} from './StaticData'
import { chartsSetup } from '@/store/hooks/Echarts/staticData.js';
import { prepareSelects, mergedMachines, setUpdatedDataMachines, colorSelection, loadingPagination, setPagination } from './helpers';
import { loadingChartsData, setBarTypesChart, setNextLayoutGroupByKey, setBeforeLayoutGroupByData, typesCharts } from './helpersCharts';
import { fetchColumn, prepareSetPackColumns } from '@organisms/PackColumns';
import { get } from '../apiHelpers';
import {equals, isEmpty, uniq} from 'ramda'
const initState = { const initState = {
leftTopButtons: leftTopButtons, modalMachines: [],
rightTopButtons: rightTopButtons,
searchModes: searchModes,
pagination: pagination,
toggleFilter: false,
openMenuChart: false,
initHistory: false,
selectedSearchMode: searchModes[0],
selectedMode: leftTopButtons[0].key,
selectedSelects: {},
activeFilterBtn: null,
activeChartData: null,
activeMenuChartData: {openMenuChart: false},
selectedPackStruct: null,
selectedPackMode: 'askr_logs',
searchValue: '',
selectedData: [],
selectsData: [],
machinesDataDefault: [],
machinesData: [],
tableData: [],
chartsData: [],
chartsMountData: [],
mapData: null,
machineInfo: null,
reportPacks: [],
structPackDefault: [],
selectPackStructs: [],
packData: {},
historyData: [],
historyMachines: [],
legendFiltersParams: [],
}; };
const state = { const state = {
@ -50,400 +9,22 @@ const state = {
}; };
const getters = { const getters = {
pages: (state) => state.pages, modalMachines: (state) => state.modalMachines,
searchModes: (state) => state.searchModes,
leftTopButtons: (state) => state.leftTopButtons,
rightTopButtons: (state) => state.rightTopButtons,
toggleFilter: (state) => state.toggleFilter,
openMenuChart: (state) => state.openMenuChart,
initHistory: (state) => state.initHistory,
selectedPage: (state) => state.selectedPage,
selectedSearchMode: (state) => state.selectedSearchMode,
selectedMode: (state) => state.selectedMode,
selectedSelects: (state) => state.selectedSelects,
activeFilterBtn: (state) => state.activeFilterBtn,
activeChartData: (state) => state.activeChartData,
activeMenuChartData: (state) => state.activeMenuChartData,
selectedPackStruct: (state) => state.selectedPackStruct,
selectedPackMode: (state) => state.selectedPackMode,
searchValue: (state) => state.searchValue,
selectedData: (state) => state.selectedData,
selectsData: (state) => state.selectsData,
machinesDataDefault: (state) => state.machinesDataDefault,
machinesData: (state) => state.machinesData,
tableData: (state) => state.tableData,
chartsData: (state) => state.chartsData,
chartsMountData: (state) => state.chartsMountData,
historyData: (state) => state.historyData,
historyMachines: (state) => state.historyMachines,
legendFiltersParams: (state) => state.legendFiltersParams,
pagination: (state) => state.pagination,
mapData: (state) => state.mapData,
machineInfo: (state) => state.machineInfo,
reportPacks: (state) => state.reportPacks,
selectPackStructs: (state) => state.selectPackStructs,
packData: (state) => state.packData,
}; };
const mutations = { const mutations = {
setPage: (state, updval) => state.selectedPage = updval, setModalMachines: (state, updval) => state.modalMachines = updval,
setToggleFilter: (state) => state.toggleFilter = !state.toggleFilter,
setOpenMenuChart: (state, updval) => state.openMenuChart = updval,
setInitHistory: (state, updval) => state.initHistory = updval,
setSearchMode: (state, updval) => state.selectedSearchMode = updval,
setSelectedMode: (state, updval) => state.selectedMode = updval,
setSelectedSelects: (state, updval) => state.selectedSelects = updval,
setSelectedMachines: (state, updval) => state.selectedMachines = updval,
setActiveFilterBtn: (state, updval) => state.activeFilterBtn = updval,
setActiveChartData: (state, updval) => state.activeChartData = updval,
setActiveMenuChartData: (state, updval) => state.activeMenuChartData = updval,
setSelectedPackStruct: (state, updval) => state.selectedPackStruct = updval,
setSelectedPackMode: (state, updval) => state.selectedPackMode = updval,
setSelectsData: (state, updval) => state.selectsData = updval,
setSearchValue: (state, updval) => state.searchValue = updval,
setSelectedData: (state, updval) => state.selectedData = updval,
setMachinesDataDefault: (state, updval) => state.machinesDataDefault = updval,
setMachinesData: (state, updval) => state.machinesData = updval,
setTableData: (state, updval) => state.tableData = updval,
setChartsData: (state, updval) => state.chartsData = updval,
setChartsDataMount: (state, updval) => state.chartsMountData = updval,
setHistoryData: (state, updval) => state.historyData = updval,
setHistoryMachines: (state, updval) => state.historyMachines = updval,
setLegendFiltersParams: (state, updval) => state.legendFiltersParams = updval,
setPagination: (state, updval) => state.pagination = updval,
setMapData: (state, updval) => state.mapData = updval,
setMachineInfo: (state, updval) => state.machineInfo = updval,
setReportPacks: (state, updval) => state.reportPacks = updval,
setStructPackDefault: (state, updval) => state.structPackDefault = updval,
setSelectPackStructs: (state, updval) => state.selectPackStructs = updval,
setPackData: (state, updval) => state.packData = updval,
resetStore: (state) => { resetStore: (state) => {
Object.entries(initState).forEach(([k,v]) => { for (let key in initState) {
state[k] = v state[key] = initState[key]
}) }
}, }
}; };
const actions = { const actions = {
uploadData: async ({commit, getters, state}, externalParams) => { saveModalMachines: ({commit}, machines) => {
try{ commit('setModalMachines', machines)
// const machinesData = toRaw(getters.machinesData)
// const machinesDataDefault = toRaw(state.machinesDataDefault)
const pagination = toRaw(getters.pagination)
// const chartsData = toRaw(state.chartsData)
const historyData = externalParams.historyData ? externalParams.historyData : toRaw(state.historyData)
const chartsData = !isEmpty(dataMachines) ? dataMachines.filter((machine) => machine.machine_id !== null) : []
const chartsMountData = !isEmpty(dataMount) ? dataMount.filter((el) => el.client_type !== null) : []
const updatedData = loadingChartsData({chartsSetup: chartsSetup, data: chartsData, dataMount: chartsMountData, prevGroupByData: {}, prevGroupByFilters: {}})
const filteredSelects = prepareSelects(selects, selectors)
const mergedData = mergedMachines(dataMachines, historyData)
const currentTableData = loadingPagination(dataMachines, pagination)
const currentSelectedMode = externalParams.urlParams ? externalParams.urlParams : 'cards'
// console.log('updatedData', updatedData)
commit('setSelectedMode', currentSelectedMode)
commit('setTableData', currentTableData)
commit('setPagination', pagination)
commit('setSelectsData', filteredSelects)
commit('setChartsData', updatedData)
commit('setChartsDataMount', chartsMountData)
commit('setMachinesDataDefault', dataMachines)
commit('setMachinesData', mergedData)
} catch (err) {
console.error(err)
}
},
updateSearch: async ({commit, getters, state}, updatedSearchValue) => {
try {
const selectedSearchMode = toRaw(getters.selectedSearchMode)
const selectedData = toRaw(getters.selectedData)
const machinesDataDefault = toRaw(state.machinesDataDefault)
// const machinesData = toRaw(state.machinesData)
const isEmptyParams = isEmpty(selectedData)
let updatedFilters = []
if (updatedSearchValue) {
console.log('isEmptyParams', isEmptyParams)
console.log('selectedData', selectedData)
// updatedFilters = isEmptyParams ? [{[selectedSearchMode.key]: updatedSearchValue}] : [...selectedData.filter, {[selectedSearchMode.key]: updatedSearchValue}]
updatedFilters = [{[selectedSearchMode.key]: updatedSearchValue}]
}
if (!updatedSearchValue) {
updatedFilters = !isEmptyParams ? selectedData.filter.filter((el) => !el[selectedSearchMode.key]) : selectedData
}
const updatedFiltersForSend = {filter: updatedFilters}
// const currentData = !isEmptyParams && updatedSearchValue && !isEmpty(machinesData) ? machinesData : machinesDataDefault
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
commit('setSelectedData', updatedFiltersForSend)
commit('setSelectedSelects', {})
commit('setSearchValue', updatedSearchValue)
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
colorSelection(selectedSearchMode.key, updatedSearchValue)
// console.log('updatedFilters', updatedFilters)
// console.log('updatedData', updatedData)
} catch (err) {
console.error(err)
}
},
updateSelects: async ({dispatch, commit, getters, state}, updatedSelect) => {
try {
const allSelects = toRaw(getters.selectsData)
const selectedSelects = toRaw(getters.selectedSelects)
const machinesDataDefault = toRaw(state.machinesDataDefault)
dispatch('updateSearch', '')
const curUpdatedSelectName = updatedSelect.key === 'set' ? updatedSelect.value[0].name : updatedSelect.value.name
let updatedSelects = {}
for (let i = 0; i < allSelects.length; i++) {
const curSelect = allSelects[i]
const newSelected = curSelect.data.find((el) => el.name === curUpdatedSelectName)
if (!newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key]
}
if (updatedSelect.key === 'removed' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length === 0)) {
break
}
if (updatedSelect.key === 'removed' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key].filter((el) => el.name !== newSelected.name)
break
}
if (updatedSelect.key === 'set' && newSelected && (selectedSelects[curSelect.key] && selectedSelects[curSelect.key].length > 0)) {
updatedSelects[curSelect.key] = selectedSelects[curSelect.key]
break
}
}
const updatedFilters = Object.entries(updatedSelects).map(([key, value]) => ({[key]: value.map((el) => el.name)}))
// const mergedFilters = searchValue ? [...updatedFilters, {[selectedSearchMode.key]: searchValue}] : updatedFilters
// console.log('mergedFilters', mergedFilters)
// const currentData = !isEmptyParams ? machinesData : machinesDataDefault
const updatedFiltersForSend = {filter: updatedFilters}
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
// console.log('updatedData', updatedData)
// console.log('updatedFilters', updatedFilters)
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
commit('setSelectedSelects', updatedSelects)
commit('setSelectedData', updatedFiltersForSend)
} catch (err) {
console.error(err)
}
},
updateCharts: async ({commit, getters, state}, updatedData) => {
try {
switch(updatedData.action) {
case 'nextLayoutChart':
// console.log('updatedDataNext', updatedData)
const prevGroupByFiltersNext = updatedData.prevGroupByFilters
const updatedFiltersNext = {...prevGroupByFiltersNext, ...updatedData.prevGroupByData}
const prevGroupByValue = updatedData.prevGroupByData.type ? updatedData.prevGroupByData.type : null
const groupByKeyNext = setNextLayoutGroupByKey(updatedData.groupByKey, prevGroupByValue)
if (groupByKeyNext) {
const activeChartData = {id: updatedData.id, data: updatedData.data, groupByKey: groupByKeyNext, filterKey: updatedData.filterKey, type: updatedData.type, groupByValue: updatedData.groupByValue}
const newData = setBarTypesChart(activeChartData, updatedData.prevGroupByData, updatedFiltersNext, state.machinesDataDefault, toRaw(state.chartsData))
return commit('setActiveChartData', {...activeChartData, data: newData})
}
break
case 'beforeLayoutChart':
// console.log('updatedDataBefore', updatedData)
const prevGroupByData = updatedData.groupByInfo.prevGroupByData
const prevGroupByFiltersBefore = updatedData.groupByInfo.prevGroupByFilters
const groupByKeyBefore = Object.keys(prevGroupByData)[0] // Получаем уже предыдущее значение ключа
delete prevGroupByFiltersBefore[groupByKeyBefore] // Удаляем значение после вычисления prevGroupByData, так как подымаемся на уровень выше, сохраняя актуальное значение для фильтрации
const isOnlyFiltersParams = equals(prevGroupByData, prevGroupByFiltersBefore)
const updatedPrevGroupByDataBefore = isOnlyFiltersParams ? {} : setBeforeLayoutGroupByData(prevGroupByData, prevGroupByFiltersBefore, updatedData.groupByInfo.type)
if (groupByKeyBefore) {
const activeChartData = {id: updatedData.id, data: updatedData.data, groupByKey: groupByKeyBefore, filterKey: updatedData.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newData = setBarTypesChart(activeChartData, updatedPrevGroupByDataBefore, prevGroupByFiltersBefore, state.machinesDataDefault, toRaw(state.chartsData))
return commit('setActiveChartData', {...activeChartData, data: newData})
}
break
case 'openMenuChart':
// console.log('updatedDataOpen', updatedData)
const openMenuChart = toRaw(state.activeMenuChartData.openMenuChart)
updatedData.groupByInfo.data[0].type = updatedData.groupByInfo.type
const activeChartDataMenu = {chartId: updatedData.groupByInfo.chartId, data: updatedData.groupByInfo.data, groupByKey: updatedData.groupByInfo.groupByKey, filterKey: updatedData.groupByInfo.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newDataMenu = setBarTypesChart(activeChartDataMenu, updatedData.groupByInfo.prevGroupByData, updatedData.groupByInfo.prevGroupByFilters, state.machinesDataDefault, toRaw(state.chartsData))
const isNotTypesChartsMenu = typesCharts(updatedData.groupByInfo.type)
const toggleActiveMenuChartData = {openMenuChart: !openMenuChart, groupByInfo: {...activeChartDataMenu, data: isNotTypesChartsMenu ? updatedData.groupByInfo.data[0] : newDataMenu}}
commit('setActiveMenuChartData', toggleActiveMenuChartData)
break
case 'downloadChart':
// console.log('updatedDataDownload', updatedData)
const activeChartDataDownload = {chartId: updatedData.groupByInfo.chartId, isDownloadChart: updatedData.groupByInfo.isDownloadChart, data: updatedData.groupByInfo.data, groupByKey: updatedData.groupByInfo.groupByKey, prevGroupByData: updatedData.groupByInfo.prevGroupByData, prevGroupByFilters: updatedData.groupByInfo.prevGroupByFilters, filterKey: updatedData.groupByInfo.filterKey, type: updatedData.groupByInfo.type, groupByValue: updatedData.groupByInfo.groupByValue}
const newDataDownload = setBarTypesChart(activeChartDataDownload, updatedData.groupByInfo.prevGroupByData, updatedData.groupByInfo.prevGroupByFilters, state.machinesDataDefault, toRaw(state.chartsData))
const isNotTypesChartsDownload = typesCharts(updatedData.groupByInfo.type)
const downloadActiveMenuChartData = {openMenuChart: false, groupByInfo: {...updatedData.groupByInfo, data: isNotTypesChartsDownload ? updatedData.groupByInfo.data[0] : newDataDownload}}
commit('setActiveMenuChartData', downloadActiveMenuChartData)
break
case 'legendFiltersParams':
commit('setLegendFiltersParams', updatedData.data)
default: return false
}
} catch (err) {
console.error(err)
}
},
updatePagination: async ({commit, getters, state}, updatedData) => {
try {
const pagination = toRaw(getters.pagination)
const machinesDataDefault = toRaw(state.machinesDataDefault)
const newData = setPagination(machinesDataDefault, pagination, updatedData)
console.log('currentTableData', newData.currentTableData)
commit('setTableData', newData.currentTableData)
commit('setPagination', newData.updatedPagination)
} catch (err) {
console.error(err)
}
},
openMapModal: async ({commit, state}, machine) => {
try {
// Добавить запрос на получение координат
/*
machine_id = machine["machine_id"]
last_loc = Communicator.PackFetcher.last_locations([machine_id])
*/
const coords = [44.510345, 48.771025]
const params = {machine: machine, coords: coords}
commit('setMapData', params)
} catch (err) {
console.error(err)
}
},
openDataModal: async ({commit, state}, machine) => {
try {
// Добавить запрос на получение пакетов и информации о машине
/*
curr_machine_info = Communicator.Devices.askr_devices(where: "imei = #{imei}")
[{_, machine_name} | machine_info] =
Analyzer.reparse_machine_info(curr_machine_info, :imei)
|> Enum.reduce([], fn
{"Текущая машина", _} = cur, acc -> [cur] ++ acc
cur, acc -> acc ++ [cur]
end)
report_packs =
Enum.reduce(curr_machine_info, [], fn
%{imei: imei}, acc ->
acc ++
PacksFuncs.get_pack_nums(
imei,
Timex.now() |> Timex.beginning_of_day(),
Timex.now() |> Timex.end_of_day()
)
_, acc ->
acc
end)
|> DynamicStructDestroyer.destroy()
|> Enum.sort_by(& &1.packNumber)
*/
commit('setMachineInfo', machineInfo)
commit('setReportPacks', reportPacks)
} catch (err) {
console.error(err)
}
},
loadPack: async ({commit, state}, packNumber) => {
try {
/* Получение данных о пакете
report =
Enum.reduce(curr_machine_info, [], fn
%{imei: imei}, acc ->
acc ++ PacksFuncs.upload_machine_data(imei, pack_number, dt_start, dt_finish, 30) // Огреничение до 30 машин askr_logs
_, acc ->
acc
end)
|> DynamicStructDestroyer.destroy()
Получение структуры пакета
pack_structs = Helper.get_structs_of_pack(pack_number)
def get_structs_of_pack(pack_number) do
LiveMonitor.Packages.list_pack_struct()
|> Enum.filter(&(&1.pack == pack_number))
end
*/
console.log('packNumber', packNumber)
// const dataSource = !isEmpty(report) ? report.askr_logs.sort((a, b) => b.pack_dt - a.pack_dt) : []
const dataSource = !isEmpty(multiReport) ? multiReport.askr_logs.sort((a, b) => b.pack_dt - a.pack_dt).slice(0, 30) : [] // Огреничение до 30 машин askr_logs
// const columns = fetchColumn(packStructure, report)
const columns = fetchColumn(multiPackStructure, multiReport)
// const selectedPackStruct = packStructure.map((item) => ({id: item.id, name: item.name, packNumber: packNumber}))
console.log('multiPackStructure', multiPackStructure)
console.log('multiReport', multiReport)
console.log('columns', columns)
const selectPackStructs = multiPackStructure.map((item) => ({id: item.id, name: item.name, packNumber: packNumber}))
commit('setStructPackDefault', multiPackStructure)
commit('setSelectPackStructs', selectPackStructs)
commit('setSelectedPackStruct', selectPackStructs[0])
commit('setPackData', {dataSource, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
updateModePack: async ({commit, getters, state}, updatedMode) => {
try {
const structPackDefault = toRaw(state.structPackDefault)
const currentReport = multiReport[updatedMode] ? multiReport[updatedMode] : []
const columns = updatedMode === 'askr_logs' ? fetchColumn(structPackDefault, multiReport, null) : prepareSetPackColumns(updatedMode, currentReport)
console.log('columns', columns)
console.log('currentReport', currentReport)
commit('setSelectedPackMode', updatedMode)
commit('setPackData', {dataSource: currentReport, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
updateSelectStruct: async ({commit, getters, state}, updatedStructId) => {
try {
const updatedMode = toRaw(getters.selectedPackMode)
const currentReport = toRaw(state.packData.dataSource)
const structPackDefault = toRaw(state.structPackDefault)
const selectPackStructs = toRaw(getters.selectPackStructs)
const [selectedPackStruct] = selectPackStructs.filter((item) => item.id === updatedStructId)
console.log('selectedPackStruct', selectedPackStruct)
// const currentReport = multiReport[updatedMode] ? multiReport[updatedMode] : []
const columns = updatedMode === 'askr_logs' ? fetchColumn(structPackDefault, multiReport, updatedStructId) : prepareSetPackColumns(updatedMode, currentReport)
console.log('updatedMode', updatedMode)
console.log('structPackDefault', structPackDefault)
console.log('columns', columns)
console.log('currentReport', currentReport)
commit('setSelectedPackStruct', selectedPackStruct)
commit('setPackData', {dataSource: currentReport, columns, height: '550px'})
} catch (err) {
console.error(err)
}
},
clearFilters: async ({commit, state}) => {
try {
const machinesDataDefault = toRaw(state.machinesDataDefault)
const updatedFiltersForSend = {filter: []}
const updatedData = setUpdatedDataMachines(machinesDataDefault, updatedFiltersForSend)
const updatedDataCharts = loadingChartsData({chartsSetup: chartsSetup, data: updatedData, dataMount: dataMount, prevGroupByData: {}, prevGroupByFilters: {}})
commit('setSelectedSelects', {})
commit('setSelectedData', [])
commit('setMachinesData', updatedData)
commit('setChartsData', updatedDataCharts)
} catch (err) {
console.error(err)
}
}, },
resetStore: ({commit}) => { resetStore: ({commit}) => {
commit('resetStore') commit('resetStore')

View File

@ -1,2 +1,22 @@
import {describe, test, expect} from 'vitest'
import AdapterOfMachines from "@adapters/AdapterOfMachines.js" import AdapterOfMachines from "@adapters/AdapterOfMachines.js"
import {de} from 'vitest' import axios from 'axios'
import {apiModalListMachines, appModalListMachines} from "@mocks/machines.js"
vi.mock('axios')
describe('AdapterOfMachines', () => {
axios.post.mockResolvedValue({data: apiModalListMachines})
test('AdapterOfMachines should be a object', () => {
const adapterOfMachines = new AdapterOfMachines('')
expect(typeof adapterOfMachines).toBe('object')
})
test('test of fetchMachines', async () => {
const adapterOfMachines = new AdapterOfMachines('http://localhost:5444')
const result = await adapterOfMachines.getModalMachines()
expect(result).toEqual(appModalListMachines)
})
})

View File

@ -0,0 +1,19 @@
import axios from 'axios'
import {describe, test, expect, vi} from 'vitest'
import {apiModalListMachines} from "@mocks/machines.js"
import {scandApiRequest} from "@helpers/apiHelpers.js"
vi.mock('axios')
describe('scandApiRequest', () => {
test('scandApiRequest should be a function', () => {
expect(typeof scandApiRequest).toBe('function')
})
test('scandApiRequest should return a promise', async () => {
axios.post.mockResolvedValue({data: apiModalListMachines})
const result = await scandApiRequest('ScandApi.LiveMonitor.Machines', 'select_machines', [])
expect(result).toEqual(apiModalListMachines)
})
})

View File

@ -0,0 +1,41 @@
import {vi} from 'vitest'
const apiModalMachine = {
"zav_nomer": "007",
"type": "АВФ-1М.2",
"railway_name": "РЖД",
"org_name": "ДКРЭ",
"nomer_zn8": 19413152,
"machine_type": "АВФ-1М.2 № 007",
"machine_id": 5862,
"imei": 868136032634217,
"device_number": "КР190617",
"device_id": 6248
}
const appModalMachine = {
"zavNomer": "007",
"type": "АВФ-1М.2",
"railwayName": "РЖД",
"orgName": "ДКРЭ",
"nomerZn8": 19413152,
"machineType": "АВФ-1М.2 № 007",
"machineId": 5862,
"imei": 868136032634217,
"deviceNumber": "КР190617",
"deviceId": 6248
}
const apiModalListMachines = [apiModalMachine]
const appModalListMachines = [appModalMachine]
class AdapterOfMachines {
constructor(url) {
this.url = url
}
getModalMachines (){
return appModalListMachines
}
}
export { apiModalMachine, appModalMachine, apiModalListMachines, appModalListMachines, AdapterOfMachines}

View File

@ -0,0 +1,38 @@
import {expect, describe, vi, test, beforeEach} from 'vitest'
import ServiceOfMachines from "@services/ServiceOfMachines.js"
import {AdapterOfMachines, appModalListMachines} from "@mocks/machines.js"
import { createStore } from "vuex"
import { store as machines } from '@/store/modules/machines';
describe('test ServiceOfMachines', () => {
const adapterOfMachines = new AdapterOfMachines('')
const store = createStore({
modules: {
machines
}
})
beforeEach(() => {
store.dispatch('machines/resetStore')
})
const serviceOfMachines = new ServiceOfMachines(adapterOfMachines, store)
test('test fetchModalMachines', async () => {
const result = await serviceOfMachines.fetchModalMachines()
expect(result).toEqual(appModalListMachines)
})
test('test putModalMachines', async () => {
await serviceOfMachines.putModalMachines(appModalListMachines)
const result = store.getters['machines/modalMachines']
expect(result).toEqual(appModalListMachines)
})
test('test makeFetchAndPutModalMachines', async () => {
const funcResult = await serviceOfMachines.makeFetchAndPutModalMachines()
const storeResult = store.getters['machines/modalMachines']
expect(funcResult).toEqual(appModalListMachines)
expect(storeResult).toEqual(appModalListMachines)
})
})

View File

@ -0,0 +1,24 @@
import {describe, test, expect, beforeEach} from 'vitest'
import {createStore} from "vuex"
import { store as machines } from '@/store/modules/machines';
describe('machines store', () => {
const store = createStore({
modules: {
machines
}
})
beforeEach(() => {
store.dispatch('machines/resetStore')
})
test('machines should be a object', () => {
expect(typeof machines).toBe('object')
})
test('modalMachines should be a array', () => {
expect(store.getters['machines/modalMachines']).toEqual([])
store.dispatch('machines/saveModalMachines', [1, 2, 3])
expect(store.getters['machines/modalMachines']).toEqual([1, 2, 3])
})
})

View File

@ -3,7 +3,7 @@
"1-toolkits-helpers@../repo/1-toolkits-helpers/": "1-toolkits-helpers@../repo/1-toolkits-helpers/":
version "0.0.5" version "0.0.6"
"@aashutoshrathi/word-wrap@^1.2.3": "@aashutoshrathi/word-wrap@^1.2.3":
version "1.2.6" version "1.2.6"
@ -232,6 +232,13 @@
wrap-ansi "^8.1.0" wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
dependencies:
"@sinclair/typebox" "^0.27.8"
"@jridgewell/gen-mapping@^0.3.2": "@jridgewell/gen-mapping@^0.3.2":
version "0.3.5" version "0.3.5"
resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
@ -285,6 +292,11 @@
"@nodelib/fs.scandir" "2.1.5" "@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0" fastq "^1.6.0"
"@one-ini/wasm@0.1.1":
version "0.1.1"
resolved "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323"
integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==
"@petamoriken/float16@^3.4.7": "@petamoriken/float16@^3.4.7":
version "3.8.6" version "3.8.6"
resolved "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.6.tgz#580701cb97a510882342333d31c7cbfd9e14b4f4" resolved "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.6.tgz#580701cb97a510882342333d31c7cbfd9e14b4f4"
@ -365,6 +377,11 @@
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10"
integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
"@tailwindcss/forms@^0.5.7": "@tailwindcss/forms@^0.5.7":
version "0.5.7" version "0.5.7"
resolved "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz#db5421f062a757b5f828bc9286ba626c6685e821" resolved "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz#db5421f062a757b5f828bc9286ba626c6685e821"
@ -372,7 +389,7 @@
dependencies: dependencies:
mini-svg-data-uri "^1.2.3" mini-svg-data-uri "^1.2.3"
"@types/estree@1.0.5": "@types/estree@1.0.5", "@types/estree@^1.0.0":
version "1.0.5" version "1.0.5"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
@ -392,6 +409,50 @@
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46" resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46"
integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw== integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==
"@vitest/expect@1.4.0":
version "1.4.0"
resolved "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz#d64e17838a20007fecd252397f9b96a1ca81bfb0"
integrity sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==
dependencies:
"@vitest/spy" "1.4.0"
"@vitest/utils" "1.4.0"
chai "^4.3.10"
"@vitest/runner@1.4.0":
version "1.4.0"
resolved "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz#907c2d17ad5975b70882c25ab7a13b73e5a28da9"
integrity sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==
dependencies:
"@vitest/utils" "1.4.0"
p-limit "^5.0.0"
pathe "^1.1.1"
"@vitest/snapshot@1.4.0":
version "1.4.0"
resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz#2945b3fb53767a3f4f421919e93edfef2935b8bd"
integrity sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==
dependencies:
magic-string "^0.30.5"
pathe "^1.1.1"
pretty-format "^29.7.0"
"@vitest/spy@1.4.0":
version "1.4.0"
resolved "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz#cf953c93ae54885e801cbe6b408a547ae613f26c"
integrity sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==
dependencies:
tinyspy "^2.2.0"
"@vitest/utils@1.4.0":
version "1.4.0"
resolved "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz#ea6297e0d329f9ff0a106f4e1f6daf3ff6aad3f0"
integrity sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==
dependencies:
diff-sequences "^29.6.3"
estree-walker "^3.0.3"
loupe "^2.3.7"
pretty-format "^29.7.0"
"@vue/compiler-core@3.4.21": "@vue/compiler-core@3.4.21":
version "3.4.21" version "3.4.21"
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a" resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a"
@ -476,6 +537,14 @@
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1" resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1"
integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g== integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==
"@vue/test-utils@^2.4.5":
version "2.4.5"
resolved "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz#010aa4debe6602d83dc75f233b397092742105a2"
integrity sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==
dependencies:
js-beautify "^1.14.9"
vue-component-type-helpers "^2.0.0"
"@vueuse/core@9.3.0": "@vueuse/core@9.3.0":
version "9.3.0" version "9.3.0"
resolved "https://registry.npmjs.org/@vueuse/core/-/core-9.3.0.tgz#74d855bd19cb5eadd2edb30c871918fac881e8b8" resolved "https://registry.npmjs.org/@vueuse/core/-/core-9.3.0.tgz#74d855bd19cb5eadd2edb30c871918fac881e8b8"
@ -498,12 +567,27 @@
dependencies: dependencies:
vue-demi "*" vue-demi "*"
D@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/D/-/D-1.0.0.tgz#c348a4e034f72847be51206fc530fc089e9cc2a9"
integrity sha512-nQvrCBu7K2pSSEtIM0EEF03FVjcczCXInMt3moLNFbjlWx6bZrX72uT6/1uAXDbnzGUAx9gTyDiQ+vrFi663oA==
abbrev@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf"
integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
acorn-jsx@^5.3.2: acorn-jsx@^5.3.2:
version "5.3.2" version "5.3.2"
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.9.0: acorn-walk@^8.3.2:
version "8.3.2"
resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
acorn@^8.11.3, acorn@^8.9.0:
version "8.11.3" version "8.11.3"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
@ -535,6 +619,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
dependencies: dependencies:
color-convert "^2.0.1" color-convert "^2.0.1"
ansi-styles@^5.0.0:
version "5.2.0"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
ansi-styles@^6.1.0: ansi-styles@^6.1.0:
version "6.2.1" version "6.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
@ -563,6 +652,11 @@ argparse@^2.0.1:
resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
assertion-error@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
asynckit@^0.4.0: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@ -636,6 +730,11 @@ browserslist@^4.23.0:
node-releases "^2.0.14" node-releases "^2.0.14"
update-browserslist-db "^1.0.13" update-browserslist-db "^1.0.13"
cac@^6.7.14:
version "6.7.14"
resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
callsites@^3.0.0: callsites@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@ -651,6 +750,19 @@ caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599:
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079"
integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==
chai@^4.3.10:
version "4.4.1"
resolved "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
dependencies:
assertion-error "^1.1.0"
check-error "^1.0.3"
deep-eql "^4.1.3"
get-func-name "^2.0.2"
loupe "^2.3.6"
pathval "^1.1.1"
type-detect "^4.0.8"
chalk@^4.0.0: chalk@^4.0.0:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
@ -659,6 +771,13 @@ chalk@^4.0.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
check-error@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==
dependencies:
get-func-name "^2.0.2"
chokidar@^3.5.3: chokidar@^3.5.3:
version "3.6.0" version "3.6.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
@ -723,6 +842,11 @@ combined-stream@^1.0.8:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@^10.0.0:
version "10.0.1"
resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
commander@^4.0.0: commander@^4.0.0:
version "4.1.1" version "4.1.1"
resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
@ -733,7 +857,15 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
cross-spawn@^7.0.0, cross-spawn@^7.0.2: config-chain@^1.1.13:
version "1.1.13"
resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
dependencies:
ini "^1.3.4"
proto-list "~1.2.1"
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3" version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@ -759,6 +891,13 @@ debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
deep-eql@^4.1.3:
version "4.1.3"
resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
dependencies:
type-detect "^4.0.0"
deep-is@^0.1.3: deep-is@^0.1.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@ -774,6 +913,11 @@ didyoumean@^1.2.2:
resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
diff-sequences@^29.6.3:
version "29.6.3"
resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
dlv@^1.1.3: dlv@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
@ -804,6 +948,16 @@ echarts@^5.4.3:
tslib "2.3.0" tslib "2.3.0"
zrender "5.5.0" zrender "5.5.0"
editorconfig@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3"
integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==
dependencies:
"@one-ini/wasm" "0.1.1"
commander "^10.0.0"
minimatch "9.0.1"
semver "^7.5.3"
electron-to-chromium@^1.4.668: electron-to-chromium@^1.4.668:
version "1.4.715" version "1.4.715"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz#bb16bcf2a3537962fccfa746b5c98c5f7404ff46" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz#bb16bcf2a3537962fccfa746b5c98c5f7404ff46"
@ -966,11 +1120,33 @@ estree-walker@^2.0.2:
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
estree-walker@^3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
dependencies:
"@types/estree" "^1.0.0"
esutils@^2.0.2: esutils@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
execa@^8.0.1:
version "8.0.1"
resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
dependencies:
cross-spawn "^7.0.3"
get-stream "^8.0.1"
human-signals "^5.0.0"
is-stream "^3.0.0"
merge-stream "^2.0.0"
npm-run-path "^5.1.0"
onetime "^6.0.0"
signal-exit "^4.1.0"
strip-final-newline "^3.0.0"
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3" version "3.1.3"
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@ -1139,6 +1315,16 @@ geotiff@^2.0.7:
xml-utils "^1.0.2" xml-utils "^1.0.2"
zstddec "^0.1.0" zstddec "^0.1.0"
get-func-name@^2.0.1, get-func-name@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
get-stream@^8.0.1:
version "8.0.1"
resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
glob-parent@^5.1.2, glob-parent@~5.1.2: glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2" version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@ -1153,7 +1339,7 @@ glob-parent@^6.0.2:
dependencies: dependencies:
is-glob "^4.0.3" is-glob "^4.0.3"
glob@^10.3.10: glob@^10.3.10, glob@^10.3.3:
version "10.3.10" version "10.3.10"
resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
@ -1200,6 +1386,15 @@ handlebars@^4.7.8:
optionalDependencies: optionalDependencies:
uglify-js "^3.1.4" uglify-js "^3.1.4"
happy-dom@^14.3.1:
version "14.3.1"
resolved "https://registry.npmjs.org/happy-dom/-/happy-dom-14.3.1.tgz#3ddab7fd7273c2d9b94ebbfe9b5b67f5c9f7d18d"
integrity sha512-uv2mE7jUH0S3cTnDPqNQj+J+Z5wOevqzopc7e8URXtcCH2STubCjPFVyEJ1ONGSv/aL/uvNwo5WWjsinpWpADQ==
dependencies:
entities "^4.5.0"
webidl-conversions "^7.0.0"
whatwg-mimetype "^3.0.0"
has-flag@^4.0.0: has-flag@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@ -1212,6 +1407,11 @@ hasown@^2.0.0:
dependencies: dependencies:
function-bind "^1.1.2" function-bind "^1.1.2"
human-signals@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
ieee754@^1.1.12: ieee754@^1.1.12:
version "1.2.1" version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@ -1248,6 +1448,11 @@ inherits@2:
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.4:
version "1.3.8"
resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
is-binary-path@~2.1.0: is-binary-path@~2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@ -1289,6 +1494,11 @@ is-path-inside@^3.0.3:
resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
is-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
isexe@^2.0.0: isexe@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@ -1308,6 +1518,27 @@ jiti@^1.19.1:
resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
js-beautify@^1.14.9:
version "1.15.1"
resolved "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz#4695afb508c324e1084ee0b952a102023fc65b64"
integrity sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==
dependencies:
config-chain "^1.1.13"
editorconfig "^1.0.4"
glob "^10.3.3"
js-cookie "^3.0.5"
nopt "^7.2.0"
js-cookie@^3.0.5:
version "3.0.5"
resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc"
integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==
js-tokens@^8.0.2:
version "8.0.3"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775"
integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==
js-yaml@^4.1.0: js-yaml@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
@ -1330,6 +1561,11 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
jsonc-parser@^3.2.0:
version "3.2.1"
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a"
integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==
keyv@^4.5.3: keyv@^4.5.3:
version "4.5.4" version "4.5.4"
resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
@ -1365,6 +1601,14 @@ lines-and-columns@^1.1.6:
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
local-pkg@^0.5.0:
version "0.5.0"
resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c"
integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==
dependencies:
mlly "^1.4.2"
pkg-types "^1.0.3"
locate-path@^6.0.0: locate-path@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
@ -1387,6 +1631,13 @@ lodash@^4.17.21:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
loupe@^2.3.6, loupe@^2.3.7:
version "2.3.7"
resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
dependencies:
get-func-name "^2.0.1"
lru-cache@^6.0.0: lru-cache@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@ -1404,13 +1655,18 @@ lucide@^0.298.0:
resolved "https://registry.npmjs.org/lucide/-/lucide-0.298.0.tgz#32641328a11c3c04ca03246600623de573347014" resolved "https://registry.npmjs.org/lucide/-/lucide-0.298.0.tgz#32641328a11c3c04ca03246600623de573347014"
integrity sha512-FphzOd0gEJftlSHjEz0BEJW4nInpycRJF7xwr0n/36MOsWiDuRRs7QuJwB4qJvaDwggArPzXFKTjunNR5Gz/TQ== integrity sha512-FphzOd0gEJftlSHjEz0BEJW4nInpycRJF7xwr0n/36MOsWiDuRRs7QuJwB4qJvaDwggArPzXFKTjunNR5Gz/TQ==
magic-string@^0.30.7: magic-string@^0.30.5, magic-string@^0.30.7:
version "0.30.8" version "0.30.8"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613"
integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==
dependencies: dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15" "@jridgewell/sourcemap-codec" "^1.4.15"
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
merge2@^1.3.0: merge2@^1.3.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
@ -1436,11 +1692,23 @@ mime-types@^2.1.12:
dependencies: dependencies:
mime-db "1.52.0" mime-db "1.52.0"
mimic-fn@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
mini-svg-data-uri@^1.2.3, mini-svg-data-uri@^1.4.3: mini-svg-data-uri@^1.2.3, mini-svg-data-uri@^1.4.3:
version "1.4.4" version "1.4.4"
resolved "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939" resolved "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz#8ab0aabcdf8c29ad5693ca595af19dd2ead09939"
integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==
minimatch@9.0.1:
version "9.0.1"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
dependencies:
brace-expansion "^2.0.1"
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2" version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@ -1465,6 +1733,16 @@ minimist@^1.2.5:
resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
mlly@^1.2.0, mlly@^1.4.2:
version "1.6.1"
resolved "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f"
integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==
dependencies:
acorn "^8.11.3"
pathe "^1.1.2"
pkg-types "^1.0.3"
ufo "^1.3.2"
moment@^2.29.4: moment@^2.29.4:
version "2.30.1" version "2.30.1"
resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
@ -1509,6 +1787,13 @@ node-releases@^2.0.14:
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
nopt@^7.2.0:
version "7.2.0"
resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7"
integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==
dependencies:
abbrev "^2.0.0"
normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@ -1519,6 +1804,13 @@ normalize-range@^0.1.2:
resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
npm-run-path@^5.1.0:
version "5.3.0"
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
dependencies:
path-key "^4.0.0"
nth-check@^2.1.1: nth-check@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
@ -1555,6 +1847,13 @@ once@^1.3.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
onetime@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
dependencies:
mimic-fn "^4.0.0"
optionator@^0.9.3: optionator@^0.9.3:
version "0.9.3" version "0.9.3"
resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
@ -1574,6 +1873,13 @@ p-limit@^3.0.2:
dependencies: dependencies:
yocto-queue "^0.1.0" yocto-queue "^0.1.0"
p-limit@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985"
integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==
dependencies:
yocto-queue "^1.0.0"
p-locate@^5.0.0: p-locate@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
@ -1613,6 +1919,11 @@ path-key@^3.1.0:
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
path-key@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
path-parse@^1.0.7: path-parse@^1.0.7:
version "1.0.7" version "1.0.7"
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
@ -1626,6 +1937,16 @@ path-scurry@^1.10.1:
lru-cache "^9.1.1 || ^10.0.0" lru-cache "^9.1.1 || ^10.0.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
pathval@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
pbf@3.2.1: pbf@3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" resolved "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a"
@ -1659,6 +1980,15 @@ pirates@^4.0.1:
resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-types@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868"
integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==
dependencies:
jsonc-parser "^3.2.0"
mlly "^1.2.0"
pathe "^1.1.0"
postcss-advanced-variables@^3.0.1: postcss-advanced-variables@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.npmjs.org/postcss-advanced-variables/-/postcss-advanced-variables-3.0.1.tgz#260a6ec1fc7256e94798824a742580249926db13" resolved "https://registry.npmjs.org/postcss-advanced-variables/-/postcss-advanced-variables-3.0.1.tgz#260a6ec1fc7256e94798824a742580249926db13"
@ -1750,6 +2080,20 @@ prelude-ls@^1.2.1:
resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
dependencies:
"@jest/schemas" "^29.6.3"
ansi-styles "^5.0.0"
react-is "^18.0.0"
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
protocol-buffers-schema@^3.3.1: protocol-buffers-schema@^3.3.1:
version "3.6.0" version "3.6.0"
resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03"
@ -1804,6 +2148,11 @@ rbush@^3.0.1:
dependencies: dependencies:
quickselect "^2.0.0" quickselect "^2.0.0"
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
read-cache@^1.0.0: read-cache@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@ -1885,7 +2234,7 @@ run-parallel@^1.1.9:
dependencies: dependencies:
queue-microtask "^1.2.2" queue-microtask "^1.2.2"
semver@^7.3.6, semver@^7.6.0: semver@^7.3.6, semver@^7.5.3, semver@^7.6.0:
version "7.6.0" version "7.6.0"
resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
@ -1904,7 +2253,12 @@ shebang-regex@^3.0.0:
resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
signal-exit@^4.0.1: siginfo@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
signal-exit@^4.0.1, signal-exit@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
@ -1919,6 +2273,16 @@ source-map@^0.6.1:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
stackback@0.0.2:
version "0.0.2"
resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
std-env@^3.5.0:
version "3.7.0"
resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2"
integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==
"string-width-cjs@npm:string-width@^4.2.0": "string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3" version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@ -1967,11 +2331,23 @@ strip-ansi@^7.0.1:
dependencies: dependencies:
ansi-regex "^6.0.1" ansi-regex "^6.0.1"
strip-final-newline@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
strip-json-comments@^3.1.1: strip-json-comments@^3.1.1:
version "3.1.1" version "3.1.1"
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
strip-literal@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527"
integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==
dependencies:
js-tokens "^8.0.2"
sucrase@^3.32.0: sucrase@^3.32.0:
version "3.35.0" version "3.35.0"
resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
@ -2054,6 +2430,21 @@ thenify-all@^1.0.0:
dependencies: dependencies:
any-promise "^1.0.0" any-promise "^1.0.0"
tinybench@^2.5.1:
version "2.6.0"
resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b"
integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==
tinypool@^0.8.2:
version "0.8.2"
resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a"
integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==
tinyspy@^2.2.0:
version "2.2.1"
resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1"
integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==
to-regex-range@^5.0.1: to-regex-range@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@ -2078,11 +2469,21 @@ type-check@^0.4.0, type-check@~0.4.0:
dependencies: dependencies:
prelude-ls "^1.2.1" prelude-ls "^1.2.1"
type-detect@^4.0.0, type-detect@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
type-fest@^0.20.2: type-fest@^0.20.2:
version "0.20.2" version "0.20.2"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
ufo@^1.3.2:
version "1.5.3"
resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344"
integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==
uglify-js@^3.1.4: uglify-js@^3.1.4:
version "3.17.4" version "3.17.4"
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
@ -2108,7 +2509,18 @@ util-deprecate@^1.0.2:
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
vite@^5.0.8: vite-node@1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz#265529d60570ca695ceb69391f87f92847934ad8"
integrity sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==
dependencies:
cac "^6.7.14"
debug "^4.3.4"
pathe "^1.1.1"
picocolors "^1.0.0"
vite "^5.0.0"
vite@^5.0.0, vite@^5.0.8:
version "5.2.2" version "5.2.2"
resolved "https://registry.npmjs.org/vite/-/vite-5.2.2.tgz#b98f8de352d22e21d99508274ddd053ef82bf238" resolved "https://registry.npmjs.org/vite/-/vite-5.2.2.tgz#b98f8de352d22e21d99508274ddd053ef82bf238"
integrity sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ== integrity sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==
@ -2119,6 +2531,37 @@ vite@^5.0.8:
optionalDependencies: optionalDependencies:
fsevents "~2.3.3" fsevents "~2.3.3"
vitest@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz#f5c812aaf5023818b89b7fc667fa45327396fece"
integrity sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==
dependencies:
"@vitest/expect" "1.4.0"
"@vitest/runner" "1.4.0"
"@vitest/snapshot" "1.4.0"
"@vitest/spy" "1.4.0"
"@vitest/utils" "1.4.0"
acorn-walk "^8.3.2"
chai "^4.3.10"
debug "^4.3.4"
execa "^8.0.1"
local-pkg "^0.5.0"
magic-string "^0.30.5"
pathe "^1.1.1"
picocolors "^1.0.0"
std-env "^3.5.0"
strip-literal "^2.0.0"
tinybench "^2.5.1"
tinypool "^0.8.2"
vite "^5.0.0"
vite-node "1.4.0"
why-is-node-running "^2.2.2"
vue-component-type-helpers@^2.0.0:
version "2.0.7"
resolved "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.7.tgz#f142e82440da61fa81671ac2f35fd87146248897"
integrity sha512-7e12Evdll7JcTIocojgnCgwocX4WzIYStGClBQ+QuWPinZo/vQolv2EMq4a3lg16TKfwWafLimG77bxb56UauA==
vue-demi@*: vue-demi@*:
version "0.14.7" version "0.14.7"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
@ -2177,6 +2620,16 @@ web-worker@^1.2.0:
resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz#e5f2df5c7fe356755a5fb8f8410d4312627e6776" resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz#e5f2df5c7fe356755a5fb8f8410d4312627e6776"
integrity sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA== integrity sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==
webidl-conversions@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
whatwg-mimetype@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
which@^2.0.1: which@^2.0.1:
version "2.0.2" version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@ -2184,6 +2637,14 @@ which@^2.0.1:
dependencies: dependencies:
isexe "^2.0.0" isexe "^2.0.0"
why-is-node-running@^2.2.2:
version "2.2.2"
resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e"
integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==
dependencies:
siginfo "^2.0.0"
stackback "0.0.2"
wordwrap@^1.0.0: wordwrap@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
@ -2237,6 +2698,11 @@ yocto-queue@^0.1.0:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yocto-queue@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
zrender@5.5.0: zrender@5.5.0:
version "5.5.0" version "5.5.0"
resolved "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz#54d0d6c4eda81a96d9f60a9cd74dc48ea026bc1e" resolved "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz#54d0d6c4eda81a96d9f60a9cd74dc48ea026bc1e"