├── vue ├── types │ └── index.d.ts ├── dev-types │ ├── shims-vue.d.ts │ └── shims-tsx.d.ts ├── .eslintrc.js ├── tsconfig.json ├── uplot-vue-example.html ├── yarn.lock ├── package.json ├── uplot-vue3-example.tsx ├── uplot-vue.js └── uplot-vue-example.tsx ├── svelte ├── index.js ├── uplot-svelte-example.html ├── uplot-svelte-example.js ├── .eslintrc.cjs ├── tsconfig.json ├── types │ └── index.d.ts ├── package.json ├── svelte-example.svelte ├── uplot-svelte.svelte └── yarn.lock ├── react ├── .eslintrc.js ├── tsconfig.json ├── uplot-react-example.html ├── types │ └── index.d.ts ├── uplot-react-simple.js ├── package.json ├── uplot-react.tsx ├── uplot-react-example.tsx └── yarn.lock ├── .prettierrc ├── .gitignore ├── .eslintrc.js ├── tsconfig.json ├── common ├── package.json └── index.ts ├── LICENSE ├── package.json ├── webpack.config.js └── README.md /vue/types/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'uplot-vue'; 2 | -------------------------------------------------------------------------------- /svelte/index.js: -------------------------------------------------------------------------------- 1 | import UplotSvelte from './uplot-svelte.svelte'; 2 | export default UplotSvelte; 3 | -------------------------------------------------------------------------------- /vue/dev-types/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | -------------------------------------------------------------------------------- /svelte/uplot-svelte-example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /react/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | settings: { 3 | react: {version: "detect"} 4 | }, 5 | extends: [ 6 | 'plugin:react/recommended' 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /svelte/uplot-svelte-example.js: -------------------------------------------------------------------------------- 1 | import App from './svelte-example.svelte'; 2 | 3 | const app = new App({ 4 | target: document.getElementById('root'), 5 | }); 6 | 7 | export default app; 8 | -------------------------------------------------------------------------------- /vue/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'plugin:vue/recommended' 4 | ], 5 | rules: { 6 | 'vue/component-definition-name-casing': 'off' 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /react/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | 6 | "esModuleInterop": true 7 | }, 8 | "exclude": ["./vue/**"] 9 | } 10 | -------------------------------------------------------------------------------- /react/uplot-react-example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "endOfLine": "lf", 3 | "semi": true, 4 | "trailingComma": "es5", 5 | "singleQuote": true, 6 | "bracketSpacing": true, 7 | "printWidth": 120, 8 | "tabWidth": 4, 9 | "arrowParens": "always" 10 | } 11 | -------------------------------------------------------------------------------- /vue/dev-types/shims-tsx.d.ts: -------------------------------------------------------------------------------- 1 | import Vue, {VNode} from 'vue' 2 | 3 | declare global { 4 | namespace JSX { 5 | interface Element extends VNode {} 6 | interface ElementClass extends Vue {} 7 | interface IntrinsicElements { 8 | [elem: string]: any 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "preserve", 5 | "jsxFactory": "VueTsxSupport", 6 | "typeRoots": ["node_modules/@types", "./dev-types", "./types"], 7 | 8 | "esModuleInterop": true, 9 | "noImplicitThis": true 10 | }, 11 | "exclude": ["./react/**"] 12 | } 13 | -------------------------------------------------------------------------------- /svelte/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'plugin:svelte/recommended' 4 | ], 5 | parserOptions: { 6 | extraFileExtensions: ['.svelte'] 7 | }, 8 | overrides: [ 9 | { 10 | files: ['*.svelte'], 11 | parser: 'svelte-eslint-parser', 12 | parserOptions: { 13 | parser: '@typescript-eslint/parser' 14 | } 15 | } 16 | ] 17 | }; 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | !.env.example 9 | 10 | # Build files 11 | build 12 | .svelte-kit 13 | package 14 | 15 | # Vite configs 16 | vite.config.js.timestamp-* 17 | vite.config.ts.timestamp-* 18 | 19 | # Log files 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | pnpm-debug.log* 24 | 25 | # Editor directories and files 26 | .idea 27 | .vscode 28 | *.suo 29 | *.ntvs* 30 | *.njsproj 31 | *.sln 32 | *.sw? 33 | -------------------------------------------------------------------------------- /react/types/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import uPlot from 'uplot'; 3 | 4 | export default function ({ 5 | options, 6 | data, 7 | target, 8 | onDelete, 9 | onCreate, 10 | resetScales, 11 | className 12 | }: { 13 | options: uPlot.Options; 14 | data: uPlot.AlignedData; 15 | target?: HTMLElement; 16 | onDelete?: (chart: uPlot) => void; 17 | onCreate?: (chart: uPlot) => void; 18 | resetScales?: boolean; 19 | className?: string; 20 | }): JSX.Element | null; 21 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parserOptions: { 3 | sourceType: "module", 4 | ecmaFeatures: { 5 | jsx: true 6 | } 7 | }, 8 | extends: [ 9 | 'plugin:@typescript-eslint/recommended' 10 | ], 11 | parserOptions: { 12 | parser: '@typescript-eslint/parser' 13 | }, 14 | rules: { 15 | '@typescript-eslint/no-empty-function': 'off', 16 | '@typescript-eslint/no-non-null-assertion': 'off', 17 | '@typescript-eslint/ban-ts-comment': 'off' 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vue/uplot-vue-example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 | 16 |
17 |
18 |
19 | 20 | -------------------------------------------------------------------------------- /vue/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | uplot-wrappers-common@../common/: 6 | version "1.0.0" 7 | 8 | uplot@^1.6.7: 9 | version "1.6.7" 10 | resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.6.7.tgz#d3faaec899791ee3fdf5d2835b19a33d9117566a" 11 | integrity sha512-6aYZmGywrHTqTgT1GfYHnU77xDUdutR1EJbVX4P9I45CGrtXN77S69/cgW2BXPL1lR4g6V6bh7ujJsFyvHw1hg== 12 | 13 | vue@^2.6.12: 14 | version "2.6.12" 15 | resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" 16 | integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "outDir": "./dist/", 5 | "module": "es2015", 6 | "target": "es6", 7 | "esModuleInterop": true, 8 | "sourceMap": true, 9 | "downlevelIteration": true, 10 | "moduleResolution": "node", 11 | "rootDir": ".", 12 | "forceConsistentCasingInFileNames": true, 13 | "noImplicitAny": true, 14 | "noImplicitReturns": true, 15 | "noImplicitThis": true, 16 | "noUnusedLocals": true, 17 | "noUnusedParameters": false, 18 | "strictNullChecks": true, 19 | "suppressImplicitAnyIndexErrors": true, 20 | "skipLibCheck": true, 21 | "paths": { 22 | "uplot-wrappers-common": ["common"] 23 | }, 24 | "lib": ["es2015", "dom"] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /common/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uplot-wrappers-common", 3 | "version": "1.2.4", 4 | "description": "Common code for React and Vue.js wrappers of uPlot", 5 | "author": "Sergey Kalinichev ", 6 | "license": "MIT", 7 | "homepage": "https://github.com/skalinichev/uplot-wrappers", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/skalinichev/uplot-wrappers.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/skalinichev/uplot-wrappers/issues" 14 | }, 15 | "engines": { 16 | "node": ">=8.10" 17 | }, 18 | "keywords": [ 19 | "Charts", 20 | "uPlot", 21 | "Wrapper" 22 | ], 23 | "private": true, 24 | "dependencies": {}, 25 | "devDependencies": { 26 | "uplot": "^1.6.32" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /svelte/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "outDir": "./dist/", 5 | "module": "es2015", 6 | "target": "es6", 7 | "esModuleInterop": true, 8 | "sourceMap": true, 9 | "downlevelIteration": true, 10 | "moduleResolution": "node", 11 | "rootDir": ".", 12 | "forceConsistentCasingInFileNames": true, 13 | "noImplicitAny": true, 14 | "noImplicitReturns": true, 15 | "noImplicitThis": true, 16 | "noUnusedLocals": true, 17 | "noUnusedParameters": false, 18 | "strictNullChecks": true, 19 | "suppressImplicitAnyIndexErrors": true, 20 | "skipLibCheck": true, 21 | "paths": { 22 | "uplot-wrappers-common": ["common"] 23 | }, 24 | "lib": ["es2015", "dom"] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /react/uplot-react-simple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import UplotReact from 'uplot-react'; 3 | import 'uplot/dist/uPlot.min.css'; 4 | 5 | const data = [ 6 | [0, 1, 2, 3, 4, 5], 7 | [0, 1, 2, 3, 4, 5], 8 | ]; 9 | 10 | const options = { 11 | width: 400, 12 | height: 300, 13 | scales: { 14 | x: { 15 | time: false, 16 | range: [-0.5, 5.5], 17 | }, 18 | y: {}, 19 | }, 20 | axes: [{}], 21 | series: [ 22 | {}, 23 | { 24 | stroke: 'blue', 25 | }, 26 | ], 27 | }; 28 | 29 | const Chart = () => {}} onDelete={(chart) => {}} />; 30 | 31 | function MuPlotChartJSExample() { 32 | return ( 33 |
34 | 35 |
36 | ); 37 | } 38 | 39 | export default MuPlotChartJSExample; 40 | -------------------------------------------------------------------------------- /svelte/types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { SvelteComponent } from "svelte"; 2 | import type uPlot from 'uplot'; 3 | 4 | declare const __propDef: { 5 | props: { 6 | options: uPlot.Options; 7 | data: uPlot.AlignedData; 8 | target?: HTMLDivElement | null | undefined; 9 | onDelete?: ((chart: uPlot) => void) | undefined; 10 | onCreate?: ((chart: uPlot) => void) | undefined; 11 | resetScales?: boolean | undefined; 12 | class?: string; 13 | }; 14 | events: { 15 | [evt: string]: CustomEvent; 16 | }; 17 | slots: {}; 18 | }; 19 | export type UplotSvelteProps = typeof __propDef.props; 20 | export type UplotSvelteEvents = typeof __propDef.events; 21 | export type UplotSvelteSlots = typeof __propDef.slots; 22 | export default class UplotSvelte extends SvelteComponent { 23 | } 24 | export {}; 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2021-present Sergey Kalinichev 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /vue/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uplot-vue", 3 | "version": "1.2.4", 4 | "description": "Vue.js wrapper for uPlot that allows you to work with charts declaratively inside your favorite framework", 5 | "author": "Sergey Kalinichev ", 6 | "license": "MIT", 7 | "homepage": "https://github.com/skalinichev/uplot-wrappers#readme", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/skalinichev/uplot-wrappers.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/skalinichev/uplot-wrappers/issues" 14 | }, 15 | "engines": { 16 | "node": ">=8.10" 17 | }, 18 | "keywords": [ 19 | "Charts", 20 | "uPlot", 21 | "Vue", 22 | "Wrapper" 23 | ], 24 | "files": [ 25 | "uplot-vue.*", 26 | "*.ts" 27 | ], 28 | "types": "index.d.ts", 29 | "main": "uplot-vue.js", 30 | "dependencies": {}, 31 | "peerDependencies": { 32 | "uplot": "^1.6.32" 33 | }, 34 | "devDependencies": { 35 | "uplot": "^1.6.32", 36 | "uplot-wrappers-common": "1.2.4", 37 | "vue": "^2.6.12", 38 | "vue3": "npm:vue@^3.0.11" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /react/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uplot-react", 3 | "version": "1.2.4", 4 | "description": "React wrapper for uPlot that allows you to work with charts declaratively inside your favorite framework", 5 | "author": "Sergey Kalinichev ", 6 | "license": "MIT", 7 | "homepage": "https://github.com/skalinichev/uplot-wrappers#readme", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/skalinichev/uplot-wrappers.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/skalinichev/uplot-wrappers/issues" 14 | }, 15 | "engines": { 16 | "node": ">=8.10" 17 | }, 18 | "keywords": [ 19 | "Charts", 20 | "uPlot", 21 | "React", 22 | "Wrapper" 23 | ], 24 | "files": [ 25 | "uplot-react.*", 26 | "*.ts" 27 | ], 28 | "main": "uplot-react.js", 29 | "types": "index.d.ts", 30 | "dependencies": {}, 31 | "peerDependencies": { 32 | "react": ">=16.8.6", 33 | "uplot": "^1.6.32" 34 | }, 35 | "devDependencies": { 36 | "@types/react": "^16.8.25", 37 | "@types/react-dom": "^16.8.5", 38 | "react": ">=16.8.6", 39 | "react-dom": ">=16.8.6", 40 | "uplot": "^1.6.32", 41 | "uplot-wrappers-common": "1.2.4" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /svelte/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uplot-svelte", 3 | "version": "1.2.4", 4 | "description": "Svelte wrapper for uPlot that allows you to work with charts declaratively inside your favorite framework", 5 | "author": "Kiril Panayotov ", 6 | "contributors": [ 7 | { 8 | "name": "Sergey Kalinichev", 9 | "email": "kalinichev.so.0@gmail.com" 10 | }, 11 | { 12 | "name": "Kiril Panayotov", 13 | "email": "contact@zakrok.dev" 14 | } 15 | ], 16 | "license": "MIT", 17 | "homepage": "https://github.com/skalinichev/uplot-wrappers#readme", 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/skalinichev/uplot-wrappers.git" 21 | }, 22 | "bugs": { 23 | "url": "https://github.com/skalinichev/uplot-wrappers/issues" 24 | }, 25 | "keywords": [ 26 | "Charts", 27 | "uPlot", 28 | "Svelte", 29 | "SvelteKit", 30 | "Wrapper" 31 | ], 32 | "files": [ 33 | "*.svelte", 34 | "*.ts", 35 | "*.js" 36 | ], 37 | "exports": { 38 | ".": { 39 | "types": "./index.d.ts", 40 | "uplot-svelte": "./index.js", 41 | "browser": { 42 | "default": "./index.js" 43 | }, 44 | "default": "./index.js" 45 | } 46 | }, 47 | "main": "index.js", 48 | "module": "index.js", 49 | "types": "./index.d.ts", 50 | "dependencies": {}, 51 | "peerDependencies": { 52 | "svelte": "^4.0.0", 53 | "uplot": "^1.6.32" 54 | }, 55 | "devDependencies": { 56 | "svelte": "^4.2.7", 57 | "svelte-loader": "^3.2.0", 58 | "svelte-preprocess": "^5.1.4", 59 | "uplot": "^1.6.32" 60 | }, 61 | "type": "module" 62 | } 63 | -------------------------------------------------------------------------------- /common/index.ts: -------------------------------------------------------------------------------- 1 | import uPlot from 'uplot'; 2 | 3 | type OptionsUpdateState = 'keep' | 'update' | 'create'; 4 | 5 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 6 | if (!Object.is) { 7 | // eslint-disable-next-line 8 | Object.defineProperty(Object, "is", {value: (x: any, y: any) => 9 | (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y) 10 | }); 11 | } 12 | 13 | export const optionsUpdateState = (_lhs: uPlot.Options, _rhs: uPlot.Options): OptionsUpdateState => { 14 | const {width: lhsWidth, height: lhsHeight, ...lhs} = _lhs; 15 | const {width: rhsWidth, height: rhsHeight, ...rhs} = _rhs; 16 | 17 | let state: OptionsUpdateState = 'keep'; 18 | if (lhsHeight !== rhsHeight || lhsWidth !== rhsWidth) { 19 | state = 'update'; 20 | } 21 | if (Object.keys(lhs).length !== Object.keys(rhs).length) { 22 | return 'create'; 23 | } 24 | for (const k of Object.keys(lhs)) { 25 | if (!Object.is(lhs[k], rhs[k])) { 26 | state = 'create'; 27 | break; 28 | } 29 | } 30 | return state; 31 | } 32 | 33 | export const dataMatch = (lhs: uPlot.AlignedData, rhs: uPlot.AlignedData): boolean => { 34 | if (lhs.length !== rhs.length) { 35 | return false; 36 | } 37 | return lhs.every((lhsOneSeries, seriesIdx) => { 38 | const rhsOneSeries = rhs[seriesIdx]; 39 | if (lhsOneSeries.length !== rhsOneSeries.length) { 40 | return false; 41 | } 42 | return lhsOneSeries.every((value: number, valueIdx: number) => value === rhsOneSeries[valueIdx]); 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /vue/uplot-vue3-example.tsx: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import {VNode, createApp} from 'vue'; 3 | 4 | import uPlot from 'uplot'; 5 | import 'uplot/dist/uPlot.min.css'; 6 | 7 | import UplotVue from 'uplot-vue'; 8 | 9 | const dummyPlugin = (): uPlot.Plugin => ({ 10 | hooks: { 11 | init(u: uPlot, opts: uPlot.Options) {void u; void opts;} 12 | } 13 | }); 14 | 15 | const app = createApp({ 16 | name: 'UplotVueExample', 17 | components: {uplotvue: UplotVue}, 18 | // @ts-ignore 19 | data() { 20 | return { 21 | options: { 22 | title: 'Chart', width: 400, height: 300, 23 | series: [{ 24 | label: 'Date' 25 | }, { 26 | label: '', 27 | points: {show: false}, 28 | stroke: 'blue', 29 | fill: 'blue' 30 | }], 31 | plugins: [dummyPlugin()], 32 | scales: {x: {time: false}} 33 | }, 34 | target: null as unknown as HTMLElement 35 | }; 36 | }, 37 | beforeMount() { 38 | // Initialize data inside mounted hook, to prevent Vue from adding watchers, otherwise performance becomes unbearable 39 | this.data = [[...new Array(100000)].map((_, i) => i), [...new Array(100000)].map((_, i) => i % 1000)]; 40 | }, 41 | mounted() { 42 | this.target = this.$refs.root as HTMLElement; 43 | setInterval(() => { 44 | const options = { 45 | ...this.options, 46 | title: (this.$refs.root as HTMLElement).id ? 'Rendered with template' : 'Rendered with function' 47 | }; 48 | const data: uPlot.AlignedData = [ 49 | [...this.data[0], this.data[0].length], 50 | [...this.data[1], this.data[0].length % 1000] 51 | ]; 52 | this.data = data; 53 | // Since we disabled reactivity for data above 54 | this.$forceUpdate(); 55 | this.options = options; 56 | }, 100); 57 | }, 58 | render(): VNode { 59 | // @ts-ignore 60 | return (
61 | console.log('Deleted from render function')} 69 | onCreate={(/* chart: uPlot */) => console.log('Created from render function')} 70 | /> 71 |
); 72 | } 73 | }); 74 | 75 | // Render from render function 76 | app.mount('#function-root'); 77 | -------------------------------------------------------------------------------- /svelte/svelte-example.svelte: -------------------------------------------------------------------------------- 1 | 36 | 37 |
38 |
39 | 40 | 47 | 54 |
55 |
56 | 65 | 74 | 75 | 76 |
77 | 78 |
79 |

Log:

80 | 81 | {#if flag} 82 | 83 | {/if} 84 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uplot-wrappers", 3 | "version": "1.2.4", 4 | "description": "React and Vue.js wrappers for uPlot", 5 | "author": "Sergey Kalinichev ", 6 | "license": "MIT", 7 | "homepage": "https://github.com/skalinichev/uplot-wrappers#readme", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/skalinichev/uplot-wrappers.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/skalinichev/uplot-wrappers/issues" 14 | }, 15 | "engines": { 16 | "node": ">=16.0" 17 | }, 18 | "keywords": [ 19 | "Charts", 20 | "uPlot", 21 | "React", 22 | "Vue", 23 | "Wrapper" 24 | ], 25 | "workspaces": { 26 | "packages": [ 27 | "common", 28 | "react", 29 | "vue", 30 | "svelte" 31 | ], 32 | "nohoist": [ 33 | "**/@types/**" 34 | ] 35 | }, 36 | "private": true, 37 | "scripts": { 38 | "build": "concurrently 'npm run buildReact' 'npm run buildVue' 'npm run buildSvelte'", 39 | "buildVue": "webpack --env=framework=vue", 40 | "buildReact": "webpack --env=framework=react", 41 | "buildSvelte": "webpack --env=framework=svelte", 42 | "buildProd": "concurrently 'npm run buildVue -- --env=mode=production' 'npm run buildReact -- --env=mode=production' 'npm run buildSvelte -- --env=mode=production'", 43 | "serveVue": "webpack serve --env=framework=vue --env=example=true", 44 | "serveVue3": "webpack serve --env=framework=vue --env=frameworkVersion=3 --env=example=true", 45 | "serveReact": "webpack serve --env=framework=react --env=example=true", 46 | "serveSvelte": "webpack serve --env=framework=svelte --env=example=true" 47 | }, 48 | "dependencies": {}, 49 | "devDependencies": { 50 | "@babel/core": "^7.13.10", 51 | "@babel/preset-env": "^7.13.10", 52 | "@babel/preset-react": "^7.12.13", 53 | "@typescript-eslint/eslint-plugin": "^4.18.0", 54 | "@typescript-eslint/parser": "^4.18.0", 55 | "@vue/babel-plugin-jsx": "^1.0.6", 56 | "@vue/babel-preset-jsx": "^1.2.4", 57 | "babel-loader": "^8.2.2", 58 | "concurrently": "^6.0.0", 59 | "copy-webpack-plugin": "^11.0.0", 60 | "css-loader": "^6.7.2", 61 | "eslint": "^7.22.0", 62 | "eslint-plugin-react": "^7.22.0", 63 | "eslint-plugin-svelte": "^2.38.0", 64 | "eslint-plugin-vue": "^7.7.0", 65 | "eslint-webpack-plugin": "^3.2.0", 66 | "html-webpack-plugin": "^5.5.0", 67 | "style-loader": "^3.3.1", 68 | "ts-loader": "^9.4.1", 69 | "typescript": "^4.2.3", 70 | "webpack": "^5.75.0", 71 | "webpack-cli": "^5.0.0", 72 | "webpack-dev-server": "^4.11.1" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /svelte/uplot-svelte.svelte: -------------------------------------------------------------------------------- 1 | 98 | 99 | {#if !target} 100 |
101 | {/if} 102 | -------------------------------------------------------------------------------- /vue/uplot-vue.js: -------------------------------------------------------------------------------- 1 | import Vue, { defineComponent, createVNode } from 'vue'; 2 | 3 | import uPlot from 'uplot'; 4 | 5 | import { optionsUpdateState, dataMatch } from 'uplot-wrappers-common'; 6 | 7 | export default (defineComponent ? defineComponent : (v) => v)({ 8 | name: 'UplotVue', 9 | props: { 10 | options: { type: Object, required: true }, 11 | data: { type: Array, required: true }, 12 | target: { 13 | validator(target) { 14 | return target == null || target instanceof HTMLElement || typeof target === 'function'; 15 | }, 16 | default: undefined, 17 | required: false, 18 | }, 19 | resetScales: { 20 | type: Boolean, 21 | required: false, 22 | default: true, 23 | }, 24 | class: { 25 | type: String, 26 | required: false, 27 | }, 28 | }, 29 | data() { 30 | // eslint-disable-next-line 31 | return { _chart: null }; 32 | }, 33 | watch: { 34 | options(options, prevOptions) { 35 | const optionsState = optionsUpdateState(prevOptions, options); 36 | if (!this._chart || optionsState === 'create') { 37 | this._destroy(); 38 | this._create(); 39 | } else if (optionsState === 'update') { 40 | this._chart.setSize({ width: options.width, height: options.height }); 41 | } 42 | }, 43 | target() { 44 | this._destroy(); 45 | this._create(); 46 | }, 47 | data(data, prevData) { 48 | if (!this._chart) { 49 | this._create(); 50 | } else if (!dataMatch(prevData, data)) { 51 | if (this.$props.resetScales) { 52 | this._chart.setData(data); 53 | } else { 54 | this._chart.setData(data, false); 55 | this._chart.redraw(); 56 | } 57 | } 58 | }, 59 | }, 60 | mounted() { 61 | this._create(); 62 | }, 63 | beforeUnmount() { 64 | this._destroy(); 65 | }, 66 | beforeDestroy() { 67 | this._destroy(); 68 | }, 69 | methods: { 70 | _destroy() { 71 | if (this._chart) { 72 | this.$emit('delete', this._chart); 73 | this._chart.destroy(); 74 | this._chart = null; 75 | } 76 | }, 77 | _create() { 78 | this._chart = new uPlot(this.$props.options, this.$props.data, this.$props.target || this.$refs.targetRef); 79 | this.$emit('create', this._chart); 80 | }, 81 | }, 82 | render(h) { 83 | return this.$props.target 84 | ? null 85 | : (createVNode ? createVNode : h)('div', { 86 | ref: 'targetRef', 87 | class: this.$props.class, 88 | }); 89 | }, 90 | }); 91 | -------------------------------------------------------------------------------- /vue/uplot-vue-example.tsx: -------------------------------------------------------------------------------- 1 | import Vue, {VNode, CreateElement} from 'vue'; 2 | 3 | import uPlot from 'uplot'; 4 | import 'uplot/dist/uPlot.min.css'; 5 | 6 | import UplotVue from 'uplot-vue'; 7 | 8 | const dummyPlugin = (): uPlot.Plugin => ({ 9 | hooks: { 10 | init(u: uPlot, opts: uPlot.Options) {void u; void opts;} 11 | } 12 | }); 13 | 14 | const App = Vue.extend< 15 | {options: uPlot.Options, data: uPlot.AlignedData, target: HTMLElement}, 16 | {onCreateFromTemplate: (chart: uPlot) => void, onDeleteFromTemplate: (chart: uPlot) => void}, 17 | Record, Record 18 | >({ 19 | name: 'UplotVueExample', 20 | components: {uplotvue: UplotVue}, 21 | // @ts-ignore 22 | data() { 23 | return { 24 | options: { 25 | title: 'Chart', width: 400, height: 300, 26 | series: [{ 27 | label: 'Date' 28 | }, { 29 | label: '', 30 | points: {show: false}, 31 | stroke: 'blue', 32 | fill: 'blue' 33 | }], 34 | plugins: [dummyPlugin()], 35 | scales: {x: {time: false}} 36 | }, 37 | target: null as unknown as HTMLElement 38 | }; 39 | }, 40 | beforeMount() { 41 | // Initialize data inside mounted hook, to prevent Vue from adding watchers, otherwise performance becomes unbearable 42 | this.data = [[...new Array(100000)].map((_, i) => i), [...new Array(100000)].map((_, i) => i % 1000)]; 43 | }, 44 | mounted() { 45 | this.target = this.$refs.root as HTMLElement; 46 | setInterval(() => { 47 | const options = { 48 | ...this.options, 49 | title: (this.$refs.root as HTMLElement).id ? 'Rendered with template' : 'Rendered with function' 50 | }; 51 | const data: uPlot.AlignedData = [ 52 | [...this.data[0], this.data[0].length], 53 | [...this.data[1], this.data[0].length % 1000] 54 | ]; 55 | this.data = data; 56 | // Since we disabled reactivity for data above 57 | this.$forceUpdate(); 58 | this.options = options; 59 | }, 100); 60 | }, 61 | methods: { 62 | onCreateFromTemplate(/* chart: uPlot */) { 63 | console.log('Created from template'); 64 | }, 65 | onDeleteFromTemplate(/* chart: uPlot */) { 66 | console.log('Deleted from template'); 67 | } 68 | }, 69 | // eslint-disable-next-line 70 | render(h: CreateElement): VNode { 71 | // @ts-ignore 72 | return (
73 | console.log('Deleted from render function')} 82 | onCreate={(/* chart: uPlot */) => console.log('Created from render function')} 83 | /> 84 |
); 85 | } 86 | }); 87 | 88 | // Render from template 89 | // @ts-ignore 90 | new App({el: '#template-root', render: null}); 91 | // Render from render function 92 | new App({el: '#function-root'}); 93 | -------------------------------------------------------------------------------- /react/uplot-react.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useEffect, useRef } from 'react'; 2 | 3 | import uPlot from 'uplot'; 4 | 5 | import { optionsUpdateState, dataMatch } from 'uplot-wrappers-common'; 6 | 7 | export default function UplotReact({ 8 | options, 9 | data, 10 | target, 11 | onDelete, 12 | onCreate, 13 | resetScales = true, 14 | className 15 | }: { 16 | options: uPlot.Options; 17 | data: uPlot.AlignedData; 18 | // eslint-disable-next-line 19 | target?: HTMLElement | ((self: uPlot, init: Function) => void); 20 | onDelete?: (chart: uPlot) => void; 21 | onCreate?: (chart: uPlot) => void; 22 | resetScales?: boolean; 23 | className?: string; 24 | }): JSX.Element | null { 25 | const chartRef = useRef(null); 26 | const targetRef = useRef(null); 27 | const propOptionsRef = useRef(options); 28 | const propTargetRef = useRef(target); 29 | const propDataRef = useRef(data); 30 | const onCreateRef = useRef(onCreate); 31 | const onDeleteRef = useRef(onDelete); 32 | 33 | useEffect(() => { 34 | onCreateRef.current = onCreate; 35 | onDeleteRef.current = onDelete; 36 | }); 37 | 38 | const destroy = useCallback((chart: uPlot | null) => { 39 | if (chart) { 40 | onDeleteRef.current?.(chart); 41 | chart.destroy(); 42 | chartRef.current = null; 43 | } 44 | }, []); 45 | const create = useCallback(() => { 46 | const newChart = new uPlot( 47 | propOptionsRef.current, 48 | propDataRef.current, 49 | propTargetRef.current || (targetRef.current as HTMLDivElement) 50 | ); 51 | chartRef.current = newChart; 52 | onCreateRef.current?.(newChart); 53 | }, []); 54 | 55 | useEffect(() => { 56 | create(); 57 | return () => { 58 | destroy(chartRef.current); 59 | }; 60 | }, [create, destroy]); 61 | 62 | useEffect(() => { 63 | if (propOptionsRef.current !== options) { 64 | const optionsState = optionsUpdateState(propOptionsRef.current, options); 65 | propOptionsRef.current = options; 66 | if (!chartRef.current || optionsState === 'create') { 67 | destroy(chartRef.current); 68 | create(); 69 | } else if (optionsState === 'update') { 70 | chartRef.current.setSize({ 71 | width: options.width, 72 | height: options.height, 73 | }); 74 | } 75 | } 76 | }, [options, create, destroy]); 77 | 78 | useEffect(() => { 79 | if (propDataRef.current !== data) { 80 | if (!chartRef.current) { 81 | propDataRef.current = data; 82 | create(); 83 | } else if (!dataMatch(propDataRef.current, data)) { 84 | if (resetScales) { 85 | chartRef.current.setData(data, true); 86 | } else { 87 | chartRef.current.setData(data, false); 88 | chartRef.current.redraw(); 89 | } 90 | } 91 | propDataRef.current = data; 92 | } 93 | }, [data, resetScales, create]); 94 | 95 | useEffect(() => { 96 | if (propTargetRef.current !== target) { 97 | propTargetRef.current = target; 98 | create(); 99 | } 100 | 101 | return () => destroy(chartRef.current); 102 | }, [target, create, destroy]); 103 | 104 | return target ? null :
; 105 | } 106 | -------------------------------------------------------------------------------- /react/uplot-react-example.tsx: -------------------------------------------------------------------------------- 1 | import React, {useMemo, useState} from 'react'; 2 | import ReactDOM, {unstable_batchedUpdates} from 'react-dom'; 3 | 4 | import uPlot from 'uplot'; 5 | import 'uplot/dist/uPlot.min.css'; 6 | 7 | import UPlotReact from './uplot-react'; 8 | 9 | const root: HTMLElement = document.querySelector('#root')!; 10 | 11 | const dummyPlugin = (): uPlot.Plugin => ({ 12 | hooks: { 13 | init(u: uPlot, opts: uPlot.Options) {void u; void opts;} 14 | } 15 | }); 16 | 17 | class ClassApp extends React.Component< 18 | Record, 19 | {options: uPlot.Options, data: uPlot.AlignedData} 20 | > { 21 | constructor(args: Record) { 22 | super(args); 23 | this.state = { 24 | options: { 25 | title: 'Chart', 26 | width: 400, 27 | height: 300, 28 | series: [{ 29 | label: 'Date' 30 | }, { 31 | label: '', 32 | points: {show: false}, 33 | stroke: 'blue', 34 | fill: 'blue' 35 | }], 36 | scales: {x: {time: false}}, 37 | plugins: [dummyPlugin()] 38 | }, 39 | data: [[...new Array(100000)].map((_, i) => i), [...new Array(100000)].map((_, i) => i % 1000)] 40 | }; 41 | setInterval(() => { 42 | const options = { 43 | ...this.state.options, 44 | title: 'Rendered with class' 45 | }; 46 | const data: uPlot.AlignedData = [ 47 | [...this.state.data[0], this.state.data[0].length], 48 | [...this.state.data[1], this.state.data[0].length % 1000] 49 | ]; 50 | this.setState({data, options}); 51 | }, 100); 52 | } 53 | render(): React.ReactNode { 54 | return ( console.log('Deleted from class')} 61 | onCreate={(/* chart: uPlot */) => console.log('Created from class')} 62 | />); 63 | } 64 | } 65 | 66 | const HooksApp = () => { 67 | const [options, setOptions] = useState(useMemo(() => ({ 68 | title: 'Chart', 69 | width: 400, 70 | height: 300, 71 | series: [{ 72 | label: 'Date' 73 | }, { 74 | label: '', 75 | points: {show: false}, 76 | stroke: 'blue', 77 | fill: 'blue' 78 | }], 79 | plugins: [dummyPlugin()], 80 | scales: {x: {time: false}} 81 | }), [])); 82 | const initialState = useMemo(() => 83 | ([[...new Array(100000)].map((_, i) => i), [...new Array(100000)].map((_, i) => i % 1000)]) 84 | , []); 85 | const [data, setData] = useState(initialState); 86 | 87 | setTimeout(() => { 88 | const newOptions = { 89 | ...options, 90 | title: 'Rendered with hooks' 91 | }; 92 | const newData: uPlot.AlignedData = [ 93 | [...data[0], data[0].length], 94 | [...data[1], data[0].length % 1000] 95 | ]; 96 | 97 | unstable_batchedUpdates(() => { 98 | setData(newData); 99 | setOptions(newOptions); 100 | }); 101 | }, 100); 102 | return ( console.log('Deleted from hooks')} 108 | onCreate={(/* chart: uPlot */) => console.log('Created from hooks')} 109 | />); 110 | } 111 | 112 | ReactDOM.render( 113 | 114 | 115 | 116 | , 117 | root 118 | ); 119 | -------------------------------------------------------------------------------- /react/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/prop-types@*": 6 | version "15.7.3" 7 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 8 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 9 | 10 | "@types/react-dom@^16.8.5": 11 | version "16.9.12" 12 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.12.tgz#55cd6b17e73922edb9545e5355a0016c1734e6f4" 13 | integrity sha512-i7NPZZpPte3jtVOoW+eLB7G/jsX5OM6GqQnH+lC0nq0rqwlK0x8WcMEvYDgFWqWhWMlTltTimzdMax6wYfZssA== 14 | dependencies: 15 | "@types/react" "^16" 16 | 17 | "@types/react@^16", "@types/react@^16.8.25": 18 | version "16.14.5" 19 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.5.tgz#2c39b5cadefaf4829818f9219e5e093325979f4d" 20 | integrity sha512-YRRv9DNZhaVTVRh9Wmmit7Y0UFhEVqXqCSw3uazRWMxa2x85hWQZ5BN24i7GXZbaclaLXEcodEeIHsjBA8eAMw== 21 | dependencies: 22 | "@types/prop-types" "*" 23 | "@types/scheduler" "*" 24 | csstype "^3.0.2" 25 | 26 | "@types/scheduler@*": 27 | version "0.16.1" 28 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" 29 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== 30 | 31 | csstype@^3.0.2: 32 | version "3.0.7" 33 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" 34 | integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== 35 | 36 | "js-tokens@^3.0.0 || ^4.0.0": 37 | version "4.0.0" 38 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 39 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 40 | 41 | loose-envify@^1.1.0, loose-envify@^1.4.0: 42 | version "1.4.0" 43 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 44 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 45 | dependencies: 46 | js-tokens "^3.0.0 || ^4.0.0" 47 | 48 | object-assign@^4.1.1: 49 | version "4.1.1" 50 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 51 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 52 | 53 | prop-types@^15.6.2: 54 | version "15.7.2" 55 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 56 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 57 | dependencies: 58 | loose-envify "^1.4.0" 59 | object-assign "^4.1.1" 60 | react-is "^16.8.1" 61 | 62 | react-dom@^16.8.6: 63 | version "16.14.0" 64 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" 65 | integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== 66 | dependencies: 67 | loose-envify "^1.1.0" 68 | object-assign "^4.1.1" 69 | prop-types "^15.6.2" 70 | scheduler "^0.19.1" 71 | 72 | react-is@^16.8.1: 73 | version "16.13.1" 74 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 75 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 76 | 77 | react@^16.8.6: 78 | version "16.14.0" 79 | resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" 80 | integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== 81 | dependencies: 82 | loose-envify "^1.1.0" 83 | object-assign "^4.1.1" 84 | prop-types "^15.6.2" 85 | 86 | scheduler@^0.19.1: 87 | version "0.19.1" 88 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" 89 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== 90 | dependencies: 91 | loose-envify "^1.1.0" 92 | object-assign "^4.1.1" 93 | 94 | uplot-wrappers-common@../common/: 95 | version "1.0.0" 96 | 97 | uplot@^1.6.7: 98 | version "1.6.7" 99 | resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.6.7.tgz#d3faaec899791ee3fdf5d2835b19a33d9117566a" 100 | integrity sha512-6aYZmGywrHTqTgT1GfYHnU77xDUdutR1EJbVX4P9I45CGrtXN77S69/cgW2BXPL1lR4g6V6bh7ujJsFyvHw1hg== 101 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const path = require('path'); 4 | 5 | const CopyPlugin = require('copy-webpack-plugin'); 6 | const ESLintPlugin = require('eslint-webpack-plugin'); 7 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 8 | const sveltePreprocess = require('svelte-preprocess'); 9 | 10 | module.exports = (env) => { 11 | const { framework, example, frameworkVersion = '' } = env; 12 | const vue3 = frameworkVersion == '3'; 13 | const svelte = framework === 'svelte'; 14 | const entry = { 15 | [`uplot-${framework}`]: `./${framework}/uplot-${framework}`, 16 | }; 17 | if (example) { 18 | entry[`uplot-${framework}-example`] = `./${framework}/uplot-${framework}${frameworkVersion}-example`; 19 | } 20 | const targets = example || svelte ? 'last 1 chrome version' : ['ie 11', 'last 1 chrome version']; 21 | const webpackPluginConfig = example 22 | ? [new HtmlWebpackPlugin({ scriptLoading: 'defer', template: `${framework}/uplot-${framework}-example.html` })] 23 | : []; 24 | const svelteFilesToCopy = svelte 25 | ? [ 26 | { from: `${framework}/uplot-svelte.svelte`, force: true }, 27 | { from: `${framework}/index.js`, force: true }, 28 | ] 29 | : []; 30 | 31 | return { 32 | mode: env.mode ? env.mode : 'development', 33 | devtool: 'source-map', 34 | cache: false, 35 | optimization: { 36 | minimize: env.mode === 'production', 37 | }, 38 | entry, 39 | output: { 40 | filename: `[name]${env.mode === 'production' ? '.min' : ''}.js`, 41 | libraryTarget: 'umd', 42 | path: path.join(__dirname, framework, 'dist'), 43 | library: `Uplot${framework[0].toUpperCase()}${framework.slice(1)}`, 44 | libraryExport: 'default', 45 | globalObject: 'this', 46 | }, 47 | module: { 48 | rules: [ 49 | { 50 | test: /\.tsx?$/, 51 | exclude: [/node_modules/, path.join(__dirname, 'vue')], 52 | use: [ 53 | { 54 | loader: 'babel-loader', 55 | options: { presets: ['@babel/preset-react', ['@babel/preset-env', { targets }]] }, 56 | }, 57 | { 58 | loader: 'ts-loader', 59 | options: { configFile: path.join(__dirname, 'react', 'tsconfig.json'), context: __dirname }, 60 | }, 61 | ], 62 | }, 63 | { 64 | test: /\.tsx/, 65 | exclude: [/node_modules/, path.join(__dirname, 'react')], 66 | use: [ 67 | { 68 | loader: 'babel-loader', 69 | options: { 70 | presets: [ 71 | ['@babel/preset-env', { targets }], 72 | ...(!vue3 ? ['@vue/babel-preset-jsx'] : []), 73 | ], 74 | plugins: vue3 ? ['@vue/babel-plugin-jsx'] : [], 75 | }, 76 | }, 77 | { 78 | loader: 'ts-loader', 79 | options: { configFile: path.join(__dirname, 'vue', 'tsconfig.json'), context: __dirname }, 80 | }, 81 | ], 82 | }, 83 | { 84 | test: /\.js$/, 85 | use: [ 86 | { 87 | loader: 'babel-loader', 88 | options: { 89 | presets: [['@babel/preset-env', svelte ? { exclude: ['transform-regenerator'] } : {}]], 90 | plugins: ['@babel/plugin-proposal-class-properties'], 91 | }, 92 | }, 93 | ], 94 | }, 95 | { 96 | test: /\.css$/, 97 | use: ['style-loader', 'css-loader'], 98 | }, 99 | 100 | { 101 | test: /\.svelte$/, 102 | use: { 103 | loader: 'svelte-loader', 104 | options: { 105 | preprocess: sveltePreprocess({ 106 | babel: { 107 | presets: [ 108 | [ 109 | '@babel/preset-env', 110 | { 111 | loose: true, 112 | modules: false, 113 | targets, 114 | }, 115 | ], 116 | ], 117 | }, 118 | }), 119 | }, 120 | }, 121 | }, 122 | ], 123 | }, 124 | plugins: [ 125 | new ESLintPlugin({ extensions: ['ts', 'tsx'] }), 126 | new CopyPlugin({ 127 | patterns: [ 128 | { from: `${framework}/types/index.d.ts`, force: true }, 129 | { from: `${framework}/package.json`, force: true }, 130 | { from: 'README.md', force: true }, 131 | { from: 'LICENSE', force: true }, 132 | ...svelteFilesToCopy, 133 | ], 134 | }), 135 | ...webpackPluginConfig, 136 | ], 137 | resolve: { 138 | extensions: ['.ts', '.tsx', '.js', '.svelte'], 139 | alias: { 140 | vue: vue3 ? 'vue3/dist/vue.esm-bundler.js' : 'vue/dist/vue.js', 141 | svelte: path.resolve('node_modules', 'svelte/src/runtime'), 142 | }, 143 | conditionNames: ['svelte', 'browser', 'import'], 144 | }, 145 | devServer: { 146 | static: { 147 | directory: path.join(__dirname, framework, 'dist'), 148 | }, 149 | compress: true, 150 | historyApiFallback: true, 151 | hot: true, 152 | open: true, 153 | port: 8080, 154 | }, 155 | externals: example 156 | ? {} 157 | : { 158 | react: { 159 | amd: 'react', 160 | commonjs: 'react', 161 | commonjs2: 'react', 162 | root: 'React', 163 | }, 164 | 'react-dom': { 165 | amd: 'react-dom', 166 | commonjs: 'react-dom', 167 | commonjs2: 'react-dom', 168 | root: 'ReactDOM', 169 | }, 170 | uplot: { 171 | amd: 'uplot', 172 | commonjs: 'uplot', 173 | commonjs2: 'uplot', 174 | root: 'uPlot', 175 | }, 176 | vue: { 177 | amd: 'vue', 178 | commonjs: 'vue', 179 | commonjs2: 'vue', 180 | root: 'Vue', 181 | }, 182 | }, 183 | }; 184 | }; 185 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 🌐 Language 5 |
6 |
7 | English 8 | | 简体中文 9 | | 繁體中文 10 | | 日本語 11 | | 한국어 12 | | हिन्दी 13 | | ไทย 14 | | Français 15 | | Deutsch 16 | | Español 17 | | Italiano 18 | | Русский 19 | | Português 20 | | Nederlands 21 | | Polski 22 | | العربية 23 | | فارسی 24 | | Türkçe 25 | | Tiếng Việt 26 | | Bahasa Indonesia 27 | | অসমীয়া 29 |
30 |
31 |
32 | 33 | # uPlot wrappers 34 | 35 | A collection of [uPlot](https://github.com/leeoniya/uPlot 'uPlot') wrappers that allow you to work with charts declaratively inside your favorite framework. 36 | 37 | **Table of Contents** 38 | 39 | - [Motivation](#motivation) 40 | - [Getting started](#getting-started) 41 | - [React](#react) 42 | - [Installation](#installation) 43 | - [How to use](#how-to-use) 44 | - [Demo](#demo) 45 | - [Vue.js](#vuejs) 46 | - [Installation](#installation-1) 47 | - [How to use](#how-to-use-1) 48 | - [Demo](#demo-1) 49 | - [Svelte](#svelte) 50 | - [Installation](#installation-2) 51 | - [How to use](#how-to-use-2) 52 | - [Demo](#demo-2) 53 | - [Documentation](#documentation) 54 | 55 | # Motivation 56 | 57 | While several other uPlot wrappers already exist, all of them have one of the following limitations: 58 | 59 | 1. They create uPlot instance once, during component mount phase, and expect you to handle all the update logic yourself. 60 | 2. They recreate uPlot instance anew whenever the props change, even if the instance can be updated to reflect the changes. 61 | 62 | In comparison this library tries it's best not to recreate the uPlot instance once the props change. Instead of recreation it tries to use uPlot public API to keep it up to date with the props. 63 | 64 | # Getting started 65 | 66 | See [React](#react), [Vue.js](#vuejs) or [Svelte](#svelte) sections below depending on what framework you're using. 67 | Also see API [documentation](#documentation) common to all frameworks. 68 | 69 | # React 70 | 71 | ## Installation 72 | 73 | Install uplot-react package with uplot dependency: 74 | 75 | - Using npm: `$ npm install uplot-react uplot` 76 | - Using yarn: `$ yarn add uplot-react uplot` 77 | 78 | You also need React 16.8 or above to be installed inside your project tree. 79 | 80 | ## How to use 81 | 82 | ```javascript 83 | import React from 'react'; 84 | import uPlot from 'uplot'; 85 | import UplotReact from 'uplot-react'; 86 | import 'uplot/dist/uPlot.min.css'; 87 | 88 | const Chart = () => ( 89 | {}} onDelete={(chart) => {}} /> 90 | ); 91 | ``` 92 | 93 | ## Demo 94 | 95 | See the [live demo](https://codesandbox.io/s/uplot-react-6ykeb?file=/react/uplot-react-example.tsx 'live demo') 96 | 97 | You can also run the demo app locally: 98 | 99 | `$ git clone https://github.com/skalinichev/uplot-wrappers.git` 100 | 101 | `$ cd uplot-wrappers && yarn install && yarn run serveReact` 102 | 103 | ### ReactJS Demo 104 | 105 | simple example for getting started quickly. 106 | [ReactJS Demo](https://github.com/skalinichev/uplot-wrappers/blob/master/react/uplot-react-simple.js 'ReactJS Demo') 107 | 108 | ![image](https://user-images.githubusercontent.com/62290677/233559830-5dea130c-11a3-434e-9cce-d4f00dc9bea8.png) 109 | 110 | # Vue.js 111 | 112 | ## Installation 113 | 114 | Install uplot-vue package with uplot dependency: 115 | 116 | - Using npm: `$ npm install uplot-vue uplot` 117 | - Using yarn: `$ yarn add uplot-vue uplot` 118 | 119 | You also need Vue.js to be installed inside your project tree (both 2.6 and 3.x versions are supported). 120 | 121 | ## How to use 122 | 123 | Using template 124 | 125 | ```html 126 | 129 | 143 | ``` 144 | 145 | Using JSX 146 | 147 | ```javascript 148 | // Vue.js 2 149 | import Vue from 'vue'; 150 | // Vue.js 3 151 | import { createApp } from 'vue'; 152 | import uPlot from 'uplot'; 153 | import UplotVue from 'uplot-vue'; 154 | import 'uplot/dist/uPlot.min.css'; 155 | 156 | { 157 | ..., 158 | render() { 159 | return ( 160 | {}} 165 | onCreate={(chart) => {}} 166 | /> 167 | ); 168 | } 169 | } 170 | ``` 171 | 172 | > Note: Property changes by mutation are not supported due to [Vue limitation](https://github.com/vuejs/vue/issues/2164) You have to create a copy of the property, i.e. replace it instead, see an [example](https://github.com/skalinichev/uplot-wrappers/blob/master/vue/uplot-vue-example.tsx#L52) for the general idea. 173 | 174 | ## Demo 175 | 176 | See the [Vue.js 2 live demo](https://codesandbox.io/s/uplot-vue-khi4m?file=/vue/uplot-vue-example.tsx 'Vue.js 2 live demo') 177 | 178 | You can also run the demo app locally: 179 | 180 | `$ git clone https://github.com/skalinichev/uplot-wrappers.git` 181 | 182 | `$ cd uplot-wrappers && yarn install` 183 | 184 | Vue.js 2: 185 | 186 | `$ yarn run serveVue` 187 | 188 | Vue.js 3: 189 | 190 | `$ yarn run serveVue3` 191 | 192 | # Svelte 193 | 194 | ## Installation 195 | 196 | Install uplot-svelte package with uplot dependency: 197 | 198 | - Using npm: `$ npm install uplot-svelte uplot` 199 | - Using yarn: `$ yarn add uplot-svelte uplot` 200 | 201 | You also need Svelte to be installed inside your project tree. UplotSvelte component is compatible with Svelte and SvelteKit projects. 202 | 203 | ## How to use 204 | 205 | ```sveltehtml 206 | 213 | 214 | 215 | ``` 216 | 217 | ## Demo 218 | 219 | See the example [Svelte example](https://github.com/skalinichev/uplot-wrappers/blob/master/svelte/svelte-example.svelte 'Svelte example') 220 | 221 | You can also run the demo app locally: 222 | 223 | `$ git clone https://github.com/skalinichev/uplot-wrappers.git` 224 | 225 | `$ cd uplot-wrappers && yarn install && yarn run serveSvelte` 226 | 227 | # Documentation 228 | 229 | | Parameter | Requirement | Description | 230 | | :-------------: | :---------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 231 | | options | required | Options for uPlot. Passed as the first argument to uPlot constructor: `new uPlot(options)` | 232 | | data | required | Data for uPlot. Passed as the second argument to uPlot constructor: `new uPlot(options, data)` | 233 | | target | optional | Target html element for uPlot. Passed as the third argument to uPlot constructor: `new uPlot(options, data, target)` A new div target element will be created automatically if none is passed in the props | 234 | | onCreate | optional | Callback function, invoked upon uPlot instance creation or recreation | 235 | | onDelete | optional | Callback function, invoked before uPlot instance gets destroyed, either because the props has changed so much it's impossible to update the chart or because the component is about to be unmounted | 236 | | className/class | optional | A class name passed over to the automatically created target div element. Class name is ignored when the 'target' prop is used. | 237 | | resetScales | optional | Flag controlling whether to reset the scales on data change. Defaults to true. | 238 | -------------------------------------------------------------------------------- /svelte/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.1": 6 | version "2.3.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" 8 | integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.5" 11 | "@jridgewell/trace-mapping" "^0.3.24" 12 | 13 | "@esbuild/aix-ppc64@0.20.2": 14 | version "0.20.2" 15 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" 16 | integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== 17 | 18 | "@esbuild/android-arm64@0.20.2": 19 | version "0.20.2" 20 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" 21 | integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== 22 | 23 | "@esbuild/android-arm@0.20.2": 24 | version "0.20.2" 25 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" 26 | integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== 27 | 28 | "@esbuild/android-x64@0.20.2": 29 | version "0.20.2" 30 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" 31 | integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== 32 | 33 | "@esbuild/darwin-arm64@0.20.2": 34 | version "0.20.2" 35 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" 36 | integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== 37 | 38 | "@esbuild/darwin-x64@0.20.2": 39 | version "0.20.2" 40 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" 41 | integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== 42 | 43 | "@esbuild/freebsd-arm64@0.20.2": 44 | version "0.20.2" 45 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" 46 | integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== 47 | 48 | "@esbuild/freebsd-x64@0.20.2": 49 | version "0.20.2" 50 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" 51 | integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== 52 | 53 | "@esbuild/linux-arm64@0.20.2": 54 | version "0.20.2" 55 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" 56 | integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== 57 | 58 | "@esbuild/linux-arm@0.20.2": 59 | version "0.20.2" 60 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" 61 | integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== 62 | 63 | "@esbuild/linux-ia32@0.20.2": 64 | version "0.20.2" 65 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" 66 | integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== 67 | 68 | "@esbuild/linux-loong64@0.20.2": 69 | version "0.20.2" 70 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" 71 | integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== 72 | 73 | "@esbuild/linux-mips64el@0.20.2": 74 | version "0.20.2" 75 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" 76 | integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== 77 | 78 | "@esbuild/linux-ppc64@0.20.2": 79 | version "0.20.2" 80 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" 81 | integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== 82 | 83 | "@esbuild/linux-riscv64@0.20.2": 84 | version "0.20.2" 85 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" 86 | integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== 87 | 88 | "@esbuild/linux-s390x@0.20.2": 89 | version "0.20.2" 90 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" 91 | integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== 92 | 93 | "@esbuild/linux-x64@0.20.2": 94 | version "0.20.2" 95 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" 96 | integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== 97 | 98 | "@esbuild/netbsd-x64@0.20.2": 99 | version "0.20.2" 100 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" 101 | integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== 102 | 103 | "@esbuild/openbsd-x64@0.20.2": 104 | version "0.20.2" 105 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" 106 | integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== 107 | 108 | "@esbuild/sunos-x64@0.20.2": 109 | version "0.20.2" 110 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" 111 | integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== 112 | 113 | "@esbuild/win32-arm64@0.20.2": 114 | version "0.20.2" 115 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" 116 | integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== 117 | 118 | "@esbuild/win32-ia32@0.20.2": 119 | version "0.20.2" 120 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" 121 | integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== 122 | 123 | "@esbuild/win32-x64@0.20.2": 124 | version "0.20.2" 125 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" 126 | integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== 127 | 128 | "@jridgewell/gen-mapping@^0.3.5": 129 | version "0.3.5" 130 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 131 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 132 | dependencies: 133 | "@jridgewell/set-array" "^1.2.1" 134 | "@jridgewell/sourcemap-codec" "^1.4.10" 135 | "@jridgewell/trace-mapping" "^0.3.24" 136 | 137 | "@jridgewell/resolve-uri@^3.1.0": 138 | version "3.1.2" 139 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 140 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 141 | 142 | "@jridgewell/set-array@^1.2.1": 143 | version "1.2.1" 144 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 145 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 146 | 147 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": 148 | version "1.4.15" 149 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 150 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 151 | 152 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": 153 | version "0.3.25" 154 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 155 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 156 | dependencies: 157 | "@jridgewell/resolve-uri" "^3.1.0" 158 | "@jridgewell/sourcemap-codec" "^1.4.14" 159 | 160 | "@nodelib/fs.scandir@2.1.5": 161 | version "2.1.5" 162 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 163 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 164 | dependencies: 165 | "@nodelib/fs.stat" "2.0.5" 166 | run-parallel "^1.1.9" 167 | 168 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 169 | version "2.0.5" 170 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 171 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 172 | 173 | "@nodelib/fs.walk@^1.2.3": 174 | version "1.2.8" 175 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 176 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 177 | dependencies: 178 | "@nodelib/fs.scandir" "2.1.5" 179 | fastq "^1.6.0" 180 | 181 | "@polka/url@^1.0.0-next.24": 182 | version "1.0.0-next.25" 183 | resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" 184 | integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== 185 | 186 | "@rollup/rollup-android-arm-eabi@4.17.2": 187 | version "4.17.2" 188 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz#1a32112822660ee104c5dd3a7c595e26100d4c2d" 189 | integrity sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ== 190 | 191 | "@rollup/rollup-android-arm64@4.17.2": 192 | version "4.17.2" 193 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz#5aeef206d65ff4db423f3a93f71af91b28662c5b" 194 | integrity sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw== 195 | 196 | "@rollup/rollup-darwin-arm64@4.17.2": 197 | version "4.17.2" 198 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz#6b66aaf003c70454c292cd5f0236ebdc6ffbdf1a" 199 | integrity sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw== 200 | 201 | "@rollup/rollup-darwin-x64@4.17.2": 202 | version "4.17.2" 203 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz#f64fc51ed12b19f883131ccbcea59fc68cbd6c0b" 204 | integrity sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ== 205 | 206 | "@rollup/rollup-linux-arm-gnueabihf@4.17.2": 207 | version "4.17.2" 208 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz#1a7641111be67c10111f7122d1e375d1226cbf14" 209 | integrity sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A== 210 | 211 | "@rollup/rollup-linux-arm-musleabihf@4.17.2": 212 | version "4.17.2" 213 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz#c93fd632923e0fee25aacd2ae414288d0b7455bb" 214 | integrity sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg== 215 | 216 | "@rollup/rollup-linux-arm64-gnu@4.17.2": 217 | version "4.17.2" 218 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz#fa531425dd21d058a630947527b4612d9d0b4a4a" 219 | integrity sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A== 220 | 221 | "@rollup/rollup-linux-arm64-musl@4.17.2": 222 | version "4.17.2" 223 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz#8acc16f095ceea5854caf7b07e73f7d1802ac5af" 224 | integrity sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA== 225 | 226 | "@rollup/rollup-linux-powerpc64le-gnu@4.17.2": 227 | version "4.17.2" 228 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz#94e69a8499b5cf368911b83a44bb230782aeb571" 229 | integrity sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ== 230 | 231 | "@rollup/rollup-linux-riscv64-gnu@4.17.2": 232 | version "4.17.2" 233 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz#7ef1c781c7e59e85a6ce261cc95d7f1e0b56db0f" 234 | integrity sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg== 235 | 236 | "@rollup/rollup-linux-s390x-gnu@4.17.2": 237 | version "4.17.2" 238 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz#f15775841c3232fca9b78cd25a7a0512c694b354" 239 | integrity sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g== 240 | 241 | "@rollup/rollup-linux-x64-gnu@4.17.2": 242 | version "4.17.2" 243 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz#b521d271798d037ad70c9f85dd97d25f8a52e811" 244 | integrity sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ== 245 | 246 | "@rollup/rollup-linux-x64-musl@4.17.2": 247 | version "4.17.2" 248 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz#9254019cc4baac35800991315d133cc9fd1bf385" 249 | integrity sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q== 250 | 251 | "@rollup/rollup-win32-arm64-msvc@4.17.2": 252 | version "4.17.2" 253 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz#27f65a89f6f52ee9426ec11e3571038e4671790f" 254 | integrity sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA== 255 | 256 | "@rollup/rollup-win32-ia32-msvc@4.17.2": 257 | version "4.17.2" 258 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz#a2fbf8246ed0bb014f078ca34ae6b377a90cb411" 259 | integrity sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ== 260 | 261 | "@rollup/rollup-win32-x64-msvc@4.17.2": 262 | version "4.17.2" 263 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz#5a2d08b81e8064b34242d5cc9973ef8dd1e60503" 264 | integrity sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w== 265 | 266 | "@sveltejs/adapter-auto@^3.0.0": 267 | version "3.2.0" 268 | resolved "https://registry.yarnpkg.com/@sveltejs/adapter-auto/-/adapter-auto-3.2.0.tgz#00720dfad99f95452c6e47cc64a1cb58324337d2" 269 | integrity sha512-She5nKT47kwHE18v9NMe6pbJcvULr82u0V3yZ0ej3n1laWKGgkgdEABE9/ak5iDPs93LqsBkuIo51kkwCLBjJA== 270 | dependencies: 271 | import-meta-resolve "^4.0.0" 272 | 273 | "@sveltejs/kit@^2.0.0": 274 | version "2.5.7" 275 | resolved "https://registry.yarnpkg.com/@sveltejs/kit/-/kit-2.5.7.tgz#1ffab713d2dde23ae782c26a1efcd092edb76fe0" 276 | integrity sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow== 277 | dependencies: 278 | "@types/cookie" "^0.6.0" 279 | cookie "^0.6.0" 280 | devalue "^5.0.0" 281 | esm-env "^1.0.0" 282 | import-meta-resolve "^4.0.0" 283 | kleur "^4.1.5" 284 | magic-string "^0.30.5" 285 | mrmime "^2.0.0" 286 | sade "^1.8.1" 287 | set-cookie-parser "^2.6.0" 288 | sirv "^2.0.4" 289 | tiny-glob "^0.2.9" 290 | 291 | "@sveltejs/package@^2.0.0": 292 | version "2.3.1" 293 | resolved "https://registry.yarnpkg.com/@sveltejs/package/-/package-2.3.1.tgz#bfbbf751d1000db92dfa7de8c9057ae9e5a00ddf" 294 | integrity sha512-JvR2J4ost1oCn1CSdqenYRwGX/1RX+7LN+VZ71aPnz3JAlIFaEKQd1pBxlb+OSQTfeugJO0W39gB9voAbBO5ow== 295 | dependencies: 296 | chokidar "^3.6.0" 297 | kleur "^4.1.5" 298 | sade "^1.8.1" 299 | semver "^7.5.4" 300 | svelte2tsx "~0.7.0" 301 | 302 | "@sveltejs/vite-plugin-svelte-inspector@^2.0.0": 303 | version "2.1.0" 304 | resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz#116ba2b73be43c1d7d93de749f37becc7e45bb8c" 305 | integrity sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg== 306 | dependencies: 307 | debug "^4.3.4" 308 | 309 | "@sveltejs/vite-plugin-svelte@^3.0.0": 310 | version "3.1.0" 311 | resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.0.tgz#f9a1ff15e0206b4ed43fe06294d31b1319dcd654" 312 | integrity sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw== 313 | dependencies: 314 | "@sveltejs/vite-plugin-svelte-inspector" "^2.0.0" 315 | debug "^4.3.4" 316 | deepmerge "^4.3.1" 317 | kleur "^4.1.5" 318 | magic-string "^0.30.9" 319 | svelte-hmr "^0.16.0" 320 | vitefu "^0.2.5" 321 | 322 | "@types/cookie@^0.6.0": 323 | version "0.6.0" 324 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" 325 | integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== 326 | 327 | "@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0", "@types/estree@^1.0.1": 328 | version "1.0.5" 329 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" 330 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== 331 | 332 | "@types/pug@^2.0.6": 333 | version "2.0.10" 334 | resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.10.tgz#52f8dbd6113517aef901db20b4f3fca543b88c1f" 335 | integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== 336 | 337 | acorn@^8.10.0, acorn@^8.9.0: 338 | version "8.11.3" 339 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" 340 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== 341 | 342 | anymatch@~3.1.2: 343 | version "3.1.3" 344 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 345 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 346 | dependencies: 347 | normalize-path "^3.0.0" 348 | picomatch "^2.0.4" 349 | 350 | aria-query@^5.3.0: 351 | version "5.3.0" 352 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" 353 | integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== 354 | dependencies: 355 | dequal "^2.0.3" 356 | 357 | axobject-query@^4.0.0: 358 | version "4.0.0" 359 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.0.0.tgz#04a4c90dce33cc5d606c76d6216e3b250ff70dab" 360 | integrity sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw== 361 | dependencies: 362 | dequal "^2.0.3" 363 | 364 | balanced-match@^1.0.0: 365 | version "1.0.2" 366 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 367 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 368 | 369 | binary-extensions@^2.0.0: 370 | version "2.3.0" 371 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" 372 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 373 | 374 | brace-expansion@^1.1.7: 375 | version "1.1.11" 376 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 377 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 378 | dependencies: 379 | balanced-match "^1.0.0" 380 | concat-map "0.0.1" 381 | 382 | brace-expansion@^2.0.1: 383 | version "2.0.1" 384 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 385 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 386 | dependencies: 387 | balanced-match "^1.0.0" 388 | 389 | braces@^3.0.2, braces@~3.0.2: 390 | version "3.0.2" 391 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 392 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 393 | dependencies: 394 | fill-range "^7.0.1" 395 | 396 | buffer-crc32@^0.2.5: 397 | version "0.2.13" 398 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 399 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 400 | 401 | callsites@^3.0.0: 402 | version "3.1.0" 403 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 404 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 405 | 406 | chokidar@^3.4.1, chokidar@^3.6.0: 407 | version "3.6.0" 408 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" 409 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== 410 | dependencies: 411 | anymatch "~3.1.2" 412 | braces "~3.0.2" 413 | glob-parent "~5.1.2" 414 | is-binary-path "~2.1.0" 415 | is-glob "~4.0.1" 416 | normalize-path "~3.0.0" 417 | readdirp "~3.6.0" 418 | optionalDependencies: 419 | fsevents "~2.3.2" 420 | 421 | code-red@^1.0.3: 422 | version "1.0.4" 423 | resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" 424 | integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== 425 | dependencies: 426 | "@jridgewell/sourcemap-codec" "^1.4.15" 427 | "@types/estree" "^1.0.1" 428 | acorn "^8.10.0" 429 | estree-walker "^3.0.3" 430 | periscopic "^3.1.0" 431 | 432 | concat-map@0.0.1: 433 | version "0.0.1" 434 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 435 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 436 | 437 | cookie@^0.6.0: 438 | version "0.6.0" 439 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" 440 | integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== 441 | 442 | css-tree@^2.3.1: 443 | version "2.3.1" 444 | resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" 445 | integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== 446 | dependencies: 447 | mdn-data "2.0.30" 448 | source-map-js "^1.0.1" 449 | 450 | debug@^4.3.4: 451 | version "4.3.4" 452 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 453 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 454 | dependencies: 455 | ms "2.1.2" 456 | 457 | dedent-js@^1.0.1: 458 | version "1.0.1" 459 | resolved "https://registry.yarnpkg.com/dedent-js/-/dedent-js-1.0.1.tgz#bee5fb7c9e727d85dffa24590d10ec1ab1255305" 460 | integrity sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ== 461 | 462 | deepmerge@^4.3.1: 463 | version "4.3.1" 464 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" 465 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== 466 | 467 | dequal@^2.0.3: 468 | version "2.0.3" 469 | resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" 470 | integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== 471 | 472 | detect-indent@^6.1.0: 473 | version "6.1.0" 474 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" 475 | integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== 476 | 477 | devalue@^5.0.0: 478 | version "5.0.0" 479 | resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.0.0.tgz#1ca0099a7d715b4d6cac3924e770ccbbc584ad98" 480 | integrity sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA== 481 | 482 | es6-promise@^3.1.2: 483 | version "3.3.1" 484 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" 485 | integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== 486 | 487 | esbuild@^0.20.1: 488 | version "0.20.2" 489 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" 490 | integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== 491 | optionalDependencies: 492 | "@esbuild/aix-ppc64" "0.20.2" 493 | "@esbuild/android-arm" "0.20.2" 494 | "@esbuild/android-arm64" "0.20.2" 495 | "@esbuild/android-x64" "0.20.2" 496 | "@esbuild/darwin-arm64" "0.20.2" 497 | "@esbuild/darwin-x64" "0.20.2" 498 | "@esbuild/freebsd-arm64" "0.20.2" 499 | "@esbuild/freebsd-x64" "0.20.2" 500 | "@esbuild/linux-arm" "0.20.2" 501 | "@esbuild/linux-arm64" "0.20.2" 502 | "@esbuild/linux-ia32" "0.20.2" 503 | "@esbuild/linux-loong64" "0.20.2" 504 | "@esbuild/linux-mips64el" "0.20.2" 505 | "@esbuild/linux-ppc64" "0.20.2" 506 | "@esbuild/linux-riscv64" "0.20.2" 507 | "@esbuild/linux-s390x" "0.20.2" 508 | "@esbuild/linux-x64" "0.20.2" 509 | "@esbuild/netbsd-x64" "0.20.2" 510 | "@esbuild/openbsd-x64" "0.20.2" 511 | "@esbuild/sunos-x64" "0.20.2" 512 | "@esbuild/win32-arm64" "0.20.2" 513 | "@esbuild/win32-ia32" "0.20.2" 514 | "@esbuild/win32-x64" "0.20.2" 515 | 516 | esm-env@^1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.0.0.tgz#b124b40b180711690a4cb9b00d16573391950413" 519 | integrity sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA== 520 | 521 | estree-walker@^3.0.0, estree-walker@^3.0.3: 522 | version "3.0.3" 523 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" 524 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== 525 | dependencies: 526 | "@types/estree" "^1.0.0" 527 | 528 | fast-glob@^3.2.7: 529 | version "3.3.2" 530 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 531 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 532 | dependencies: 533 | "@nodelib/fs.stat" "^2.0.2" 534 | "@nodelib/fs.walk" "^1.2.3" 535 | glob-parent "^5.1.2" 536 | merge2 "^1.3.0" 537 | micromatch "^4.0.4" 538 | 539 | fastq@^1.6.0: 540 | version "1.17.1" 541 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" 542 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 543 | dependencies: 544 | reusify "^1.0.4" 545 | 546 | fill-range@^7.0.1: 547 | version "7.0.1" 548 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 549 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 550 | dependencies: 551 | to-regex-range "^5.0.1" 552 | 553 | fs.realpath@^1.0.0: 554 | version "1.0.0" 555 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 556 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 557 | 558 | fsevents@~2.3.2, fsevents@~2.3.3: 559 | version "2.3.3" 560 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 561 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 562 | 563 | glob-parent@^5.1.2, glob-parent@~5.1.2: 564 | version "5.1.2" 565 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 566 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 567 | dependencies: 568 | is-glob "^4.0.1" 569 | 570 | glob@^7.1.3: 571 | version "7.2.3" 572 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 573 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 574 | dependencies: 575 | fs.realpath "^1.0.0" 576 | inflight "^1.0.4" 577 | inherits "2" 578 | minimatch "^3.1.1" 579 | once "^1.3.0" 580 | path-is-absolute "^1.0.0" 581 | 582 | glob@^8.0.1: 583 | version "8.1.0" 584 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" 585 | integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== 586 | dependencies: 587 | fs.realpath "^1.0.0" 588 | inflight "^1.0.4" 589 | inherits "2" 590 | minimatch "^5.0.1" 591 | once "^1.3.0" 592 | 593 | globalyzer@0.1.0: 594 | version "0.1.0" 595 | resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" 596 | integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== 597 | 598 | globrex@^0.1.2: 599 | version "0.1.2" 600 | resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" 601 | integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== 602 | 603 | graceful-fs@^4.1.3: 604 | version "4.2.11" 605 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 606 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 607 | 608 | ignore-walk@^5.0.1: 609 | version "5.0.1" 610 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" 611 | integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== 612 | dependencies: 613 | minimatch "^5.0.1" 614 | 615 | import-fresh@^3.2.1: 616 | version "3.3.0" 617 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 618 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 619 | dependencies: 620 | parent-module "^1.0.0" 621 | resolve-from "^4.0.0" 622 | 623 | import-meta-resolve@^4.0.0: 624 | version "4.1.0" 625 | resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" 626 | integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== 627 | 628 | inflight@^1.0.4: 629 | version "1.0.6" 630 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 631 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 632 | dependencies: 633 | once "^1.3.0" 634 | wrappy "1" 635 | 636 | inherits@2: 637 | version "2.0.4" 638 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 639 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 640 | 641 | is-binary-path@~2.1.0: 642 | version "2.1.0" 643 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 644 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 645 | dependencies: 646 | binary-extensions "^2.0.0" 647 | 648 | is-extglob@^2.1.1: 649 | version "2.1.1" 650 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 651 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 652 | 653 | is-glob@^4.0.1, is-glob@~4.0.1: 654 | version "4.0.3" 655 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 656 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 657 | dependencies: 658 | is-extglob "^2.1.1" 659 | 660 | is-number@^7.0.0: 661 | version "7.0.0" 662 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 663 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 664 | 665 | is-reference@^3.0.0, is-reference@^3.0.1: 666 | version "3.0.2" 667 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" 668 | integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== 669 | dependencies: 670 | "@types/estree" "*" 671 | 672 | kleur@^4.1.5: 673 | version "4.1.5" 674 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" 675 | integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== 676 | 677 | locate-character@^3.0.0: 678 | version "3.0.0" 679 | resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" 680 | integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== 681 | 682 | lower-case@^2.0.2: 683 | version "2.0.2" 684 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 685 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 686 | dependencies: 687 | tslib "^2.0.3" 688 | 689 | lru-cache@^6.0.0: 690 | version "6.0.0" 691 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 692 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 693 | dependencies: 694 | yallist "^4.0.0" 695 | 696 | magic-string@^0.30.4, magic-string@^0.30.5, magic-string@^0.30.9: 697 | version "0.30.10" 698 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" 699 | integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== 700 | dependencies: 701 | "@jridgewell/sourcemap-codec" "^1.4.15" 702 | 703 | mdn-data@2.0.30: 704 | version "2.0.30" 705 | resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" 706 | integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== 707 | 708 | merge2@^1.3.0: 709 | version "1.4.1" 710 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 711 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 712 | 713 | micromatch@^4.0.4: 714 | version "4.0.5" 715 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 716 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 717 | dependencies: 718 | braces "^3.0.2" 719 | picomatch "^2.3.1" 720 | 721 | min-indent@^1.0.0: 722 | version "1.0.1" 723 | resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" 724 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== 725 | 726 | minimatch@^3.1.1: 727 | version "3.1.2" 728 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 729 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 730 | dependencies: 731 | brace-expansion "^1.1.7" 732 | 733 | minimatch@^5.0.1: 734 | version "5.1.6" 735 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" 736 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== 737 | dependencies: 738 | brace-expansion "^2.0.1" 739 | 740 | minimist@^1.2.0, minimist@^1.2.6: 741 | version "1.2.8" 742 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 743 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 744 | 745 | mkdirp@^0.5.1: 746 | version "0.5.6" 747 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 748 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 749 | dependencies: 750 | minimist "^1.2.6" 751 | 752 | mri@^1.1.0: 753 | version "1.2.0" 754 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" 755 | integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== 756 | 757 | mrmime@^2.0.0: 758 | version "2.0.0" 759 | resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" 760 | integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== 761 | 762 | ms@2.1.2: 763 | version "2.1.2" 764 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 765 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 766 | 767 | nanoid@^3.3.7: 768 | version "3.3.7" 769 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" 770 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== 771 | 772 | no-case@^3.0.4: 773 | version "3.0.4" 774 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 775 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 776 | dependencies: 777 | lower-case "^2.0.2" 778 | tslib "^2.0.3" 779 | 780 | normalize-path@^3.0.0, normalize-path@~3.0.0: 781 | version "3.0.0" 782 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 783 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 784 | 785 | npm-bundled@^2.0.0: 786 | version "2.0.1" 787 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" 788 | integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== 789 | dependencies: 790 | npm-normalize-package-bin "^2.0.0" 791 | 792 | npm-normalize-package-bin@^2.0.0: 793 | version "2.0.0" 794 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" 795 | integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== 796 | 797 | npm-packlist@^5.1.3: 798 | version "5.1.3" 799 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" 800 | integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== 801 | dependencies: 802 | glob "^8.0.1" 803 | ignore-walk "^5.0.1" 804 | npm-bundled "^2.0.0" 805 | npm-normalize-package-bin "^2.0.0" 806 | 807 | once@^1.3.0: 808 | version "1.4.0" 809 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 810 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 811 | dependencies: 812 | wrappy "1" 813 | 814 | parent-module@^1.0.0: 815 | version "1.0.1" 816 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 817 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 818 | dependencies: 819 | callsites "^3.0.0" 820 | 821 | pascal-case@^3.1.1: 822 | version "3.1.2" 823 | resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" 824 | integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== 825 | dependencies: 826 | no-case "^3.0.4" 827 | tslib "^2.0.3" 828 | 829 | path-is-absolute@^1.0.0: 830 | version "1.0.1" 831 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 832 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 833 | 834 | periscopic@^3.1.0: 835 | version "3.1.0" 836 | resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" 837 | integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== 838 | dependencies: 839 | "@types/estree" "^1.0.0" 840 | estree-walker "^3.0.0" 841 | is-reference "^3.0.0" 842 | 843 | picocolors@^1.0.0: 844 | version "1.0.0" 845 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 846 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 847 | 848 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 849 | version "2.3.1" 850 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 851 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 852 | 853 | postcss@^8.4.38: 854 | version "8.4.38" 855 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" 856 | integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== 857 | dependencies: 858 | nanoid "^3.3.7" 859 | picocolors "^1.0.0" 860 | source-map-js "^1.2.0" 861 | 862 | publint@^0.1.9: 863 | version "0.1.16" 864 | resolved "https://registry.yarnpkg.com/publint/-/publint-0.1.16.tgz#424b5cf0fd21bc7b843a55e78e0d78f5145cd47e" 865 | integrity sha512-wJgk7HnXDT5Ap0DjFYbGz78kPkN44iQvDiaq8P63IEEyNU9mYXvaMd2cAyIM6OgqXM/IA3CK6XWIsRq+wjNpgw== 866 | dependencies: 867 | npm-packlist "^5.1.3" 868 | picocolors "^1.0.0" 869 | sade "^1.8.1" 870 | 871 | queue-microtask@^1.2.2: 872 | version "1.2.3" 873 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 874 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 875 | 876 | readdirp@~3.6.0: 877 | version "3.6.0" 878 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 879 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 880 | dependencies: 881 | picomatch "^2.2.1" 882 | 883 | resolve-from@^4.0.0: 884 | version "4.0.0" 885 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 886 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 887 | 888 | reusify@^1.0.4: 889 | version "1.0.4" 890 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 891 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 892 | 893 | rimraf@^2.5.2: 894 | version "2.7.1" 895 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 896 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 897 | dependencies: 898 | glob "^7.1.3" 899 | 900 | rollup@^4.13.0: 901 | version "4.17.2" 902 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.17.2.tgz#26d1785d0144122277fdb20ab3a24729ae68301f" 903 | integrity sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ== 904 | dependencies: 905 | "@types/estree" "1.0.5" 906 | optionalDependencies: 907 | "@rollup/rollup-android-arm-eabi" "4.17.2" 908 | "@rollup/rollup-android-arm64" "4.17.2" 909 | "@rollup/rollup-darwin-arm64" "4.17.2" 910 | "@rollup/rollup-darwin-x64" "4.17.2" 911 | "@rollup/rollup-linux-arm-gnueabihf" "4.17.2" 912 | "@rollup/rollup-linux-arm-musleabihf" "4.17.2" 913 | "@rollup/rollup-linux-arm64-gnu" "4.17.2" 914 | "@rollup/rollup-linux-arm64-musl" "4.17.2" 915 | "@rollup/rollup-linux-powerpc64le-gnu" "4.17.2" 916 | "@rollup/rollup-linux-riscv64-gnu" "4.17.2" 917 | "@rollup/rollup-linux-s390x-gnu" "4.17.2" 918 | "@rollup/rollup-linux-x64-gnu" "4.17.2" 919 | "@rollup/rollup-linux-x64-musl" "4.17.2" 920 | "@rollup/rollup-win32-arm64-msvc" "4.17.2" 921 | "@rollup/rollup-win32-ia32-msvc" "4.17.2" 922 | "@rollup/rollup-win32-x64-msvc" "4.17.2" 923 | fsevents "~2.3.2" 924 | 925 | run-parallel@^1.1.9: 926 | version "1.2.0" 927 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 928 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 929 | dependencies: 930 | queue-microtask "^1.2.2" 931 | 932 | sade@^1.7.4, sade@^1.8.1: 933 | version "1.8.1" 934 | resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" 935 | integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== 936 | dependencies: 937 | mri "^1.1.0" 938 | 939 | sander@^0.5.0: 940 | version "0.5.1" 941 | resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" 942 | integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== 943 | dependencies: 944 | es6-promise "^3.1.2" 945 | graceful-fs "^4.1.3" 946 | mkdirp "^0.5.1" 947 | rimraf "^2.5.2" 948 | 949 | semver@^7.5.4: 950 | version "7.6.0" 951 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" 952 | integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== 953 | dependencies: 954 | lru-cache "^6.0.0" 955 | 956 | set-cookie-parser@^2.6.0: 957 | version "2.6.0" 958 | resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" 959 | integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== 960 | 961 | sirv@^2.0.4: 962 | version "2.0.4" 963 | resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" 964 | integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== 965 | dependencies: 966 | "@polka/url" "^1.0.0-next.24" 967 | mrmime "^2.0.0" 968 | totalist "^3.0.0" 969 | 970 | sorcery@^0.11.0: 971 | version "0.11.0" 972 | resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" 973 | integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== 974 | dependencies: 975 | "@jridgewell/sourcemap-codec" "^1.4.14" 976 | buffer-crc32 "^0.2.5" 977 | minimist "^1.2.0" 978 | sander "^0.5.0" 979 | 980 | source-map-js@^1.0.1, source-map-js@^1.2.0: 981 | version "1.2.0" 982 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" 983 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== 984 | 985 | strip-indent@^3.0.0: 986 | version "3.0.0" 987 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" 988 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== 989 | dependencies: 990 | min-indent "^1.0.0" 991 | 992 | svelte-check@^3.6.0: 993 | version "3.7.0" 994 | resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.7.0.tgz#9ccfbcff29052737fc57ed13eff3c4a1d7ff78eb" 995 | integrity sha512-Va6sGL4Vy4znn0K+vaatk98zoBvG2aDee4y3r5X4S80z8DXfbACHvdLlyXa4C4c5tQzK9H0Uq2pbd20wH3ucjQ== 996 | dependencies: 997 | "@jridgewell/trace-mapping" "^0.3.17" 998 | chokidar "^3.4.1" 999 | fast-glob "^3.2.7" 1000 | import-fresh "^3.2.1" 1001 | picocolors "^1.0.0" 1002 | sade "^1.7.4" 1003 | svelte-preprocess "^5.1.3" 1004 | typescript "^5.0.3" 1005 | 1006 | svelte-hmr@^0.16.0: 1007 | version "0.16.0" 1008 | resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.16.0.tgz#9f345b7d1c1662f1613747ed7e82507e376c1716" 1009 | integrity sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA== 1010 | 1011 | svelte-preprocess@^5.1.3: 1012 | version "5.1.4" 1013 | resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz#14ada075c94bbd2b71c5ec70ff72f8ebe1c95b91" 1014 | integrity sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA== 1015 | dependencies: 1016 | "@types/pug" "^2.0.6" 1017 | detect-indent "^6.1.0" 1018 | magic-string "^0.30.5" 1019 | sorcery "^0.11.0" 1020 | strip-indent "^3.0.0" 1021 | 1022 | svelte2tsx@~0.7.0: 1023 | version "0.7.7" 1024 | resolved "https://registry.yarnpkg.com/svelte2tsx/-/svelte2tsx-0.7.7.tgz#735aefd11019ff08334c2688a426a0f4e5e27436" 1025 | integrity sha512-HAIxtk5TUHXvCRKApKfxoh1BGT85S/17lS3DvbfxRKFd+Ghr5YScqBvd+sU+p7vJFw48LNkzdFk+ooNVk3e4kA== 1026 | dependencies: 1027 | dedent-js "^1.0.1" 1028 | pascal-case "^3.1.1" 1029 | 1030 | svelte@^4.2.7: 1031 | version "4.2.15" 1032 | resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.15.tgz#69f5ab9730c1d80109db2ee09427063dcf6b3512" 1033 | integrity sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg== 1034 | dependencies: 1035 | "@ampproject/remapping" "^2.2.1" 1036 | "@jridgewell/sourcemap-codec" "^1.4.15" 1037 | "@jridgewell/trace-mapping" "^0.3.18" 1038 | "@types/estree" "^1.0.1" 1039 | acorn "^8.9.0" 1040 | aria-query "^5.3.0" 1041 | axobject-query "^4.0.0" 1042 | code-red "^1.0.3" 1043 | css-tree "^2.3.1" 1044 | estree-walker "^3.0.3" 1045 | is-reference "^3.0.1" 1046 | locate-character "^3.0.0" 1047 | magic-string "^0.30.4" 1048 | periscopic "^3.1.0" 1049 | 1050 | tiny-glob@^0.2.9: 1051 | version "0.2.9" 1052 | resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" 1053 | integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== 1054 | dependencies: 1055 | globalyzer "0.1.0" 1056 | globrex "^0.1.2" 1057 | 1058 | to-regex-range@^5.0.1: 1059 | version "5.0.1" 1060 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1061 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1062 | dependencies: 1063 | is-number "^7.0.0" 1064 | 1065 | totalist@^3.0.0: 1066 | version "3.0.1" 1067 | resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" 1068 | integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== 1069 | 1070 | tslib@^2.0.3: 1071 | version "2.6.2" 1072 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" 1073 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 1074 | 1075 | typescript@^5.0.3: 1076 | version "5.4.5" 1077 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" 1078 | integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== 1079 | 1080 | vite@^5.0.11: 1081 | version "5.2.10" 1082 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" 1083 | integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== 1084 | dependencies: 1085 | esbuild "^0.20.1" 1086 | postcss "^8.4.38" 1087 | rollup "^4.13.0" 1088 | optionalDependencies: 1089 | fsevents "~2.3.3" 1090 | 1091 | vitefu@^0.2.5: 1092 | version "0.2.5" 1093 | resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.5.tgz#c1b93c377fbdd3e5ddd69840ea3aa70b40d90969" 1094 | integrity sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== 1095 | 1096 | wrappy@1: 1097 | version "1.0.2" 1098 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1099 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1100 | 1101 | yallist@^4.0.0: 1102 | version "4.0.0" 1103 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1104 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1105 | --------------------------------------------------------------------------------