├── .gitignore ├── .prettierrc.js ├── .babelrc ├── src ├── env.d.ts ├── main.ts ├── types │ └── index.ts ├── utils │ ├── tools.ts │ └── canvas-utils.ts ├── config │ └── options.ts ├── style │ └── canvas-style.css └── core.ts ├── index.html ├── vite.config.js ├── tsconfig.json ├── dist ├── style.css ├── spark-echarts.umd.js └── spark-echarts.mjs ├── package.json ├── .eslintrc.js ├── LICENSE ├── example.html ├── README.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | }; 4 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "@babel/preset-typescript" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMeta { 4 | readonly env: ImportMetaEnv 5 | } 6 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas曲线图 6 | 7 | 8 | 9 |
10 | 11 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | 3 | export default defineConfig({ 4 | build: { 5 | lib: { 6 | entry: './src/main.ts', 7 | name: 'spark-echarts', 8 | formats: ['es', 'umd'] 9 | } 10 | } 11 | }) -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { openSparkECharts } from "./core"; 2 | import { options } from "./config/options"; 3 | import { Options } from "./types"; 4 | import "./style/canvas-style.css"; 5 | 6 | const getLineGraph = (opt: Options) => { 7 | const initOpt = Object.create(null) 8 | Object.assign(initOpt, options, opt) 9 | openSparkECharts(initOpt) 10 | } 11 | 12 | if (import.meta.env.MODE === 'development') { 13 | getLineGraph(options) 14 | } 15 | 16 | export const graph = { 17 | line: getLineGraph 18 | } 19 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | import { options } from "../config/options" 2 | 3 | export interface Pos { 4 | x: number, 5 | y: number 6 | } 7 | 8 | interface PointItemLine { 9 | type: 'line' 10 | start: Pos 11 | end: Pos 12 | } 13 | interface PointItemCurve { 14 | type: 'curve' 15 | start: Pos 16 | end: Pos 17 | control1: Pos 18 | control2: Pos 19 | } 20 | 21 | type PointItem = Array 22 | 23 | export type PointList = PointItem 24 | 25 | export type Options = typeof options -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": [ 7 | "ESNext", 8 | "DOM" 9 | ], 10 | "moduleResolution": "Node", 11 | "strict": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "esModuleInterop": true, 15 | "noEmit": true, 16 | "noUnusedLocals": true, 17 | "noUnusedParameters": true, 18 | "noImplicitReturns": true, 19 | "skipLibCheck": true 20 | }, 21 | } -------------------------------------------------------------------------------- /src/utils/tools.ts: -------------------------------------------------------------------------------- 1 | const utils = { 2 | removeChild(container: HTMLElement, doms: Array) { 3 | for (const dom of doms) { 4 | dom && container.removeChild(dom) 5 | } 6 | }, 7 | throttle(func: Function, delay: number, thisArg: Window | HTMLElement) { 8 | let lastTime = 0; 9 | return () => { 10 | const currentTime = new Date().getTime(); 11 | if (currentTime - lastTime > delay) { 12 | func.apply(thisArg, arguments); 13 | lastTime = currentTime; 14 | } 15 | } 16 | } 17 | } 18 | 19 | export default utils -------------------------------------------------------------------------------- /dist/style.css: -------------------------------------------------------------------------------- 1 | canvas{border:1px solid rgba(112,112,112,.192)}body{padding:0;margin:0}#container{position:relative;height:300px;width:100%}#myCanvasDot{position:absolute;top:0;left:0;z-index:10}#canvasTopBox{position:absolute;top:40px;left:40px;z-index:9;width:120px;height:50px;background:#fff;box-shadow:0 4px 6px 2px #ccc;border-radius:4px;padding:8px;transition:.3s all ease;justify-content:space-between}#markCanvas{position:absolute;top:0;left:0;z-index:9;transform:rotate(180deg)}.label{position:relative;width:100%;height:100%}.label-left{position:absolute;top:0;right:0;width:10px;height:10px;background:#000;border-radius:50%}.label-right{width:90px;height:50px}.label-text{line-height:24px;font-size:16px} 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spark-echarts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "tsc && vite build", 8 | "preview": "vite preview" 9 | }, 10 | "keywords": [], 11 | "author": "chase chen <596487930@qq.com> (https://github.com/ccj-007)", 12 | "license": "MIT", 13 | "devDependencies": { 14 | "@babel/cli": "^7.21.0", 15 | "@babel/core": "^7.21.4", 16 | "@babel/preset-typescript": "^7.21.4", 17 | "@types/node": "^18.16.1", 18 | "eslint": "^8.38.0", 19 | "eslint-config-prettier": "^8.8.0", 20 | "eslint-config-standard": "^17.0.0", 21 | "eslint-plugin-import": "^2.27.5", 22 | "eslint-plugin-node": "^11.1.0", 23 | "eslint-plugin-prettier": "^4.2.1", 24 | "eslint-plugin-promise": "^6.1.1", 25 | "typescript": "^4.9.3", 26 | "vite": "^4.2.0" 27 | } 28 | } -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es2021: true, 5 | node: true, 6 | }, 7 | extends: ["eslint:recommended", "plugin:prettier/recommended", "prettier"], 8 | parser: "@typescript-eslint/parser", 9 | parserOptions: { 10 | ecmaVersion: 12, 11 | sourceType: "module", 12 | }, 13 | plugins: ["@typescript-eslint"], 14 | overrides: [ 15 | { 16 | files: ["*.ts"], 17 | rules: { 18 | "no-undef": "off", 19 | }, 20 | }, 21 | ], 22 | rules: { 23 | "no-unused-vars": "off", 24 | "@typescript-eslint/no-unused-vars": ["warn"], 25 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 26 | "no-prototype-builtins": "off", 27 | "no-self-assign": "off", 28 | "no-empty": ["error", { allowEmptyCatch: true }], 29 | "prettier/prettier": ["error", { endOfLine: "auto" }], 30 | }, 31 | ignorePatterns: ["esm/*.js", "__test__/apps/*/*.html"], 32 | }; 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Chase Chen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/config/options.ts: -------------------------------------------------------------------------------- 1 | export const options = { 2 | layout: { 3 | root: '#container', 4 | m: 40 5 | }, 6 | /** 7 | * 注意!这里分段间有重复点20一定要相等,用于衔接曲线 8 | */ 9 | data: [[40, 60, 40, 80, 10, 50, 80, 0, 50, 30, 20], [20, 30, 60, 40, 30, 10, 30, 20, 0, 30, 20], [20, 30, 20, 40, 20, 10, 10, 30, 0, 30, 50]], 10 | axisX: { 11 | data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 12 | format(param: string | number) { 13 | return param + 'w' 14 | }, 15 | top: 4, 16 | }, 17 | axisY: { 18 | data: [0, 20, 40, 60, 80], 19 | format(param: string | number) { 20 | return param + '人' 21 | }, 22 | right: 10, 23 | }, 24 | series: [ 25 | { 26 | rgba: [[55, 162, 255], [116, 21, 219]], 27 | hoverRgba: [[55, 162, 255], [116, 21, 219]], 28 | lineColor: 'blue' 29 | }, 30 | { 31 | rgba: [[255, 0, 135], [135, 0, 157]], 32 | hoverRgba: [[255, 0, 135], [135, 0, 157]], 33 | lineColor: 'purple' 34 | }, 35 | { 36 | rgba: [[255, 190, 0], [224, 62, 76]], 37 | hoverRgba: [[255, 190, 0], [224, 62, 76]], 38 | lineColor: 'orange' 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /src/style/canvas-style.css: -------------------------------------------------------------------------------- 1 | canvas { 2 | border: 1px solid rgba(112, 112, 112, 0.192); 3 | } 4 | 5 | body { 6 | padding: 0; 7 | margin: 0; 8 | } 9 | 10 | #container { 11 | position: relative; 12 | height: 300px; 13 | width: 100%; 14 | } 15 | 16 | #myCanvasDot { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | z-index: 10; 21 | } 22 | 23 | #canvasTopBox { 24 | position: absolute; 25 | top: 40px; 26 | left: 40px; 27 | z-index: 9; 28 | width: 120px; 29 | height: 50px; 30 | background: #fff; 31 | box-shadow: 0px 4px 6px 2px #ccc; 32 | border-radius: 4px; 33 | padding: 8px; 34 | transition: 0.3s all ease; 35 | justify-content: space-between; 36 | } 37 | 38 | #markCanvas { 39 | position: absolute; 40 | top: 0; 41 | left: 0; 42 | z-index: 9; 43 | transform: rotate(180deg); 44 | } 45 | 46 | .label { 47 | position: relative; 48 | width: 100%; 49 | height: 100%; 50 | } 51 | 52 | .label-left { 53 | position: absolute; 54 | top: 0; 55 | right: 0; 56 | width: 10px; 57 | height: 10px; 58 | background: #000; 59 | border-radius: 50%; 60 | } 61 | 62 | 63 | .label-right { 64 | width: 90px; 65 | height: 50px; 66 | } 67 | 68 | .label-text { 69 | line-height: 24px; 70 | font-size: 16px; 71 | } -------------------------------------------------------------------------------- /example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Document 9 | 10 | 11 | 14 | 15 | 16 |
17 | 18 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # spark-echarts 2 | 3 | ## qucik start 4 | 5 | ```js 6 | pnpm dev 7 | pnpm build // vite打包构建,默认在dist目录生成sdk,支持umd、esm 8 | ``` 9 | 10 | ## detailed introduction 11 | 12 | [Echarts 无法实现这个曲线图 😭,那我手写一个](https://juejin.cn/post/7224886702883258424) 13 | 14 | ## examples 15 | 16 | ```HTML 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Document 25 | 26 | 27 | 30 | 31 | 32 |
33 | 34 | 80 | 81 | 82 | 83 | ``` 84 | -------------------------------------------------------------------------------- /src/utils/canvas-utils.ts: -------------------------------------------------------------------------------- 1 | import { PointList } from "../types"; 2 | 3 | function getBezierCurvePoints(startX: number, startY: number, cp1X: number, cp1Y: number, cp2X: number, cp2Y: number, endX: number, endY: number, steps: number) { 4 | let points = []; 5 | 6 | // 使用二次贝塞尔曲线近似三次贝塞尔曲线 7 | let q1x = startX + (cp1X - startX) * 2 / 3; 8 | let q1y = startY + (cp1Y - startY) * 2 / 3; 9 | let q2x = endX + (cp2X - endX) * 2 / 3; 10 | let q2y = endY + (cp2Y - endY) * 2 / 3; 11 | 12 | // 采样曲线上的所有点 13 | for (let i = 0; i <= steps; i++) { 14 | let t = i / steps; 15 | let x = (1 - t) * (1 - t) * (1 - t) * startX + 16 | 3 * t * (1 - t) * (1 - t) * q1x + 17 | 3 * t * t * (1 - t) * q2x + 18 | t * t * t * endX; 19 | let y = (1 - t) * (1 - t) * (1 - t) * startY + 20 | 3 * t * (1 - t) * (1 - t) * q1y + 21 | 3 * t * t * (1 - t) * q2y + 22 | t * t * t * endY; 23 | 24 | points.push({ x: +x.toFixed(2), y: +y.toFixed(2) }); 25 | } 26 | 27 | return points; 28 | } 29 | 30 | 31 | // 获取线段上的所有点 32 | function getAllPoints(segments: PointList) { 33 | let points = []; 34 | // let lastPoint = null; 35 | 36 | // 遍历所有线段的控制点和终点,将这些点的坐标存储到数组中 37 | for (let i = 0; i < segments.length; i++) { 38 | let segment = segments[i]; 39 | let pointsCount = 50; // 点的数量 40 | // 如果是直线,则使用lineTo方法连接线段的终点 41 | if (segment.type === "line") { 42 | let x0 = segment.start.x; 43 | let y0 = segment.start.y; 44 | let x1 = segment.end.x; 45 | let y1 = segment.end.y; 46 | for (let j = 0; j <= pointsCount; j++) { 47 | let t = j / pointsCount; 48 | let x = x0 + (x1 - x0) * t; 49 | let y = y0 + (y1 - y0) * t; 50 | points.push({ x: +x.toFixed(2), y: +y.toFixed(2) }); 51 | } 52 | // 如果是曲线,则使用贝塞尔曲线的方法绘制曲线,并将曲线上的所有点的坐标存储到数组中 53 | } else if (segment.type === "curve") { 54 | let x0 = segment.start.x; 55 | let y0 = segment.start.y; 56 | let x1 = segment.control1.x; 57 | let y1 = segment.control1.y; 58 | let x2 = segment.control2.x; 59 | let y2 = segment.control2.y; 60 | let x3 = segment.end.x; 61 | let y3 = segment.end.y; 62 | const point = getBezierCurvePoints(x0, y0, x1, y1, x2, y2, x3, y3, pointsCount) 63 | points.push(...point); 64 | } 65 | // 更新线段的起点 66 | // lastPoint = segment.end; 67 | } 68 | return points 69 | } 70 | 71 | export function getPathPoint(segments: PointList) { 72 | return getAllPoints(segments) 73 | } 74 | 75 | export function drawArc(ctx: CanvasRenderingContext2D, x = 0, y = 0, radius = 10, color = '#000') { 76 | ctx.beginPath(); 77 | ctx.arc(x, y, radius, 0, Math.PI * 2); 78 | ctx.fillStyle = color; 79 | ctx.fill(); 80 | ctx.closePath(); 81 | } 82 | 83 | export function getRanColor() { 84 | return Math.floor(Math.random() * 256) 85 | } 86 | -------------------------------------------------------------------------------- /dist/spark-echarts.umd.js: -------------------------------------------------------------------------------- 1 | (function(X,q){typeof exports=="object"&&typeof module<"u"?q(exports):typeof define=="function"&&define.amd?define(["exports"],q):(X=typeof globalThis<"u"?globalThis:X||self,q(X["spark-echarts"]={}))})(this,function(X){"use strict";function q(n,o,t,e,l,s,b,g,T){let d=[],h=n+(t-n)*2/3,P=o+(e-o)*2/3,E=b+(l-b)*2/3,x=g+(s-g)*2/3;for(let K=0;K<=T;K++){let r=K/T,M=(1-r)*(1-r)*(1-r)*n+3*r*(1-r)*(1-r)*h+3*r*r*(1-r)*E+r*r*r*b,Ye=(1-r)*(1-r)*(1-r)*o+3*r*(1-r)*(1-r)*P+3*r*r*(1-r)*x+r*r*r*g;d.push({x:+M.toFixed(2),y:+Ye.toFixed(2)})}return d}function ve(n){let o=[];for(let t=0;t{const l=new Date().getTime();l-e>o&&(n.apply(t,arguments),e=l)}}};let f,L,i,y,u,p,S,F,Q=[],m=C,z=[],U=[],B=[],ae=0,k=0,Z=0,Y=0,le=0,re=0,se=0,ce=0,de=0,he=0,D=0,A=0,_=0,w=0,ee=0,$=0,R=0,a=0,v=0,c=0,fe=!1,G=[],I=[],O=[],H=0,te=0,j=!0,ne=!1,ie=-1,W=[],N=[],V={x:0,y:0},ue=0,J=0,oe=0;function we(n){if(!n.layout.root)throw new Error("your root is must be exist");m=Object.assign(Object.create(null),n);let{layout:{root:o,m:t}}=m;console.log(t),a=t,Q=n.data,p=document.querySelector(o),f=document.createElement("canvas"),L=document.createElement("canvas"),S=document.createElement("canvas"),p&&(f.id="myCanvas",L.id="myCanvasDot",S.id="markCanvas",i=f.getContext("2d"),y=L.getContext("2d"),F=S.getContext("2d"),S.width=L.width=f.width=p.offsetWidth,f.height=S.height=L.height=p.offsetHeight,p.appendChild(f),p.appendChild(L),p.appendChild(S),z=[],U=[],B=Q.flat(),v=f.width,c=f.height,ae=Math.max.apply(null,B),k=Math.min.apply(null,B),Z=ae-k,Y=(c-2*a)/Z,le=B.length,re=v-2*a,se=1,ce=se*a,de=Q.length,he=re/(le-de),D=he,A=0,_=0,w=0,ee=0,$=0,R=0)}function Te(){i.beginPath(),i.moveTo(a,a),i.lineTo(a,c-a),i.lineTo(v-a+2,c-a),i.setLineDash([3,3]),i.strokeStyle="#aaa",i.stroke(),i.setLineDash([1]);const n=m.axisY.data.length,o=m.axisX.data.length;for(let t=0;tl&&Hl&&Hs&&(V.y=e+1)}let t=U.find(e=>Math.abs(e.x-n)<=.5?e:"");if(t&&f){if(y.clearRect(0,0,f.width,f.height),y.beginPath(),y.setLineDash([2,4]),y.moveTo(t.x,a),y.lineTo(t.x,c-a),y.strokeStyle="#000",y.stroke(),Ce(y,t.x,t.y,5),!fe)u=document.createElement("div"),u.id="canvasTopBox",u.innerHTML="",p&&p.appendChild(u),fe=!0;else if(u){let e=t.y+u.offsetHeight>f.height-a?f.height-a-u.offsetHeight:t.y-u.offsetHeight*.5;u.style.left=t.x+20+"px",u.style.top=e+"px",u.innerHTML=` 2 |
3 |
4 |
5 |
6 |
人数:${G[V.y]}
7 |
订单数:${I[V.x]}
8 |
9 |
10 | `}}}function Se(n){console.log("ASASASD");const{left:o,top:t,width:e,height:l}=p.getBoundingClientRect();n.clientX>o&&n.clientXt&&n.clientY{const o=Object.create(null);Object.assign(o,C,n),Ee(o)}};X.graph=Xe,Object.defineProperty(X,Symbol.toStringTag,{value:"Module"})}); 11 | -------------------------------------------------------------------------------- /dist/spark-echarts.mjs: -------------------------------------------------------------------------------- 1 | function mt(n, o, e, t, l, s, b, g, C) { 2 | let d = [], h = n + (e - n) * 2 / 3, w = o + (t - o) * 2 / 3, L = b + (l - b) * 2 / 3, x = g + (s - g) * 2 / 3; 3 | for (let F = 0; F <= C; F++) { 4 | let r = F / C, X = (1 - r) * (1 - r) * (1 - r) * n + 3 * r * (1 - r) * (1 - r) * h + 3 * r * r * (1 - r) * L + r * r * r * b, yt = (1 - r) * (1 - r) * (1 - r) * o + 3 * r * (1 - r) * (1 - r) * w + 3 * r * r * (1 - r) * x + r * r * r * g; 5 | d.push({ x: +X.toFixed(2), y: +yt.toFixed(2) }); 6 | } 7 | return d; 8 | } 9 | function vt(n) { 10 | let o = []; 11 | for (let e = 0; e < n.length; e++) { 12 | let t = n[e], l = 50; 13 | if (t.type === "line") { 14 | let s = t.start.x, b = t.start.y, g = t.end.x, C = t.end.y; 15 | for (let d = 0; d <= l; d++) { 16 | let h = d / l, w = s + (g - s) * h, L = b + (C - b) * h; 17 | o.push({ x: +w.toFixed(2), y: +L.toFixed(2) }); 18 | } 19 | } else if (t.type === "curve") { 20 | let s = t.start.x, b = t.start.y, g = t.control1.x, C = t.control1.y, d = t.control2.x, h = t.control2.y, w = t.end.x, L = t.end.y; 21 | const x = mt(s, b, g, C, d, h, w, L, l); 22 | o.push(...x); 23 | } 24 | } 25 | return o; 26 | } 27 | function bt(n) { 28 | return vt(n); 29 | } 30 | function Ct(n, o = 0, e = 0, t = 10, l = "#000") { 31 | n.beginPath(), n.arc(o, e, t, 0, Math.PI * 2), n.fillStyle = l, n.fill(), n.closePath(); 32 | } 33 | const T = { 34 | layout: { 35 | root: "#container", 36 | m: 40 37 | }, 38 | /** 39 | * 注意!这里分段间有重复点20一定要相等,用于衔接曲线 40 | */ 41 | data: [[40, 60, 40, 80, 10, 50, 80, 0, 50, 30, 20], [20, 30, 60, 40, 30, 10, 30, 20, 0, 30, 20], [20, 30, 20, 40, 20, 10, 10, 30, 0, 30, 50]], 42 | axisX: { 43 | data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 44 | format(n) { 45 | return n + "w"; 46 | }, 47 | top: 4 48 | }, 49 | axisY: { 50 | data: [0, 20, 40, 60, 80], 51 | format(n) { 52 | return n + "人"; 53 | }, 54 | right: 10 55 | }, 56 | series: [ 57 | { 58 | rgba: [[55, 162, 255], [116, 21, 219]], 59 | hoverRgba: [[55, 162, 255], [116, 21, 219]], 60 | lineColor: "blue" 61 | }, 62 | { 63 | rgba: [[255, 0, 135], [135, 0, 157]], 64 | hoverRgba: [[255, 0, 135], [135, 0, 157]], 65 | lineColor: "purple" 66 | }, 67 | { 68 | rgba: [[255, 190, 0], [224, 62, 76]], 69 | hoverRgba: [[255, 190, 0], [224, 62, 76]], 70 | lineColor: "orange" 71 | } 72 | ] 73 | }, ut = { 74 | removeChild(n, o) { 75 | for (const e of o) 76 | e && n.removeChild(e); 77 | }, 78 | throttle(n, o, e) { 79 | let t = 0; 80 | return () => { 81 | const l = (/* @__PURE__ */ new Date()).getTime(); 82 | l - t > o && (n.apply(e, arguments), t = l); 83 | }; 84 | } 85 | }; 86 | let f, S, i, y, u, p, A, M, J = [], v = T, V = [], nt = [], j = [], it = 0, k = 0, U = 0, D = 0, ot = 0, at = 0, lt = 0, ft = 0, rt = 0, st = 0, O = 0, $ = 0, Z = 0, P = 0, _ = 0, R = 0, E = 0, a = 0, m = 0, c = 0, ct = !1, I = [], G = [], H = [], Y = 0, K = 0, q = !0, tt = !1, et = -1, W = [], N = [], z = { x: 0, y: 0 }, dt = 0, B = 0, Q = 0; 87 | function wt(n) { 88 | if (!n.layout.root) 89 | throw new Error("your root is must be exist"); 90 | v = Object.assign(/* @__PURE__ */ Object.create(null), n); 91 | let { layout: { root: o, m: e } } = v; 92 | console.log(e), a = e, J = n.data, p = document.querySelector(o), f = document.createElement("canvas"), S = document.createElement("canvas"), A = document.createElement("canvas"), p && (f.id = "myCanvas", S.id = "myCanvasDot", A.id = "markCanvas", i = f.getContext("2d"), y = S.getContext("2d"), M = A.getContext("2d"), A.width = S.width = f.width = p.offsetWidth, f.height = A.height = S.height = p.offsetHeight, p.appendChild(f), p.appendChild(S), p.appendChild(A), V = [], nt = [], j = J.flat(), m = f.width, c = f.height, it = Math.max.apply(null, j), k = Math.min.apply(null, j), U = it - k, D = (c - 2 * a) / U, ot = j.length, at = m - 2 * a, lt = 1, ft = lt * a, rt = J.length, st = at / (ot - rt), O = st, $ = 0, Z = 0, P = 0, _ = 0, R = 0, E = 0); 93 | } 94 | function Pt() { 95 | i.beginPath(), i.moveTo(a, a), i.lineTo(a, c - a), i.lineTo(m - a + 2, c - a), i.setLineDash([3, 3]), i.strokeStyle = "#aaa", i.stroke(), i.setLineDash([1]); 96 | const n = v.axisY.data.length, o = v.axisX.data.length; 97 | for (let e = 0; e < n; e++) { 98 | let t = U * e / (n - 1) + k, l = c - a - (t - k) * D; 99 | e && (i.beginPath(), i.moveTo(a, l), i.lineTo(m - a, l), i.strokeStyle = "#ddd", i.stroke()), i.beginPath(), i.stroke(), I = []; 100 | for (const s of T.axisY.data) 101 | I.push(T.axisY.format(s)); 102 | i.fillText(I[e] + "", a - 15 - T.axisY.right, l + 5), q && N.push(l + 5); 103 | } 104 | for (let e = 0; e < o; e++) { 105 | let t = e * O, l = a + t; 106 | e && (i.beginPath(), i.moveTo(l, c - a), i.lineTo(l, a), i.strokeStyle = "#ddd", i.stroke()), G = []; 107 | for (const s of T.axisX.data) 108 | G.push(T.axisX.format(s)); 109 | i.fillText(G[e], l - 1, c - a + 10 + T.axisX.top), q && W.push(l - 1); 110 | } 111 | } 112 | function Tt(n) { 113 | const { points: o, id: e, rgba: t, lineColor: l, hoverRgba: s } = n; 114 | $ = P, Z = _, q && H.push({ x: $, y: Z }); 115 | function b(C) { 116 | i.beginPath(), i.moveTo(e ? a + P - ft : a + P, c - a - (o[0] - k) * D), i.lineWidth = 2, i.setLineDash([0, 0]); 117 | let d = 0, h = 0, w = 0; 118 | e && (w -= a); 119 | for (let x = 0; x < o.length; x++) { 120 | d = x * O + a + P + w, h = c - a - (o[x] - k) * D; 121 | let F = (x - 1) * O + a + P + w, r = c - a - (o[x - 1] - k) * D, X = F + O / 2; 122 | x === 0 ? (R = d, E = h, i.lineTo(d, h), R === d && E === h || V.push({ type: "line", start: { x: R, y: E }, end: { x: d, y: h } })) : (i.bezierCurveTo(X, r, X, h, d, h), V.push({ type: "curve", start: { x: R, y: E }, end: { x: d, y: h }, control1: { x: X, y: r }, control2: { x: X, y: h } })), R = d, E = h, x === o.length - 1 && (P = d, _ = h, q && e === v.data.length - 1 && H.push({ x: d, y: h })); 123 | } 124 | i.strokeStyle = l, i.stroke(), C && i.beginPath(), i.lineTo(P, c - a), i.lineTo(a + $, c - a); 125 | let L = e ? $ : a + $; 126 | i.lineTo(L, c - a), i.strokeStyle = "transparent", C && i.stroke(); 127 | } 128 | b(!1); 129 | const g = i.createLinearGradient(200, 110, 200, 290); 130 | tt && et === e ? (g.addColorStop(0, `rgba(${s[1][0]}, ${s[1][1]}, ${s[1][2]}, 1)`), g.addColorStop(1, `rgba(${s[0][0]}, ${s[0][1]}, ${s[0][2]}, 1)`)) : (g.addColorStop(0, `rgba(${t[1][0]}, ${t[1][1]}, ${t[1][2]}, 1)`), g.addColorStop(1, `rgba(${t[0][0]}, ${t[0][1]}, ${t[0][2]}, 0)`)), i.fillStyle = g, i.fill(); 131 | } 132 | function kt() { 133 | const { data: n, series: o } = v; 134 | for (let e = 0; e < n.length; e++) 135 | Tt({ points: n[e], id: e, rgba: o[e].rgba, hoverRgba: o[e].hoverRgba, lineColor: o[e].lineColor }); 136 | q = !1; 137 | } 138 | function Lt(n, o) { 139 | Y = n, K = o; 140 | for (let t = 0; t < H.length - 1; t++) { 141 | const l = H[t].x, s = H[t + 1].x; 142 | Y > l && Y < s && (et = t); 143 | } 144 | for (let t = 0; t < W.length - 1; t++) { 145 | const l = W[t], s = W[t + 1]; 146 | Y > l && Y < s && (z.x = t); 147 | } 148 | for (let t = 0; t < N.length - 1; t++) { 149 | const l = N[t], s = N[t + 1]; 150 | K < l && K > s && (z.y = t + 1); 151 | } 152 | let e = nt.find((t) => Math.abs(t.x - n) <= 0.5 ? t : ""); 153 | if (e && f) { 154 | if (y.clearRect(0, 0, f.width, f.height), y.beginPath(), y.setLineDash([2, 4]), y.moveTo(e.x, a), y.lineTo(e.x, c - a), y.strokeStyle = "#000", y.stroke(), Ct(y, e.x, e.y, 5), !ct) 155 | u = document.createElement("div"), u.id = "canvasTopBox", u.innerHTML = "", p && p.appendChild(u), ct = !0; 156 | else if (u) { 157 | let t = e.y + u.offsetHeight > f.height - a ? f.height - a - u.offsetHeight : e.y - u.offsetHeight * 0.5; 158 | u.style.left = e.x + 20 + "px", u.style.top = t + "px", u.innerHTML = ` 159 |
160 |
161 |
162 |
163 |
人数:${I[z.y]}
164 |
订单数:${G[z.x]}
165 |
166 |
167 | `; 168 | } 169 | } 170 | } 171 | function St(n) { 172 | console.log("ASASASD"); 173 | const { left: o, top: e, width: t, height: l } = p.getBoundingClientRect(); 174 | n.clientX > o && n.clientX < t + o && n.clientY > e && n.clientY < l + e ? (ht(v, { openAnimate: !1 }), Lt(n.clientX, n.clientY), tt = !0, u && (u.style.display = "block")) : (f && y.clearRect(0, 0, f.width, f.height), tt = !1, ht(v), u && (u.style.display = "none")); 175 | } 176 | function At() { 177 | Rt(); 178 | } 179 | const $t = ut.throttle(At, 50, window); 180 | function gt() { 181 | window.addEventListener("mousemove", St), window.addEventListener("resize", $t); 182 | } 183 | function ht(n, o) { 184 | i.clearRect(0, 0, m, c), y.clearRect(0, 0, m, c), p && ut.removeChild(p, [f, S, A]), pt(n, o); 185 | } 186 | function Rt() { 187 | J = [], v = T, V = [], nt = [], j = [], it = 0, k = 0, U = 0, D = 0, ot = 0, at = 0, lt = 0, ft = 0, rt = 0, st = 0, O = 0, $ = 0, Z = 0, P = 0, _ = 0, R = 0, E = 0, a = 0, m = 0, c = 0, ct = !1, I = [], G = [], H = [], Y = 0, K = 0, q = !0, tt = !1, et = -1, W = [], N = [], z = { x: 0, y: 0 }, dt = 0, B = 0, Q = 0, ht(v, { openAnimate: !1 }); 188 | } 189 | function xt() { 190 | M.clearRect(0, 0, m, c), M.fillStyle = "rgba(255, 255, 255, 1)", M.fillRect(0, 0, m, c), M.clearRect( 191 | m - B, 192 | c - Q, 193 | B, 194 | Q 195 | ), B += 20, Q += 20, B < m ? dt = requestAnimationFrame(xt) : (cancelAnimationFrame(dt), gt()); 196 | } 197 | function pt(n, o = { openAnimate: !0 }) { 198 | wt(n), Pt(), o.openAnimate && xt(), kt(), nt = bt(V), o.openAnimate || gt(); 199 | } 200 | function Et(n) { 201 | pt(n); 202 | } 203 | const Xt = (n) => { 204 | const o = /* @__PURE__ */ Object.create(null); 205 | Object.assign(o, T, n), Et(o); 206 | }, Yt = { 207 | line: Xt 208 | }; 209 | export { 210 | Yt as graph 211 | }; 212 | -------------------------------------------------------------------------------- /src/core.ts: -------------------------------------------------------------------------------- 1 | import { drawArc, getPathPoint } from "./utils/canvas-utils"; 2 | import { options } from "./config/options"; 3 | import { Options, PointList, Pos } from "./types"; 4 | import utils from "./utils/tools"; 5 | 6 | let canvas: HTMLCanvasElement | null, dotCanvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, dotCtx: CanvasRenderingContext2D, labelDOM: HTMLDivElement | null, container: HTMLElement, markCanvas: HTMLCanvasElement, 7 | markCtx: CanvasRenderingContext2D 8 | 9 | let data: number[][] = [], newOpt: Options = options 10 | let pointList: PointList = [], pathPoints: Pos[] = [], concatData = [], maxY = 0, minY = 0, rangeY = 0, ratioY = 0, count = 0, rangeX = 0, xk = 0, xkVal = 0, dataLen = 0, ratioX = 0, stepX = 0, startAreaX = 0, startAreaY = 0, endAreaX = 0, endAreaY = 0, prePointPosX = 0, prePointPosY = 0, margin = 0, width = 0, height = 0, isLabel = false, newYs: string[] = [], newXs: string[] = [], 11 | areaList: Pos[] = [], cx = 0, cy = 0, firstEnding = true, isHover = false, 12 | areaId = -1, axisXList: number[] = [], axisYList: number[] = [], curInfo: { x: number, y: number } = { x: 0, y: 0 }, animateId = 0, maskWidth = 0, maskHeight = 0 13 | 14 | /** 15 | * 初始化数据 16 | * @param options 17 | * @returns 18 | */ 19 | function initBaseData(options: Options) { 20 | if (!options.layout.root) throw new Error('your root is must be exist') 21 | newOpt = Object.assign(Object.create(null), options) 22 | 23 | // set options 24 | let { layout: { root, m } } = newOpt 25 | console.log(m); 26 | 27 | margin = m 28 | data = options.data 29 | 30 | container = document.querySelector(root) as HTMLElement 31 | canvas = document.createElement("canvas"); 32 | dotCanvas = document.createElement("canvas"); 33 | markCanvas = document.createElement("canvas"); 34 | 35 | if (!container) return 36 | canvas.id = 'myCanvas', dotCanvas.id = 'myCanvasDot', markCanvas.id = 'markCanvas' 37 | 38 | ctx = canvas.getContext("2d") as CanvasRenderingContext2D, dotCtx = dotCanvas.getContext("2d") as CanvasRenderingContext2D; markCtx = markCanvas.getContext("2d") as CanvasRenderingContext2D; 39 | markCanvas.width = dotCanvas.width = canvas.width = container.offsetWidth 40 | canvas.height = markCanvas.height = dotCanvas.height = container.offsetHeight 41 | container.appendChild(canvas) 42 | container.appendChild(dotCanvas) 43 | container.appendChild(markCanvas) 44 | 45 | // 路由所有点 46 | pointList = [], pathPoints = [] 47 | // 完整数据 48 | concatData = data.flat() 49 | // 定义画布尺寸和边距 50 | width = canvas.width, height = canvas.height 51 | 52 | // 计算 Y 轴坐标比例尺 ratioY 53 | maxY = Math.max.apply(null, concatData); 54 | minY = Math.min.apply(null, concatData); 55 | rangeY = maxY - minY; 56 | // 数据和坐标范围的比值 57 | ratioY = (height - 2 * margin) / rangeY; 58 | // 计算 X 轴坐标比例尺和步长 59 | count = concatData.length; 60 | rangeX = width - 2 * margin; 61 | xk = 1, xkVal = xk * margin 62 | dataLen = data.length 63 | ratioX = rangeX / (count - dataLen); 64 | stepX = ratioX; 65 | 66 | startAreaX = 0, startAreaY = 0, endAreaX = 0, endAreaY = 0, prePointPosX = 0, prePointPosY = 0 67 | } 68 | 69 | /** 70 | * 绘制坐标轴 71 | */ 72 | function drawAxis() { 73 | ctx.beginPath(); 74 | ctx.moveTo(margin, margin); 75 | ctx.lineTo(margin, height - margin); 76 | ctx.lineTo(width - margin + 2, height - margin); 77 | ctx.setLineDash([3, 3]) 78 | ctx.strokeStyle = '#aaa' 79 | ctx.stroke(); 80 | ctx.setLineDash([1]) 81 | const yLen = newOpt.axisY.data.length 82 | const xLen = newOpt.axisX.data.length 83 | 84 | // 绘制 Y 轴坐标标记和标签 85 | for (let i = 0; i < yLen; i++) { 86 | let y = (rangeY * i) / (yLen - 1) + minY; 87 | let yPos = height - margin - (y - minY) * ratioY; 88 | 89 | if (i) { 90 | ctx.beginPath(); 91 | ctx.moveTo(margin, yPos); 92 | ctx.lineTo(width - margin, yPos); 93 | ctx.strokeStyle = '#ddd' 94 | ctx.stroke(); 95 | } 96 | 97 | ctx.beginPath(); 98 | ctx.stroke(); 99 | newYs = [] 100 | for (const val of options.axisY.data) { 101 | newYs.push(options.axisY.format(val)) 102 | } 103 | ctx.fillText(newYs[i] + '', margin - 15 - options.axisY.right, yPos + 5); 104 | firstEnding && axisYList.push(yPos + 5) 105 | } 106 | 107 | // 绘制 X 轴坐标标签 108 | for (let i = 0; i < xLen; i++) { 109 | let x = i * stepX; 110 | let xPos = (margin + x); 111 | if (i) { 112 | ctx.beginPath(); 113 | ctx.moveTo(xPos, height - margin); 114 | ctx.lineTo(xPos, margin); 115 | ctx.strokeStyle = '#ddd' 116 | ctx.stroke(); 117 | } 118 | newXs = [] 119 | for (const val of options.axisX.data) { 120 | newXs.push(options.axisX.format(val)) 121 | } 122 | ctx.fillText(newXs[i], xPos - 1, height - margin + 10 + options.axisX.top); 123 | firstEnding && axisXList.push(xPos - 1) 124 | } 125 | } 126 | 127 | /** 128 | * 绘制单组曲线 129 | * @param data 130 | */ 131 | function drawLine(data: any) { 132 | const { points, id, rgba, lineColor, hoverRgba } = data 133 | startAreaX = endAreaX 134 | startAreaY = endAreaY 135 | // 分割区 136 | if (firstEnding) { 137 | areaList.push({ x: startAreaX, y: startAreaY }) 138 | } 139 | 140 | function darwColorOrLine(lineMode: boolean) { 141 | // 绘制折线 142 | ctx.beginPath(); 143 | ctx.moveTo(id ? margin + endAreaX - xkVal : margin + endAreaX, height - margin - (points[0] - minY) * ratioY); 144 | ctx.lineWidth = 2 145 | ctx.setLineDash([0, 0]) 146 | 147 | let x = 0, y = 0, translateX = 0 148 | if (id) { 149 | translateX -= (margin) 150 | } 151 | for (let i = 0; i < points.length; i++) { 152 | x = (i * stepX + margin + endAreaX + translateX) 153 | y = height - margin - (points[i] - minY) * ratioY; 154 | 155 | let x0 = (i - 1) * stepX + margin + endAreaX + translateX; 156 | let y0 = height - margin - (points[i - 1] - minY) * ratioY; 157 | let xc = x0 + stepX / 2; 158 | // let yc = (y0 + y) / 2; 159 | if (i === 0) { 160 | prePointPosX = x 161 | prePointPosY = y 162 | ctx.lineTo(x, y); 163 | if (!(prePointPosX === x && prePointPosY === y)) { 164 | pointList.push({ type: 'line', start: { x: prePointPosX, y: prePointPosY }, end: { x: x, y: y } }) 165 | } 166 | } else { 167 | ctx.bezierCurveTo(xc, y0, xc, y, x, y); 168 | pointList.push({ type: 'curve', start: { x: prePointPosX, y: prePointPosY }, end: { x: x, y: y }, control1: { x: xc, y: y0 }, control2: { x: xc, y: y } }) 169 | } 170 | prePointPosX = x 171 | prePointPosY = y 172 | if (i === points.length - 1) { 173 | endAreaX = x 174 | endAreaY = y 175 | 176 | if (firstEnding && id === newOpt.data.length - 1) { 177 | areaList.push({ x: x, y: y }) 178 | } 179 | } 180 | } 181 | ctx.strokeStyle = lineColor 182 | ctx.stroke() 183 | 184 | lineMode && ctx.beginPath() 185 | 186 | // 右侧闭合点 187 | ctx.lineTo(endAreaX, height - margin) 188 | // 左侧闭合点 189 | ctx.lineTo(margin + startAreaX, height - margin) 190 | let startClosePointX = id ? startAreaX : margin + startAreaX 191 | // 交接闭合点 192 | ctx.lineTo(startClosePointX, height - margin) 193 | ctx.strokeStyle = 'transparent' 194 | lineMode && ctx.stroke(); 195 | } 196 | darwColorOrLine(false) 197 | 198 | // 渐变 199 | const gradient = ctx.createLinearGradient(200, 110, 200, 290); 200 | 201 | if (isHover && areaId === id) { 202 | gradient.addColorStop(0, `rgba(${hoverRgba[1][0]}, ${hoverRgba[1][1]}, ${hoverRgba[1][2]}, 1)`); 203 | gradient.addColorStop(1, `rgba(${hoverRgba[0][0]}, ${hoverRgba[0][1]}, ${hoverRgba[0][2]}, 1)`); 204 | } else { 205 | gradient.addColorStop(0, `rgba(${rgba[1][0]}, ${rgba[1][1]}, ${rgba[1][2]}, 1)`); 206 | gradient.addColorStop(1, `rgba(${rgba[0][0]}, ${rgba[0][1]}, ${rgba[0][2]}, 0)`); 207 | } 208 | 209 | ctx.fillStyle = gradient; 210 | ctx.fill(); 211 | } 212 | 213 | /** 214 | * 绘制所有组的曲线 215 | */ 216 | function startDrawLines() { 217 | const { data, series } = newOpt 218 | for (let i = 0; i < data.length; i++) { 219 | drawLine({ points: data[i], id: i, rgba: series[i].rgba, hoverRgba: series[i].hoverRgba, lineColor: series[i].lineColor }) 220 | } 221 | firstEnding = false 222 | } 223 | 224 | /** 225 | * label显示 226 | * @param clientX 227 | * @param clientY 228 | */ 229 | function drawTouchPoint(clientX: number, clientY: number) { 230 | cx = clientX, cy = clientY 231 | 232 | // 计算颜色 233 | for (let i = 0; i < areaList.length - 1; i++) { 234 | const pre = areaList[i].x; 235 | const after = areaList[i + 1].x; 236 | 237 | if (cx > pre && cx < after) { 238 | areaId = i 239 | } 240 | } 241 | // 计算交叉位置 242 | for (let i = 0; i < axisXList.length - 1; i++) { 243 | const pre = axisXList[i]; 244 | const after = axisXList[i + 1]; 245 | if (cx > pre && cx < after) { 246 | curInfo.x = i 247 | } 248 | } 249 | for (let i = 0; i < axisYList.length - 1; i++) { 250 | const max = axisYList[i]; 251 | const min = axisYList[i + 1]; 252 | if (cy < max && cy > min) { 253 | curInfo.y = i + 1 254 | } 255 | } 256 | 257 | let crossPoint = pathPoints.find((item: Pos) => { 258 | const orderNum = .5 259 | if (Math.abs(item.x - clientX) <= orderNum) { 260 | return item 261 | } else { 262 | return '' 263 | } 264 | }) as Pos 265 | if (crossPoint && canvas) { 266 | dotCtx.clearRect(0, 0, canvas.width, canvas.height); 267 | 268 | dotCtx.beginPath() 269 | dotCtx.setLineDash([2, 4]); 270 | dotCtx.moveTo(crossPoint.x, margin) 271 | dotCtx.lineTo(crossPoint.x, height - margin) 272 | dotCtx.strokeStyle = '#000' 273 | dotCtx.stroke() 274 | 275 | drawArc(dotCtx, crossPoint.x, crossPoint.y, 5) 276 | 277 | //label 278 | if (!isLabel) { 279 | labelDOM = document.createElement("div"); 280 | labelDOM.id = 'canvasTopBox' 281 | labelDOM.innerHTML = "" 282 | container && container.appendChild(labelDOM) 283 | isLabel = true 284 | } else { 285 | if (labelDOM) { 286 | let t = crossPoint.y + labelDOM.offsetHeight > canvas.height - margin ? canvas.height - margin - labelDOM.offsetHeight : crossPoint.y - labelDOM.offsetHeight * .5 287 | labelDOM.style.left = crossPoint.x + 20 + 'px' 288 | labelDOM.style.top = t + 'px' 289 | labelDOM.innerHTML = ` 290 |
291 |
292 |
293 |
294 |
人数:${newYs[curInfo.y]}
295 |
订单数:${newXs[curInfo.x]}
296 |
297 |
298 | ` 299 | } else { 300 | } 301 | } 302 | } 303 | } 304 | 305 | function mousemoveEvent(e: MouseEvent) { 306 | console.log('ASASASD'); 307 | 308 | const { left, top, width, height } = container.getBoundingClientRect() 309 | if (e.clientX > left && e.clientX < width + left && e.clientY > top && e.clientY < height + top) { 310 | // inside 311 | updateOptions(newOpt, { openAnimate: false }) 312 | drawTouchPoint(e.clientX, e.clientY) 313 | isHover = true 314 | if (labelDOM) { 315 | labelDOM.style.display = 'block' 316 | } 317 | } else { 318 | // outside 319 | canvas && dotCtx.clearRect(0, 0, canvas.width, canvas.height); 320 | isHover = false 321 | updateOptions(newOpt) 322 | if (labelDOM) { 323 | labelDOM.style.display = 'none' 324 | } 325 | } 326 | } 327 | 328 | function sizeEvent() { 329 | resetAnimateOptions() 330 | } 331 | const throttleSizeEvent = utils.throttle(sizeEvent, 50, window) 332 | 333 | function watchEvent() { 334 | window.addEventListener('mousemove', mousemoveEvent) 335 | window.addEventListener('resize', throttleSizeEvent) 336 | } 337 | // function removeEvent() { 338 | // window.removeEventListener('mousemove', mousemoveEvent) 339 | // window.removeEventListener('resize', throttleSizeEvent) 340 | // } 341 | 342 | /** 343 | * 更新配置 344 | * @param opt 345 | * @param info 346 | */ 347 | function updateOptions(opt: Options, info?: any) { 348 | // removeEvent() 349 | ctx.clearRect(0, 0, width, height); 350 | dotCtx.clearRect(0, 0, width, height); 351 | container && utils.removeChild(container, [canvas, dotCanvas, markCanvas]) 352 | init(opt, info) 353 | } 354 | 355 | /** 356 | * 重置(显示动画) 357 | */ 358 | function resetAnimateOptions() { 359 | data = [], newOpt = options 360 | pointList = [], pathPoints = [], concatData = [], maxY = 0, minY = 0, rangeY = 0, ratioY = 0, count = 0, rangeX = 0, xk = 0, xkVal = 0, dataLen = 0, ratioX = 0, stepX = 0, startAreaX = 0, startAreaY = 0, endAreaX = 0, endAreaY = 0, prePointPosX = 0, prePointPosY = 0, margin = 0, width = 0, height = 0, isLabel = false, newYs = [], newXs = [], areaList = [], cx = 0, cy = 0, firstEnding = true, isHover = false, 361 | areaId = -1, axisXList = [], axisYList = [], curInfo = { x: 0, y: 0 }, animateId = 0, maskWidth = 0, maskHeight = 0 362 | updateOptions(newOpt, { openAnimate: false }) 363 | } 364 | 365 | /** 366 | * 开场动画 367 | */ 368 | function drawAnimate() { 369 | markCtx.clearRect(0, 0, width, height); 370 | 371 | markCtx.fillStyle = "rgba(255, 255, 255, 1)" 372 | markCtx.fillRect(0, 0, width, height); 373 | 374 | markCtx.clearRect( 375 | (width - maskWidth), 376 | (height - maskHeight), 377 | maskWidth, 378 | maskHeight 379 | ); 380 | 381 | // 更新遮罩区域大小 382 | maskWidth += 20; 383 | maskHeight += 20; 384 | if (maskWidth < width) { 385 | animateId = requestAnimationFrame(drawAnimate); 386 | } else { 387 | cancelAnimationFrame(animateId) 388 | watchEvent() 389 | } 390 | } 391 | 392 | /** 393 | * 初始化 394 | * @param options 395 | * @param info 396 | */ 397 | function init(options: Options, info = { openAnimate: true }) { 398 | initBaseData(options) 399 | drawAxis() 400 | info.openAnimate && drawAnimate() 401 | startDrawLines() 402 | pathPoints = getPathPoint(pointList) 403 | 404 | // 防止动画未结束提前监听 405 | if (!info.openAnimate) { 406 | watchEvent() 407 | } 408 | } 409 | 410 | 411 | /** 412 | * 入口 413 | * @param opt 414 | */ 415 | export function openSparkECharts(opt: Options) { 416 | init(opt) 417 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | devDependencies: 4 | '@babel/cli': 5 | specifier: ^7.21.0 6 | version: 7.21.0(@babel/core@7.21.4) 7 | '@babel/core': 8 | specifier: ^7.21.4 9 | version: 7.21.4 10 | '@babel/preset-typescript': 11 | specifier: ^7.21.4 12 | version: 7.21.4(@babel/core@7.21.4) 13 | '@types/node': 14 | specifier: ^18.16.1 15 | version: 18.16.1 16 | eslint: 17 | specifier: ^8.38.0 18 | version: 8.38.0 19 | eslint-config-prettier: 20 | specifier: ^8.8.0 21 | version: 8.8.0(eslint@8.38.0) 22 | eslint-config-standard: 23 | specifier: ^17.0.0 24 | version: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) 25 | eslint-plugin-import: 26 | specifier: ^2.27.5 27 | version: 2.27.5(eslint@8.38.0) 28 | eslint-plugin-node: 29 | specifier: ^11.1.0 30 | version: 11.1.0(eslint@8.38.0) 31 | eslint-plugin-prettier: 32 | specifier: ^4.2.1 33 | version: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.38.0)(prettier@2.8.7) 34 | eslint-plugin-promise: 35 | specifier: ^6.1.1 36 | version: 6.1.1(eslint@8.38.0) 37 | typescript: 38 | specifier: ^4.9.3 39 | version: 4.9.3 40 | vite: 41 | specifier: ^4.2.0 42 | version: 4.2.0(@types/node@18.16.1) 43 | 44 | packages: 45 | 46 | /@ampproject/remapping@2.2.1: 47 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 48 | engines: {node: '>=6.0.0'} 49 | dependencies: 50 | '@jridgewell/gen-mapping': 0.3.3 51 | '@jridgewell/trace-mapping': 0.3.18 52 | dev: true 53 | 54 | /@babel/cli@7.21.0(@babel/core@7.21.4): 55 | resolution: {integrity: sha512-xi7CxyS8XjSyiwUGCfwf+brtJxjW1/ZTcBUkP10xawIEXLX5HzLn+3aXkgxozcP2UhRhtKTmQurw9Uaes7jZrA==} 56 | engines: {node: '>=6.9.0'} 57 | hasBin: true 58 | peerDependencies: 59 | '@babel/core': ^7.0.0-0 60 | dependencies: 61 | '@babel/core': 7.21.4 62 | '@jridgewell/trace-mapping': 0.3.18 63 | commander: 4.1.1 64 | convert-source-map: 1.9.0 65 | fs-readdir-recursive: 1.1.0 66 | glob: 7.2.3 67 | make-dir: 2.1.0 68 | slash: 2.0.0 69 | optionalDependencies: 70 | '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 71 | chokidar: 3.5.3 72 | dev: true 73 | 74 | /@babel/code-frame@7.21.4: 75 | resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 76 | engines: {node: '>=6.9.0'} 77 | dependencies: 78 | '@babel/highlight': 7.18.6 79 | dev: true 80 | 81 | /@babel/compat-data@7.21.4: 82 | resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} 83 | engines: {node: '>=6.9.0'} 84 | dev: true 85 | 86 | /@babel/core@7.21.4: 87 | resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} 88 | engines: {node: '>=6.9.0'} 89 | dependencies: 90 | '@ampproject/remapping': 2.2.1 91 | '@babel/code-frame': 7.21.4 92 | '@babel/generator': 7.21.4 93 | '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) 94 | '@babel/helper-module-transforms': 7.21.2 95 | '@babel/helpers': 7.21.0 96 | '@babel/parser': 7.21.4 97 | '@babel/template': 7.20.7 98 | '@babel/traverse': 7.21.4 99 | '@babel/types': 7.21.4 100 | convert-source-map: 1.9.0 101 | debug: 4.3.4 102 | gensync: 1.0.0-beta.2 103 | json5: 2.2.3 104 | semver: 6.3.0 105 | transitivePeerDependencies: 106 | - supports-color 107 | dev: true 108 | 109 | /@babel/generator@7.21.4: 110 | resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} 111 | engines: {node: '>=6.9.0'} 112 | dependencies: 113 | '@babel/types': 7.21.4 114 | '@jridgewell/gen-mapping': 0.3.3 115 | '@jridgewell/trace-mapping': 0.3.18 116 | jsesc: 2.5.2 117 | dev: true 118 | 119 | /@babel/helper-annotate-as-pure@7.18.6: 120 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 121 | engines: {node: '>=6.9.0'} 122 | dependencies: 123 | '@babel/types': 7.21.4 124 | dev: true 125 | 126 | /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): 127 | resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} 128 | engines: {node: '>=6.9.0'} 129 | peerDependencies: 130 | '@babel/core': ^7.0.0 131 | dependencies: 132 | '@babel/compat-data': 7.21.4 133 | '@babel/core': 7.21.4 134 | '@babel/helper-validator-option': 7.21.0 135 | browserslist: 4.21.5 136 | lru-cache: 5.1.1 137 | semver: 6.3.0 138 | dev: true 139 | 140 | /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): 141 | resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} 142 | engines: {node: '>=6.9.0'} 143 | peerDependencies: 144 | '@babel/core': ^7.0.0 145 | dependencies: 146 | '@babel/core': 7.21.4 147 | '@babel/helper-annotate-as-pure': 7.18.6 148 | '@babel/helper-environment-visitor': 7.18.9 149 | '@babel/helper-function-name': 7.21.0 150 | '@babel/helper-member-expression-to-functions': 7.21.0 151 | '@babel/helper-optimise-call-expression': 7.18.6 152 | '@babel/helper-replace-supers': 7.20.7 153 | '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 154 | '@babel/helper-split-export-declaration': 7.18.6 155 | transitivePeerDependencies: 156 | - supports-color 157 | dev: true 158 | 159 | /@babel/helper-environment-visitor@7.18.9: 160 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 161 | engines: {node: '>=6.9.0'} 162 | dev: true 163 | 164 | /@babel/helper-function-name@7.21.0: 165 | resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 166 | engines: {node: '>=6.9.0'} 167 | dependencies: 168 | '@babel/template': 7.20.7 169 | '@babel/types': 7.21.4 170 | dev: true 171 | 172 | /@babel/helper-hoist-variables@7.18.6: 173 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 174 | engines: {node: '>=6.9.0'} 175 | dependencies: 176 | '@babel/types': 7.21.4 177 | dev: true 178 | 179 | /@babel/helper-member-expression-to-functions@7.21.0: 180 | resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} 181 | engines: {node: '>=6.9.0'} 182 | dependencies: 183 | '@babel/types': 7.21.4 184 | dev: true 185 | 186 | /@babel/helper-module-imports@7.21.4: 187 | resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} 188 | engines: {node: '>=6.9.0'} 189 | dependencies: 190 | '@babel/types': 7.21.4 191 | dev: true 192 | 193 | /@babel/helper-module-transforms@7.21.2: 194 | resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} 195 | engines: {node: '>=6.9.0'} 196 | dependencies: 197 | '@babel/helper-environment-visitor': 7.18.9 198 | '@babel/helper-module-imports': 7.21.4 199 | '@babel/helper-simple-access': 7.20.2 200 | '@babel/helper-split-export-declaration': 7.18.6 201 | '@babel/helper-validator-identifier': 7.19.1 202 | '@babel/template': 7.20.7 203 | '@babel/traverse': 7.21.4 204 | '@babel/types': 7.21.4 205 | transitivePeerDependencies: 206 | - supports-color 207 | dev: true 208 | 209 | /@babel/helper-optimise-call-expression@7.18.6: 210 | resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 211 | engines: {node: '>=6.9.0'} 212 | dependencies: 213 | '@babel/types': 7.21.4 214 | dev: true 215 | 216 | /@babel/helper-plugin-utils@7.20.2: 217 | resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} 218 | engines: {node: '>=6.9.0'} 219 | dev: true 220 | 221 | /@babel/helper-replace-supers@7.20.7: 222 | resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} 223 | engines: {node: '>=6.9.0'} 224 | dependencies: 225 | '@babel/helper-environment-visitor': 7.18.9 226 | '@babel/helper-member-expression-to-functions': 7.21.0 227 | '@babel/helper-optimise-call-expression': 7.18.6 228 | '@babel/template': 7.20.7 229 | '@babel/traverse': 7.21.4 230 | '@babel/types': 7.21.4 231 | transitivePeerDependencies: 232 | - supports-color 233 | dev: true 234 | 235 | /@babel/helper-simple-access@7.20.2: 236 | resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 237 | engines: {node: '>=6.9.0'} 238 | dependencies: 239 | '@babel/types': 7.21.4 240 | dev: true 241 | 242 | /@babel/helper-skip-transparent-expression-wrappers@7.20.0: 243 | resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} 244 | engines: {node: '>=6.9.0'} 245 | dependencies: 246 | '@babel/types': 7.21.4 247 | dev: true 248 | 249 | /@babel/helper-split-export-declaration@7.18.6: 250 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 251 | engines: {node: '>=6.9.0'} 252 | dependencies: 253 | '@babel/types': 7.21.4 254 | dev: true 255 | 256 | /@babel/helper-string-parser@7.19.4: 257 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 258 | engines: {node: '>=6.9.0'} 259 | dev: true 260 | 261 | /@babel/helper-validator-identifier@7.19.1: 262 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 263 | engines: {node: '>=6.9.0'} 264 | dev: true 265 | 266 | /@babel/helper-validator-option@7.21.0: 267 | resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 268 | engines: {node: '>=6.9.0'} 269 | dev: true 270 | 271 | /@babel/helpers@7.21.0: 272 | resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} 273 | engines: {node: '>=6.9.0'} 274 | dependencies: 275 | '@babel/template': 7.20.7 276 | '@babel/traverse': 7.21.4 277 | '@babel/types': 7.21.4 278 | transitivePeerDependencies: 279 | - supports-color 280 | dev: true 281 | 282 | /@babel/highlight@7.18.6: 283 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 284 | engines: {node: '>=6.9.0'} 285 | dependencies: 286 | '@babel/helper-validator-identifier': 7.19.1 287 | chalk: 2.4.2 288 | js-tokens: 4.0.0 289 | dev: true 290 | 291 | /@babel/parser@7.21.4: 292 | resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} 293 | engines: {node: '>=6.0.0'} 294 | hasBin: true 295 | dependencies: 296 | '@babel/types': 7.21.4 297 | dev: true 298 | 299 | /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): 300 | resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} 301 | engines: {node: '>=6.9.0'} 302 | peerDependencies: 303 | '@babel/core': ^7.0.0-0 304 | dependencies: 305 | '@babel/core': 7.21.4 306 | '@babel/helper-plugin-utils': 7.20.2 307 | dev: true 308 | 309 | /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): 310 | resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} 311 | engines: {node: '>=6.9.0'} 312 | peerDependencies: 313 | '@babel/core': ^7.0.0-0 314 | dependencies: 315 | '@babel/core': 7.21.4 316 | '@babel/helper-plugin-utils': 7.20.2 317 | dev: true 318 | 319 | /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): 320 | resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} 321 | engines: {node: '>=6.9.0'} 322 | peerDependencies: 323 | '@babel/core': ^7.0.0-0 324 | dependencies: 325 | '@babel/core': 7.21.4 326 | '@babel/helper-module-transforms': 7.21.2 327 | '@babel/helper-plugin-utils': 7.20.2 328 | '@babel/helper-simple-access': 7.20.2 329 | transitivePeerDependencies: 330 | - supports-color 331 | dev: true 332 | 333 | /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.4): 334 | resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} 335 | engines: {node: '>=6.9.0'} 336 | peerDependencies: 337 | '@babel/core': ^7.0.0-0 338 | dependencies: 339 | '@babel/core': 7.21.4 340 | '@babel/helper-annotate-as-pure': 7.18.6 341 | '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) 342 | '@babel/helper-plugin-utils': 7.20.2 343 | '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) 344 | transitivePeerDependencies: 345 | - supports-color 346 | dev: true 347 | 348 | /@babel/preset-typescript@7.21.4(@babel/core@7.21.4): 349 | resolution: {integrity: sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==} 350 | engines: {node: '>=6.9.0'} 351 | peerDependencies: 352 | '@babel/core': ^7.0.0-0 353 | dependencies: 354 | '@babel/core': 7.21.4 355 | '@babel/helper-plugin-utils': 7.20.2 356 | '@babel/helper-validator-option': 7.21.0 357 | '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) 358 | '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) 359 | '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.4) 360 | transitivePeerDependencies: 361 | - supports-color 362 | dev: true 363 | 364 | /@babel/template@7.20.7: 365 | resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 366 | engines: {node: '>=6.9.0'} 367 | dependencies: 368 | '@babel/code-frame': 7.21.4 369 | '@babel/parser': 7.21.4 370 | '@babel/types': 7.21.4 371 | dev: true 372 | 373 | /@babel/traverse@7.21.4: 374 | resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} 375 | engines: {node: '>=6.9.0'} 376 | dependencies: 377 | '@babel/code-frame': 7.21.4 378 | '@babel/generator': 7.21.4 379 | '@babel/helper-environment-visitor': 7.18.9 380 | '@babel/helper-function-name': 7.21.0 381 | '@babel/helper-hoist-variables': 7.18.6 382 | '@babel/helper-split-export-declaration': 7.18.6 383 | '@babel/parser': 7.21.4 384 | '@babel/types': 7.21.4 385 | debug: 4.3.4 386 | globals: 11.12.0 387 | transitivePeerDependencies: 388 | - supports-color 389 | dev: true 390 | 391 | /@babel/types@7.21.4: 392 | resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} 393 | engines: {node: '>=6.9.0'} 394 | dependencies: 395 | '@babel/helper-string-parser': 7.19.4 396 | '@babel/helper-validator-identifier': 7.19.1 397 | to-fast-properties: 2.0.0 398 | dev: true 399 | 400 | /@esbuild/android-arm64@0.17.17: 401 | resolution: {integrity: sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==} 402 | engines: {node: '>=12'} 403 | cpu: [arm64] 404 | os: [android] 405 | requiresBuild: true 406 | dev: true 407 | optional: true 408 | 409 | /@esbuild/android-arm@0.17.17: 410 | resolution: {integrity: sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==} 411 | engines: {node: '>=12'} 412 | cpu: [arm] 413 | os: [android] 414 | requiresBuild: true 415 | dev: true 416 | optional: true 417 | 418 | /@esbuild/android-x64@0.17.17: 419 | resolution: {integrity: sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==} 420 | engines: {node: '>=12'} 421 | cpu: [x64] 422 | os: [android] 423 | requiresBuild: true 424 | dev: true 425 | optional: true 426 | 427 | /@esbuild/darwin-arm64@0.17.17: 428 | resolution: {integrity: sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==} 429 | engines: {node: '>=12'} 430 | cpu: [arm64] 431 | os: [darwin] 432 | requiresBuild: true 433 | dev: true 434 | optional: true 435 | 436 | /@esbuild/darwin-x64@0.17.17: 437 | resolution: {integrity: sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==} 438 | engines: {node: '>=12'} 439 | cpu: [x64] 440 | os: [darwin] 441 | requiresBuild: true 442 | dev: true 443 | optional: true 444 | 445 | /@esbuild/freebsd-arm64@0.17.17: 446 | resolution: {integrity: sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==} 447 | engines: {node: '>=12'} 448 | cpu: [arm64] 449 | os: [freebsd] 450 | requiresBuild: true 451 | dev: true 452 | optional: true 453 | 454 | /@esbuild/freebsd-x64@0.17.17: 455 | resolution: {integrity: sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==} 456 | engines: {node: '>=12'} 457 | cpu: [x64] 458 | os: [freebsd] 459 | requiresBuild: true 460 | dev: true 461 | optional: true 462 | 463 | /@esbuild/linux-arm64@0.17.17: 464 | resolution: {integrity: sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==} 465 | engines: {node: '>=12'} 466 | cpu: [arm64] 467 | os: [linux] 468 | requiresBuild: true 469 | dev: true 470 | optional: true 471 | 472 | /@esbuild/linux-arm@0.17.17: 473 | resolution: {integrity: sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==} 474 | engines: {node: '>=12'} 475 | cpu: [arm] 476 | os: [linux] 477 | requiresBuild: true 478 | dev: true 479 | optional: true 480 | 481 | /@esbuild/linux-ia32@0.17.17: 482 | resolution: {integrity: sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==} 483 | engines: {node: '>=12'} 484 | cpu: [ia32] 485 | os: [linux] 486 | requiresBuild: true 487 | dev: true 488 | optional: true 489 | 490 | /@esbuild/linux-loong64@0.17.17: 491 | resolution: {integrity: sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==} 492 | engines: {node: '>=12'} 493 | cpu: [loong64] 494 | os: [linux] 495 | requiresBuild: true 496 | dev: true 497 | optional: true 498 | 499 | /@esbuild/linux-mips64el@0.17.17: 500 | resolution: {integrity: sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==} 501 | engines: {node: '>=12'} 502 | cpu: [mips64el] 503 | os: [linux] 504 | requiresBuild: true 505 | dev: true 506 | optional: true 507 | 508 | /@esbuild/linux-ppc64@0.17.17: 509 | resolution: {integrity: sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==} 510 | engines: {node: '>=12'} 511 | cpu: [ppc64] 512 | os: [linux] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | /@esbuild/linux-riscv64@0.17.17: 518 | resolution: {integrity: sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==} 519 | engines: {node: '>=12'} 520 | cpu: [riscv64] 521 | os: [linux] 522 | requiresBuild: true 523 | dev: true 524 | optional: true 525 | 526 | /@esbuild/linux-s390x@0.17.17: 527 | resolution: {integrity: sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==} 528 | engines: {node: '>=12'} 529 | cpu: [s390x] 530 | os: [linux] 531 | requiresBuild: true 532 | dev: true 533 | optional: true 534 | 535 | /@esbuild/linux-x64@0.17.17: 536 | resolution: {integrity: sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==} 537 | engines: {node: '>=12'} 538 | cpu: [x64] 539 | os: [linux] 540 | requiresBuild: true 541 | dev: true 542 | optional: true 543 | 544 | /@esbuild/netbsd-x64@0.17.17: 545 | resolution: {integrity: sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==} 546 | engines: {node: '>=12'} 547 | cpu: [x64] 548 | os: [netbsd] 549 | requiresBuild: true 550 | dev: true 551 | optional: true 552 | 553 | /@esbuild/openbsd-x64@0.17.17: 554 | resolution: {integrity: sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==} 555 | engines: {node: '>=12'} 556 | cpu: [x64] 557 | os: [openbsd] 558 | requiresBuild: true 559 | dev: true 560 | optional: true 561 | 562 | /@esbuild/sunos-x64@0.17.17: 563 | resolution: {integrity: sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==} 564 | engines: {node: '>=12'} 565 | cpu: [x64] 566 | os: [sunos] 567 | requiresBuild: true 568 | dev: true 569 | optional: true 570 | 571 | /@esbuild/win32-arm64@0.17.17: 572 | resolution: {integrity: sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==} 573 | engines: {node: '>=12'} 574 | cpu: [arm64] 575 | os: [win32] 576 | requiresBuild: true 577 | dev: true 578 | optional: true 579 | 580 | /@esbuild/win32-ia32@0.17.17: 581 | resolution: {integrity: sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==} 582 | engines: {node: '>=12'} 583 | cpu: [ia32] 584 | os: [win32] 585 | requiresBuild: true 586 | dev: true 587 | optional: true 588 | 589 | /@esbuild/win32-x64@0.17.17: 590 | resolution: {integrity: sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==} 591 | engines: {node: '>=12'} 592 | cpu: [x64] 593 | os: [win32] 594 | requiresBuild: true 595 | dev: true 596 | optional: true 597 | 598 | /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): 599 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 600 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 601 | peerDependencies: 602 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 603 | dependencies: 604 | eslint: 8.38.0 605 | eslint-visitor-keys: 3.4.0 606 | dev: true 607 | 608 | /@eslint-community/regexpp@4.5.0: 609 | resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} 610 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 611 | dev: true 612 | 613 | /@eslint/eslintrc@2.0.2: 614 | resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} 615 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 616 | dependencies: 617 | ajv: 6.12.6 618 | debug: 4.3.4 619 | espree: 9.5.1 620 | globals: 13.20.0 621 | ignore: 5.2.4 622 | import-fresh: 3.3.0 623 | js-yaml: 4.1.0 624 | minimatch: 3.1.2 625 | strip-json-comments: 3.1.1 626 | transitivePeerDependencies: 627 | - supports-color 628 | dev: true 629 | 630 | /@eslint/js@8.38.0: 631 | resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} 632 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 633 | dev: true 634 | 635 | /@humanwhocodes/config-array@0.11.8: 636 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 637 | engines: {node: '>=10.10.0'} 638 | dependencies: 639 | '@humanwhocodes/object-schema': 1.2.1 640 | debug: 4.3.4 641 | minimatch: 3.1.2 642 | transitivePeerDependencies: 643 | - supports-color 644 | dev: true 645 | 646 | /@humanwhocodes/module-importer@1.0.1: 647 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 648 | engines: {node: '>=12.22'} 649 | dev: true 650 | 651 | /@humanwhocodes/object-schema@1.2.1: 652 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 653 | dev: true 654 | 655 | /@jridgewell/gen-mapping@0.3.3: 656 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 657 | engines: {node: '>=6.0.0'} 658 | dependencies: 659 | '@jridgewell/set-array': 1.1.2 660 | '@jridgewell/sourcemap-codec': 1.4.15 661 | '@jridgewell/trace-mapping': 0.3.18 662 | dev: true 663 | 664 | /@jridgewell/resolve-uri@3.1.0: 665 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 666 | engines: {node: '>=6.0.0'} 667 | dev: true 668 | 669 | /@jridgewell/set-array@1.1.2: 670 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 671 | engines: {node: '>=6.0.0'} 672 | dev: true 673 | 674 | /@jridgewell/sourcemap-codec@1.4.14: 675 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 676 | dev: true 677 | 678 | /@jridgewell/sourcemap-codec@1.4.15: 679 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 680 | dev: true 681 | 682 | /@jridgewell/trace-mapping@0.3.18: 683 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 684 | dependencies: 685 | '@jridgewell/resolve-uri': 3.1.0 686 | '@jridgewell/sourcemap-codec': 1.4.14 687 | dev: true 688 | 689 | /@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3: 690 | resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} 691 | requiresBuild: true 692 | dev: true 693 | optional: true 694 | 695 | /@nodelib/fs.scandir@2.1.5: 696 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 697 | engines: {node: '>= 8'} 698 | dependencies: 699 | '@nodelib/fs.stat': 2.0.5 700 | run-parallel: 1.2.0 701 | dev: true 702 | 703 | /@nodelib/fs.stat@2.0.5: 704 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 705 | engines: {node: '>= 8'} 706 | dev: true 707 | 708 | /@nodelib/fs.walk@1.2.8: 709 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 710 | engines: {node: '>= 8'} 711 | dependencies: 712 | '@nodelib/fs.scandir': 2.1.5 713 | fastq: 1.15.0 714 | dev: true 715 | 716 | /@types/json5@0.0.29: 717 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 718 | dev: true 719 | 720 | /@types/node@18.16.1: 721 | resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} 722 | dev: true 723 | 724 | /acorn-jsx@5.3.2(acorn@8.8.2): 725 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 726 | peerDependencies: 727 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 728 | dependencies: 729 | acorn: 8.8.2 730 | dev: true 731 | 732 | /acorn@8.8.2: 733 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 734 | engines: {node: '>=0.4.0'} 735 | hasBin: true 736 | dev: true 737 | 738 | /ajv@6.12.6: 739 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 740 | dependencies: 741 | fast-deep-equal: 3.1.3 742 | fast-json-stable-stringify: 2.1.0 743 | json-schema-traverse: 0.4.1 744 | uri-js: 4.4.1 745 | dev: true 746 | 747 | /ansi-regex@5.0.1: 748 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 749 | engines: {node: '>=8'} 750 | dev: true 751 | 752 | /ansi-styles@3.2.1: 753 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 754 | engines: {node: '>=4'} 755 | dependencies: 756 | color-convert: 1.9.3 757 | dev: true 758 | 759 | /ansi-styles@4.3.0: 760 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 761 | engines: {node: '>=8'} 762 | dependencies: 763 | color-convert: 2.0.1 764 | dev: true 765 | 766 | /anymatch@3.1.3: 767 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 768 | engines: {node: '>= 8'} 769 | dependencies: 770 | normalize-path: 3.0.0 771 | picomatch: 2.3.1 772 | dev: true 773 | optional: true 774 | 775 | /argparse@2.0.1: 776 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 777 | dev: true 778 | 779 | /array-buffer-byte-length@1.0.0: 780 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 781 | dependencies: 782 | call-bind: 1.0.2 783 | is-array-buffer: 3.0.2 784 | dev: true 785 | 786 | /array-includes@3.1.6: 787 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 788 | engines: {node: '>= 0.4'} 789 | dependencies: 790 | call-bind: 1.0.2 791 | define-properties: 1.2.0 792 | es-abstract: 1.21.2 793 | get-intrinsic: 1.2.0 794 | is-string: 1.0.7 795 | dev: true 796 | 797 | /array.prototype.flat@1.3.1: 798 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 799 | engines: {node: '>= 0.4'} 800 | dependencies: 801 | call-bind: 1.0.2 802 | define-properties: 1.2.0 803 | es-abstract: 1.21.2 804 | es-shim-unscopables: 1.0.0 805 | dev: true 806 | 807 | /array.prototype.flatmap@1.3.1: 808 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 809 | engines: {node: '>= 0.4'} 810 | dependencies: 811 | call-bind: 1.0.2 812 | define-properties: 1.2.0 813 | es-abstract: 1.21.2 814 | es-shim-unscopables: 1.0.0 815 | dev: true 816 | 817 | /available-typed-arrays@1.0.5: 818 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 819 | engines: {node: '>= 0.4'} 820 | dev: true 821 | 822 | /balanced-match@1.0.2: 823 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 824 | dev: true 825 | 826 | /binary-extensions@2.2.0: 827 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 828 | engines: {node: '>=8'} 829 | dev: true 830 | optional: true 831 | 832 | /brace-expansion@1.1.11: 833 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 834 | dependencies: 835 | balanced-match: 1.0.2 836 | concat-map: 0.0.1 837 | dev: true 838 | 839 | /braces@3.0.2: 840 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 841 | engines: {node: '>=8'} 842 | dependencies: 843 | fill-range: 7.0.1 844 | dev: true 845 | optional: true 846 | 847 | /browserslist@4.21.5: 848 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 849 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 850 | hasBin: true 851 | dependencies: 852 | caniuse-lite: 1.0.30001481 853 | electron-to-chromium: 1.4.369 854 | node-releases: 2.0.10 855 | update-browserslist-db: 1.0.11(browserslist@4.21.5) 856 | dev: true 857 | 858 | /builtins@5.0.1: 859 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 860 | dependencies: 861 | semver: 7.5.0 862 | dev: true 863 | 864 | /call-bind@1.0.2: 865 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 866 | dependencies: 867 | function-bind: 1.1.1 868 | get-intrinsic: 1.2.0 869 | dev: true 870 | 871 | /callsites@3.1.0: 872 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 873 | engines: {node: '>=6'} 874 | dev: true 875 | 876 | /caniuse-lite@1.0.30001481: 877 | resolution: {integrity: sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==} 878 | dev: true 879 | 880 | /chalk@2.4.2: 881 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 882 | engines: {node: '>=4'} 883 | dependencies: 884 | ansi-styles: 3.2.1 885 | escape-string-regexp: 1.0.5 886 | supports-color: 5.5.0 887 | dev: true 888 | 889 | /chalk@4.1.2: 890 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 891 | engines: {node: '>=10'} 892 | dependencies: 893 | ansi-styles: 4.3.0 894 | supports-color: 7.2.0 895 | dev: true 896 | 897 | /chokidar@3.5.3: 898 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 899 | engines: {node: '>= 8.10.0'} 900 | requiresBuild: true 901 | dependencies: 902 | anymatch: 3.1.3 903 | braces: 3.0.2 904 | glob-parent: 5.1.2 905 | is-binary-path: 2.1.0 906 | is-glob: 4.0.3 907 | normalize-path: 3.0.0 908 | readdirp: 3.6.0 909 | optionalDependencies: 910 | fsevents: 2.3.2 911 | dev: true 912 | optional: true 913 | 914 | /color-convert@1.9.3: 915 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 916 | dependencies: 917 | color-name: 1.1.3 918 | dev: true 919 | 920 | /color-convert@2.0.1: 921 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 922 | engines: {node: '>=7.0.0'} 923 | dependencies: 924 | color-name: 1.1.4 925 | dev: true 926 | 927 | /color-name@1.1.3: 928 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 929 | dev: true 930 | 931 | /color-name@1.1.4: 932 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 933 | dev: true 934 | 935 | /commander@4.1.1: 936 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 937 | engines: {node: '>= 6'} 938 | dev: true 939 | 940 | /concat-map@0.0.1: 941 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 942 | dev: true 943 | 944 | /convert-source-map@1.9.0: 945 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 946 | dev: true 947 | 948 | /cross-spawn@7.0.3: 949 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 950 | engines: {node: '>= 8'} 951 | dependencies: 952 | path-key: 3.1.1 953 | shebang-command: 2.0.0 954 | which: 2.0.2 955 | dev: true 956 | 957 | /debug@3.2.7: 958 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 959 | peerDependencies: 960 | supports-color: '*' 961 | peerDependenciesMeta: 962 | supports-color: 963 | optional: true 964 | dependencies: 965 | ms: 2.1.3 966 | dev: true 967 | 968 | /debug@4.3.4: 969 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 970 | engines: {node: '>=6.0'} 971 | peerDependencies: 972 | supports-color: '*' 973 | peerDependenciesMeta: 974 | supports-color: 975 | optional: true 976 | dependencies: 977 | ms: 2.1.2 978 | dev: true 979 | 980 | /deep-is@0.1.4: 981 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 982 | dev: true 983 | 984 | /define-properties@1.2.0: 985 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 986 | engines: {node: '>= 0.4'} 987 | dependencies: 988 | has-property-descriptors: 1.0.0 989 | object-keys: 1.1.1 990 | dev: true 991 | 992 | /doctrine@2.1.0: 993 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 994 | engines: {node: '>=0.10.0'} 995 | dependencies: 996 | esutils: 2.0.3 997 | dev: true 998 | 999 | /doctrine@3.0.0: 1000 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1001 | engines: {node: '>=6.0.0'} 1002 | dependencies: 1003 | esutils: 2.0.3 1004 | dev: true 1005 | 1006 | /electron-to-chromium@1.4.369: 1007 | resolution: {integrity: sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg==} 1008 | dev: true 1009 | 1010 | /es-abstract@1.21.2: 1011 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 1012 | engines: {node: '>= 0.4'} 1013 | dependencies: 1014 | array-buffer-byte-length: 1.0.0 1015 | available-typed-arrays: 1.0.5 1016 | call-bind: 1.0.2 1017 | es-set-tostringtag: 2.0.1 1018 | es-to-primitive: 1.2.1 1019 | function.prototype.name: 1.1.5 1020 | get-intrinsic: 1.2.0 1021 | get-symbol-description: 1.0.0 1022 | globalthis: 1.0.3 1023 | gopd: 1.0.1 1024 | has: 1.0.3 1025 | has-property-descriptors: 1.0.0 1026 | has-proto: 1.0.1 1027 | has-symbols: 1.0.3 1028 | internal-slot: 1.0.5 1029 | is-array-buffer: 3.0.2 1030 | is-callable: 1.2.7 1031 | is-negative-zero: 2.0.2 1032 | is-regex: 1.1.4 1033 | is-shared-array-buffer: 1.0.2 1034 | is-string: 1.0.7 1035 | is-typed-array: 1.1.10 1036 | is-weakref: 1.0.2 1037 | object-inspect: 1.12.3 1038 | object-keys: 1.1.1 1039 | object.assign: 4.1.4 1040 | regexp.prototype.flags: 1.5.0 1041 | safe-regex-test: 1.0.0 1042 | string.prototype.trim: 1.2.7 1043 | string.prototype.trimend: 1.0.6 1044 | string.prototype.trimstart: 1.0.6 1045 | typed-array-length: 1.0.4 1046 | unbox-primitive: 1.0.2 1047 | which-typed-array: 1.1.9 1048 | dev: true 1049 | 1050 | /es-set-tostringtag@2.0.1: 1051 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1052 | engines: {node: '>= 0.4'} 1053 | dependencies: 1054 | get-intrinsic: 1.2.0 1055 | has: 1.0.3 1056 | has-tostringtag: 1.0.0 1057 | dev: true 1058 | 1059 | /es-shim-unscopables@1.0.0: 1060 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1061 | dependencies: 1062 | has: 1.0.3 1063 | dev: true 1064 | 1065 | /es-to-primitive@1.2.1: 1066 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1067 | engines: {node: '>= 0.4'} 1068 | dependencies: 1069 | is-callable: 1.2.7 1070 | is-date-object: 1.0.5 1071 | is-symbol: 1.0.4 1072 | dev: true 1073 | 1074 | /esbuild@0.17.17: 1075 | resolution: {integrity: sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==} 1076 | engines: {node: '>=12'} 1077 | hasBin: true 1078 | requiresBuild: true 1079 | optionalDependencies: 1080 | '@esbuild/android-arm': 0.17.17 1081 | '@esbuild/android-arm64': 0.17.17 1082 | '@esbuild/android-x64': 0.17.17 1083 | '@esbuild/darwin-arm64': 0.17.17 1084 | '@esbuild/darwin-x64': 0.17.17 1085 | '@esbuild/freebsd-arm64': 0.17.17 1086 | '@esbuild/freebsd-x64': 0.17.17 1087 | '@esbuild/linux-arm': 0.17.17 1088 | '@esbuild/linux-arm64': 0.17.17 1089 | '@esbuild/linux-ia32': 0.17.17 1090 | '@esbuild/linux-loong64': 0.17.17 1091 | '@esbuild/linux-mips64el': 0.17.17 1092 | '@esbuild/linux-ppc64': 0.17.17 1093 | '@esbuild/linux-riscv64': 0.17.17 1094 | '@esbuild/linux-s390x': 0.17.17 1095 | '@esbuild/linux-x64': 0.17.17 1096 | '@esbuild/netbsd-x64': 0.17.17 1097 | '@esbuild/openbsd-x64': 0.17.17 1098 | '@esbuild/sunos-x64': 0.17.17 1099 | '@esbuild/win32-arm64': 0.17.17 1100 | '@esbuild/win32-ia32': 0.17.17 1101 | '@esbuild/win32-x64': 0.17.17 1102 | dev: true 1103 | 1104 | /escalade@3.1.1: 1105 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1106 | engines: {node: '>=6'} 1107 | dev: true 1108 | 1109 | /escape-string-regexp@1.0.5: 1110 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1111 | engines: {node: '>=0.8.0'} 1112 | dev: true 1113 | 1114 | /escape-string-regexp@4.0.0: 1115 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1116 | engines: {node: '>=10'} 1117 | dev: true 1118 | 1119 | /eslint-config-prettier@8.8.0(eslint@8.38.0): 1120 | resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} 1121 | hasBin: true 1122 | peerDependencies: 1123 | eslint: '>=7.0.0' 1124 | dependencies: 1125 | eslint: 8.38.0 1126 | dev: true 1127 | 1128 | /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): 1129 | resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} 1130 | peerDependencies: 1131 | eslint: ^8.0.1 1132 | eslint-plugin-import: ^2.25.2 1133 | eslint-plugin-n: ^15.0.0 1134 | eslint-plugin-promise: ^6.0.0 1135 | dependencies: 1136 | eslint: 8.38.0 1137 | eslint-plugin-import: 2.27.5(eslint@8.38.0) 1138 | eslint-plugin-n: 15.7.0(eslint@8.38.0) 1139 | eslint-plugin-promise: 6.1.1(eslint@8.38.0) 1140 | dev: true 1141 | 1142 | /eslint-import-resolver-node@0.3.7: 1143 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 1144 | dependencies: 1145 | debug: 3.2.7 1146 | is-core-module: 2.12.0 1147 | resolve: 1.22.2 1148 | transitivePeerDependencies: 1149 | - supports-color 1150 | dev: true 1151 | 1152 | /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.7)(eslint@8.38.0): 1153 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1154 | engines: {node: '>=4'} 1155 | peerDependencies: 1156 | '@typescript-eslint/parser': '*' 1157 | eslint: '*' 1158 | eslint-import-resolver-node: '*' 1159 | eslint-import-resolver-typescript: '*' 1160 | eslint-import-resolver-webpack: '*' 1161 | peerDependenciesMeta: 1162 | '@typescript-eslint/parser': 1163 | optional: true 1164 | eslint: 1165 | optional: true 1166 | eslint-import-resolver-node: 1167 | optional: true 1168 | eslint-import-resolver-typescript: 1169 | optional: true 1170 | eslint-import-resolver-webpack: 1171 | optional: true 1172 | dependencies: 1173 | debug: 3.2.7 1174 | eslint: 8.38.0 1175 | eslint-import-resolver-node: 0.3.7 1176 | transitivePeerDependencies: 1177 | - supports-color 1178 | dev: true 1179 | 1180 | /eslint-plugin-es@3.0.1(eslint@8.38.0): 1181 | resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} 1182 | engines: {node: '>=8.10.0'} 1183 | peerDependencies: 1184 | eslint: '>=4.19.1' 1185 | dependencies: 1186 | eslint: 8.38.0 1187 | eslint-utils: 2.1.0 1188 | regexpp: 3.2.0 1189 | dev: true 1190 | 1191 | /eslint-plugin-es@4.1.0(eslint@8.38.0): 1192 | resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} 1193 | engines: {node: '>=8.10.0'} 1194 | peerDependencies: 1195 | eslint: '>=4.19.1' 1196 | dependencies: 1197 | eslint: 8.38.0 1198 | eslint-utils: 2.1.0 1199 | regexpp: 3.2.0 1200 | dev: true 1201 | 1202 | /eslint-plugin-import@2.27.5(eslint@8.38.0): 1203 | resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} 1204 | engines: {node: '>=4'} 1205 | peerDependencies: 1206 | '@typescript-eslint/parser': '*' 1207 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1208 | peerDependenciesMeta: 1209 | '@typescript-eslint/parser': 1210 | optional: true 1211 | dependencies: 1212 | array-includes: 3.1.6 1213 | array.prototype.flat: 1.3.1 1214 | array.prototype.flatmap: 1.3.1 1215 | debug: 3.2.7 1216 | doctrine: 2.1.0 1217 | eslint: 8.38.0 1218 | eslint-import-resolver-node: 0.3.7 1219 | eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.7)(eslint@8.38.0) 1220 | has: 1.0.3 1221 | is-core-module: 2.12.0 1222 | is-glob: 4.0.3 1223 | minimatch: 3.1.2 1224 | object.values: 1.1.6 1225 | resolve: 1.22.2 1226 | semver: 6.3.0 1227 | tsconfig-paths: 3.14.2 1228 | transitivePeerDependencies: 1229 | - eslint-import-resolver-typescript 1230 | - eslint-import-resolver-webpack 1231 | - supports-color 1232 | dev: true 1233 | 1234 | /eslint-plugin-n@15.7.0(eslint@8.38.0): 1235 | resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} 1236 | engines: {node: '>=12.22.0'} 1237 | peerDependencies: 1238 | eslint: '>=7.0.0' 1239 | dependencies: 1240 | builtins: 5.0.1 1241 | eslint: 8.38.0 1242 | eslint-plugin-es: 4.1.0(eslint@8.38.0) 1243 | eslint-utils: 3.0.0(eslint@8.38.0) 1244 | ignore: 5.2.4 1245 | is-core-module: 2.12.0 1246 | minimatch: 3.1.2 1247 | resolve: 1.22.2 1248 | semver: 7.5.0 1249 | dev: true 1250 | 1251 | /eslint-plugin-node@11.1.0(eslint@8.38.0): 1252 | resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} 1253 | engines: {node: '>=8.10.0'} 1254 | peerDependencies: 1255 | eslint: '>=5.16.0' 1256 | dependencies: 1257 | eslint: 8.38.0 1258 | eslint-plugin-es: 3.0.1(eslint@8.38.0) 1259 | eslint-utils: 2.1.0 1260 | ignore: 5.2.4 1261 | minimatch: 3.1.2 1262 | resolve: 1.22.2 1263 | semver: 6.3.0 1264 | dev: true 1265 | 1266 | /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.38.0)(prettier@2.8.7): 1267 | resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 1268 | engines: {node: '>=12.0.0'} 1269 | peerDependencies: 1270 | eslint: '>=7.28.0' 1271 | eslint-config-prettier: '*' 1272 | prettier: '>=2.0.0' 1273 | peerDependenciesMeta: 1274 | eslint-config-prettier: 1275 | optional: true 1276 | dependencies: 1277 | eslint: 8.38.0 1278 | eslint-config-prettier: 8.8.0(eslint@8.38.0) 1279 | prettier: 2.8.7 1280 | prettier-linter-helpers: 1.0.0 1281 | dev: true 1282 | 1283 | /eslint-plugin-promise@6.1.1(eslint@8.38.0): 1284 | resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} 1285 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1286 | peerDependencies: 1287 | eslint: ^7.0.0 || ^8.0.0 1288 | dependencies: 1289 | eslint: 8.38.0 1290 | dev: true 1291 | 1292 | /eslint-scope@7.2.0: 1293 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1294 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1295 | dependencies: 1296 | esrecurse: 4.3.0 1297 | estraverse: 5.3.0 1298 | dev: true 1299 | 1300 | /eslint-utils@2.1.0: 1301 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 1302 | engines: {node: '>=6'} 1303 | dependencies: 1304 | eslint-visitor-keys: 1.3.0 1305 | dev: true 1306 | 1307 | /eslint-utils@3.0.0(eslint@8.38.0): 1308 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 1309 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 1310 | peerDependencies: 1311 | eslint: '>=5' 1312 | dependencies: 1313 | eslint: 8.38.0 1314 | eslint-visitor-keys: 2.1.0 1315 | dev: true 1316 | 1317 | /eslint-visitor-keys@1.3.0: 1318 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 1319 | engines: {node: '>=4'} 1320 | dev: true 1321 | 1322 | /eslint-visitor-keys@2.1.0: 1323 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1324 | engines: {node: '>=10'} 1325 | dev: true 1326 | 1327 | /eslint-visitor-keys@3.4.0: 1328 | resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} 1329 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1330 | dev: true 1331 | 1332 | /eslint@8.38.0: 1333 | resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} 1334 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1335 | hasBin: true 1336 | dependencies: 1337 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) 1338 | '@eslint-community/regexpp': 4.5.0 1339 | '@eslint/eslintrc': 2.0.2 1340 | '@eslint/js': 8.38.0 1341 | '@humanwhocodes/config-array': 0.11.8 1342 | '@humanwhocodes/module-importer': 1.0.1 1343 | '@nodelib/fs.walk': 1.2.8 1344 | ajv: 6.12.6 1345 | chalk: 4.1.2 1346 | cross-spawn: 7.0.3 1347 | debug: 4.3.4 1348 | doctrine: 3.0.0 1349 | escape-string-regexp: 4.0.0 1350 | eslint-scope: 7.2.0 1351 | eslint-visitor-keys: 3.4.0 1352 | espree: 9.5.1 1353 | esquery: 1.5.0 1354 | esutils: 2.0.3 1355 | fast-deep-equal: 3.1.3 1356 | file-entry-cache: 6.0.1 1357 | find-up: 5.0.0 1358 | glob-parent: 6.0.2 1359 | globals: 13.20.0 1360 | grapheme-splitter: 1.0.4 1361 | ignore: 5.2.4 1362 | import-fresh: 3.3.0 1363 | imurmurhash: 0.1.4 1364 | is-glob: 4.0.3 1365 | is-path-inside: 3.0.3 1366 | js-sdsl: 4.4.0 1367 | js-yaml: 4.1.0 1368 | json-stable-stringify-without-jsonify: 1.0.1 1369 | levn: 0.4.1 1370 | lodash.merge: 4.6.2 1371 | minimatch: 3.1.2 1372 | natural-compare: 1.4.0 1373 | optionator: 0.9.1 1374 | strip-ansi: 6.0.1 1375 | strip-json-comments: 3.1.1 1376 | text-table: 0.2.0 1377 | transitivePeerDependencies: 1378 | - supports-color 1379 | dev: true 1380 | 1381 | /espree@9.5.1: 1382 | resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} 1383 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1384 | dependencies: 1385 | acorn: 8.8.2 1386 | acorn-jsx: 5.3.2(acorn@8.8.2) 1387 | eslint-visitor-keys: 3.4.0 1388 | dev: true 1389 | 1390 | /esquery@1.5.0: 1391 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1392 | engines: {node: '>=0.10'} 1393 | dependencies: 1394 | estraverse: 5.3.0 1395 | dev: true 1396 | 1397 | /esrecurse@4.3.0: 1398 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1399 | engines: {node: '>=4.0'} 1400 | dependencies: 1401 | estraverse: 5.3.0 1402 | dev: true 1403 | 1404 | /estraverse@5.3.0: 1405 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1406 | engines: {node: '>=4.0'} 1407 | dev: true 1408 | 1409 | /esutils@2.0.3: 1410 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1411 | engines: {node: '>=0.10.0'} 1412 | dev: true 1413 | 1414 | /fast-deep-equal@3.1.3: 1415 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1416 | dev: true 1417 | 1418 | /fast-diff@1.2.0: 1419 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1420 | dev: true 1421 | 1422 | /fast-json-stable-stringify@2.1.0: 1423 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1424 | dev: true 1425 | 1426 | /fast-levenshtein@2.0.6: 1427 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1428 | dev: true 1429 | 1430 | /fastq@1.15.0: 1431 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1432 | dependencies: 1433 | reusify: 1.0.4 1434 | dev: true 1435 | 1436 | /file-entry-cache@6.0.1: 1437 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1438 | engines: {node: ^10.12.0 || >=12.0.0} 1439 | dependencies: 1440 | flat-cache: 3.0.4 1441 | dev: true 1442 | 1443 | /fill-range@7.0.1: 1444 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1445 | engines: {node: '>=8'} 1446 | dependencies: 1447 | to-regex-range: 5.0.1 1448 | dev: true 1449 | optional: true 1450 | 1451 | /find-up@5.0.0: 1452 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1453 | engines: {node: '>=10'} 1454 | dependencies: 1455 | locate-path: 6.0.0 1456 | path-exists: 4.0.0 1457 | dev: true 1458 | 1459 | /flat-cache@3.0.4: 1460 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1461 | engines: {node: ^10.12.0 || >=12.0.0} 1462 | dependencies: 1463 | flatted: 3.2.7 1464 | rimraf: 3.0.2 1465 | dev: true 1466 | 1467 | /flatted@3.2.7: 1468 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1469 | dev: true 1470 | 1471 | /for-each@0.3.3: 1472 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1473 | dependencies: 1474 | is-callable: 1.2.7 1475 | dev: true 1476 | 1477 | /fs-readdir-recursive@1.1.0: 1478 | resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} 1479 | dev: true 1480 | 1481 | /fs.realpath@1.0.0: 1482 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1483 | dev: true 1484 | 1485 | /fsevents@2.3.2: 1486 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1487 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1488 | os: [darwin] 1489 | requiresBuild: true 1490 | dev: true 1491 | optional: true 1492 | 1493 | /function-bind@1.1.1: 1494 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1495 | dev: true 1496 | 1497 | /function.prototype.name@1.1.5: 1498 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1499 | engines: {node: '>= 0.4'} 1500 | dependencies: 1501 | call-bind: 1.0.2 1502 | define-properties: 1.2.0 1503 | es-abstract: 1.21.2 1504 | functions-have-names: 1.2.3 1505 | dev: true 1506 | 1507 | /functions-have-names@1.2.3: 1508 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1509 | dev: true 1510 | 1511 | /gensync@1.0.0-beta.2: 1512 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1513 | engines: {node: '>=6.9.0'} 1514 | dev: true 1515 | 1516 | /get-intrinsic@1.2.0: 1517 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} 1518 | dependencies: 1519 | function-bind: 1.1.1 1520 | has: 1.0.3 1521 | has-symbols: 1.0.3 1522 | dev: true 1523 | 1524 | /get-symbol-description@1.0.0: 1525 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1526 | engines: {node: '>= 0.4'} 1527 | dependencies: 1528 | call-bind: 1.0.2 1529 | get-intrinsic: 1.2.0 1530 | dev: true 1531 | 1532 | /glob-parent@5.1.2: 1533 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1534 | engines: {node: '>= 6'} 1535 | dependencies: 1536 | is-glob: 4.0.3 1537 | dev: true 1538 | optional: true 1539 | 1540 | /glob-parent@6.0.2: 1541 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1542 | engines: {node: '>=10.13.0'} 1543 | dependencies: 1544 | is-glob: 4.0.3 1545 | dev: true 1546 | 1547 | /glob@7.2.3: 1548 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1549 | dependencies: 1550 | fs.realpath: 1.0.0 1551 | inflight: 1.0.6 1552 | inherits: 2.0.4 1553 | minimatch: 3.1.2 1554 | once: 1.4.0 1555 | path-is-absolute: 1.0.1 1556 | dev: true 1557 | 1558 | /globals@11.12.0: 1559 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1560 | engines: {node: '>=4'} 1561 | dev: true 1562 | 1563 | /globals@13.20.0: 1564 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1565 | engines: {node: '>=8'} 1566 | dependencies: 1567 | type-fest: 0.20.2 1568 | dev: true 1569 | 1570 | /globalthis@1.0.3: 1571 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1572 | engines: {node: '>= 0.4'} 1573 | dependencies: 1574 | define-properties: 1.2.0 1575 | dev: true 1576 | 1577 | /gopd@1.0.1: 1578 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1579 | dependencies: 1580 | get-intrinsic: 1.2.0 1581 | dev: true 1582 | 1583 | /grapheme-splitter@1.0.4: 1584 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1585 | dev: true 1586 | 1587 | /has-bigints@1.0.2: 1588 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1589 | dev: true 1590 | 1591 | /has-flag@3.0.0: 1592 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1593 | engines: {node: '>=4'} 1594 | dev: true 1595 | 1596 | /has-flag@4.0.0: 1597 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1598 | engines: {node: '>=8'} 1599 | dev: true 1600 | 1601 | /has-property-descriptors@1.0.0: 1602 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1603 | dependencies: 1604 | get-intrinsic: 1.2.0 1605 | dev: true 1606 | 1607 | /has-proto@1.0.1: 1608 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1609 | engines: {node: '>= 0.4'} 1610 | dev: true 1611 | 1612 | /has-symbols@1.0.3: 1613 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1614 | engines: {node: '>= 0.4'} 1615 | dev: true 1616 | 1617 | /has-tostringtag@1.0.0: 1618 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1619 | engines: {node: '>= 0.4'} 1620 | dependencies: 1621 | has-symbols: 1.0.3 1622 | dev: true 1623 | 1624 | /has@1.0.3: 1625 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1626 | engines: {node: '>= 0.4.0'} 1627 | dependencies: 1628 | function-bind: 1.1.1 1629 | dev: true 1630 | 1631 | /ignore@5.2.4: 1632 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1633 | engines: {node: '>= 4'} 1634 | dev: true 1635 | 1636 | /import-fresh@3.3.0: 1637 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1638 | engines: {node: '>=6'} 1639 | dependencies: 1640 | parent-module: 1.0.1 1641 | resolve-from: 4.0.0 1642 | dev: true 1643 | 1644 | /imurmurhash@0.1.4: 1645 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1646 | engines: {node: '>=0.8.19'} 1647 | dev: true 1648 | 1649 | /inflight@1.0.6: 1650 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1651 | dependencies: 1652 | once: 1.4.0 1653 | wrappy: 1.0.2 1654 | dev: true 1655 | 1656 | /inherits@2.0.4: 1657 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1658 | dev: true 1659 | 1660 | /internal-slot@1.0.5: 1661 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1662 | engines: {node: '>= 0.4'} 1663 | dependencies: 1664 | get-intrinsic: 1.2.0 1665 | has: 1.0.3 1666 | side-channel: 1.0.4 1667 | dev: true 1668 | 1669 | /is-array-buffer@3.0.2: 1670 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1671 | dependencies: 1672 | call-bind: 1.0.2 1673 | get-intrinsic: 1.2.0 1674 | is-typed-array: 1.1.10 1675 | dev: true 1676 | 1677 | /is-bigint@1.0.4: 1678 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1679 | dependencies: 1680 | has-bigints: 1.0.2 1681 | dev: true 1682 | 1683 | /is-binary-path@2.1.0: 1684 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1685 | engines: {node: '>=8'} 1686 | dependencies: 1687 | binary-extensions: 2.2.0 1688 | dev: true 1689 | optional: true 1690 | 1691 | /is-boolean-object@1.1.2: 1692 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1693 | engines: {node: '>= 0.4'} 1694 | dependencies: 1695 | call-bind: 1.0.2 1696 | has-tostringtag: 1.0.0 1697 | dev: true 1698 | 1699 | /is-callable@1.2.7: 1700 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1701 | engines: {node: '>= 0.4'} 1702 | dev: true 1703 | 1704 | /is-core-module@2.12.0: 1705 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 1706 | dependencies: 1707 | has: 1.0.3 1708 | dev: true 1709 | 1710 | /is-date-object@1.0.5: 1711 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1712 | engines: {node: '>= 0.4'} 1713 | dependencies: 1714 | has-tostringtag: 1.0.0 1715 | dev: true 1716 | 1717 | /is-extglob@2.1.1: 1718 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1719 | engines: {node: '>=0.10.0'} 1720 | dev: true 1721 | 1722 | /is-glob@4.0.3: 1723 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1724 | engines: {node: '>=0.10.0'} 1725 | dependencies: 1726 | is-extglob: 2.1.1 1727 | dev: true 1728 | 1729 | /is-negative-zero@2.0.2: 1730 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1731 | engines: {node: '>= 0.4'} 1732 | dev: true 1733 | 1734 | /is-number-object@1.0.7: 1735 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1736 | engines: {node: '>= 0.4'} 1737 | dependencies: 1738 | has-tostringtag: 1.0.0 1739 | dev: true 1740 | 1741 | /is-number@7.0.0: 1742 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1743 | engines: {node: '>=0.12.0'} 1744 | dev: true 1745 | optional: true 1746 | 1747 | /is-path-inside@3.0.3: 1748 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1749 | engines: {node: '>=8'} 1750 | dev: true 1751 | 1752 | /is-regex@1.1.4: 1753 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1754 | engines: {node: '>= 0.4'} 1755 | dependencies: 1756 | call-bind: 1.0.2 1757 | has-tostringtag: 1.0.0 1758 | dev: true 1759 | 1760 | /is-shared-array-buffer@1.0.2: 1761 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1762 | dependencies: 1763 | call-bind: 1.0.2 1764 | dev: true 1765 | 1766 | /is-string@1.0.7: 1767 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1768 | engines: {node: '>= 0.4'} 1769 | dependencies: 1770 | has-tostringtag: 1.0.0 1771 | dev: true 1772 | 1773 | /is-symbol@1.0.4: 1774 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1775 | engines: {node: '>= 0.4'} 1776 | dependencies: 1777 | has-symbols: 1.0.3 1778 | dev: true 1779 | 1780 | /is-typed-array@1.1.10: 1781 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1782 | engines: {node: '>= 0.4'} 1783 | dependencies: 1784 | available-typed-arrays: 1.0.5 1785 | call-bind: 1.0.2 1786 | for-each: 0.3.3 1787 | gopd: 1.0.1 1788 | has-tostringtag: 1.0.0 1789 | dev: true 1790 | 1791 | /is-weakref@1.0.2: 1792 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1793 | dependencies: 1794 | call-bind: 1.0.2 1795 | dev: true 1796 | 1797 | /isexe@2.0.0: 1798 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1799 | dev: true 1800 | 1801 | /js-sdsl@4.4.0: 1802 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} 1803 | dev: true 1804 | 1805 | /js-tokens@4.0.0: 1806 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1807 | dev: true 1808 | 1809 | /js-yaml@4.1.0: 1810 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1811 | hasBin: true 1812 | dependencies: 1813 | argparse: 2.0.1 1814 | dev: true 1815 | 1816 | /jsesc@2.5.2: 1817 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1818 | engines: {node: '>=4'} 1819 | hasBin: true 1820 | dev: true 1821 | 1822 | /json-schema-traverse@0.4.1: 1823 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1824 | dev: true 1825 | 1826 | /json-stable-stringify-without-jsonify@1.0.1: 1827 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1828 | dev: true 1829 | 1830 | /json5@1.0.2: 1831 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1832 | hasBin: true 1833 | dependencies: 1834 | minimist: 1.2.8 1835 | dev: true 1836 | 1837 | /json5@2.2.3: 1838 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1839 | engines: {node: '>=6'} 1840 | hasBin: true 1841 | dev: true 1842 | 1843 | /levn@0.4.1: 1844 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1845 | engines: {node: '>= 0.8.0'} 1846 | dependencies: 1847 | prelude-ls: 1.2.1 1848 | type-check: 0.4.0 1849 | dev: true 1850 | 1851 | /locate-path@6.0.0: 1852 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1853 | engines: {node: '>=10'} 1854 | dependencies: 1855 | p-locate: 5.0.0 1856 | dev: true 1857 | 1858 | /lodash.merge@4.6.2: 1859 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1860 | dev: true 1861 | 1862 | /lru-cache@5.1.1: 1863 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1864 | dependencies: 1865 | yallist: 3.1.1 1866 | dev: true 1867 | 1868 | /lru-cache@6.0.0: 1869 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1870 | engines: {node: '>=10'} 1871 | dependencies: 1872 | yallist: 4.0.0 1873 | dev: true 1874 | 1875 | /make-dir@2.1.0: 1876 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} 1877 | engines: {node: '>=6'} 1878 | dependencies: 1879 | pify: 4.0.1 1880 | semver: 5.7.1 1881 | dev: true 1882 | 1883 | /minimatch@3.1.2: 1884 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1885 | dependencies: 1886 | brace-expansion: 1.1.11 1887 | dev: true 1888 | 1889 | /minimist@1.2.8: 1890 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1891 | dev: true 1892 | 1893 | /ms@2.1.2: 1894 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1895 | dev: true 1896 | 1897 | /ms@2.1.3: 1898 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1899 | dev: true 1900 | 1901 | /nanoid@3.3.6: 1902 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1903 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1904 | hasBin: true 1905 | dev: true 1906 | 1907 | /natural-compare@1.4.0: 1908 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1909 | dev: true 1910 | 1911 | /node-releases@2.0.10: 1912 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 1913 | dev: true 1914 | 1915 | /normalize-path@3.0.0: 1916 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1917 | engines: {node: '>=0.10.0'} 1918 | dev: true 1919 | optional: true 1920 | 1921 | /object-inspect@1.12.3: 1922 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1923 | dev: true 1924 | 1925 | /object-keys@1.1.1: 1926 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1927 | engines: {node: '>= 0.4'} 1928 | dev: true 1929 | 1930 | /object.assign@4.1.4: 1931 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1932 | engines: {node: '>= 0.4'} 1933 | dependencies: 1934 | call-bind: 1.0.2 1935 | define-properties: 1.2.0 1936 | has-symbols: 1.0.3 1937 | object-keys: 1.1.1 1938 | dev: true 1939 | 1940 | /object.values@1.1.6: 1941 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 1942 | engines: {node: '>= 0.4'} 1943 | dependencies: 1944 | call-bind: 1.0.2 1945 | define-properties: 1.2.0 1946 | es-abstract: 1.21.2 1947 | dev: true 1948 | 1949 | /once@1.4.0: 1950 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1951 | dependencies: 1952 | wrappy: 1.0.2 1953 | dev: true 1954 | 1955 | /optionator@0.9.1: 1956 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1957 | engines: {node: '>= 0.8.0'} 1958 | dependencies: 1959 | deep-is: 0.1.4 1960 | fast-levenshtein: 2.0.6 1961 | levn: 0.4.1 1962 | prelude-ls: 1.2.1 1963 | type-check: 0.4.0 1964 | word-wrap: 1.2.3 1965 | dev: true 1966 | 1967 | /p-limit@3.1.0: 1968 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1969 | engines: {node: '>=10'} 1970 | dependencies: 1971 | yocto-queue: 0.1.0 1972 | dev: true 1973 | 1974 | /p-locate@5.0.0: 1975 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1976 | engines: {node: '>=10'} 1977 | dependencies: 1978 | p-limit: 3.1.0 1979 | dev: true 1980 | 1981 | /parent-module@1.0.1: 1982 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1983 | engines: {node: '>=6'} 1984 | dependencies: 1985 | callsites: 3.1.0 1986 | dev: true 1987 | 1988 | /path-exists@4.0.0: 1989 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1990 | engines: {node: '>=8'} 1991 | dev: true 1992 | 1993 | /path-is-absolute@1.0.1: 1994 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1995 | engines: {node: '>=0.10.0'} 1996 | dev: true 1997 | 1998 | /path-key@3.1.1: 1999 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2000 | engines: {node: '>=8'} 2001 | dev: true 2002 | 2003 | /path-parse@1.0.7: 2004 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2005 | dev: true 2006 | 2007 | /picocolors@1.0.0: 2008 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2009 | dev: true 2010 | 2011 | /picomatch@2.3.1: 2012 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2013 | engines: {node: '>=8.6'} 2014 | dev: true 2015 | optional: true 2016 | 2017 | /pify@4.0.1: 2018 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 2019 | engines: {node: '>=6'} 2020 | dev: true 2021 | 2022 | /postcss@8.4.23: 2023 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 2024 | engines: {node: ^10 || ^12 || >=14} 2025 | dependencies: 2026 | nanoid: 3.3.6 2027 | picocolors: 1.0.0 2028 | source-map-js: 1.0.2 2029 | dev: true 2030 | 2031 | /prelude-ls@1.2.1: 2032 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2033 | engines: {node: '>= 0.8.0'} 2034 | dev: true 2035 | 2036 | /prettier-linter-helpers@1.0.0: 2037 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2038 | engines: {node: '>=6.0.0'} 2039 | dependencies: 2040 | fast-diff: 1.2.0 2041 | dev: true 2042 | 2043 | /prettier@2.8.7: 2044 | resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} 2045 | engines: {node: '>=10.13.0'} 2046 | hasBin: true 2047 | dev: true 2048 | 2049 | /punycode@2.3.0: 2050 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2051 | engines: {node: '>=6'} 2052 | dev: true 2053 | 2054 | /queue-microtask@1.2.3: 2055 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2056 | dev: true 2057 | 2058 | /readdirp@3.6.0: 2059 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2060 | engines: {node: '>=8.10.0'} 2061 | dependencies: 2062 | picomatch: 2.3.1 2063 | dev: true 2064 | optional: true 2065 | 2066 | /regexp.prototype.flags@1.5.0: 2067 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2068 | engines: {node: '>= 0.4'} 2069 | dependencies: 2070 | call-bind: 1.0.2 2071 | define-properties: 1.2.0 2072 | functions-have-names: 1.2.3 2073 | dev: true 2074 | 2075 | /regexpp@3.2.0: 2076 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 2077 | engines: {node: '>=8'} 2078 | dev: true 2079 | 2080 | /resolve-from@4.0.0: 2081 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2082 | engines: {node: '>=4'} 2083 | dev: true 2084 | 2085 | /resolve@1.22.2: 2086 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2087 | hasBin: true 2088 | dependencies: 2089 | is-core-module: 2.12.0 2090 | path-parse: 1.0.7 2091 | supports-preserve-symlinks-flag: 1.0.0 2092 | dev: true 2093 | 2094 | /reusify@1.0.4: 2095 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2096 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2097 | dev: true 2098 | 2099 | /rimraf@3.0.2: 2100 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2101 | hasBin: true 2102 | dependencies: 2103 | glob: 7.2.3 2104 | dev: true 2105 | 2106 | /rollup@3.20.7: 2107 | resolution: {integrity: sha512-P7E2zezKSLhWnTz46XxjSmInrbOCiul1yf+kJccMxT56vxjHwCbDfoLbiqFgu+WQoo9ij2PkraYaBstgB2prBA==} 2108 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2109 | hasBin: true 2110 | optionalDependencies: 2111 | fsevents: 2.3.2 2112 | dev: true 2113 | 2114 | /run-parallel@1.2.0: 2115 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2116 | dependencies: 2117 | queue-microtask: 1.2.3 2118 | dev: true 2119 | 2120 | /safe-regex-test@1.0.0: 2121 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2122 | dependencies: 2123 | call-bind: 1.0.2 2124 | get-intrinsic: 1.2.0 2125 | is-regex: 1.1.4 2126 | dev: true 2127 | 2128 | /semver@5.7.1: 2129 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2130 | hasBin: true 2131 | dev: true 2132 | 2133 | /semver@6.3.0: 2134 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2135 | hasBin: true 2136 | dev: true 2137 | 2138 | /semver@7.5.0: 2139 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 2140 | engines: {node: '>=10'} 2141 | hasBin: true 2142 | dependencies: 2143 | lru-cache: 6.0.0 2144 | dev: true 2145 | 2146 | /shebang-command@2.0.0: 2147 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2148 | engines: {node: '>=8'} 2149 | dependencies: 2150 | shebang-regex: 3.0.0 2151 | dev: true 2152 | 2153 | /shebang-regex@3.0.0: 2154 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2155 | engines: {node: '>=8'} 2156 | dev: true 2157 | 2158 | /side-channel@1.0.4: 2159 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2160 | dependencies: 2161 | call-bind: 1.0.2 2162 | get-intrinsic: 1.2.0 2163 | object-inspect: 1.12.3 2164 | dev: true 2165 | 2166 | /slash@2.0.0: 2167 | resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} 2168 | engines: {node: '>=6'} 2169 | dev: true 2170 | 2171 | /source-map-js@1.0.2: 2172 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2173 | engines: {node: '>=0.10.0'} 2174 | dev: true 2175 | 2176 | /string.prototype.trim@1.2.7: 2177 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2178 | engines: {node: '>= 0.4'} 2179 | dependencies: 2180 | call-bind: 1.0.2 2181 | define-properties: 1.2.0 2182 | es-abstract: 1.21.2 2183 | dev: true 2184 | 2185 | /string.prototype.trimend@1.0.6: 2186 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2187 | dependencies: 2188 | call-bind: 1.0.2 2189 | define-properties: 1.2.0 2190 | es-abstract: 1.21.2 2191 | dev: true 2192 | 2193 | /string.prototype.trimstart@1.0.6: 2194 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2195 | dependencies: 2196 | call-bind: 1.0.2 2197 | define-properties: 1.2.0 2198 | es-abstract: 1.21.2 2199 | dev: true 2200 | 2201 | /strip-ansi@6.0.1: 2202 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2203 | engines: {node: '>=8'} 2204 | dependencies: 2205 | ansi-regex: 5.0.1 2206 | dev: true 2207 | 2208 | /strip-bom@3.0.0: 2209 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2210 | engines: {node: '>=4'} 2211 | dev: true 2212 | 2213 | /strip-json-comments@3.1.1: 2214 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2215 | engines: {node: '>=8'} 2216 | dev: true 2217 | 2218 | /supports-color@5.5.0: 2219 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2220 | engines: {node: '>=4'} 2221 | dependencies: 2222 | has-flag: 3.0.0 2223 | dev: true 2224 | 2225 | /supports-color@7.2.0: 2226 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2227 | engines: {node: '>=8'} 2228 | dependencies: 2229 | has-flag: 4.0.0 2230 | dev: true 2231 | 2232 | /supports-preserve-symlinks-flag@1.0.0: 2233 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2234 | engines: {node: '>= 0.4'} 2235 | dev: true 2236 | 2237 | /text-table@0.2.0: 2238 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2239 | dev: true 2240 | 2241 | /to-fast-properties@2.0.0: 2242 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2243 | engines: {node: '>=4'} 2244 | dev: true 2245 | 2246 | /to-regex-range@5.0.1: 2247 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2248 | engines: {node: '>=8.0'} 2249 | dependencies: 2250 | is-number: 7.0.0 2251 | dev: true 2252 | optional: true 2253 | 2254 | /tsconfig-paths@3.14.2: 2255 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 2256 | dependencies: 2257 | '@types/json5': 0.0.29 2258 | json5: 1.0.2 2259 | minimist: 1.2.8 2260 | strip-bom: 3.0.0 2261 | dev: true 2262 | 2263 | /type-check@0.4.0: 2264 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2265 | engines: {node: '>= 0.8.0'} 2266 | dependencies: 2267 | prelude-ls: 1.2.1 2268 | dev: true 2269 | 2270 | /type-fest@0.20.2: 2271 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2272 | engines: {node: '>=10'} 2273 | dev: true 2274 | 2275 | /typed-array-length@1.0.4: 2276 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2277 | dependencies: 2278 | call-bind: 1.0.2 2279 | for-each: 0.3.3 2280 | is-typed-array: 1.1.10 2281 | dev: true 2282 | 2283 | /typescript@4.9.3: 2284 | resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} 2285 | engines: {node: '>=4.2.0'} 2286 | hasBin: true 2287 | dev: true 2288 | 2289 | /unbox-primitive@1.0.2: 2290 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2291 | dependencies: 2292 | call-bind: 1.0.2 2293 | has-bigints: 1.0.2 2294 | has-symbols: 1.0.3 2295 | which-boxed-primitive: 1.0.2 2296 | dev: true 2297 | 2298 | /update-browserslist-db@1.0.11(browserslist@4.21.5): 2299 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2300 | hasBin: true 2301 | peerDependencies: 2302 | browserslist: '>= 4.21.0' 2303 | dependencies: 2304 | browserslist: 4.21.5 2305 | escalade: 3.1.1 2306 | picocolors: 1.0.0 2307 | dev: true 2308 | 2309 | /uri-js@4.4.1: 2310 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2311 | dependencies: 2312 | punycode: 2.3.0 2313 | dev: true 2314 | 2315 | /vite@4.2.0(@types/node@18.16.1): 2316 | resolution: {integrity: sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==} 2317 | engines: {node: ^14.18.0 || >=16.0.0} 2318 | hasBin: true 2319 | peerDependencies: 2320 | '@types/node': '>= 14' 2321 | less: '*' 2322 | sass: '*' 2323 | stylus: '*' 2324 | sugarss: '*' 2325 | terser: ^5.4.0 2326 | peerDependenciesMeta: 2327 | '@types/node': 2328 | optional: true 2329 | less: 2330 | optional: true 2331 | sass: 2332 | optional: true 2333 | stylus: 2334 | optional: true 2335 | sugarss: 2336 | optional: true 2337 | terser: 2338 | optional: true 2339 | dependencies: 2340 | '@types/node': 18.16.1 2341 | esbuild: 0.17.17 2342 | postcss: 8.4.23 2343 | resolve: 1.22.2 2344 | rollup: 3.20.7 2345 | optionalDependencies: 2346 | fsevents: 2.3.2 2347 | dev: true 2348 | 2349 | /which-boxed-primitive@1.0.2: 2350 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2351 | dependencies: 2352 | is-bigint: 1.0.4 2353 | is-boolean-object: 1.1.2 2354 | is-number-object: 1.0.7 2355 | is-string: 1.0.7 2356 | is-symbol: 1.0.4 2357 | dev: true 2358 | 2359 | /which-typed-array@1.1.9: 2360 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 2361 | engines: {node: '>= 0.4'} 2362 | dependencies: 2363 | available-typed-arrays: 1.0.5 2364 | call-bind: 1.0.2 2365 | for-each: 0.3.3 2366 | gopd: 1.0.1 2367 | has-tostringtag: 1.0.0 2368 | is-typed-array: 1.1.10 2369 | dev: true 2370 | 2371 | /which@2.0.2: 2372 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2373 | engines: {node: '>= 8'} 2374 | hasBin: true 2375 | dependencies: 2376 | isexe: 2.0.0 2377 | dev: true 2378 | 2379 | /word-wrap@1.2.3: 2380 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2381 | engines: {node: '>=0.10.0'} 2382 | dev: true 2383 | 2384 | /wrappy@1.0.2: 2385 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2386 | dev: true 2387 | 2388 | /yallist@3.1.1: 2389 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2390 | dev: true 2391 | 2392 | /yallist@4.0.0: 2393 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2394 | dev: true 2395 | 2396 | /yocto-queue@0.1.0: 2397 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2398 | engines: {node: '>=10'} 2399 | dev: true 2400 | --------------------------------------------------------------------------------