├── .eslintrc ├── .gitignore ├── .npmrc ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── design ├── compiler-core.xmind ├── diff 算法 │ ├── patch 算法图解 5.2.png │ ├── patch 算法图解.png │ ├── 中间对比.png │ ├── 右侧对比.png │ ├── 左侧对比.png │ ├── 新的比老的长-创建-右侧.png │ ├── 新的比老的长-创建-左侧.png │ ├── 老的比新的长-删除-右侧.png │ └── 老的比新的长-删除-左侧.png ├── patchElement 的流程.xmind ├── reactivity.xmind ├── runtime-core update 流程.xmind ├── runtime-core 初始化流程.xmind └── 完整的流程调用图.xmind ├── example ├── componentEmit │ ├── App.js │ ├── Foo.js │ ├── index.html │ └── main.js ├── componentSlot │ ├── App.js │ ├── Foo.js │ ├── index.html │ └── main.js ├── currentInstance │ ├── App.js │ ├── Foo.js │ ├── index.html │ └── main.js ├── customRenderer │ ├── App.js │ ├── index.html │ └── main.js ├── helloworld │ ├── App.js │ ├── Foo.js │ ├── index.html │ └── main.js ├── patchChildren │ ├── App.js │ ├── ArrayToText.js │ ├── TextToArray.js │ ├── TextToText.js │ ├── index.html │ └── main.js ├── provideInject │ ├── App.js │ ├── index.html │ └── main.js └── update │ ├── App.js │ ├── index.html │ └── main.js ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── rollup.config.ts ├── scripts └── addExample.ts ├── src ├── index.ts ├── reactivity │ ├── baseHandler.ts │ ├── computed.ts │ ├── effect.ts │ ├── index.ts │ ├── reactive.ts │ ├── ref.ts │ └── tests │ │ ├── computed.test.ts │ │ ├── effect.test.ts │ │ ├── reactive.test.ts │ │ ├── readonly.test.ts │ │ ├── ref.test.ts │ │ └── shallowReadonly.test.ts ├── runtime-core │ ├── apiInject.ts │ ├── component.ts │ ├── componentEmit.ts │ ├── componentProps.ts │ ├── componentPublicInstance.ts │ ├── componentSlots.ts │ ├── createApp.ts │ ├── h.ts │ ├── helpers │ │ └── renderSlots.ts │ ├── index.ts │ ├── renderer.ts │ ├── types.ts │ └── vNode.ts ├── runtime-dom │ └── index.ts └── shared │ ├── ShapeFlags.ts │ └── index.ts └── tsconfig.json /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@antfu", 3 | "rules": { 4 | "@typescript-eslint/no-this-alias": "off", 5 | "no-console":"off" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cache 2 | lib 3 | .DS_Store 4 | .idea 5 | *.log 6 | *.tgz 7 | coverage 8 | dist 9 | lib-cov 10 | logs 11 | node_modules 12 | temp 13 | .vscode 14 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | ignore-workspace-root-check = true 2 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "type": "pwa-node", 5 | "request": "launch", 6 | "name": "Debug Current Test File", 7 | "autoAttachChildProcesses": true, 8 | "skipFiles": ["/**", "**/node_modules/**"], 9 | "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", 10 | "args": ["run", "${relativeFile}"], 11 | "smartStep": true, 12 | "console": "integratedTerminal" 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 love-loli 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # view 2 | 3 | Vue3.x的个人实现版,旨在学习vue/core的核心原理,同时实践TDD的编程范式 4 | 5 | # 功能 6 | 7 | ## TODO 8 | - ### reactivity 9 | - [x] effect 主流程 10 | - [x] reactive 主流程 11 | - [x] trigger & track 12 | - [x] effect -> runner 13 | - [x] effect -> stop 14 | - [x] readonly 15 | - [x] isReactive & isReadonly 16 | - [x] nested reactive & readonly 17 | - [x] shallowReadonly 18 | - [x] isProxy 19 | - [x] ref & isRef & unRef & proxyRefs 20 | - [x] computed 21 | 22 | - ### runtime core 23 | 24 | **component/element init** 25 | - [x] component instance 26 | - [x] element renderer 27 | - [x] component proxy 28 | - [x] shapeFlags 29 | - [x] event handler 30 | - [x] props & emit 31 | - [x] slots 32 | - [x] Fragment & Text 33 | - [x] getCurrentInstance 34 | - [x] provide & inject 35 | - [x] Custom Renderer API 36 | 37 | **component/element update** 38 | - [x] update props 39 | - [x] update children 40 | - [ ] update children (diff) 41 | - [ ] update component 42 | - [ ] nextTick 43 | 44 | - ### compiler 45 | - [ ] 解析插值 46 | - [ ] 解析 element 47 | - [ ] 解析 text 48 | - [ ] 解析三种联合类型 49 | - [ ] parse 50 | - [ ] transform 51 | - [ ] 生成string类型 52 | - [ ] 生成插值类型 53 | - [ ] 生成三种联合类型 54 | - [ ] 编译template 55 | 56 | ## 项目 57 | 58 | - ### 单元测试 59 | - [x] reactivity 60 | - [ ] runtime/core 61 | - [ ] compiler 62 | 63 | - ### build 64 | - [x] rollup打包 65 | - [x] typescript支持 66 | -------------------------------------------------------------------------------- /design/compiler-core.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/compiler-core.xmind -------------------------------------------------------------------------------- /design/diff 算法/patch 算法图解 5.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/patch 算法图解 5.2.png -------------------------------------------------------------------------------- /design/diff 算法/patch 算法图解.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/patch 算法图解.png -------------------------------------------------------------------------------- /design/diff 算法/中间对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/中间对比.png -------------------------------------------------------------------------------- /design/diff 算法/右侧对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/右侧对比.png -------------------------------------------------------------------------------- /design/diff 算法/左侧对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/左侧对比.png -------------------------------------------------------------------------------- /design/diff 算法/新的比老的长-创建-右侧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/新的比老的长-创建-右侧.png -------------------------------------------------------------------------------- /design/diff 算法/新的比老的长-创建-左侧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/新的比老的长-创建-左侧.png -------------------------------------------------------------------------------- /design/diff 算法/老的比新的长-删除-右侧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/老的比新的长-删除-右侧.png -------------------------------------------------------------------------------- /design/diff 算法/老的比新的长-删除-左侧.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/diff 算法/老的比新的长-删除-左侧.png -------------------------------------------------------------------------------- /design/patchElement 的流程.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/patchElement 的流程.xmind -------------------------------------------------------------------------------- /design/reactivity.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/reactivity.xmind -------------------------------------------------------------------------------- /design/runtime-core update 流程.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/runtime-core update 流程.xmind -------------------------------------------------------------------------------- /design/runtime-core 初始化流程.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/runtime-core 初始化流程.xmind -------------------------------------------------------------------------------- /design/完整的流程调用图.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/exwer/view/15423ac8de76fcab5355c85e8b61b06190316740/design/完整的流程调用图.xmind -------------------------------------------------------------------------------- /example/componentEmit/App.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | import { Foo } from './Foo.js' 3 | 4 | export default { 5 | name: 'App', 6 | render() { 7 | // emit 8 | return h('div', {}, [ 9 | h('div', {}, 'App'), 10 | h(Foo, { 11 | onAdd(a, b) { 12 | console.log('onAdd', a, b) 13 | }, 14 | onAddFoo() { 15 | console.log('add-foo') 16 | }, 17 | })]) 18 | }, 19 | setup() { 20 | return {} 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /example/componentEmit/Foo.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | export const Foo = { 3 | setup(props, { emit }) { 4 | const emitAdd = () => { 5 | emit('add', 1, 2) 6 | emit('add-foo') 7 | } 8 | 9 | return { 10 | emitAdd, 11 | } 12 | }, 13 | render() { 14 | const btn = h('button', { 15 | onClick: this.emitAdd, 16 | }, 'emitAdd') 17 | const foo = h('p', {}, 'foo') 18 | return h('div', {}, [foo, btn]) 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /example/componentEmit/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | component emit 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /example/componentEmit/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/componentSlot/App.js: -------------------------------------------------------------------------------- 1 | import { createTextVNode, h } from '../../lib/index.mjs' 2 | import { Foo } from './Foo.js' 3 | 4 | export default { 5 | name: 'App', 6 | setup() { 7 | return {} 8 | }, 9 | render() { 10 | const app = h('div', {}, 'App') 11 | 12 | const foo = h(Foo, {}, 13 | { 14 | header: ({ age }) => [ 15 | h('p', {}, `header${age}`), 16 | createTextVNode('你好'), 17 | ], 18 | footer: () => h('p', {}, 'footer'), 19 | }) 20 | 21 | return h('div', {}, [app, foo]) 22 | }, 23 | } 24 | -------------------------------------------------------------------------------- /example/componentSlot/Foo.js: -------------------------------------------------------------------------------- 1 | import { h, renderSlots } from '../../lib/index.mjs' 2 | 3 | export const Foo = { 4 | setup() { 5 | return {} 6 | }, 7 | render() { 8 | const foo = h('p', {}, 'foo') 9 | // 具名插槽 10 | // 1.支持单个或多个slots的渲染 11 | // 2.获取到渲染的元素和位置(具名插槽) 12 | // 作用域插槽 13 | return h('div', {}, 14 | [ 15 | renderSlots(this.$slots, 'header', { age: 10 }), 16 | foo, 17 | renderSlots(this.$slots, 'footer'), 18 | ]) 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /example/componentSlot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | component slot 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /example/componentSlot/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/currentInstance/App.js: -------------------------------------------------------------------------------- 1 | import { getCurrentInstance, h } from '../../lib/index.mjs' 2 | import { Foo } from './Foo.js' 3 | 4 | export default { 5 | name: 'App', 6 | setup() { 7 | const instance = getCurrentInstance() 8 | console.log('App:', instance) 9 | }, 10 | render() { 11 | return h('div', {}, [h('p', {}, 'currentInstance demo'), h(Foo)]) 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /example/currentInstance/Foo.js: -------------------------------------------------------------------------------- 1 | import { getCurrentInstance, h } from '../../lib/index.mjs' 2 | export const Foo = { 3 | name: 'Foo', 4 | setup() { 5 | const instance = getCurrentInstance() 6 | console.log('Foo', instance) 7 | return {} 8 | }, 9 | render() { 10 | return h('div', {}, 'foo') 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /example/currentInstance/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | example 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /example/currentInstance/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/customRenderer/App.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | export const App = { 3 | setup() { 4 | return { 5 | x: 100, 6 | y: 100, 7 | } 8 | }, 9 | render() { 10 | return h('rect', { x: this.x, y: this.y }) 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /example/customRenderer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | customRenderer 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /example/customRenderer/main.js: -------------------------------------------------------------------------------- 1 | import { createRenderer } from '../../lib/index.mjs' 2 | import { App } from './App.js' 3 | 4 | const game = new PIXI.Application({ 5 | width: 500, 6 | height: 500, 7 | }) 8 | 9 | document.body.append(game.view) 10 | 11 | const renderer = createRenderer({ 12 | createElement(type) { 13 | if (type === 'rect') { 14 | const rect = new PIXI.Graphics() 15 | rect.beginFill(0xFF0000) 16 | rect.drawRect(0, 0, 100, 100) 17 | rect.endFill() 18 | 19 | return rect 20 | } 21 | }, 22 | patchProp(el, key, val) { 23 | el[key] = val 24 | }, 25 | insert(el, parent) { 26 | parent.addChild(el) 27 | }, 28 | }) 29 | 30 | renderer.createApp(App).mount(game.stage) 31 | -------------------------------------------------------------------------------- /example/helloworld/App.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | import { Foo } from './Foo.js' 3 | 4 | // 方便调试this 5 | window.self = null 6 | 7 | export default { 8 | render() { 9 | window.self = this 10 | 11 | return h( 12 | 'div', 13 | { 14 | id: 'shit', 15 | class: ['red', 'hard'], 16 | onClick() { 17 | console.log('click') 18 | }, 19 | onMouseDown() { 20 | console.log('mousedown') 21 | }, 22 | }, 23 | [ 24 | h('div', {}, this.msg), 25 | h(Foo, { count: 1 }), 26 | ], 27 | ) 28 | }, 29 | setup() { 30 | return { 31 | msg: 'view', 32 | } 33 | }, 34 | } 35 | -------------------------------------------------------------------------------- /example/helloworld/Foo.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | export const Foo = { 3 | setup(props) { 4 | // 1.可以访问到props 5 | console.log(props) 6 | // 2.通过this可以访问到props内部属性(proxy) 7 | // 3.不可更改props属性(shallowReadonly) 8 | props.count++ 9 | }, 10 | render() { 11 | return h('div', {}, `foo ${this.count}`) 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /example/helloworld/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | test 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /example/helloworld/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/patchChildren/App.js: -------------------------------------------------------------------------------- 1 | import { h } from '../../lib/index.mjs' 2 | import ArrayToText from './ArrayToText.js' 3 | import TextToArray from './TextToArray.js' 4 | import TextToText from './TextToText.js' 5 | 6 | export default { 7 | setup() { 8 | return { 9 | msg: 'view', 10 | } 11 | }, 12 | render() { 13 | return h('div', {}, [ 14 | h('p', {}, '主页'), 15 | // h(ArrayToText) 16 | // h(TextToText) 17 | h(TextToArray) 18 | ]) 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /example/patchChildren/ArrayToText.js: -------------------------------------------------------------------------------- 1 | import { h, ref } from "../../lib/index.mjs" 2 | 3 | const nextChildren = 'newChildren' 4 | const prevChildren = [h('div', {}, 'A'), h('div', {}, 'B')] 5 | 6 | export default { 7 | name: 'ArrayToText', 8 | setup() { 9 | const isChange = ref(false) 10 | 11 | window.isChange = isChange 12 | 13 | return { 14 | isChange, 15 | } 16 | }, 17 | render() { 18 | return this.isChange ? h('div', {}, nextChildren) : h('div', {}, prevChildren) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/patchChildren/TextToArray.js: -------------------------------------------------------------------------------- 1 | import { h, ref } from "../../lib/index.mjs" 2 | 3 | const nextChildren = [h('div', {}, 'A'), h('div', {}, 'B')] 4 | const prevChildren = 'oldChildren' 5 | 6 | export default { 7 | name: 'TextToArray', 8 | setup() { 9 | const isChange = ref(false) 10 | 11 | window.isChange = isChange 12 | 13 | return { 14 | isChange, 15 | } 16 | }, 17 | render() { 18 | return this.isChange ? h('div', {}, nextChildren) : h('div', {}, prevChildren) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/patchChildren/TextToText.js: -------------------------------------------------------------------------------- 1 | import { h, ref } from "../../lib/index.mjs"; 2 | 3 | const prevChildren = 'oldChild' 4 | const nextChildren = 'newChild' 5 | 6 | export default { 7 | name: 'TextToText', 8 | setup() { 9 | const isChange = ref(false) 10 | window.isChange = isChange 11 | 12 | return { 13 | isChange 14 | } 15 | }, 16 | render() { 17 | return this.isChange ? h('div', {}, nextChildren) : h('div', {}, prevChildren) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/patchChildren/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | example 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /example/patchChildren/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/provideInject/App.js: -------------------------------------------------------------------------------- 1 | import { h, inject, provide } from '../../lib/index.mjs' 2 | 3 | const Consumer = { 4 | name: 'Consumer', 5 | setup() { 6 | const foo = inject('foo') 7 | const bar = inject('bar') 8 | const baz = inject('baz', () => 'defaultBaz') 9 | return { 10 | foo, 11 | bar, 12 | baz, 13 | } 14 | }, 15 | render() { 16 | return h('div', {}, `Consumer: - ${this.foo} - ${this.bar} - ${this.baz}`) 17 | }, 18 | } 19 | 20 | const Provider2 = { 21 | name: 'Provider2', 22 | setup() { 23 | provide('foo', 'foo2') 24 | const foo = inject('foo') 25 | return { 26 | foo, 27 | } 28 | }, 29 | render() { 30 | return h('div', {}, [h('p', {}, `provider2${this.foo}`), h(Consumer)]) 31 | }, 32 | 33 | } 34 | 35 | const Provider = { 36 | name: 'Provider', 37 | setup() { 38 | provide('foo', 'fooVal') 39 | provide('bar', 'barVal') 40 | }, 41 | render() { 42 | return h('div', {}, [h('p', {}, 'Provider'), h(Provider2)]) 43 | }, 44 | } 45 | 46 | export default { 47 | name: 'App', 48 | setup() {}, 49 | render() { 50 | return h('div', {}, [h('p', {}, 'apiInject'), h(Provider)]) 51 | }, 52 | } 53 | -------------------------------------------------------------------------------- /example/provideInject/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | example 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /example/provideInject/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /example/update/App.js: -------------------------------------------------------------------------------- 1 | import { h, ref } from '../../lib/index.mjs' 2 | 3 | export default { 4 | name: 'App', 5 | setup() { 6 | const count = ref(0) 7 | const onClick = () => { 8 | count.value++ 9 | } 10 | 11 | const props = ref({ 12 | foo: 'foo', 13 | bar: 'bar', 14 | }) 15 | 16 | function onPropsChangeDemo1() { 17 | props.value.foo = 'new-foo' 18 | } 19 | 20 | function onPropsChangeDemo2() { 21 | props.value.foo = undefined 22 | } 23 | 24 | function onPropsChangeDemo3() { 25 | props.value = { 26 | foo: 'foo', 27 | } 28 | } 29 | return { 30 | count, 31 | props, 32 | onClick, 33 | onPropsChangeDemo1, 34 | onPropsChangeDemo2, 35 | onPropsChangeDemo3, 36 | } 37 | }, 38 | render() { 39 | return h( 40 | 'div', 41 | { 42 | id: 'root', 43 | ...this.props, 44 | }, 45 | [ 46 | h('div', {}, `count:${this.count}`), 47 | h( 48 | 'button', 49 | { 50 | onClick: this.onClick, 51 | }, 52 | 'click', 53 | ), 54 | h( 55 | 'button', 56 | { 57 | onClick: this.onPropsChangeDemo1, 58 | }, 59 | 'changeProps - 值改变了 - 修改', 60 | ), 61 | h( 62 | 'button', 63 | { 64 | onClick: this.onPropsChangeDemo2, 65 | }, 66 | 'changeProps - 值变成了undefined - 删除', 67 | ), 68 | h( 69 | 'button', 70 | { 71 | onClick: this.onPropsChangeDemo3, 72 | }, 73 | 'changeProps - 值的属性改变 - 修改', 74 | ), 75 | ], 76 | ) 77 | }, 78 | } 79 | -------------------------------------------------------------------------------- /example/update/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | example 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /example/update/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from '../../lib/index.mjs' 2 | import App from './App.js' 3 | 4 | const rootContainer = document.querySelector('#app') 5 | createApp(App).mount(rootContainer) 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "view", 3 | "version": "0.0.0", 4 | "packageManager": "pnpm@6.32.3", 5 | "description": "", 6 | "author": "love-JS ", 7 | "license": "MIT", 8 | "funding": "https://github.com/sponsors/love-js", 9 | "homepage": "https://github.com/love-js/view#readme", 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/love-js/view.git" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/love-js/view/issues" 16 | }, 17 | "keywords": [ 18 | "vue" 19 | ], 20 | "sideEffects": false, 21 | "exports": { 22 | ".": { 23 | "types": "./lib/index.d.ts", 24 | "require": "./lib/index.cjs", 25 | "import": "./lib/index.mjs" 26 | } 27 | }, 28 | "main": "./lib/index.cjs", 29 | "module": "./lib/index.mjs", 30 | "types": "./lib/index.d.ts", 31 | "typesVersions": { 32 | "*": { 33 | "*": [ 34 | "./lib/*", 35 | "./lib/index.d.ts" 36 | ] 37 | } 38 | }, 39 | "files": [ 40 | "lib" 41 | ], 42 | "scripts": { 43 | "addExample": "esno ./scripts/addExample.ts", 44 | "preinstall": "npx only-allow pnpm", 45 | "build": "rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript", 46 | "dev": "rollup -c rollup.config.ts --watch --configPlugin @rollup/plugin-typescript", 47 | "lint": "eslint .", 48 | "prepublishOnly": "nr build", 49 | "release": "bumpp --commit --push --tag && pnpm publish", 50 | "test": "vitest", 51 | "typecheck": "tsc --noEmit" 52 | }, 53 | "devDependencies": { 54 | "@antfu/eslint-config": "^0.35.3", 55 | "@babel/types": "^7.22.5", 56 | "@rollup/plugin-typescript": "^11.1.2", 57 | "@types/node": "^17.0.45", 58 | "bumpp": "^7.2.0", 59 | "eslint": "^8.46.0", 60 | "esno": "^0.16.3", 61 | "rimraf": "^3.0.2", 62 | "rollup": "^3.27.1", 63 | "rollup-plugin-typescript2": "^0.32.1", 64 | "tslib": "^2.6.1", 65 | "typescript": "^4.9.5", 66 | "vite": "^4.4.8", 67 | "vitest": "^0.34.1" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@antfu/eslint-config': 12 | specifier: ^0.35.3 13 | version: 0.35.3(eslint@8.46.0)(typescript@4.9.5) 14 | '@babel/types': 15 | specifier: ^7.22.5 16 | version: 7.22.5 17 | '@rollup/plugin-typescript': 18 | specifier: ^11.1.2 19 | version: 11.1.2(rollup@3.27.1)(tslib@2.6.1)(typescript@4.9.5) 20 | '@types/node': 21 | specifier: ^17.0.45 22 | version: 17.0.45 23 | bumpp: 24 | specifier: ^7.2.0 25 | version: 7.2.0 26 | eslint: 27 | specifier: ^8.46.0 28 | version: 8.46.0 29 | esno: 30 | specifier: ^0.16.3 31 | version: 0.16.3 32 | rimraf: 33 | specifier: ^3.0.2 34 | version: 3.0.2 35 | rollup: 36 | specifier: ^3.27.1 37 | version: 3.27.1 38 | rollup-plugin-typescript2: 39 | specifier: ^0.32.1 40 | version: 0.32.1(rollup@3.27.1)(typescript@4.9.5) 41 | tslib: 42 | specifier: ^2.6.1 43 | version: 2.6.1 44 | typescript: 45 | specifier: ^4.9.5 46 | version: 4.9.5 47 | vite: 48 | specifier: ^4.4.8 49 | version: 4.4.8(@types/node@17.0.45) 50 | vitest: 51 | specifier: ^0.34.1 52 | version: 0.34.1 53 | 54 | packages: 55 | 56 | '@aashutoshrathi/word-wrap@1.2.6': 57 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 58 | engines: {node: '>=0.10.0'} 59 | 60 | '@antfu/eslint-config-basic@0.35.3': 61 | resolution: {integrity: sha512-NbWJKNgd3Ky3/ok2Z88cXNme/6I9otkiaB+FYLFgQE81sfMAhKpLKXtTSwzdcKMzhKDqUchAijt0BxjE/mcTJg==} 62 | peerDependencies: 63 | eslint: '>=7.4.0' 64 | 65 | '@antfu/eslint-config-ts@0.35.3': 66 | resolution: {integrity: sha512-FS5hir2ghXYlJWAiB2bpT9oAr0kpSNmYbaJWWkztocJG95AORl4tWzxMTkLT+TxaOmhuwJszcrMTHy5RgHL8/w==} 67 | peerDependencies: 68 | eslint: '>=7.4.0' 69 | typescript: '>=3.9' 70 | 71 | '@antfu/eslint-config-vue@0.35.3': 72 | resolution: {integrity: sha512-BA3vGLyuzqtEUb9gfgE7YzBT+a4oUnQuUPasIUfN/BVXaEhRVYlMmUgxN4ekQLuzOgUjUH13lqplXtkLJ62t9g==} 73 | peerDependencies: 74 | eslint: '>=7.4.0' 75 | 76 | '@antfu/eslint-config@0.35.3': 77 | resolution: {integrity: sha512-wd0ry/TNqaZmniqkKtZKoCvpl55x9YbHgL5Ug3H9rVuUSqaNi9G9AjYlynQqn4/M1EhYYWO597Lu7f/fC+csrg==} 78 | peerDependencies: 79 | eslint: '>=7.4.0' 80 | 81 | '@babel/code-frame@7.22.5': 82 | resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} 83 | engines: {node: '>=6.9.0'} 84 | 85 | '@babel/helper-string-parser@7.22.5': 86 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 87 | engines: {node: '>=6.9.0'} 88 | 89 | '@babel/helper-validator-identifier@7.22.5': 90 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 91 | engines: {node: '>=6.9.0'} 92 | 93 | '@babel/highlight@7.22.5': 94 | resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | '@babel/types@7.22.5': 98 | resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} 99 | engines: {node: '>=6.9.0'} 100 | 101 | '@esbuild-kit/cjs-loader@2.4.2': 102 | resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} 103 | 104 | '@esbuild-kit/core-utils@3.1.0': 105 | resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} 106 | 107 | '@esbuild-kit/esm-loader@2.5.5': 108 | resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} 109 | 110 | '@esbuild/android-arm64@0.17.19': 111 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 112 | engines: {node: '>=12'} 113 | cpu: [arm64] 114 | os: [android] 115 | 116 | '@esbuild/android-arm64@0.18.17': 117 | resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} 118 | engines: {node: '>=12'} 119 | cpu: [arm64] 120 | os: [android] 121 | 122 | '@esbuild/android-arm@0.17.19': 123 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 124 | engines: {node: '>=12'} 125 | cpu: [arm] 126 | os: [android] 127 | 128 | '@esbuild/android-arm@0.18.17': 129 | resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} 130 | engines: {node: '>=12'} 131 | cpu: [arm] 132 | os: [android] 133 | 134 | '@esbuild/android-x64@0.17.19': 135 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 136 | engines: {node: '>=12'} 137 | cpu: [x64] 138 | os: [android] 139 | 140 | '@esbuild/android-x64@0.18.17': 141 | resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} 142 | engines: {node: '>=12'} 143 | cpu: [x64] 144 | os: [android] 145 | 146 | '@esbuild/darwin-arm64@0.17.19': 147 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 148 | engines: {node: '>=12'} 149 | cpu: [arm64] 150 | os: [darwin] 151 | 152 | '@esbuild/darwin-arm64@0.18.17': 153 | resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} 154 | engines: {node: '>=12'} 155 | cpu: [arm64] 156 | os: [darwin] 157 | 158 | '@esbuild/darwin-x64@0.17.19': 159 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 160 | engines: {node: '>=12'} 161 | cpu: [x64] 162 | os: [darwin] 163 | 164 | '@esbuild/darwin-x64@0.18.17': 165 | resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} 166 | engines: {node: '>=12'} 167 | cpu: [x64] 168 | os: [darwin] 169 | 170 | '@esbuild/freebsd-arm64@0.17.19': 171 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 172 | engines: {node: '>=12'} 173 | cpu: [arm64] 174 | os: [freebsd] 175 | 176 | '@esbuild/freebsd-arm64@0.18.17': 177 | resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} 178 | engines: {node: '>=12'} 179 | cpu: [arm64] 180 | os: [freebsd] 181 | 182 | '@esbuild/freebsd-x64@0.17.19': 183 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 184 | engines: {node: '>=12'} 185 | cpu: [x64] 186 | os: [freebsd] 187 | 188 | '@esbuild/freebsd-x64@0.18.17': 189 | resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} 190 | engines: {node: '>=12'} 191 | cpu: [x64] 192 | os: [freebsd] 193 | 194 | '@esbuild/linux-arm64@0.17.19': 195 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 196 | engines: {node: '>=12'} 197 | cpu: [arm64] 198 | os: [linux] 199 | 200 | '@esbuild/linux-arm64@0.18.17': 201 | resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} 202 | engines: {node: '>=12'} 203 | cpu: [arm64] 204 | os: [linux] 205 | 206 | '@esbuild/linux-arm@0.17.19': 207 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 208 | engines: {node: '>=12'} 209 | cpu: [arm] 210 | os: [linux] 211 | 212 | '@esbuild/linux-arm@0.18.17': 213 | resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} 214 | engines: {node: '>=12'} 215 | cpu: [arm] 216 | os: [linux] 217 | 218 | '@esbuild/linux-ia32@0.17.19': 219 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 220 | engines: {node: '>=12'} 221 | cpu: [ia32] 222 | os: [linux] 223 | 224 | '@esbuild/linux-ia32@0.18.17': 225 | resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} 226 | engines: {node: '>=12'} 227 | cpu: [ia32] 228 | os: [linux] 229 | 230 | '@esbuild/linux-loong64@0.17.19': 231 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 232 | engines: {node: '>=12'} 233 | cpu: [loong64] 234 | os: [linux] 235 | 236 | '@esbuild/linux-loong64@0.18.17': 237 | resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} 238 | engines: {node: '>=12'} 239 | cpu: [loong64] 240 | os: [linux] 241 | 242 | '@esbuild/linux-mips64el@0.17.19': 243 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 244 | engines: {node: '>=12'} 245 | cpu: [mips64el] 246 | os: [linux] 247 | 248 | '@esbuild/linux-mips64el@0.18.17': 249 | resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} 250 | engines: {node: '>=12'} 251 | cpu: [mips64el] 252 | os: [linux] 253 | 254 | '@esbuild/linux-ppc64@0.17.19': 255 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 256 | engines: {node: '>=12'} 257 | cpu: [ppc64] 258 | os: [linux] 259 | 260 | '@esbuild/linux-ppc64@0.18.17': 261 | resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} 262 | engines: {node: '>=12'} 263 | cpu: [ppc64] 264 | os: [linux] 265 | 266 | '@esbuild/linux-riscv64@0.17.19': 267 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 268 | engines: {node: '>=12'} 269 | cpu: [riscv64] 270 | os: [linux] 271 | 272 | '@esbuild/linux-riscv64@0.18.17': 273 | resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} 274 | engines: {node: '>=12'} 275 | cpu: [riscv64] 276 | os: [linux] 277 | 278 | '@esbuild/linux-s390x@0.17.19': 279 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 280 | engines: {node: '>=12'} 281 | cpu: [s390x] 282 | os: [linux] 283 | 284 | '@esbuild/linux-s390x@0.18.17': 285 | resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} 286 | engines: {node: '>=12'} 287 | cpu: [s390x] 288 | os: [linux] 289 | 290 | '@esbuild/linux-x64@0.17.19': 291 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 292 | engines: {node: '>=12'} 293 | cpu: [x64] 294 | os: [linux] 295 | 296 | '@esbuild/linux-x64@0.18.17': 297 | resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} 298 | engines: {node: '>=12'} 299 | cpu: [x64] 300 | os: [linux] 301 | 302 | '@esbuild/netbsd-x64@0.17.19': 303 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [netbsd] 307 | 308 | '@esbuild/netbsd-x64@0.18.17': 309 | resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} 310 | engines: {node: '>=12'} 311 | cpu: [x64] 312 | os: [netbsd] 313 | 314 | '@esbuild/openbsd-x64@0.17.19': 315 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 316 | engines: {node: '>=12'} 317 | cpu: [x64] 318 | os: [openbsd] 319 | 320 | '@esbuild/openbsd-x64@0.18.17': 321 | resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} 322 | engines: {node: '>=12'} 323 | cpu: [x64] 324 | os: [openbsd] 325 | 326 | '@esbuild/sunos-x64@0.17.19': 327 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 328 | engines: {node: '>=12'} 329 | cpu: [x64] 330 | os: [sunos] 331 | 332 | '@esbuild/sunos-x64@0.18.17': 333 | resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} 334 | engines: {node: '>=12'} 335 | cpu: [x64] 336 | os: [sunos] 337 | 338 | '@esbuild/win32-arm64@0.17.19': 339 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 340 | engines: {node: '>=12'} 341 | cpu: [arm64] 342 | os: [win32] 343 | 344 | '@esbuild/win32-arm64@0.18.17': 345 | resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} 346 | engines: {node: '>=12'} 347 | cpu: [arm64] 348 | os: [win32] 349 | 350 | '@esbuild/win32-ia32@0.17.19': 351 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 352 | engines: {node: '>=12'} 353 | cpu: [ia32] 354 | os: [win32] 355 | 356 | '@esbuild/win32-ia32@0.18.17': 357 | resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} 358 | engines: {node: '>=12'} 359 | cpu: [ia32] 360 | os: [win32] 361 | 362 | '@esbuild/win32-x64@0.17.19': 363 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 364 | engines: {node: '>=12'} 365 | cpu: [x64] 366 | os: [win32] 367 | 368 | '@esbuild/win32-x64@0.18.17': 369 | resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} 370 | engines: {node: '>=12'} 371 | cpu: [x64] 372 | os: [win32] 373 | 374 | '@eslint-community/eslint-utils@4.4.0': 375 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 376 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 377 | peerDependencies: 378 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 379 | 380 | '@eslint-community/regexpp@4.6.2': 381 | resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} 382 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 383 | 384 | '@eslint/eslintrc@2.1.1': 385 | resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} 386 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 387 | 388 | '@eslint/js@8.46.0': 389 | resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} 390 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 391 | 392 | '@humanwhocodes/config-array@0.11.10': 393 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 394 | engines: {node: '>=10.10.0'} 395 | 396 | '@humanwhocodes/module-importer@1.0.1': 397 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 398 | engines: {node: '>=12.22'} 399 | 400 | '@humanwhocodes/object-schema@1.2.1': 401 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 402 | 403 | '@jest/schemas@29.6.0': 404 | resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} 405 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 406 | 407 | '@jridgewell/sourcemap-codec@1.4.15': 408 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 409 | 410 | '@jsdevtools/ez-spawn@3.0.4': 411 | resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} 412 | engines: {node: '>=10'} 413 | 414 | '@nodelib/fs.scandir@2.1.5': 415 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 416 | engines: {node: '>= 8'} 417 | 418 | '@nodelib/fs.stat@2.0.5': 419 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 420 | engines: {node: '>= 8'} 421 | 422 | '@nodelib/fs.walk@1.2.8': 423 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 424 | engines: {node: '>= 8'} 425 | 426 | '@rollup/plugin-typescript@11.1.2': 427 | resolution: {integrity: sha512-0ghSOCMcA7fl1JM+0gYRf+Q/HWyg+zg7/gDSc+fRLmlJWcW5K1I+CLRzaRhXf4Y3DRyPnnDo4M2ktw+a6JcDEg==} 428 | engines: {node: '>=14.0.0'} 429 | peerDependencies: 430 | rollup: ^2.14.0||^3.0.0 431 | tslib: '*' 432 | typescript: '>=3.7.0' 433 | peerDependenciesMeta: 434 | rollup: 435 | optional: true 436 | tslib: 437 | optional: true 438 | 439 | '@rollup/pluginutils@4.2.1': 440 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 441 | engines: {node: '>= 8.0.0'} 442 | 443 | '@rollup/pluginutils@5.0.2': 444 | resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} 445 | engines: {node: '>=14.0.0'} 446 | peerDependencies: 447 | rollup: ^1.20.0||^2.0.0||^3.0.0 448 | peerDependenciesMeta: 449 | rollup: 450 | optional: true 451 | 452 | '@sinclair/typebox@0.27.8': 453 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 454 | 455 | '@types/chai-subset@1.3.3': 456 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 457 | 458 | '@types/chai@4.3.5': 459 | resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} 460 | 461 | '@types/estree@1.0.1': 462 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} 463 | 464 | '@types/json-schema@7.0.12': 465 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 466 | 467 | '@types/json5@0.0.29': 468 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 469 | 470 | '@types/mdast@3.0.12': 471 | resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} 472 | 473 | '@types/node@17.0.45': 474 | resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} 475 | 476 | '@types/normalize-package-data@2.4.1': 477 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 478 | 479 | '@types/semver@7.5.0': 480 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 481 | 482 | '@types/unist@2.0.7': 483 | resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} 484 | 485 | '@typescript-eslint/eslint-plugin@5.62.0': 486 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 487 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 488 | peerDependencies: 489 | '@typescript-eslint/parser': ^5.0.0 490 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 491 | typescript: '*' 492 | peerDependenciesMeta: 493 | typescript: 494 | optional: true 495 | 496 | '@typescript-eslint/parser@5.62.0': 497 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 498 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 499 | peerDependencies: 500 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 501 | typescript: '*' 502 | peerDependenciesMeta: 503 | typescript: 504 | optional: true 505 | 506 | '@typescript-eslint/scope-manager@5.62.0': 507 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 508 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 509 | 510 | '@typescript-eslint/type-utils@5.62.0': 511 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 512 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 513 | peerDependencies: 514 | eslint: '*' 515 | typescript: '*' 516 | peerDependenciesMeta: 517 | typescript: 518 | optional: true 519 | 520 | '@typescript-eslint/types@5.62.0': 521 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 522 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 523 | 524 | '@typescript-eslint/typescript-estree@5.62.0': 525 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 526 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 527 | peerDependencies: 528 | typescript: '*' 529 | peerDependenciesMeta: 530 | typescript: 531 | optional: true 532 | 533 | '@typescript-eslint/utils@5.62.0': 534 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 535 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 536 | peerDependencies: 537 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 538 | 539 | '@typescript-eslint/visitor-keys@5.62.0': 540 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 541 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 542 | 543 | '@vitest/expect@0.34.1': 544 | resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==} 545 | 546 | '@vitest/runner@0.34.1': 547 | resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==} 548 | 549 | '@vitest/snapshot@0.34.1': 550 | resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==} 551 | 552 | '@vitest/spy@0.34.1': 553 | resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==} 554 | 555 | '@vitest/utils@0.34.1': 556 | resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==} 557 | 558 | acorn-jsx@5.3.2: 559 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 560 | peerDependencies: 561 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 562 | 563 | acorn-walk@8.2.0: 564 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 565 | engines: {node: '>=0.4.0'} 566 | 567 | acorn@8.10.0: 568 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 569 | engines: {node: '>=0.4.0'} 570 | hasBin: true 571 | 572 | ajv@6.12.6: 573 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 574 | 575 | ansi-regex@5.0.1: 576 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 577 | engines: {node: '>=8'} 578 | 579 | ansi-styles@3.2.1: 580 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 581 | engines: {node: '>=4'} 582 | 583 | ansi-styles@4.3.0: 584 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 585 | engines: {node: '>=8'} 586 | 587 | ansi-styles@5.2.0: 588 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 589 | engines: {node: '>=10'} 590 | 591 | argparse@2.0.1: 592 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 593 | 594 | array-back@3.1.0: 595 | resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} 596 | engines: {node: '>=6'} 597 | 598 | array-buffer-byte-length@1.0.0: 599 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 600 | 601 | array-includes@3.1.6: 602 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 603 | engines: {node: '>= 0.4'} 604 | 605 | array-union@2.1.0: 606 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 607 | engines: {node: '>=8'} 608 | 609 | array.prototype.findlastindex@1.2.2: 610 | resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} 611 | engines: {node: '>= 0.4'} 612 | 613 | array.prototype.flat@1.3.1: 614 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 615 | engines: {node: '>= 0.4'} 616 | 617 | array.prototype.flatmap@1.3.1: 618 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 619 | engines: {node: '>= 0.4'} 620 | 621 | arraybuffer.prototype.slice@1.0.1: 622 | resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} 623 | engines: {node: '>= 0.4'} 624 | 625 | assertion-error@1.1.0: 626 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 627 | 628 | available-typed-arrays@1.0.5: 629 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 630 | engines: {node: '>= 0.4'} 631 | 632 | balanced-match@1.0.2: 633 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 634 | 635 | boolbase@1.0.0: 636 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 637 | 638 | brace-expansion@1.1.11: 639 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 640 | 641 | braces@3.0.2: 642 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 643 | engines: {node: '>=8'} 644 | 645 | buffer-from@1.1.2: 646 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 647 | 648 | builtin-modules@3.3.0: 649 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 650 | engines: {node: '>=6'} 651 | 652 | builtins@5.0.1: 653 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 654 | 655 | bumpp@7.2.0: 656 | resolution: {integrity: sha512-vQxdpWe7VzdpV4dVjpWoGwTDrKZn4eqKVmjIYUlDgrmjesXAqJnWhu+VFxazoE4pLs1q5NwDhgzK1xAFL0K+Jg==} 657 | engines: {node: '>=10'} 658 | hasBin: true 659 | 660 | cac@6.7.14: 661 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 662 | engines: {node: '>=8'} 663 | 664 | call-bind@1.0.2: 665 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 666 | 667 | call-me-maybe@1.0.2: 668 | resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} 669 | 670 | callsites@3.1.0: 671 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 672 | engines: {node: '>=6'} 673 | 674 | chai@4.3.7: 675 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 676 | engines: {node: '>=4'} 677 | 678 | chalk@2.4.2: 679 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 680 | engines: {node: '>=4'} 681 | 682 | chalk@4.1.2: 683 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 684 | engines: {node: '>=10'} 685 | 686 | character-entities-legacy@1.1.4: 687 | resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} 688 | 689 | character-entities@1.2.4: 690 | resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} 691 | 692 | character-reference-invalid@1.1.4: 693 | resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} 694 | 695 | check-error@1.0.2: 696 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 697 | 698 | ci-info@3.8.0: 699 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 700 | engines: {node: '>=8'} 701 | 702 | clean-regexp@1.0.0: 703 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 704 | engines: {node: '>=4'} 705 | 706 | color-convert@1.9.3: 707 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 708 | 709 | color-convert@2.0.1: 710 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 711 | engines: {node: '>=7.0.0'} 712 | 713 | color-name@1.1.3: 714 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 715 | 716 | color-name@1.1.4: 717 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 718 | 719 | command-line-args@5.2.1: 720 | resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} 721 | engines: {node: '>=4.0.0'} 722 | 723 | commondir@1.0.1: 724 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 725 | 726 | concat-map@0.0.1: 727 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 728 | 729 | cross-spawn@7.0.3: 730 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 731 | engines: {node: '>= 8'} 732 | 733 | cssesc@3.0.0: 734 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 735 | engines: {node: '>=4'} 736 | hasBin: true 737 | 738 | debug@3.2.7: 739 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 740 | peerDependencies: 741 | supports-color: '*' 742 | peerDependenciesMeta: 743 | supports-color: 744 | optional: true 745 | 746 | debug@4.3.4: 747 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 748 | engines: {node: '>=6.0'} 749 | peerDependencies: 750 | supports-color: '*' 751 | peerDependenciesMeta: 752 | supports-color: 753 | optional: true 754 | 755 | deep-eql@4.1.3: 756 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 757 | engines: {node: '>=6'} 758 | 759 | deep-is@0.1.4: 760 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 761 | 762 | define-properties@1.2.0: 763 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 764 | engines: {node: '>= 0.4'} 765 | 766 | diff-sequences@29.4.3: 767 | resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} 768 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 769 | 770 | dir-glob@3.0.1: 771 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 772 | engines: {node: '>=8'} 773 | 774 | doctrine@2.1.0: 775 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 776 | engines: {node: '>=0.10.0'} 777 | 778 | doctrine@3.0.0: 779 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 780 | engines: {node: '>=6.0.0'} 781 | 782 | dom-serializer@2.0.0: 783 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 784 | 785 | domelementtype@2.3.0: 786 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 787 | 788 | domhandler@5.0.3: 789 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 790 | engines: {node: '>= 4'} 791 | 792 | domutils@3.1.0: 793 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 794 | 795 | entities@4.5.0: 796 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 797 | engines: {node: '>=0.12'} 798 | 799 | error-ex@1.3.2: 800 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 801 | 802 | es-abstract@1.22.1: 803 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} 804 | engines: {node: '>= 0.4'} 805 | 806 | es-set-tostringtag@2.0.1: 807 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 808 | engines: {node: '>= 0.4'} 809 | 810 | es-shim-unscopables@1.0.0: 811 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 812 | 813 | es-to-primitive@1.2.1: 814 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 815 | engines: {node: '>= 0.4'} 816 | 817 | esbuild@0.17.19: 818 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 819 | engines: {node: '>=12'} 820 | hasBin: true 821 | 822 | esbuild@0.18.17: 823 | resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} 824 | engines: {node: '>=12'} 825 | hasBin: true 826 | 827 | escape-string-regexp@1.0.5: 828 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 829 | engines: {node: '>=0.8.0'} 830 | 831 | escape-string-regexp@4.0.0: 832 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 833 | engines: {node: '>=10'} 834 | 835 | eslint-import-resolver-node@0.3.7: 836 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 837 | 838 | eslint-module-utils@2.8.0: 839 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 840 | engines: {node: '>=4'} 841 | peerDependencies: 842 | '@typescript-eslint/parser': '*' 843 | eslint: '*' 844 | eslint-import-resolver-node: '*' 845 | eslint-import-resolver-typescript: '*' 846 | eslint-import-resolver-webpack: '*' 847 | peerDependenciesMeta: 848 | '@typescript-eslint/parser': 849 | optional: true 850 | eslint: 851 | optional: true 852 | eslint-import-resolver-node: 853 | optional: true 854 | eslint-import-resolver-typescript: 855 | optional: true 856 | eslint-import-resolver-webpack: 857 | optional: true 858 | 859 | eslint-plugin-antfu@0.35.3: 860 | resolution: {integrity: sha512-90Xct24s2n3aQhuuFFcPLhF5E6lU5s225B0VXupSjvDTuF+CmSQQLQG6KcqcdpA8O6dMbeXB9zy3SJ4aO7lndw==} 861 | 862 | eslint-plugin-es@4.1.0: 863 | resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} 864 | engines: {node: '>=8.10.0'} 865 | peerDependencies: 866 | eslint: '>=4.19.1' 867 | 868 | eslint-plugin-eslint-comments@3.2.0: 869 | resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} 870 | engines: {node: '>=6.5.0'} 871 | peerDependencies: 872 | eslint: '>=4.19.1' 873 | 874 | eslint-plugin-html@7.1.0: 875 | resolution: {integrity: sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==} 876 | 877 | eslint-plugin-import@2.28.0: 878 | resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} 879 | engines: {node: '>=4'} 880 | peerDependencies: 881 | '@typescript-eslint/parser': '*' 882 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 883 | peerDependenciesMeta: 884 | '@typescript-eslint/parser': 885 | optional: true 886 | 887 | eslint-plugin-jest@27.2.3: 888 | resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} 889 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 890 | peerDependencies: 891 | '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 892 | eslint: ^7.0.0 || ^8.0.0 893 | jest: '*' 894 | peerDependenciesMeta: 895 | '@typescript-eslint/eslint-plugin': 896 | optional: true 897 | jest: 898 | optional: true 899 | 900 | eslint-plugin-jsonc@2.9.0: 901 | resolution: {integrity: sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA==} 902 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 903 | peerDependencies: 904 | eslint: '>=6.0.0' 905 | 906 | eslint-plugin-markdown@3.0.1: 907 | resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} 908 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 909 | peerDependencies: 910 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 911 | 912 | eslint-plugin-n@15.7.0: 913 | resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} 914 | engines: {node: '>=12.22.0'} 915 | peerDependencies: 916 | eslint: '>=7.0.0' 917 | 918 | eslint-plugin-no-only-tests@3.1.0: 919 | resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} 920 | engines: {node: '>=5.0.0'} 921 | 922 | eslint-plugin-promise@6.1.1: 923 | resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} 924 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 925 | peerDependencies: 926 | eslint: ^7.0.0 || ^8.0.0 927 | 928 | eslint-plugin-unicorn@45.0.2: 929 | resolution: {integrity: sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==} 930 | engines: {node: '>=14.18'} 931 | peerDependencies: 932 | eslint: '>=8.28.0' 933 | 934 | eslint-plugin-unused-imports@2.0.0: 935 | resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} 936 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 937 | peerDependencies: 938 | '@typescript-eslint/eslint-plugin': ^5.0.0 939 | eslint: ^8.0.0 940 | peerDependenciesMeta: 941 | '@typescript-eslint/eslint-plugin': 942 | optional: true 943 | 944 | eslint-plugin-vue@9.16.1: 945 | resolution: {integrity: sha512-2FtnTqazA6aYONfDuOZTk0QzwhAwi7Z4+uJ7+GHeGxcKapjqWlDsRWDenvyG/utyOfAS5bVRmAG3cEWiYEz2bA==} 946 | engines: {node: ^14.17.0 || >=16.0.0} 947 | peerDependencies: 948 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 949 | 950 | eslint-plugin-yml@1.8.0: 951 | resolution: {integrity: sha512-fgBiJvXD0P2IN7SARDJ2J7mx8t0bLdG6Zcig4ufOqW5hOvSiFxeUyc2g5I1uIm8AExbo26NNYCcTGZT0MXTsyg==} 952 | engines: {node: ^14.17.0 || >=16.0.0} 953 | peerDependencies: 954 | eslint: '>=6.0.0' 955 | 956 | eslint-rule-composer@0.3.0: 957 | resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} 958 | engines: {node: '>=4.0.0'} 959 | 960 | eslint-scope@5.1.1: 961 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 962 | engines: {node: '>=8.0.0'} 963 | 964 | eslint-scope@7.2.2: 965 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 966 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 967 | 968 | eslint-utils@2.1.0: 969 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 970 | engines: {node: '>=6'} 971 | 972 | eslint-utils@3.0.0: 973 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 974 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 975 | peerDependencies: 976 | eslint: '>=5' 977 | 978 | eslint-visitor-keys@1.3.0: 979 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 980 | engines: {node: '>=4'} 981 | 982 | eslint-visitor-keys@2.1.0: 983 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 984 | engines: {node: '>=10'} 985 | 986 | eslint-visitor-keys@3.4.2: 987 | resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} 988 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 989 | 990 | eslint@8.46.0: 991 | resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} 992 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 993 | hasBin: true 994 | 995 | esno@0.16.3: 996 | resolution: {integrity: sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==} 997 | hasBin: true 998 | 999 | espree@9.6.1: 1000 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1001 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1002 | 1003 | esquery@1.5.0: 1004 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1005 | engines: {node: '>=0.10'} 1006 | 1007 | esrecurse@4.3.0: 1008 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1009 | engines: {node: '>=4.0'} 1010 | 1011 | estraverse@4.3.0: 1012 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1013 | engines: {node: '>=4.0'} 1014 | 1015 | estraverse@5.3.0: 1016 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1017 | engines: {node: '>=4.0'} 1018 | 1019 | estree-walker@2.0.2: 1020 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1021 | 1022 | esutils@2.0.3: 1023 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1024 | engines: {node: '>=0.10.0'} 1025 | 1026 | fast-deep-equal@3.1.3: 1027 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1028 | 1029 | fast-glob@3.3.1: 1030 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1031 | engines: {node: '>=8.6.0'} 1032 | 1033 | fast-json-stable-stringify@2.1.0: 1034 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1035 | 1036 | fast-levenshtein@2.0.6: 1037 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1038 | 1039 | fastq@1.15.0: 1040 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1041 | 1042 | file-entry-cache@6.0.1: 1043 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1044 | engines: {node: ^10.12.0 || >=12.0.0} 1045 | 1046 | fill-range@7.0.1: 1047 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1048 | engines: {node: '>=8'} 1049 | 1050 | find-cache-dir@3.3.2: 1051 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 1052 | engines: {node: '>=8'} 1053 | 1054 | find-replace@3.0.0: 1055 | resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} 1056 | engines: {node: '>=4.0.0'} 1057 | 1058 | find-up@4.1.0: 1059 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1060 | engines: {node: '>=8'} 1061 | 1062 | find-up@5.0.0: 1063 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1064 | engines: {node: '>=10'} 1065 | 1066 | flat-cache@3.0.4: 1067 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1068 | engines: {node: ^10.12.0 || >=12.0.0} 1069 | 1070 | flatted@3.2.7: 1071 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1072 | 1073 | for-each@0.3.3: 1074 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1075 | 1076 | fs-extra@10.1.0: 1077 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 1078 | engines: {node: '>=12'} 1079 | 1080 | fs.realpath@1.0.0: 1081 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1082 | 1083 | fsevents@2.3.2: 1084 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1085 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1086 | os: [darwin] 1087 | 1088 | function-bind@1.1.1: 1089 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1090 | 1091 | function.prototype.name@1.1.5: 1092 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1093 | engines: {node: '>= 0.4'} 1094 | 1095 | functions-have-names@1.2.3: 1096 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1097 | 1098 | get-func-name@2.0.0: 1099 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1100 | 1101 | get-intrinsic@1.2.1: 1102 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1103 | 1104 | get-symbol-description@1.0.0: 1105 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1106 | engines: {node: '>= 0.4'} 1107 | 1108 | get-tsconfig@4.6.2: 1109 | resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==} 1110 | 1111 | glob-parent@5.1.2: 1112 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1113 | engines: {node: '>= 6'} 1114 | 1115 | glob-parent@6.0.2: 1116 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1117 | engines: {node: '>=10.13.0'} 1118 | 1119 | glob@7.2.3: 1120 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1121 | 1122 | globals@13.20.0: 1123 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1124 | engines: {node: '>=8'} 1125 | 1126 | globalthis@1.0.3: 1127 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1128 | engines: {node: '>= 0.4'} 1129 | 1130 | globby@11.1.0: 1131 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1132 | engines: {node: '>=10'} 1133 | 1134 | gopd@1.0.1: 1135 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1136 | 1137 | graceful-fs@4.2.11: 1138 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1139 | 1140 | graphemer@1.4.0: 1141 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1142 | 1143 | has-bigints@1.0.2: 1144 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1145 | 1146 | has-flag@3.0.0: 1147 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1148 | engines: {node: '>=4'} 1149 | 1150 | has-flag@4.0.0: 1151 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1152 | engines: {node: '>=8'} 1153 | 1154 | has-property-descriptors@1.0.0: 1155 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1156 | 1157 | has-proto@1.0.1: 1158 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1159 | engines: {node: '>= 0.4'} 1160 | 1161 | has-symbols@1.0.3: 1162 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1163 | engines: {node: '>= 0.4'} 1164 | 1165 | has-tostringtag@1.0.0: 1166 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1167 | engines: {node: '>= 0.4'} 1168 | 1169 | has@1.0.3: 1170 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1171 | engines: {node: '>= 0.4.0'} 1172 | 1173 | hosted-git-info@2.8.9: 1174 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1175 | 1176 | htmlparser2@8.0.2: 1177 | resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} 1178 | 1179 | ignore@5.2.4: 1180 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1181 | engines: {node: '>= 4'} 1182 | 1183 | import-fresh@3.3.0: 1184 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1185 | engines: {node: '>=6'} 1186 | 1187 | imurmurhash@0.1.4: 1188 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1189 | engines: {node: '>=0.8.19'} 1190 | 1191 | indent-string@4.0.0: 1192 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1193 | engines: {node: '>=8'} 1194 | 1195 | inflight@1.0.6: 1196 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1197 | 1198 | inherits@2.0.4: 1199 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1200 | 1201 | internal-slot@1.0.5: 1202 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1203 | engines: {node: '>= 0.4'} 1204 | 1205 | is-alphabetical@1.0.4: 1206 | resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} 1207 | 1208 | is-alphanumerical@1.0.4: 1209 | resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} 1210 | 1211 | is-array-buffer@3.0.2: 1212 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1213 | 1214 | is-arrayish@0.2.1: 1215 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1216 | 1217 | is-bigint@1.0.4: 1218 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1219 | 1220 | is-boolean-object@1.1.2: 1221 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1222 | engines: {node: '>= 0.4'} 1223 | 1224 | is-builtin-module@3.2.1: 1225 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1226 | engines: {node: '>=6'} 1227 | 1228 | is-callable@1.2.7: 1229 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1230 | engines: {node: '>= 0.4'} 1231 | 1232 | is-core-module@2.12.1: 1233 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1234 | 1235 | is-date-object@1.0.5: 1236 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1237 | engines: {node: '>= 0.4'} 1238 | 1239 | is-decimal@1.0.4: 1240 | resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} 1241 | 1242 | is-extglob@2.1.1: 1243 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1244 | engines: {node: '>=0.10.0'} 1245 | 1246 | is-glob@4.0.3: 1247 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1248 | engines: {node: '>=0.10.0'} 1249 | 1250 | is-hexadecimal@1.0.4: 1251 | resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} 1252 | 1253 | is-negative-zero@2.0.2: 1254 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1255 | engines: {node: '>= 0.4'} 1256 | 1257 | is-number-object@1.0.7: 1258 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1259 | engines: {node: '>= 0.4'} 1260 | 1261 | is-number@7.0.0: 1262 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1263 | engines: {node: '>=0.12.0'} 1264 | 1265 | is-path-inside@3.0.3: 1266 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1267 | engines: {node: '>=8'} 1268 | 1269 | is-regex@1.1.4: 1270 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1271 | engines: {node: '>= 0.4'} 1272 | 1273 | is-shared-array-buffer@1.0.2: 1274 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1275 | 1276 | is-string@1.0.7: 1277 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1278 | engines: {node: '>= 0.4'} 1279 | 1280 | is-symbol@1.0.4: 1281 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1282 | engines: {node: '>= 0.4'} 1283 | 1284 | is-typed-array@1.1.12: 1285 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1286 | engines: {node: '>= 0.4'} 1287 | 1288 | is-weakref@1.0.2: 1289 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1290 | 1291 | isarray@2.0.5: 1292 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1293 | 1294 | isexe@2.0.0: 1295 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1296 | 1297 | js-tokens@4.0.0: 1298 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1299 | 1300 | js-yaml@4.1.0: 1301 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1302 | hasBin: true 1303 | 1304 | jsesc@0.5.0: 1305 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 1306 | hasBin: true 1307 | 1308 | jsesc@3.0.2: 1309 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 1310 | engines: {node: '>=6'} 1311 | hasBin: true 1312 | 1313 | json-parse-even-better-errors@2.3.1: 1314 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1315 | 1316 | json-schema-traverse@0.4.1: 1317 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1318 | 1319 | json-stable-stringify-without-jsonify@1.0.1: 1320 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1321 | 1322 | json5@1.0.2: 1323 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1324 | hasBin: true 1325 | 1326 | jsonc-eslint-parser@2.3.0: 1327 | resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} 1328 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1329 | 1330 | jsonc-parser@3.2.0: 1331 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1332 | 1333 | jsonfile@6.1.0: 1334 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1335 | 1336 | kleur@3.0.3: 1337 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1338 | engines: {node: '>=6'} 1339 | 1340 | levn@0.4.1: 1341 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1342 | engines: {node: '>= 0.8.0'} 1343 | 1344 | lines-and-columns@1.2.4: 1345 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1346 | 1347 | local-pkg@0.4.3: 1348 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 1349 | engines: {node: '>=14'} 1350 | 1351 | locate-path@5.0.0: 1352 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1353 | engines: {node: '>=8'} 1354 | 1355 | locate-path@6.0.0: 1356 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1357 | engines: {node: '>=10'} 1358 | 1359 | lodash.camelcase@4.3.0: 1360 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 1361 | 1362 | lodash.merge@4.6.2: 1363 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1364 | 1365 | lodash@4.17.21: 1366 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1367 | 1368 | loupe@2.3.6: 1369 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 1370 | 1371 | lru-cache@6.0.0: 1372 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1373 | engines: {node: '>=10'} 1374 | 1375 | magic-string@0.30.2: 1376 | resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} 1377 | engines: {node: '>=12'} 1378 | 1379 | make-dir@3.1.0: 1380 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 1381 | engines: {node: '>=8'} 1382 | 1383 | mdast-util-from-markdown@0.8.5: 1384 | resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} 1385 | 1386 | mdast-util-to-string@2.0.0: 1387 | resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} 1388 | 1389 | merge2@1.4.1: 1390 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1391 | engines: {node: '>= 8'} 1392 | 1393 | micromark@2.11.4: 1394 | resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} 1395 | 1396 | micromatch@4.0.5: 1397 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1398 | engines: {node: '>=8.6'} 1399 | 1400 | min-indent@1.0.1: 1401 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1402 | engines: {node: '>=4'} 1403 | 1404 | minimatch@3.1.2: 1405 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1406 | 1407 | minimist@1.2.8: 1408 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1409 | 1410 | mlly@1.4.0: 1411 | resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} 1412 | 1413 | ms@2.1.2: 1414 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1415 | 1416 | ms@2.1.3: 1417 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1418 | 1419 | nanoid@3.3.6: 1420 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1421 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1422 | hasBin: true 1423 | 1424 | natural-compare-lite@1.4.0: 1425 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1426 | 1427 | natural-compare@1.4.0: 1428 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1429 | 1430 | normalize-package-data@2.5.0: 1431 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1432 | 1433 | nth-check@2.1.1: 1434 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1435 | 1436 | object-inspect@1.12.3: 1437 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1438 | 1439 | object-keys@1.1.1: 1440 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1441 | engines: {node: '>= 0.4'} 1442 | 1443 | object.assign@4.1.4: 1444 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1445 | engines: {node: '>= 0.4'} 1446 | 1447 | object.fromentries@2.0.6: 1448 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 1449 | engines: {node: '>= 0.4'} 1450 | 1451 | object.groupby@1.0.0: 1452 | resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} 1453 | 1454 | object.values@1.1.6: 1455 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 1456 | engines: {node: '>= 0.4'} 1457 | 1458 | once@1.4.0: 1459 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1460 | 1461 | optionator@0.9.3: 1462 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1463 | engines: {node: '>= 0.8.0'} 1464 | 1465 | p-limit@2.3.0: 1466 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1467 | engines: {node: '>=6'} 1468 | 1469 | p-limit@3.1.0: 1470 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1471 | engines: {node: '>=10'} 1472 | 1473 | p-limit@4.0.0: 1474 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 1475 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1476 | 1477 | p-locate@4.1.0: 1478 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1479 | engines: {node: '>=8'} 1480 | 1481 | p-locate@5.0.0: 1482 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1483 | engines: {node: '>=10'} 1484 | 1485 | p-try@2.2.0: 1486 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1487 | engines: {node: '>=6'} 1488 | 1489 | parent-module@1.0.1: 1490 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1491 | engines: {node: '>=6'} 1492 | 1493 | parse-entities@2.0.0: 1494 | resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} 1495 | 1496 | parse-json@5.2.0: 1497 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1498 | engines: {node: '>=8'} 1499 | 1500 | path-exists@4.0.0: 1501 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1502 | engines: {node: '>=8'} 1503 | 1504 | path-is-absolute@1.0.1: 1505 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1506 | engines: {node: '>=0.10.0'} 1507 | 1508 | path-key@3.1.1: 1509 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1510 | engines: {node: '>=8'} 1511 | 1512 | path-parse@1.0.7: 1513 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1514 | 1515 | path-type@4.0.0: 1516 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1517 | engines: {node: '>=8'} 1518 | 1519 | pathe@1.1.1: 1520 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 1521 | 1522 | pathval@1.1.1: 1523 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1524 | 1525 | picocolors@1.0.0: 1526 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1527 | 1528 | picomatch@2.3.1: 1529 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1530 | engines: {node: '>=8.6'} 1531 | 1532 | pkg-dir@4.2.0: 1533 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1534 | engines: {node: '>=8'} 1535 | 1536 | pkg-types@1.0.3: 1537 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1538 | 1539 | pluralize@8.0.0: 1540 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1541 | engines: {node: '>=4'} 1542 | 1543 | postcss-selector-parser@6.0.13: 1544 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 1545 | engines: {node: '>=4'} 1546 | 1547 | postcss@8.4.27: 1548 | resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} 1549 | engines: {node: ^10 || ^12 || >=14} 1550 | 1551 | prelude-ls@1.2.1: 1552 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1553 | engines: {node: '>= 0.8.0'} 1554 | 1555 | pretty-format@29.6.2: 1556 | resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==} 1557 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1558 | 1559 | prompts@2.4.2: 1560 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1561 | engines: {node: '>= 6'} 1562 | 1563 | punycode@2.3.0: 1564 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1565 | engines: {node: '>=6'} 1566 | 1567 | queue-microtask@1.2.3: 1568 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1569 | 1570 | react-is@18.2.0: 1571 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1572 | 1573 | read-pkg-up@7.0.1: 1574 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1575 | engines: {node: '>=8'} 1576 | 1577 | read-pkg@5.2.0: 1578 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1579 | engines: {node: '>=8'} 1580 | 1581 | regexp-tree@0.1.27: 1582 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1583 | hasBin: true 1584 | 1585 | regexp.prototype.flags@1.5.0: 1586 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 1587 | engines: {node: '>= 0.4'} 1588 | 1589 | regexpp@3.2.0: 1590 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1591 | engines: {node: '>=8'} 1592 | 1593 | regjsparser@0.9.1: 1594 | resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} 1595 | hasBin: true 1596 | 1597 | resolve-from@4.0.0: 1598 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1599 | engines: {node: '>=4'} 1600 | 1601 | resolve-pkg-maps@1.0.0: 1602 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1603 | 1604 | resolve@1.22.2: 1605 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 1606 | hasBin: true 1607 | 1608 | resolve@1.22.3: 1609 | resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} 1610 | hasBin: true 1611 | 1612 | reusify@1.0.4: 1613 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1614 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1615 | 1616 | rimraf@3.0.2: 1617 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1618 | hasBin: true 1619 | 1620 | rollup-plugin-typescript2@0.32.1: 1621 | resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} 1622 | peerDependencies: 1623 | rollup: '>=1.26.3' 1624 | typescript: '>=2.4.0' 1625 | 1626 | rollup@3.27.1: 1627 | resolution: {integrity: sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==} 1628 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1629 | hasBin: true 1630 | 1631 | run-parallel@1.2.0: 1632 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1633 | 1634 | safe-array-concat@1.0.0: 1635 | resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} 1636 | engines: {node: '>=0.4'} 1637 | 1638 | safe-regex-test@1.0.0: 1639 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 1640 | 1641 | safe-regex@2.1.1: 1642 | resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} 1643 | 1644 | semver@5.7.2: 1645 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1646 | hasBin: true 1647 | 1648 | semver@6.3.1: 1649 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1650 | hasBin: true 1651 | 1652 | semver@7.5.4: 1653 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1654 | engines: {node: '>=10'} 1655 | hasBin: true 1656 | 1657 | shebang-command@2.0.0: 1658 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1659 | engines: {node: '>=8'} 1660 | 1661 | shebang-regex@3.0.0: 1662 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1663 | engines: {node: '>=8'} 1664 | 1665 | side-channel@1.0.4: 1666 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1667 | 1668 | siginfo@2.0.0: 1669 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1670 | 1671 | sisteransi@1.0.5: 1672 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1673 | 1674 | slash@3.0.0: 1675 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1676 | engines: {node: '>=8'} 1677 | 1678 | source-map-js@1.0.2: 1679 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1680 | engines: {node: '>=0.10.0'} 1681 | 1682 | source-map-support@0.5.21: 1683 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1684 | 1685 | source-map@0.6.1: 1686 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1687 | engines: {node: '>=0.10.0'} 1688 | 1689 | spdx-correct@3.2.0: 1690 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1691 | 1692 | spdx-exceptions@2.3.0: 1693 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 1694 | 1695 | spdx-expression-parse@3.0.1: 1696 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1697 | 1698 | spdx-license-ids@3.0.13: 1699 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} 1700 | 1701 | stackback@0.0.2: 1702 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1703 | 1704 | std-env@3.3.3: 1705 | resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} 1706 | 1707 | string-argv@0.3.2: 1708 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1709 | engines: {node: '>=0.6.19'} 1710 | 1711 | string.prototype.trim@1.2.7: 1712 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 1713 | engines: {node: '>= 0.4'} 1714 | 1715 | string.prototype.trimend@1.0.6: 1716 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 1717 | 1718 | string.prototype.trimstart@1.0.6: 1719 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 1720 | 1721 | strip-ansi@6.0.1: 1722 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1723 | engines: {node: '>=8'} 1724 | 1725 | strip-bom@3.0.0: 1726 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1727 | engines: {node: '>=4'} 1728 | 1729 | strip-indent@3.0.0: 1730 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1731 | engines: {node: '>=8'} 1732 | 1733 | strip-json-comments@3.1.1: 1734 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1735 | engines: {node: '>=8'} 1736 | 1737 | strip-literal@1.3.0: 1738 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 1739 | 1740 | supports-color@5.5.0: 1741 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1742 | engines: {node: '>=4'} 1743 | 1744 | supports-color@7.2.0: 1745 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1746 | engines: {node: '>=8'} 1747 | 1748 | supports-preserve-symlinks-flag@1.0.0: 1749 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1750 | engines: {node: '>= 0.4'} 1751 | 1752 | text-table@0.2.0: 1753 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1754 | 1755 | tinybench@2.5.0: 1756 | resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} 1757 | 1758 | tinypool@0.7.0: 1759 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} 1760 | engines: {node: '>=14.0.0'} 1761 | 1762 | tinyspy@2.1.1: 1763 | resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} 1764 | engines: {node: '>=14.0.0'} 1765 | 1766 | to-fast-properties@2.0.0: 1767 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1768 | engines: {node: '>=4'} 1769 | 1770 | to-regex-range@5.0.1: 1771 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1772 | engines: {node: '>=8.0'} 1773 | 1774 | tsconfig-paths@3.14.2: 1775 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 1776 | 1777 | tslib@1.14.1: 1778 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1779 | 1780 | tslib@2.6.1: 1781 | resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} 1782 | 1783 | tsutils@3.21.0: 1784 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1785 | engines: {node: '>= 6'} 1786 | peerDependencies: 1787 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 1788 | 1789 | tsx@3.12.7: 1790 | resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} 1791 | hasBin: true 1792 | 1793 | type-check@0.4.0: 1794 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1795 | engines: {node: '>= 0.8.0'} 1796 | 1797 | type-detect@4.0.8: 1798 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1799 | engines: {node: '>=4'} 1800 | 1801 | type-fest@0.20.2: 1802 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1803 | engines: {node: '>=10'} 1804 | 1805 | type-fest@0.6.0: 1806 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1807 | engines: {node: '>=8'} 1808 | 1809 | type-fest@0.8.1: 1810 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1811 | engines: {node: '>=8'} 1812 | 1813 | typed-array-buffer@1.0.0: 1814 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 1815 | engines: {node: '>= 0.4'} 1816 | 1817 | typed-array-byte-length@1.0.0: 1818 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 1819 | engines: {node: '>= 0.4'} 1820 | 1821 | typed-array-byte-offset@1.0.0: 1822 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 1823 | engines: {node: '>= 0.4'} 1824 | 1825 | typed-array-length@1.0.4: 1826 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 1827 | 1828 | typescript@4.9.5: 1829 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 1830 | engines: {node: '>=4.2.0'} 1831 | hasBin: true 1832 | 1833 | typical@4.0.0: 1834 | resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} 1835 | engines: {node: '>=8'} 1836 | 1837 | ufo@1.2.0: 1838 | resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} 1839 | 1840 | unbox-primitive@1.0.2: 1841 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1842 | 1843 | unist-util-stringify-position@2.0.3: 1844 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} 1845 | 1846 | universalify@2.0.0: 1847 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1848 | engines: {node: '>= 10.0.0'} 1849 | 1850 | uri-js@4.4.1: 1851 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1852 | 1853 | util-deprecate@1.0.2: 1854 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1855 | 1856 | validate-npm-package-license@3.0.4: 1857 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1858 | 1859 | vite-node@0.34.1: 1860 | resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} 1861 | engines: {node: '>=v14.18.0'} 1862 | hasBin: true 1863 | 1864 | vite@4.4.8: 1865 | resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==} 1866 | engines: {node: ^14.18.0 || >=16.0.0} 1867 | hasBin: true 1868 | peerDependencies: 1869 | '@types/node': '>= 14' 1870 | less: '*' 1871 | lightningcss: ^1.21.0 1872 | sass: '*' 1873 | stylus: '*' 1874 | sugarss: '*' 1875 | terser: ^5.4.0 1876 | peerDependenciesMeta: 1877 | '@types/node': 1878 | optional: true 1879 | less: 1880 | optional: true 1881 | lightningcss: 1882 | optional: true 1883 | sass: 1884 | optional: true 1885 | stylus: 1886 | optional: true 1887 | sugarss: 1888 | optional: true 1889 | terser: 1890 | optional: true 1891 | 1892 | vitest@0.34.1: 1893 | resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} 1894 | engines: {node: '>=v14.18.0'} 1895 | hasBin: true 1896 | peerDependencies: 1897 | '@edge-runtime/vm': '*' 1898 | '@vitest/browser': '*' 1899 | '@vitest/ui': '*' 1900 | happy-dom: '*' 1901 | jsdom: '*' 1902 | playwright: '*' 1903 | safaridriver: '*' 1904 | webdriverio: '*' 1905 | peerDependenciesMeta: 1906 | '@edge-runtime/vm': 1907 | optional: true 1908 | '@vitest/browser': 1909 | optional: true 1910 | '@vitest/ui': 1911 | optional: true 1912 | happy-dom: 1913 | optional: true 1914 | jsdom: 1915 | optional: true 1916 | playwright: 1917 | optional: true 1918 | safaridriver: 1919 | optional: true 1920 | webdriverio: 1921 | optional: true 1922 | 1923 | vue-eslint-parser@9.3.1: 1924 | resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} 1925 | engines: {node: ^14.17.0 || >=16.0.0} 1926 | peerDependencies: 1927 | eslint: '>=6.0.0' 1928 | 1929 | which-boxed-primitive@1.0.2: 1930 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1931 | 1932 | which-typed-array@1.1.11: 1933 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 1934 | engines: {node: '>= 0.4'} 1935 | 1936 | which@2.0.2: 1937 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1938 | engines: {node: '>= 8'} 1939 | hasBin: true 1940 | 1941 | why-is-node-running@2.2.2: 1942 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1943 | engines: {node: '>=8'} 1944 | hasBin: true 1945 | 1946 | wrappy@1.0.2: 1947 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1948 | 1949 | xml-name-validator@4.0.0: 1950 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 1951 | engines: {node: '>=12'} 1952 | 1953 | yallist@4.0.0: 1954 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1955 | 1956 | yaml-eslint-parser@1.2.2: 1957 | resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} 1958 | engines: {node: ^14.17.0 || >=16.0.0} 1959 | 1960 | yaml@2.3.1: 1961 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 1962 | engines: {node: '>= 14'} 1963 | 1964 | yocto-queue@0.1.0: 1965 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1966 | engines: {node: '>=10'} 1967 | 1968 | yocto-queue@1.0.0: 1969 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1970 | engines: {node: '>=12.20'} 1971 | 1972 | snapshots: 1973 | 1974 | '@aashutoshrathi/word-wrap@1.2.6': {} 1975 | 1976 | '@antfu/eslint-config-basic@0.35.3(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5)': 1977 | dependencies: 1978 | eslint: 8.46.0 1979 | eslint-plugin-antfu: 0.35.3(eslint@8.46.0)(typescript@4.9.5) 1980 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.46.0) 1981 | eslint-plugin-html: 7.1.0 1982 | eslint-plugin-import: 2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0) 1983 | eslint-plugin-jsonc: 2.9.0(eslint@8.46.0) 1984 | eslint-plugin-markdown: 3.0.1(eslint@8.46.0) 1985 | eslint-plugin-n: 15.7.0(eslint@8.46.0) 1986 | eslint-plugin-no-only-tests: 3.1.0 1987 | eslint-plugin-promise: 6.1.1(eslint@8.46.0) 1988 | eslint-plugin-unicorn: 45.0.2(eslint@8.46.0) 1989 | eslint-plugin-unused-imports: 2.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.46.0) 1990 | eslint-plugin-yml: 1.8.0(eslint@8.46.0) 1991 | jsonc-eslint-parser: 2.3.0 1992 | yaml-eslint-parser: 1.2.2 1993 | transitivePeerDependencies: 1994 | - '@typescript-eslint/eslint-plugin' 1995 | - '@typescript-eslint/parser' 1996 | - eslint-import-resolver-typescript 1997 | - eslint-import-resolver-webpack 1998 | - supports-color 1999 | - typescript 2000 | 2001 | '@antfu/eslint-config-ts@0.35.3(eslint@8.46.0)(typescript@4.9.5)': 2002 | dependencies: 2003 | '@antfu/eslint-config-basic': 0.35.3(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2004 | '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2005 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2006 | eslint: 8.46.0 2007 | eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2008 | typescript: 4.9.5 2009 | transitivePeerDependencies: 2010 | - eslint-import-resolver-typescript 2011 | - eslint-import-resolver-webpack 2012 | - jest 2013 | - supports-color 2014 | 2015 | '@antfu/eslint-config-vue@0.35.3(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5)': 2016 | dependencies: 2017 | '@antfu/eslint-config-basic': 0.35.3(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2018 | '@antfu/eslint-config-ts': 0.35.3(eslint@8.46.0)(typescript@4.9.5) 2019 | eslint: 8.46.0 2020 | eslint-plugin-vue: 9.16.1(eslint@8.46.0) 2021 | local-pkg: 0.4.3 2022 | transitivePeerDependencies: 2023 | - '@typescript-eslint/eslint-plugin' 2024 | - '@typescript-eslint/parser' 2025 | - eslint-import-resolver-typescript 2026 | - eslint-import-resolver-webpack 2027 | - jest 2028 | - supports-color 2029 | - typescript 2030 | 2031 | '@antfu/eslint-config@0.35.3(eslint@8.46.0)(typescript@4.9.5)': 2032 | dependencies: 2033 | '@antfu/eslint-config-vue': 0.35.3(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2034 | '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2035 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2036 | eslint: 8.46.0 2037 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.46.0) 2038 | eslint-plugin-html: 7.1.0 2039 | eslint-plugin-import: 2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0) 2040 | eslint-plugin-jsonc: 2.9.0(eslint@8.46.0) 2041 | eslint-plugin-n: 15.7.0(eslint@8.46.0) 2042 | eslint-plugin-promise: 6.1.1(eslint@8.46.0) 2043 | eslint-plugin-unicorn: 45.0.2(eslint@8.46.0) 2044 | eslint-plugin-vue: 9.16.1(eslint@8.46.0) 2045 | eslint-plugin-yml: 1.8.0(eslint@8.46.0) 2046 | jsonc-eslint-parser: 2.3.0 2047 | yaml-eslint-parser: 1.2.2 2048 | transitivePeerDependencies: 2049 | - eslint-import-resolver-typescript 2050 | - eslint-import-resolver-webpack 2051 | - jest 2052 | - supports-color 2053 | - typescript 2054 | 2055 | '@babel/code-frame@7.22.5': 2056 | dependencies: 2057 | '@babel/highlight': 7.22.5 2058 | 2059 | '@babel/helper-string-parser@7.22.5': {} 2060 | 2061 | '@babel/helper-validator-identifier@7.22.5': {} 2062 | 2063 | '@babel/highlight@7.22.5': 2064 | dependencies: 2065 | '@babel/helper-validator-identifier': 7.22.5 2066 | chalk: 2.4.2 2067 | js-tokens: 4.0.0 2068 | 2069 | '@babel/types@7.22.5': 2070 | dependencies: 2071 | '@babel/helper-string-parser': 7.22.5 2072 | '@babel/helper-validator-identifier': 7.22.5 2073 | to-fast-properties: 2.0.0 2074 | 2075 | '@esbuild-kit/cjs-loader@2.4.2': 2076 | dependencies: 2077 | '@esbuild-kit/core-utils': 3.1.0 2078 | get-tsconfig: 4.6.2 2079 | 2080 | '@esbuild-kit/core-utils@3.1.0': 2081 | dependencies: 2082 | esbuild: 0.17.19 2083 | source-map-support: 0.5.21 2084 | 2085 | '@esbuild-kit/esm-loader@2.5.5': 2086 | dependencies: 2087 | '@esbuild-kit/core-utils': 3.1.0 2088 | get-tsconfig: 4.6.2 2089 | 2090 | '@esbuild/android-arm64@0.17.19': 2091 | optional: true 2092 | 2093 | '@esbuild/android-arm64@0.18.17': 2094 | optional: true 2095 | 2096 | '@esbuild/android-arm@0.17.19': 2097 | optional: true 2098 | 2099 | '@esbuild/android-arm@0.18.17': 2100 | optional: true 2101 | 2102 | '@esbuild/android-x64@0.17.19': 2103 | optional: true 2104 | 2105 | '@esbuild/android-x64@0.18.17': 2106 | optional: true 2107 | 2108 | '@esbuild/darwin-arm64@0.17.19': 2109 | optional: true 2110 | 2111 | '@esbuild/darwin-arm64@0.18.17': 2112 | optional: true 2113 | 2114 | '@esbuild/darwin-x64@0.17.19': 2115 | optional: true 2116 | 2117 | '@esbuild/darwin-x64@0.18.17': 2118 | optional: true 2119 | 2120 | '@esbuild/freebsd-arm64@0.17.19': 2121 | optional: true 2122 | 2123 | '@esbuild/freebsd-arm64@0.18.17': 2124 | optional: true 2125 | 2126 | '@esbuild/freebsd-x64@0.17.19': 2127 | optional: true 2128 | 2129 | '@esbuild/freebsd-x64@0.18.17': 2130 | optional: true 2131 | 2132 | '@esbuild/linux-arm64@0.17.19': 2133 | optional: true 2134 | 2135 | '@esbuild/linux-arm64@0.18.17': 2136 | optional: true 2137 | 2138 | '@esbuild/linux-arm@0.17.19': 2139 | optional: true 2140 | 2141 | '@esbuild/linux-arm@0.18.17': 2142 | optional: true 2143 | 2144 | '@esbuild/linux-ia32@0.17.19': 2145 | optional: true 2146 | 2147 | '@esbuild/linux-ia32@0.18.17': 2148 | optional: true 2149 | 2150 | '@esbuild/linux-loong64@0.17.19': 2151 | optional: true 2152 | 2153 | '@esbuild/linux-loong64@0.18.17': 2154 | optional: true 2155 | 2156 | '@esbuild/linux-mips64el@0.17.19': 2157 | optional: true 2158 | 2159 | '@esbuild/linux-mips64el@0.18.17': 2160 | optional: true 2161 | 2162 | '@esbuild/linux-ppc64@0.17.19': 2163 | optional: true 2164 | 2165 | '@esbuild/linux-ppc64@0.18.17': 2166 | optional: true 2167 | 2168 | '@esbuild/linux-riscv64@0.17.19': 2169 | optional: true 2170 | 2171 | '@esbuild/linux-riscv64@0.18.17': 2172 | optional: true 2173 | 2174 | '@esbuild/linux-s390x@0.17.19': 2175 | optional: true 2176 | 2177 | '@esbuild/linux-s390x@0.18.17': 2178 | optional: true 2179 | 2180 | '@esbuild/linux-x64@0.17.19': 2181 | optional: true 2182 | 2183 | '@esbuild/linux-x64@0.18.17': 2184 | optional: true 2185 | 2186 | '@esbuild/netbsd-x64@0.17.19': 2187 | optional: true 2188 | 2189 | '@esbuild/netbsd-x64@0.18.17': 2190 | optional: true 2191 | 2192 | '@esbuild/openbsd-x64@0.17.19': 2193 | optional: true 2194 | 2195 | '@esbuild/openbsd-x64@0.18.17': 2196 | optional: true 2197 | 2198 | '@esbuild/sunos-x64@0.17.19': 2199 | optional: true 2200 | 2201 | '@esbuild/sunos-x64@0.18.17': 2202 | optional: true 2203 | 2204 | '@esbuild/win32-arm64@0.17.19': 2205 | optional: true 2206 | 2207 | '@esbuild/win32-arm64@0.18.17': 2208 | optional: true 2209 | 2210 | '@esbuild/win32-ia32@0.17.19': 2211 | optional: true 2212 | 2213 | '@esbuild/win32-ia32@0.18.17': 2214 | optional: true 2215 | 2216 | '@esbuild/win32-x64@0.17.19': 2217 | optional: true 2218 | 2219 | '@esbuild/win32-x64@0.18.17': 2220 | optional: true 2221 | 2222 | '@eslint-community/eslint-utils@4.4.0(eslint@8.46.0)': 2223 | dependencies: 2224 | eslint: 8.46.0 2225 | eslint-visitor-keys: 3.4.2 2226 | 2227 | '@eslint-community/regexpp@4.6.2': {} 2228 | 2229 | '@eslint/eslintrc@2.1.1': 2230 | dependencies: 2231 | ajv: 6.12.6 2232 | debug: 4.3.4 2233 | espree: 9.6.1 2234 | globals: 13.20.0 2235 | ignore: 5.2.4 2236 | import-fresh: 3.3.0 2237 | js-yaml: 4.1.0 2238 | minimatch: 3.1.2 2239 | strip-json-comments: 3.1.1 2240 | transitivePeerDependencies: 2241 | - supports-color 2242 | 2243 | '@eslint/js@8.46.0': {} 2244 | 2245 | '@humanwhocodes/config-array@0.11.10': 2246 | dependencies: 2247 | '@humanwhocodes/object-schema': 1.2.1 2248 | debug: 4.3.4 2249 | minimatch: 3.1.2 2250 | transitivePeerDependencies: 2251 | - supports-color 2252 | 2253 | '@humanwhocodes/module-importer@1.0.1': {} 2254 | 2255 | '@humanwhocodes/object-schema@1.2.1': {} 2256 | 2257 | '@jest/schemas@29.6.0': 2258 | dependencies: 2259 | '@sinclair/typebox': 0.27.8 2260 | 2261 | '@jridgewell/sourcemap-codec@1.4.15': {} 2262 | 2263 | '@jsdevtools/ez-spawn@3.0.4': 2264 | dependencies: 2265 | call-me-maybe: 1.0.2 2266 | cross-spawn: 7.0.3 2267 | string-argv: 0.3.2 2268 | type-detect: 4.0.8 2269 | 2270 | '@nodelib/fs.scandir@2.1.5': 2271 | dependencies: 2272 | '@nodelib/fs.stat': 2.0.5 2273 | run-parallel: 1.2.0 2274 | 2275 | '@nodelib/fs.stat@2.0.5': {} 2276 | 2277 | '@nodelib/fs.walk@1.2.8': 2278 | dependencies: 2279 | '@nodelib/fs.scandir': 2.1.5 2280 | fastq: 1.15.0 2281 | 2282 | '@rollup/plugin-typescript@11.1.2(rollup@3.27.1)(tslib@2.6.1)(typescript@4.9.5)': 2283 | dependencies: 2284 | '@rollup/pluginutils': 5.0.2(rollup@3.27.1) 2285 | resolve: 1.22.2 2286 | rollup: 3.27.1 2287 | tslib: 2.6.1 2288 | typescript: 4.9.5 2289 | 2290 | '@rollup/pluginutils@4.2.1': 2291 | dependencies: 2292 | estree-walker: 2.0.2 2293 | picomatch: 2.3.1 2294 | 2295 | '@rollup/pluginutils@5.0.2(rollup@3.27.1)': 2296 | dependencies: 2297 | '@types/estree': 1.0.1 2298 | estree-walker: 2.0.2 2299 | picomatch: 2.3.1 2300 | rollup: 3.27.1 2301 | 2302 | '@sinclair/typebox@0.27.8': {} 2303 | 2304 | '@types/chai-subset@1.3.3': 2305 | dependencies: 2306 | '@types/chai': 4.3.5 2307 | 2308 | '@types/chai@4.3.5': {} 2309 | 2310 | '@types/estree@1.0.1': {} 2311 | 2312 | '@types/json-schema@7.0.12': {} 2313 | 2314 | '@types/json5@0.0.29': {} 2315 | 2316 | '@types/mdast@3.0.12': 2317 | dependencies: 2318 | '@types/unist': 2.0.7 2319 | 2320 | '@types/node@17.0.45': {} 2321 | 2322 | '@types/normalize-package-data@2.4.1': {} 2323 | 2324 | '@types/semver@7.5.0': {} 2325 | 2326 | '@types/unist@2.0.7': {} 2327 | 2328 | '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5)': 2329 | dependencies: 2330 | '@eslint-community/regexpp': 4.6.2 2331 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2332 | '@typescript-eslint/scope-manager': 5.62.0 2333 | '@typescript-eslint/type-utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2334 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2335 | debug: 4.3.4 2336 | eslint: 8.46.0 2337 | graphemer: 1.4.0 2338 | ignore: 5.2.4 2339 | natural-compare-lite: 1.4.0 2340 | semver: 7.5.4 2341 | tsutils: 3.21.0(typescript@4.9.5) 2342 | typescript: 4.9.5 2343 | transitivePeerDependencies: 2344 | - supports-color 2345 | 2346 | '@typescript-eslint/parser@5.62.0(eslint@8.46.0)(typescript@4.9.5)': 2347 | dependencies: 2348 | '@typescript-eslint/scope-manager': 5.62.0 2349 | '@typescript-eslint/types': 5.62.0 2350 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 2351 | debug: 4.3.4 2352 | eslint: 8.46.0 2353 | typescript: 4.9.5 2354 | transitivePeerDependencies: 2355 | - supports-color 2356 | 2357 | '@typescript-eslint/scope-manager@5.62.0': 2358 | dependencies: 2359 | '@typescript-eslint/types': 5.62.0 2360 | '@typescript-eslint/visitor-keys': 5.62.0 2361 | 2362 | '@typescript-eslint/type-utils@5.62.0(eslint@8.46.0)(typescript@4.9.5)': 2363 | dependencies: 2364 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 2365 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2366 | debug: 4.3.4 2367 | eslint: 8.46.0 2368 | tsutils: 3.21.0(typescript@4.9.5) 2369 | typescript: 4.9.5 2370 | transitivePeerDependencies: 2371 | - supports-color 2372 | 2373 | '@typescript-eslint/types@5.62.0': {} 2374 | 2375 | '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': 2376 | dependencies: 2377 | '@typescript-eslint/types': 5.62.0 2378 | '@typescript-eslint/visitor-keys': 5.62.0 2379 | debug: 4.3.4 2380 | globby: 11.1.0 2381 | is-glob: 4.0.3 2382 | semver: 7.5.4 2383 | tsutils: 3.21.0(typescript@4.9.5) 2384 | typescript: 4.9.5 2385 | transitivePeerDependencies: 2386 | - supports-color 2387 | 2388 | '@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@4.9.5)': 2389 | dependencies: 2390 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 2391 | '@types/json-schema': 7.0.12 2392 | '@types/semver': 7.5.0 2393 | '@typescript-eslint/scope-manager': 5.62.0 2394 | '@typescript-eslint/types': 5.62.0 2395 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 2396 | eslint: 8.46.0 2397 | eslint-scope: 5.1.1 2398 | semver: 7.5.4 2399 | transitivePeerDependencies: 2400 | - supports-color 2401 | - typescript 2402 | 2403 | '@typescript-eslint/visitor-keys@5.62.0': 2404 | dependencies: 2405 | '@typescript-eslint/types': 5.62.0 2406 | eslint-visitor-keys: 3.4.2 2407 | 2408 | '@vitest/expect@0.34.1': 2409 | dependencies: 2410 | '@vitest/spy': 0.34.1 2411 | '@vitest/utils': 0.34.1 2412 | chai: 4.3.7 2413 | 2414 | '@vitest/runner@0.34.1': 2415 | dependencies: 2416 | '@vitest/utils': 0.34.1 2417 | p-limit: 4.0.0 2418 | pathe: 1.1.1 2419 | 2420 | '@vitest/snapshot@0.34.1': 2421 | dependencies: 2422 | magic-string: 0.30.2 2423 | pathe: 1.1.1 2424 | pretty-format: 29.6.2 2425 | 2426 | '@vitest/spy@0.34.1': 2427 | dependencies: 2428 | tinyspy: 2.1.1 2429 | 2430 | '@vitest/utils@0.34.1': 2431 | dependencies: 2432 | diff-sequences: 29.4.3 2433 | loupe: 2.3.6 2434 | pretty-format: 29.6.2 2435 | 2436 | acorn-jsx@5.3.2(acorn@8.10.0): 2437 | dependencies: 2438 | acorn: 8.10.0 2439 | 2440 | acorn-walk@8.2.0: {} 2441 | 2442 | acorn@8.10.0: {} 2443 | 2444 | ajv@6.12.6: 2445 | dependencies: 2446 | fast-deep-equal: 3.1.3 2447 | fast-json-stable-stringify: 2.1.0 2448 | json-schema-traverse: 0.4.1 2449 | uri-js: 4.4.1 2450 | 2451 | ansi-regex@5.0.1: {} 2452 | 2453 | ansi-styles@3.2.1: 2454 | dependencies: 2455 | color-convert: 1.9.3 2456 | 2457 | ansi-styles@4.3.0: 2458 | dependencies: 2459 | color-convert: 2.0.1 2460 | 2461 | ansi-styles@5.2.0: {} 2462 | 2463 | argparse@2.0.1: {} 2464 | 2465 | array-back@3.1.0: {} 2466 | 2467 | array-buffer-byte-length@1.0.0: 2468 | dependencies: 2469 | call-bind: 1.0.2 2470 | is-array-buffer: 3.0.2 2471 | 2472 | array-includes@3.1.6: 2473 | dependencies: 2474 | call-bind: 1.0.2 2475 | define-properties: 1.2.0 2476 | es-abstract: 1.22.1 2477 | get-intrinsic: 1.2.1 2478 | is-string: 1.0.7 2479 | 2480 | array-union@2.1.0: {} 2481 | 2482 | array.prototype.findlastindex@1.2.2: 2483 | dependencies: 2484 | call-bind: 1.0.2 2485 | define-properties: 1.2.0 2486 | es-abstract: 1.22.1 2487 | es-shim-unscopables: 1.0.0 2488 | get-intrinsic: 1.2.1 2489 | 2490 | array.prototype.flat@1.3.1: 2491 | dependencies: 2492 | call-bind: 1.0.2 2493 | define-properties: 1.2.0 2494 | es-abstract: 1.22.1 2495 | es-shim-unscopables: 1.0.0 2496 | 2497 | array.prototype.flatmap@1.3.1: 2498 | dependencies: 2499 | call-bind: 1.0.2 2500 | define-properties: 1.2.0 2501 | es-abstract: 1.22.1 2502 | es-shim-unscopables: 1.0.0 2503 | 2504 | arraybuffer.prototype.slice@1.0.1: 2505 | dependencies: 2506 | array-buffer-byte-length: 1.0.0 2507 | call-bind: 1.0.2 2508 | define-properties: 1.2.0 2509 | get-intrinsic: 1.2.1 2510 | is-array-buffer: 3.0.2 2511 | is-shared-array-buffer: 1.0.2 2512 | 2513 | assertion-error@1.1.0: {} 2514 | 2515 | available-typed-arrays@1.0.5: {} 2516 | 2517 | balanced-match@1.0.2: {} 2518 | 2519 | boolbase@1.0.0: {} 2520 | 2521 | brace-expansion@1.1.11: 2522 | dependencies: 2523 | balanced-match: 1.0.2 2524 | concat-map: 0.0.1 2525 | 2526 | braces@3.0.2: 2527 | dependencies: 2528 | fill-range: 7.0.1 2529 | 2530 | buffer-from@1.1.2: {} 2531 | 2532 | builtin-modules@3.3.0: {} 2533 | 2534 | builtins@5.0.1: 2535 | dependencies: 2536 | semver: 7.5.4 2537 | 2538 | bumpp@7.2.0: 2539 | dependencies: 2540 | '@jsdevtools/ez-spawn': 3.0.4 2541 | chalk: 4.1.2 2542 | command-line-args: 5.2.1 2543 | globby: 11.1.0 2544 | prompts: 2.4.2 2545 | semver: 7.5.4 2546 | 2547 | cac@6.7.14: {} 2548 | 2549 | call-bind@1.0.2: 2550 | dependencies: 2551 | function-bind: 1.1.1 2552 | get-intrinsic: 1.2.1 2553 | 2554 | call-me-maybe@1.0.2: {} 2555 | 2556 | callsites@3.1.0: {} 2557 | 2558 | chai@4.3.7: 2559 | dependencies: 2560 | assertion-error: 1.1.0 2561 | check-error: 1.0.2 2562 | deep-eql: 4.1.3 2563 | get-func-name: 2.0.0 2564 | loupe: 2.3.6 2565 | pathval: 1.1.1 2566 | type-detect: 4.0.8 2567 | 2568 | chalk@2.4.2: 2569 | dependencies: 2570 | ansi-styles: 3.2.1 2571 | escape-string-regexp: 1.0.5 2572 | supports-color: 5.5.0 2573 | 2574 | chalk@4.1.2: 2575 | dependencies: 2576 | ansi-styles: 4.3.0 2577 | supports-color: 7.2.0 2578 | 2579 | character-entities-legacy@1.1.4: {} 2580 | 2581 | character-entities@1.2.4: {} 2582 | 2583 | character-reference-invalid@1.1.4: {} 2584 | 2585 | check-error@1.0.2: {} 2586 | 2587 | ci-info@3.8.0: {} 2588 | 2589 | clean-regexp@1.0.0: 2590 | dependencies: 2591 | escape-string-regexp: 1.0.5 2592 | 2593 | color-convert@1.9.3: 2594 | dependencies: 2595 | color-name: 1.1.3 2596 | 2597 | color-convert@2.0.1: 2598 | dependencies: 2599 | color-name: 1.1.4 2600 | 2601 | color-name@1.1.3: {} 2602 | 2603 | color-name@1.1.4: {} 2604 | 2605 | command-line-args@5.2.1: 2606 | dependencies: 2607 | array-back: 3.1.0 2608 | find-replace: 3.0.0 2609 | lodash.camelcase: 4.3.0 2610 | typical: 4.0.0 2611 | 2612 | commondir@1.0.1: {} 2613 | 2614 | concat-map@0.0.1: {} 2615 | 2616 | cross-spawn@7.0.3: 2617 | dependencies: 2618 | path-key: 3.1.1 2619 | shebang-command: 2.0.0 2620 | which: 2.0.2 2621 | 2622 | cssesc@3.0.0: {} 2623 | 2624 | debug@3.2.7: 2625 | dependencies: 2626 | ms: 2.1.3 2627 | 2628 | debug@4.3.4: 2629 | dependencies: 2630 | ms: 2.1.2 2631 | 2632 | deep-eql@4.1.3: 2633 | dependencies: 2634 | type-detect: 4.0.8 2635 | 2636 | deep-is@0.1.4: {} 2637 | 2638 | define-properties@1.2.0: 2639 | dependencies: 2640 | has-property-descriptors: 1.0.0 2641 | object-keys: 1.1.1 2642 | 2643 | diff-sequences@29.4.3: {} 2644 | 2645 | dir-glob@3.0.1: 2646 | dependencies: 2647 | path-type: 4.0.0 2648 | 2649 | doctrine@2.1.0: 2650 | dependencies: 2651 | esutils: 2.0.3 2652 | 2653 | doctrine@3.0.0: 2654 | dependencies: 2655 | esutils: 2.0.3 2656 | 2657 | dom-serializer@2.0.0: 2658 | dependencies: 2659 | domelementtype: 2.3.0 2660 | domhandler: 5.0.3 2661 | entities: 4.5.0 2662 | 2663 | domelementtype@2.3.0: {} 2664 | 2665 | domhandler@5.0.3: 2666 | dependencies: 2667 | domelementtype: 2.3.0 2668 | 2669 | domutils@3.1.0: 2670 | dependencies: 2671 | dom-serializer: 2.0.0 2672 | domelementtype: 2.3.0 2673 | domhandler: 5.0.3 2674 | 2675 | entities@4.5.0: {} 2676 | 2677 | error-ex@1.3.2: 2678 | dependencies: 2679 | is-arrayish: 0.2.1 2680 | 2681 | es-abstract@1.22.1: 2682 | dependencies: 2683 | array-buffer-byte-length: 1.0.0 2684 | arraybuffer.prototype.slice: 1.0.1 2685 | available-typed-arrays: 1.0.5 2686 | call-bind: 1.0.2 2687 | es-set-tostringtag: 2.0.1 2688 | es-to-primitive: 1.2.1 2689 | function.prototype.name: 1.1.5 2690 | get-intrinsic: 1.2.1 2691 | get-symbol-description: 1.0.0 2692 | globalthis: 1.0.3 2693 | gopd: 1.0.1 2694 | has: 1.0.3 2695 | has-property-descriptors: 1.0.0 2696 | has-proto: 1.0.1 2697 | has-symbols: 1.0.3 2698 | internal-slot: 1.0.5 2699 | is-array-buffer: 3.0.2 2700 | is-callable: 1.2.7 2701 | is-negative-zero: 2.0.2 2702 | is-regex: 1.1.4 2703 | is-shared-array-buffer: 1.0.2 2704 | is-string: 1.0.7 2705 | is-typed-array: 1.1.12 2706 | is-weakref: 1.0.2 2707 | object-inspect: 1.12.3 2708 | object-keys: 1.1.1 2709 | object.assign: 4.1.4 2710 | regexp.prototype.flags: 1.5.0 2711 | safe-array-concat: 1.0.0 2712 | safe-regex-test: 1.0.0 2713 | string.prototype.trim: 1.2.7 2714 | string.prototype.trimend: 1.0.6 2715 | string.prototype.trimstart: 1.0.6 2716 | typed-array-buffer: 1.0.0 2717 | typed-array-byte-length: 1.0.0 2718 | typed-array-byte-offset: 1.0.0 2719 | typed-array-length: 1.0.4 2720 | unbox-primitive: 1.0.2 2721 | which-typed-array: 1.1.11 2722 | 2723 | es-set-tostringtag@2.0.1: 2724 | dependencies: 2725 | get-intrinsic: 1.2.1 2726 | has: 1.0.3 2727 | has-tostringtag: 1.0.0 2728 | 2729 | es-shim-unscopables@1.0.0: 2730 | dependencies: 2731 | has: 1.0.3 2732 | 2733 | es-to-primitive@1.2.1: 2734 | dependencies: 2735 | is-callable: 1.2.7 2736 | is-date-object: 1.0.5 2737 | is-symbol: 1.0.4 2738 | 2739 | esbuild@0.17.19: 2740 | optionalDependencies: 2741 | '@esbuild/android-arm': 0.17.19 2742 | '@esbuild/android-arm64': 0.17.19 2743 | '@esbuild/android-x64': 0.17.19 2744 | '@esbuild/darwin-arm64': 0.17.19 2745 | '@esbuild/darwin-x64': 0.17.19 2746 | '@esbuild/freebsd-arm64': 0.17.19 2747 | '@esbuild/freebsd-x64': 0.17.19 2748 | '@esbuild/linux-arm': 0.17.19 2749 | '@esbuild/linux-arm64': 0.17.19 2750 | '@esbuild/linux-ia32': 0.17.19 2751 | '@esbuild/linux-loong64': 0.17.19 2752 | '@esbuild/linux-mips64el': 0.17.19 2753 | '@esbuild/linux-ppc64': 0.17.19 2754 | '@esbuild/linux-riscv64': 0.17.19 2755 | '@esbuild/linux-s390x': 0.17.19 2756 | '@esbuild/linux-x64': 0.17.19 2757 | '@esbuild/netbsd-x64': 0.17.19 2758 | '@esbuild/openbsd-x64': 0.17.19 2759 | '@esbuild/sunos-x64': 0.17.19 2760 | '@esbuild/win32-arm64': 0.17.19 2761 | '@esbuild/win32-ia32': 0.17.19 2762 | '@esbuild/win32-x64': 0.17.19 2763 | 2764 | esbuild@0.18.17: 2765 | optionalDependencies: 2766 | '@esbuild/android-arm': 0.18.17 2767 | '@esbuild/android-arm64': 0.18.17 2768 | '@esbuild/android-x64': 0.18.17 2769 | '@esbuild/darwin-arm64': 0.18.17 2770 | '@esbuild/darwin-x64': 0.18.17 2771 | '@esbuild/freebsd-arm64': 0.18.17 2772 | '@esbuild/freebsd-x64': 0.18.17 2773 | '@esbuild/linux-arm': 0.18.17 2774 | '@esbuild/linux-arm64': 0.18.17 2775 | '@esbuild/linux-ia32': 0.18.17 2776 | '@esbuild/linux-loong64': 0.18.17 2777 | '@esbuild/linux-mips64el': 0.18.17 2778 | '@esbuild/linux-ppc64': 0.18.17 2779 | '@esbuild/linux-riscv64': 0.18.17 2780 | '@esbuild/linux-s390x': 0.18.17 2781 | '@esbuild/linux-x64': 0.18.17 2782 | '@esbuild/netbsd-x64': 0.18.17 2783 | '@esbuild/openbsd-x64': 0.18.17 2784 | '@esbuild/sunos-x64': 0.18.17 2785 | '@esbuild/win32-arm64': 0.18.17 2786 | '@esbuild/win32-ia32': 0.18.17 2787 | '@esbuild/win32-x64': 0.18.17 2788 | 2789 | escape-string-regexp@1.0.5: {} 2790 | 2791 | escape-string-regexp@4.0.0: {} 2792 | 2793 | eslint-import-resolver-node@0.3.7: 2794 | dependencies: 2795 | debug: 3.2.7 2796 | is-core-module: 2.12.1 2797 | resolve: 1.22.3 2798 | transitivePeerDependencies: 2799 | - supports-color 2800 | 2801 | eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0): 2802 | dependencies: 2803 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2804 | debug: 3.2.7 2805 | eslint: 8.46.0 2806 | eslint-import-resolver-node: 0.3.7 2807 | transitivePeerDependencies: 2808 | - supports-color 2809 | 2810 | eslint-plugin-antfu@0.35.3(eslint@8.46.0)(typescript@4.9.5): 2811 | dependencies: 2812 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2813 | transitivePeerDependencies: 2814 | - eslint 2815 | - supports-color 2816 | - typescript 2817 | 2818 | eslint-plugin-es@4.1.0(eslint@8.46.0): 2819 | dependencies: 2820 | eslint: 8.46.0 2821 | eslint-utils: 2.1.0 2822 | regexpp: 3.2.0 2823 | 2824 | eslint-plugin-eslint-comments@3.2.0(eslint@8.46.0): 2825 | dependencies: 2826 | escape-string-regexp: 1.0.5 2827 | eslint: 8.46.0 2828 | ignore: 5.2.4 2829 | 2830 | eslint-plugin-html@7.1.0: 2831 | dependencies: 2832 | htmlparser2: 8.0.2 2833 | 2834 | eslint-plugin-import@2.28.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0): 2835 | dependencies: 2836 | '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2837 | array-includes: 3.1.6 2838 | array.prototype.findlastindex: 1.2.2 2839 | array.prototype.flat: 1.3.1 2840 | array.prototype.flatmap: 1.3.1 2841 | debug: 3.2.7 2842 | doctrine: 2.1.0 2843 | eslint: 8.46.0 2844 | eslint-import-resolver-node: 0.3.7 2845 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0) 2846 | has: 1.0.3 2847 | is-core-module: 2.12.1 2848 | is-glob: 4.0.3 2849 | minimatch: 3.1.2 2850 | object.fromentries: 2.0.6 2851 | object.groupby: 1.0.0 2852 | object.values: 1.1.6 2853 | resolve: 1.22.3 2854 | semver: 6.3.1 2855 | tsconfig-paths: 3.14.2 2856 | transitivePeerDependencies: 2857 | - eslint-import-resolver-typescript 2858 | - eslint-import-resolver-webpack 2859 | - supports-color 2860 | 2861 | eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.46.0)(typescript@4.9.5): 2862 | dependencies: 2863 | '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2864 | '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@4.9.5) 2865 | eslint: 8.46.0 2866 | transitivePeerDependencies: 2867 | - supports-color 2868 | - typescript 2869 | 2870 | eslint-plugin-jsonc@2.9.0(eslint@8.46.0): 2871 | dependencies: 2872 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 2873 | eslint: 8.46.0 2874 | jsonc-eslint-parser: 2.3.0 2875 | natural-compare: 1.4.0 2876 | 2877 | eslint-plugin-markdown@3.0.1(eslint@8.46.0): 2878 | dependencies: 2879 | eslint: 8.46.0 2880 | mdast-util-from-markdown: 0.8.5 2881 | transitivePeerDependencies: 2882 | - supports-color 2883 | 2884 | eslint-plugin-n@15.7.0(eslint@8.46.0): 2885 | dependencies: 2886 | builtins: 5.0.1 2887 | eslint: 8.46.0 2888 | eslint-plugin-es: 4.1.0(eslint@8.46.0) 2889 | eslint-utils: 3.0.0(eslint@8.46.0) 2890 | ignore: 5.2.4 2891 | is-core-module: 2.12.1 2892 | minimatch: 3.1.2 2893 | resolve: 1.22.2 2894 | semver: 7.5.4 2895 | 2896 | eslint-plugin-no-only-tests@3.1.0: {} 2897 | 2898 | eslint-plugin-promise@6.1.1(eslint@8.46.0): 2899 | dependencies: 2900 | eslint: 8.46.0 2901 | 2902 | eslint-plugin-unicorn@45.0.2(eslint@8.46.0): 2903 | dependencies: 2904 | '@babel/helper-validator-identifier': 7.22.5 2905 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 2906 | ci-info: 3.8.0 2907 | clean-regexp: 1.0.0 2908 | eslint: 8.46.0 2909 | esquery: 1.5.0 2910 | indent-string: 4.0.0 2911 | is-builtin-module: 3.2.1 2912 | jsesc: 3.0.2 2913 | lodash: 4.17.21 2914 | pluralize: 8.0.0 2915 | read-pkg-up: 7.0.1 2916 | regexp-tree: 0.1.27 2917 | regjsparser: 0.9.1 2918 | safe-regex: 2.1.1 2919 | semver: 7.5.4 2920 | strip-indent: 3.0.0 2921 | 2922 | eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.46.0): 2923 | dependencies: 2924 | '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@4.9.5) 2925 | eslint: 8.46.0 2926 | eslint-rule-composer: 0.3.0 2927 | 2928 | eslint-plugin-vue@9.16.1(eslint@8.46.0): 2929 | dependencies: 2930 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 2931 | eslint: 8.46.0 2932 | natural-compare: 1.4.0 2933 | nth-check: 2.1.1 2934 | postcss-selector-parser: 6.0.13 2935 | semver: 7.5.4 2936 | vue-eslint-parser: 9.3.1(eslint@8.46.0) 2937 | xml-name-validator: 4.0.0 2938 | transitivePeerDependencies: 2939 | - supports-color 2940 | 2941 | eslint-plugin-yml@1.8.0(eslint@8.46.0): 2942 | dependencies: 2943 | debug: 4.3.4 2944 | eslint: 8.46.0 2945 | lodash: 4.17.21 2946 | natural-compare: 1.4.0 2947 | yaml-eslint-parser: 1.2.2 2948 | transitivePeerDependencies: 2949 | - supports-color 2950 | 2951 | eslint-rule-composer@0.3.0: {} 2952 | 2953 | eslint-scope@5.1.1: 2954 | dependencies: 2955 | esrecurse: 4.3.0 2956 | estraverse: 4.3.0 2957 | 2958 | eslint-scope@7.2.2: 2959 | dependencies: 2960 | esrecurse: 4.3.0 2961 | estraverse: 5.3.0 2962 | 2963 | eslint-utils@2.1.0: 2964 | dependencies: 2965 | eslint-visitor-keys: 1.3.0 2966 | 2967 | eslint-utils@3.0.0(eslint@8.46.0): 2968 | dependencies: 2969 | eslint: 8.46.0 2970 | eslint-visitor-keys: 2.1.0 2971 | 2972 | eslint-visitor-keys@1.3.0: {} 2973 | 2974 | eslint-visitor-keys@2.1.0: {} 2975 | 2976 | eslint-visitor-keys@3.4.2: {} 2977 | 2978 | eslint@8.46.0: 2979 | dependencies: 2980 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) 2981 | '@eslint-community/regexpp': 4.6.2 2982 | '@eslint/eslintrc': 2.1.1 2983 | '@eslint/js': 8.46.0 2984 | '@humanwhocodes/config-array': 0.11.10 2985 | '@humanwhocodes/module-importer': 1.0.1 2986 | '@nodelib/fs.walk': 1.2.8 2987 | ajv: 6.12.6 2988 | chalk: 4.1.2 2989 | cross-spawn: 7.0.3 2990 | debug: 4.3.4 2991 | doctrine: 3.0.0 2992 | escape-string-regexp: 4.0.0 2993 | eslint-scope: 7.2.2 2994 | eslint-visitor-keys: 3.4.2 2995 | espree: 9.6.1 2996 | esquery: 1.5.0 2997 | esutils: 2.0.3 2998 | fast-deep-equal: 3.1.3 2999 | file-entry-cache: 6.0.1 3000 | find-up: 5.0.0 3001 | glob-parent: 6.0.2 3002 | globals: 13.20.0 3003 | graphemer: 1.4.0 3004 | ignore: 5.2.4 3005 | imurmurhash: 0.1.4 3006 | is-glob: 4.0.3 3007 | is-path-inside: 3.0.3 3008 | js-yaml: 4.1.0 3009 | json-stable-stringify-without-jsonify: 1.0.1 3010 | levn: 0.4.1 3011 | lodash.merge: 4.6.2 3012 | minimatch: 3.1.2 3013 | natural-compare: 1.4.0 3014 | optionator: 0.9.3 3015 | strip-ansi: 6.0.1 3016 | text-table: 0.2.0 3017 | transitivePeerDependencies: 3018 | - supports-color 3019 | 3020 | esno@0.16.3: 3021 | dependencies: 3022 | tsx: 3.12.7 3023 | 3024 | espree@9.6.1: 3025 | dependencies: 3026 | acorn: 8.10.0 3027 | acorn-jsx: 5.3.2(acorn@8.10.0) 3028 | eslint-visitor-keys: 3.4.2 3029 | 3030 | esquery@1.5.0: 3031 | dependencies: 3032 | estraverse: 5.3.0 3033 | 3034 | esrecurse@4.3.0: 3035 | dependencies: 3036 | estraverse: 5.3.0 3037 | 3038 | estraverse@4.3.0: {} 3039 | 3040 | estraverse@5.3.0: {} 3041 | 3042 | estree-walker@2.0.2: {} 3043 | 3044 | esutils@2.0.3: {} 3045 | 3046 | fast-deep-equal@3.1.3: {} 3047 | 3048 | fast-glob@3.3.1: 3049 | dependencies: 3050 | '@nodelib/fs.stat': 2.0.5 3051 | '@nodelib/fs.walk': 1.2.8 3052 | glob-parent: 5.1.2 3053 | merge2: 1.4.1 3054 | micromatch: 4.0.5 3055 | 3056 | fast-json-stable-stringify@2.1.0: {} 3057 | 3058 | fast-levenshtein@2.0.6: {} 3059 | 3060 | fastq@1.15.0: 3061 | dependencies: 3062 | reusify: 1.0.4 3063 | 3064 | file-entry-cache@6.0.1: 3065 | dependencies: 3066 | flat-cache: 3.0.4 3067 | 3068 | fill-range@7.0.1: 3069 | dependencies: 3070 | to-regex-range: 5.0.1 3071 | 3072 | find-cache-dir@3.3.2: 3073 | dependencies: 3074 | commondir: 1.0.1 3075 | make-dir: 3.1.0 3076 | pkg-dir: 4.2.0 3077 | 3078 | find-replace@3.0.0: 3079 | dependencies: 3080 | array-back: 3.1.0 3081 | 3082 | find-up@4.1.0: 3083 | dependencies: 3084 | locate-path: 5.0.0 3085 | path-exists: 4.0.0 3086 | 3087 | find-up@5.0.0: 3088 | dependencies: 3089 | locate-path: 6.0.0 3090 | path-exists: 4.0.0 3091 | 3092 | flat-cache@3.0.4: 3093 | dependencies: 3094 | flatted: 3.2.7 3095 | rimraf: 3.0.2 3096 | 3097 | flatted@3.2.7: {} 3098 | 3099 | for-each@0.3.3: 3100 | dependencies: 3101 | is-callable: 1.2.7 3102 | 3103 | fs-extra@10.1.0: 3104 | dependencies: 3105 | graceful-fs: 4.2.11 3106 | jsonfile: 6.1.0 3107 | universalify: 2.0.0 3108 | 3109 | fs.realpath@1.0.0: {} 3110 | 3111 | fsevents@2.3.2: 3112 | optional: true 3113 | 3114 | function-bind@1.1.1: {} 3115 | 3116 | function.prototype.name@1.1.5: 3117 | dependencies: 3118 | call-bind: 1.0.2 3119 | define-properties: 1.2.0 3120 | es-abstract: 1.22.1 3121 | functions-have-names: 1.2.3 3122 | 3123 | functions-have-names@1.2.3: {} 3124 | 3125 | get-func-name@2.0.0: {} 3126 | 3127 | get-intrinsic@1.2.1: 3128 | dependencies: 3129 | function-bind: 1.1.1 3130 | has: 1.0.3 3131 | has-proto: 1.0.1 3132 | has-symbols: 1.0.3 3133 | 3134 | get-symbol-description@1.0.0: 3135 | dependencies: 3136 | call-bind: 1.0.2 3137 | get-intrinsic: 1.2.1 3138 | 3139 | get-tsconfig@4.6.2: 3140 | dependencies: 3141 | resolve-pkg-maps: 1.0.0 3142 | 3143 | glob-parent@5.1.2: 3144 | dependencies: 3145 | is-glob: 4.0.3 3146 | 3147 | glob-parent@6.0.2: 3148 | dependencies: 3149 | is-glob: 4.0.3 3150 | 3151 | glob@7.2.3: 3152 | dependencies: 3153 | fs.realpath: 1.0.0 3154 | inflight: 1.0.6 3155 | inherits: 2.0.4 3156 | minimatch: 3.1.2 3157 | once: 1.4.0 3158 | path-is-absolute: 1.0.1 3159 | 3160 | globals@13.20.0: 3161 | dependencies: 3162 | type-fest: 0.20.2 3163 | 3164 | globalthis@1.0.3: 3165 | dependencies: 3166 | define-properties: 1.2.0 3167 | 3168 | globby@11.1.0: 3169 | dependencies: 3170 | array-union: 2.1.0 3171 | dir-glob: 3.0.1 3172 | fast-glob: 3.3.1 3173 | ignore: 5.2.4 3174 | merge2: 1.4.1 3175 | slash: 3.0.0 3176 | 3177 | gopd@1.0.1: 3178 | dependencies: 3179 | get-intrinsic: 1.2.1 3180 | 3181 | graceful-fs@4.2.11: {} 3182 | 3183 | graphemer@1.4.0: {} 3184 | 3185 | has-bigints@1.0.2: {} 3186 | 3187 | has-flag@3.0.0: {} 3188 | 3189 | has-flag@4.0.0: {} 3190 | 3191 | has-property-descriptors@1.0.0: 3192 | dependencies: 3193 | get-intrinsic: 1.2.1 3194 | 3195 | has-proto@1.0.1: {} 3196 | 3197 | has-symbols@1.0.3: {} 3198 | 3199 | has-tostringtag@1.0.0: 3200 | dependencies: 3201 | has-symbols: 1.0.3 3202 | 3203 | has@1.0.3: 3204 | dependencies: 3205 | function-bind: 1.1.1 3206 | 3207 | hosted-git-info@2.8.9: {} 3208 | 3209 | htmlparser2@8.0.2: 3210 | dependencies: 3211 | domelementtype: 2.3.0 3212 | domhandler: 5.0.3 3213 | domutils: 3.1.0 3214 | entities: 4.5.0 3215 | 3216 | ignore@5.2.4: {} 3217 | 3218 | import-fresh@3.3.0: 3219 | dependencies: 3220 | parent-module: 1.0.1 3221 | resolve-from: 4.0.0 3222 | 3223 | imurmurhash@0.1.4: {} 3224 | 3225 | indent-string@4.0.0: {} 3226 | 3227 | inflight@1.0.6: 3228 | dependencies: 3229 | once: 1.4.0 3230 | wrappy: 1.0.2 3231 | 3232 | inherits@2.0.4: {} 3233 | 3234 | internal-slot@1.0.5: 3235 | dependencies: 3236 | get-intrinsic: 1.2.1 3237 | has: 1.0.3 3238 | side-channel: 1.0.4 3239 | 3240 | is-alphabetical@1.0.4: {} 3241 | 3242 | is-alphanumerical@1.0.4: 3243 | dependencies: 3244 | is-alphabetical: 1.0.4 3245 | is-decimal: 1.0.4 3246 | 3247 | is-array-buffer@3.0.2: 3248 | dependencies: 3249 | call-bind: 1.0.2 3250 | get-intrinsic: 1.2.1 3251 | is-typed-array: 1.1.12 3252 | 3253 | is-arrayish@0.2.1: {} 3254 | 3255 | is-bigint@1.0.4: 3256 | dependencies: 3257 | has-bigints: 1.0.2 3258 | 3259 | is-boolean-object@1.1.2: 3260 | dependencies: 3261 | call-bind: 1.0.2 3262 | has-tostringtag: 1.0.0 3263 | 3264 | is-builtin-module@3.2.1: 3265 | dependencies: 3266 | builtin-modules: 3.3.0 3267 | 3268 | is-callable@1.2.7: {} 3269 | 3270 | is-core-module@2.12.1: 3271 | dependencies: 3272 | has: 1.0.3 3273 | 3274 | is-date-object@1.0.5: 3275 | dependencies: 3276 | has-tostringtag: 1.0.0 3277 | 3278 | is-decimal@1.0.4: {} 3279 | 3280 | is-extglob@2.1.1: {} 3281 | 3282 | is-glob@4.0.3: 3283 | dependencies: 3284 | is-extglob: 2.1.1 3285 | 3286 | is-hexadecimal@1.0.4: {} 3287 | 3288 | is-negative-zero@2.0.2: {} 3289 | 3290 | is-number-object@1.0.7: 3291 | dependencies: 3292 | has-tostringtag: 1.0.0 3293 | 3294 | is-number@7.0.0: {} 3295 | 3296 | is-path-inside@3.0.3: {} 3297 | 3298 | is-regex@1.1.4: 3299 | dependencies: 3300 | call-bind: 1.0.2 3301 | has-tostringtag: 1.0.0 3302 | 3303 | is-shared-array-buffer@1.0.2: 3304 | dependencies: 3305 | call-bind: 1.0.2 3306 | 3307 | is-string@1.0.7: 3308 | dependencies: 3309 | has-tostringtag: 1.0.0 3310 | 3311 | is-symbol@1.0.4: 3312 | dependencies: 3313 | has-symbols: 1.0.3 3314 | 3315 | is-typed-array@1.1.12: 3316 | dependencies: 3317 | which-typed-array: 1.1.11 3318 | 3319 | is-weakref@1.0.2: 3320 | dependencies: 3321 | call-bind: 1.0.2 3322 | 3323 | isarray@2.0.5: {} 3324 | 3325 | isexe@2.0.0: {} 3326 | 3327 | js-tokens@4.0.0: {} 3328 | 3329 | js-yaml@4.1.0: 3330 | dependencies: 3331 | argparse: 2.0.1 3332 | 3333 | jsesc@0.5.0: {} 3334 | 3335 | jsesc@3.0.2: {} 3336 | 3337 | json-parse-even-better-errors@2.3.1: {} 3338 | 3339 | json-schema-traverse@0.4.1: {} 3340 | 3341 | json-stable-stringify-without-jsonify@1.0.1: {} 3342 | 3343 | json5@1.0.2: 3344 | dependencies: 3345 | minimist: 1.2.8 3346 | 3347 | jsonc-eslint-parser@2.3.0: 3348 | dependencies: 3349 | acorn: 8.10.0 3350 | eslint-visitor-keys: 3.4.2 3351 | espree: 9.6.1 3352 | semver: 7.5.4 3353 | 3354 | jsonc-parser@3.2.0: {} 3355 | 3356 | jsonfile@6.1.0: 3357 | dependencies: 3358 | universalify: 2.0.0 3359 | optionalDependencies: 3360 | graceful-fs: 4.2.11 3361 | 3362 | kleur@3.0.3: {} 3363 | 3364 | levn@0.4.1: 3365 | dependencies: 3366 | prelude-ls: 1.2.1 3367 | type-check: 0.4.0 3368 | 3369 | lines-and-columns@1.2.4: {} 3370 | 3371 | local-pkg@0.4.3: {} 3372 | 3373 | locate-path@5.0.0: 3374 | dependencies: 3375 | p-locate: 4.1.0 3376 | 3377 | locate-path@6.0.0: 3378 | dependencies: 3379 | p-locate: 5.0.0 3380 | 3381 | lodash.camelcase@4.3.0: {} 3382 | 3383 | lodash.merge@4.6.2: {} 3384 | 3385 | lodash@4.17.21: {} 3386 | 3387 | loupe@2.3.6: 3388 | dependencies: 3389 | get-func-name: 2.0.0 3390 | 3391 | lru-cache@6.0.0: 3392 | dependencies: 3393 | yallist: 4.0.0 3394 | 3395 | magic-string@0.30.2: 3396 | dependencies: 3397 | '@jridgewell/sourcemap-codec': 1.4.15 3398 | 3399 | make-dir@3.1.0: 3400 | dependencies: 3401 | semver: 6.3.1 3402 | 3403 | mdast-util-from-markdown@0.8.5: 3404 | dependencies: 3405 | '@types/mdast': 3.0.12 3406 | mdast-util-to-string: 2.0.0 3407 | micromark: 2.11.4 3408 | parse-entities: 2.0.0 3409 | unist-util-stringify-position: 2.0.3 3410 | transitivePeerDependencies: 3411 | - supports-color 3412 | 3413 | mdast-util-to-string@2.0.0: {} 3414 | 3415 | merge2@1.4.1: {} 3416 | 3417 | micromark@2.11.4: 3418 | dependencies: 3419 | debug: 4.3.4 3420 | parse-entities: 2.0.0 3421 | transitivePeerDependencies: 3422 | - supports-color 3423 | 3424 | micromatch@4.0.5: 3425 | dependencies: 3426 | braces: 3.0.2 3427 | picomatch: 2.3.1 3428 | 3429 | min-indent@1.0.1: {} 3430 | 3431 | minimatch@3.1.2: 3432 | dependencies: 3433 | brace-expansion: 1.1.11 3434 | 3435 | minimist@1.2.8: {} 3436 | 3437 | mlly@1.4.0: 3438 | dependencies: 3439 | acorn: 8.10.0 3440 | pathe: 1.1.1 3441 | pkg-types: 1.0.3 3442 | ufo: 1.2.0 3443 | 3444 | ms@2.1.2: {} 3445 | 3446 | ms@2.1.3: {} 3447 | 3448 | nanoid@3.3.6: {} 3449 | 3450 | natural-compare-lite@1.4.0: {} 3451 | 3452 | natural-compare@1.4.0: {} 3453 | 3454 | normalize-package-data@2.5.0: 3455 | dependencies: 3456 | hosted-git-info: 2.8.9 3457 | resolve: 1.22.2 3458 | semver: 5.7.2 3459 | validate-npm-package-license: 3.0.4 3460 | 3461 | nth-check@2.1.1: 3462 | dependencies: 3463 | boolbase: 1.0.0 3464 | 3465 | object-inspect@1.12.3: {} 3466 | 3467 | object-keys@1.1.1: {} 3468 | 3469 | object.assign@4.1.4: 3470 | dependencies: 3471 | call-bind: 1.0.2 3472 | define-properties: 1.2.0 3473 | has-symbols: 1.0.3 3474 | object-keys: 1.1.1 3475 | 3476 | object.fromentries@2.0.6: 3477 | dependencies: 3478 | call-bind: 1.0.2 3479 | define-properties: 1.2.0 3480 | es-abstract: 1.22.1 3481 | 3482 | object.groupby@1.0.0: 3483 | dependencies: 3484 | call-bind: 1.0.2 3485 | define-properties: 1.2.0 3486 | es-abstract: 1.22.1 3487 | get-intrinsic: 1.2.1 3488 | 3489 | object.values@1.1.6: 3490 | dependencies: 3491 | call-bind: 1.0.2 3492 | define-properties: 1.2.0 3493 | es-abstract: 1.22.1 3494 | 3495 | once@1.4.0: 3496 | dependencies: 3497 | wrappy: 1.0.2 3498 | 3499 | optionator@0.9.3: 3500 | dependencies: 3501 | '@aashutoshrathi/word-wrap': 1.2.6 3502 | deep-is: 0.1.4 3503 | fast-levenshtein: 2.0.6 3504 | levn: 0.4.1 3505 | prelude-ls: 1.2.1 3506 | type-check: 0.4.0 3507 | 3508 | p-limit@2.3.0: 3509 | dependencies: 3510 | p-try: 2.2.0 3511 | 3512 | p-limit@3.1.0: 3513 | dependencies: 3514 | yocto-queue: 0.1.0 3515 | 3516 | p-limit@4.0.0: 3517 | dependencies: 3518 | yocto-queue: 1.0.0 3519 | 3520 | p-locate@4.1.0: 3521 | dependencies: 3522 | p-limit: 2.3.0 3523 | 3524 | p-locate@5.0.0: 3525 | dependencies: 3526 | p-limit: 3.1.0 3527 | 3528 | p-try@2.2.0: {} 3529 | 3530 | parent-module@1.0.1: 3531 | dependencies: 3532 | callsites: 3.1.0 3533 | 3534 | parse-entities@2.0.0: 3535 | dependencies: 3536 | character-entities: 1.2.4 3537 | character-entities-legacy: 1.1.4 3538 | character-reference-invalid: 1.1.4 3539 | is-alphanumerical: 1.0.4 3540 | is-decimal: 1.0.4 3541 | is-hexadecimal: 1.0.4 3542 | 3543 | parse-json@5.2.0: 3544 | dependencies: 3545 | '@babel/code-frame': 7.22.5 3546 | error-ex: 1.3.2 3547 | json-parse-even-better-errors: 2.3.1 3548 | lines-and-columns: 1.2.4 3549 | 3550 | path-exists@4.0.0: {} 3551 | 3552 | path-is-absolute@1.0.1: {} 3553 | 3554 | path-key@3.1.1: {} 3555 | 3556 | path-parse@1.0.7: {} 3557 | 3558 | path-type@4.0.0: {} 3559 | 3560 | pathe@1.1.1: {} 3561 | 3562 | pathval@1.1.1: {} 3563 | 3564 | picocolors@1.0.0: {} 3565 | 3566 | picomatch@2.3.1: {} 3567 | 3568 | pkg-dir@4.2.0: 3569 | dependencies: 3570 | find-up: 4.1.0 3571 | 3572 | pkg-types@1.0.3: 3573 | dependencies: 3574 | jsonc-parser: 3.2.0 3575 | mlly: 1.4.0 3576 | pathe: 1.1.1 3577 | 3578 | pluralize@8.0.0: {} 3579 | 3580 | postcss-selector-parser@6.0.13: 3581 | dependencies: 3582 | cssesc: 3.0.0 3583 | util-deprecate: 1.0.2 3584 | 3585 | postcss@8.4.27: 3586 | dependencies: 3587 | nanoid: 3.3.6 3588 | picocolors: 1.0.0 3589 | source-map-js: 1.0.2 3590 | 3591 | prelude-ls@1.2.1: {} 3592 | 3593 | pretty-format@29.6.2: 3594 | dependencies: 3595 | '@jest/schemas': 29.6.0 3596 | ansi-styles: 5.2.0 3597 | react-is: 18.2.0 3598 | 3599 | prompts@2.4.2: 3600 | dependencies: 3601 | kleur: 3.0.3 3602 | sisteransi: 1.0.5 3603 | 3604 | punycode@2.3.0: {} 3605 | 3606 | queue-microtask@1.2.3: {} 3607 | 3608 | react-is@18.2.0: {} 3609 | 3610 | read-pkg-up@7.0.1: 3611 | dependencies: 3612 | find-up: 4.1.0 3613 | read-pkg: 5.2.0 3614 | type-fest: 0.8.1 3615 | 3616 | read-pkg@5.2.0: 3617 | dependencies: 3618 | '@types/normalize-package-data': 2.4.1 3619 | normalize-package-data: 2.5.0 3620 | parse-json: 5.2.0 3621 | type-fest: 0.6.0 3622 | 3623 | regexp-tree@0.1.27: {} 3624 | 3625 | regexp.prototype.flags@1.5.0: 3626 | dependencies: 3627 | call-bind: 1.0.2 3628 | define-properties: 1.2.0 3629 | functions-have-names: 1.2.3 3630 | 3631 | regexpp@3.2.0: {} 3632 | 3633 | regjsparser@0.9.1: 3634 | dependencies: 3635 | jsesc: 0.5.0 3636 | 3637 | resolve-from@4.0.0: {} 3638 | 3639 | resolve-pkg-maps@1.0.0: {} 3640 | 3641 | resolve@1.22.2: 3642 | dependencies: 3643 | is-core-module: 2.12.1 3644 | path-parse: 1.0.7 3645 | supports-preserve-symlinks-flag: 1.0.0 3646 | 3647 | resolve@1.22.3: 3648 | dependencies: 3649 | is-core-module: 2.12.1 3650 | path-parse: 1.0.7 3651 | supports-preserve-symlinks-flag: 1.0.0 3652 | 3653 | reusify@1.0.4: {} 3654 | 3655 | rimraf@3.0.2: 3656 | dependencies: 3657 | glob: 7.2.3 3658 | 3659 | rollup-plugin-typescript2@0.32.1(rollup@3.27.1)(typescript@4.9.5): 3660 | dependencies: 3661 | '@rollup/pluginutils': 4.2.1 3662 | find-cache-dir: 3.3.2 3663 | fs-extra: 10.1.0 3664 | resolve: 1.22.2 3665 | rollup: 3.27.1 3666 | tslib: 2.6.1 3667 | typescript: 4.9.5 3668 | 3669 | rollup@3.27.1: 3670 | optionalDependencies: 3671 | fsevents: 2.3.2 3672 | 3673 | run-parallel@1.2.0: 3674 | dependencies: 3675 | queue-microtask: 1.2.3 3676 | 3677 | safe-array-concat@1.0.0: 3678 | dependencies: 3679 | call-bind: 1.0.2 3680 | get-intrinsic: 1.2.1 3681 | has-symbols: 1.0.3 3682 | isarray: 2.0.5 3683 | 3684 | safe-regex-test@1.0.0: 3685 | dependencies: 3686 | call-bind: 1.0.2 3687 | get-intrinsic: 1.2.1 3688 | is-regex: 1.1.4 3689 | 3690 | safe-regex@2.1.1: 3691 | dependencies: 3692 | regexp-tree: 0.1.27 3693 | 3694 | semver@5.7.2: {} 3695 | 3696 | semver@6.3.1: {} 3697 | 3698 | semver@7.5.4: 3699 | dependencies: 3700 | lru-cache: 6.0.0 3701 | 3702 | shebang-command@2.0.0: 3703 | dependencies: 3704 | shebang-regex: 3.0.0 3705 | 3706 | shebang-regex@3.0.0: {} 3707 | 3708 | side-channel@1.0.4: 3709 | dependencies: 3710 | call-bind: 1.0.2 3711 | get-intrinsic: 1.2.1 3712 | object-inspect: 1.12.3 3713 | 3714 | siginfo@2.0.0: {} 3715 | 3716 | sisteransi@1.0.5: {} 3717 | 3718 | slash@3.0.0: {} 3719 | 3720 | source-map-js@1.0.2: {} 3721 | 3722 | source-map-support@0.5.21: 3723 | dependencies: 3724 | buffer-from: 1.1.2 3725 | source-map: 0.6.1 3726 | 3727 | source-map@0.6.1: {} 3728 | 3729 | spdx-correct@3.2.0: 3730 | dependencies: 3731 | spdx-expression-parse: 3.0.1 3732 | spdx-license-ids: 3.0.13 3733 | 3734 | spdx-exceptions@2.3.0: {} 3735 | 3736 | spdx-expression-parse@3.0.1: 3737 | dependencies: 3738 | spdx-exceptions: 2.3.0 3739 | spdx-license-ids: 3.0.13 3740 | 3741 | spdx-license-ids@3.0.13: {} 3742 | 3743 | stackback@0.0.2: {} 3744 | 3745 | std-env@3.3.3: {} 3746 | 3747 | string-argv@0.3.2: {} 3748 | 3749 | string.prototype.trim@1.2.7: 3750 | dependencies: 3751 | call-bind: 1.0.2 3752 | define-properties: 1.2.0 3753 | es-abstract: 1.22.1 3754 | 3755 | string.prototype.trimend@1.0.6: 3756 | dependencies: 3757 | call-bind: 1.0.2 3758 | define-properties: 1.2.0 3759 | es-abstract: 1.22.1 3760 | 3761 | string.prototype.trimstart@1.0.6: 3762 | dependencies: 3763 | call-bind: 1.0.2 3764 | define-properties: 1.2.0 3765 | es-abstract: 1.22.1 3766 | 3767 | strip-ansi@6.0.1: 3768 | dependencies: 3769 | ansi-regex: 5.0.1 3770 | 3771 | strip-bom@3.0.0: {} 3772 | 3773 | strip-indent@3.0.0: 3774 | dependencies: 3775 | min-indent: 1.0.1 3776 | 3777 | strip-json-comments@3.1.1: {} 3778 | 3779 | strip-literal@1.3.0: 3780 | dependencies: 3781 | acorn: 8.10.0 3782 | 3783 | supports-color@5.5.0: 3784 | dependencies: 3785 | has-flag: 3.0.0 3786 | 3787 | supports-color@7.2.0: 3788 | dependencies: 3789 | has-flag: 4.0.0 3790 | 3791 | supports-preserve-symlinks-flag@1.0.0: {} 3792 | 3793 | text-table@0.2.0: {} 3794 | 3795 | tinybench@2.5.0: {} 3796 | 3797 | tinypool@0.7.0: {} 3798 | 3799 | tinyspy@2.1.1: {} 3800 | 3801 | to-fast-properties@2.0.0: {} 3802 | 3803 | to-regex-range@5.0.1: 3804 | dependencies: 3805 | is-number: 7.0.0 3806 | 3807 | tsconfig-paths@3.14.2: 3808 | dependencies: 3809 | '@types/json5': 0.0.29 3810 | json5: 1.0.2 3811 | minimist: 1.2.8 3812 | strip-bom: 3.0.0 3813 | 3814 | tslib@1.14.1: {} 3815 | 3816 | tslib@2.6.1: {} 3817 | 3818 | tsutils@3.21.0(typescript@4.9.5): 3819 | dependencies: 3820 | tslib: 1.14.1 3821 | typescript: 4.9.5 3822 | 3823 | tsx@3.12.7: 3824 | dependencies: 3825 | '@esbuild-kit/cjs-loader': 2.4.2 3826 | '@esbuild-kit/core-utils': 3.1.0 3827 | '@esbuild-kit/esm-loader': 2.5.5 3828 | optionalDependencies: 3829 | fsevents: 2.3.2 3830 | 3831 | type-check@0.4.0: 3832 | dependencies: 3833 | prelude-ls: 1.2.1 3834 | 3835 | type-detect@4.0.8: {} 3836 | 3837 | type-fest@0.20.2: {} 3838 | 3839 | type-fest@0.6.0: {} 3840 | 3841 | type-fest@0.8.1: {} 3842 | 3843 | typed-array-buffer@1.0.0: 3844 | dependencies: 3845 | call-bind: 1.0.2 3846 | get-intrinsic: 1.2.1 3847 | is-typed-array: 1.1.12 3848 | 3849 | typed-array-byte-length@1.0.0: 3850 | dependencies: 3851 | call-bind: 1.0.2 3852 | for-each: 0.3.3 3853 | has-proto: 1.0.1 3854 | is-typed-array: 1.1.12 3855 | 3856 | typed-array-byte-offset@1.0.0: 3857 | dependencies: 3858 | available-typed-arrays: 1.0.5 3859 | call-bind: 1.0.2 3860 | for-each: 0.3.3 3861 | has-proto: 1.0.1 3862 | is-typed-array: 1.1.12 3863 | 3864 | typed-array-length@1.0.4: 3865 | dependencies: 3866 | call-bind: 1.0.2 3867 | for-each: 0.3.3 3868 | is-typed-array: 1.1.12 3869 | 3870 | typescript@4.9.5: {} 3871 | 3872 | typical@4.0.0: {} 3873 | 3874 | ufo@1.2.0: {} 3875 | 3876 | unbox-primitive@1.0.2: 3877 | dependencies: 3878 | call-bind: 1.0.2 3879 | has-bigints: 1.0.2 3880 | has-symbols: 1.0.3 3881 | which-boxed-primitive: 1.0.2 3882 | 3883 | unist-util-stringify-position@2.0.3: 3884 | dependencies: 3885 | '@types/unist': 2.0.7 3886 | 3887 | universalify@2.0.0: {} 3888 | 3889 | uri-js@4.4.1: 3890 | dependencies: 3891 | punycode: 2.3.0 3892 | 3893 | util-deprecate@1.0.2: {} 3894 | 3895 | validate-npm-package-license@3.0.4: 3896 | dependencies: 3897 | spdx-correct: 3.2.0 3898 | spdx-expression-parse: 3.0.1 3899 | 3900 | vite-node@0.34.1(@types/node@17.0.45): 3901 | dependencies: 3902 | cac: 6.7.14 3903 | debug: 4.3.4 3904 | mlly: 1.4.0 3905 | pathe: 1.1.1 3906 | picocolors: 1.0.0 3907 | vite: 4.4.8(@types/node@17.0.45) 3908 | transitivePeerDependencies: 3909 | - '@types/node' 3910 | - less 3911 | - lightningcss 3912 | - sass 3913 | - stylus 3914 | - sugarss 3915 | - supports-color 3916 | - terser 3917 | 3918 | vite@4.4.8(@types/node@17.0.45): 3919 | dependencies: 3920 | '@types/node': 17.0.45 3921 | esbuild: 0.18.17 3922 | postcss: 8.4.27 3923 | rollup: 3.27.1 3924 | optionalDependencies: 3925 | fsevents: 2.3.2 3926 | 3927 | vitest@0.34.1: 3928 | dependencies: 3929 | '@types/chai': 4.3.5 3930 | '@types/chai-subset': 1.3.3 3931 | '@types/node': 17.0.45 3932 | '@vitest/expect': 0.34.1 3933 | '@vitest/runner': 0.34.1 3934 | '@vitest/snapshot': 0.34.1 3935 | '@vitest/spy': 0.34.1 3936 | '@vitest/utils': 0.34.1 3937 | acorn: 8.10.0 3938 | acorn-walk: 8.2.0 3939 | cac: 6.7.14 3940 | chai: 4.3.7 3941 | debug: 4.3.4 3942 | local-pkg: 0.4.3 3943 | magic-string: 0.30.2 3944 | pathe: 1.1.1 3945 | picocolors: 1.0.0 3946 | std-env: 3.3.3 3947 | strip-literal: 1.3.0 3948 | tinybench: 2.5.0 3949 | tinypool: 0.7.0 3950 | vite: 4.4.8(@types/node@17.0.45) 3951 | vite-node: 0.34.1(@types/node@17.0.45) 3952 | why-is-node-running: 2.2.2 3953 | transitivePeerDependencies: 3954 | - less 3955 | - lightningcss 3956 | - sass 3957 | - stylus 3958 | - sugarss 3959 | - supports-color 3960 | - terser 3961 | 3962 | vue-eslint-parser@9.3.1(eslint@8.46.0): 3963 | dependencies: 3964 | debug: 4.3.4 3965 | eslint: 8.46.0 3966 | eslint-scope: 7.2.2 3967 | eslint-visitor-keys: 3.4.2 3968 | espree: 9.6.1 3969 | esquery: 1.5.0 3970 | lodash: 4.17.21 3971 | semver: 7.5.4 3972 | transitivePeerDependencies: 3973 | - supports-color 3974 | 3975 | which-boxed-primitive@1.0.2: 3976 | dependencies: 3977 | is-bigint: 1.0.4 3978 | is-boolean-object: 1.1.2 3979 | is-number-object: 1.0.7 3980 | is-string: 1.0.7 3981 | is-symbol: 1.0.4 3982 | 3983 | which-typed-array@1.1.11: 3984 | dependencies: 3985 | available-typed-arrays: 1.0.5 3986 | call-bind: 1.0.2 3987 | for-each: 0.3.3 3988 | gopd: 1.0.1 3989 | has-tostringtag: 1.0.0 3990 | 3991 | which@2.0.2: 3992 | dependencies: 3993 | isexe: 2.0.0 3994 | 3995 | why-is-node-running@2.2.2: 3996 | dependencies: 3997 | siginfo: 2.0.0 3998 | stackback: 0.0.2 3999 | 4000 | wrappy@1.0.2: {} 4001 | 4002 | xml-name-validator@4.0.0: {} 4003 | 4004 | yallist@4.0.0: {} 4005 | 4006 | yaml-eslint-parser@1.2.2: 4007 | dependencies: 4008 | eslint-visitor-keys: 3.4.2 4009 | lodash: 4.17.21 4010 | yaml: 2.3.1 4011 | 4012 | yaml@2.3.1: {} 4013 | 4014 | yocto-queue@0.1.0: {} 4015 | 4016 | yocto-queue@1.0.0: {} 4017 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | - example/* 4 | -------------------------------------------------------------------------------- /rollup.config.ts: -------------------------------------------------------------------------------- 1 | import ts from '@rollup/plugin-typescript' 2 | export default { 3 | input: './src/index.ts', 4 | output: [ 5 | { 6 | file: 'lib/index.mjs', 7 | format: 'es' 8 | }, 9 | { 10 | file: 'lib/index.cjs', 11 | format: 'cjs' 12 | } 13 | ], 14 | plugins: [ts()] 15 | } 16 | -------------------------------------------------------------------------------- /scripts/addExample.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs' 2 | import * as path from 'path' 3 | 4 | const Html 5 | = ` 6 | 7 | 8 | 9 | 10 | 11 | example 12 | 13 | 14 |
15 | 16 | 17 | ` 18 | 19 | const AppJs 20 | = `import { h } from '../../lib/index.mjs' 21 | import { Foo } from './Foo.js' 22 | 23 | export default { 24 | setup() { 25 | return { 26 | msg: 'view', 27 | } 28 | }, 29 | render() { 30 | return h() 31 | }, 32 | } 33 | ` 34 | 35 | const FooJs 36 | = `import { h } from '../../lib/index.mjs' 37 | export const Foo = { 38 | setup() { 39 | return { 40 | 41 | } 42 | }, 43 | render() { 44 | return h() 45 | }, 46 | } 47 | ` 48 | 49 | const mainJs 50 | = `import { createApp } from '../../lib/index.mjs' 51 | import App from './App.js' 52 | 53 | const rootContainer = document.querySelector('#app') 54 | createApp(App).mount(rootContainer) 55 | ` 56 | 57 | if (process.argv.length <= 2) 58 | throw new Error('请输入example文件夹名称') 59 | const folderName = process.argv[process.argv.length - 1] 60 | console.log(folderName) 61 | const folderPath = path.join(__dirname, `../example/${folderName}`) 62 | 63 | try { 64 | if (!fs.existsSync(folderPath)) 65 | fs.mkdirSync(folderPath) 66 | 67 | fs.writeFileSync(path.join(__dirname, `../example/${folderName}/App.js`), AppJs) 68 | fs.writeFileSync(path.join(__dirname, `../example/${folderName}/Foo.js`), FooJs) 69 | fs.writeFileSync(path.join(__dirname, `../example/${folderName}/main.js`), mainJs) 70 | fs.writeFileSync(path.join(__dirname, `../example/${folderName}/index.html`), Html) 71 | } 72 | catch (error) { 73 | if (typeof error === 'string') 74 | throw new Error(error) 75 | if (error instanceof Error) 76 | throw error 77 | } 78 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './runtime-dom' 2 | export * from './reactivity' 3 | -------------------------------------------------------------------------------- /src/reactivity/baseHandler.ts: -------------------------------------------------------------------------------- 1 | import { extend, isObject } from '../shared' 2 | import { track, trigger } from './effect' 3 | import { reactive, readonly } from './reactive' 4 | 5 | export const ReactiveFlags = { 6 | IS_REACTIVE: Symbol('__v_isReactive'), 7 | IS_READONLY: Symbol('__v_isReadonly'), 8 | } as const 9 | 10 | const get = createGetter() 11 | const set = createSetter() 12 | const readonlyGet = createGetter(true) 13 | const shallowReadonlyGet = createGetter(true, true) 14 | const readonlySet = (target: any, key: string | symbol) => { 15 | console.warn(`cannot set ${String(key)} in readonly object`) 16 | return true 17 | } 18 | 19 | function createGetter(isReadonly = false, shallow = false) { 20 | return function get(target: object, key: string | symbol): unknown { 21 | // for isReactive 22 | if (key === ReactiveFlags.IS_REACTIVE) 23 | return !isReadonly 24 | 25 | // for isReadonly 26 | if (key === ReactiveFlags.IS_READONLY) 27 | return isReadonly 28 | 29 | const res = Reflect.get(target, key) 30 | if (shallow) 31 | return res 32 | 33 | !isReadonly && track(target, key) 34 | // if res is object, return reactive object 35 | //处理嵌套reactive对象 36 | if (isObject(res)) 37 | return isReadonly ? readonly(res) : reactive(res) 38 | return res 39 | } 40 | } 41 | 42 | function createSetter() { 43 | return function (target: object, key: string | symbol, value: unknown) { 44 | const res = Reflect.set(target, key, value) 45 | trigger(target, key) 46 | return res 47 | } 48 | } 49 | 50 | export const mutableHandlers = { 51 | get, 52 | set, 53 | } 54 | 55 | export const readonlyHandlers = { 56 | get: readonlyGet, 57 | set: readonlySet, 58 | } 59 | 60 | export const shallowReadonlyHandlers = extend({}, readonlyHandlers, { 61 | get: shallowReadonlyGet, 62 | }) 63 | export type ProxyHandlers = typeof mutableHandlers | typeof readonlyHandlers 64 | -------------------------------------------------------------------------------- /src/reactivity/computed.ts: -------------------------------------------------------------------------------- 1 | import { ReactiveEffect } from './effect' 2 | class ComputedRefImpl { 3 | private _getter: any 4 | private _dirty = true 5 | private _value: any 6 | private _effect: ReactiveEffect 7 | constructor(getter: any) { 8 | this._getter = getter 9 | 10 | // use scheduler 11 | this._effect = new ReactiveEffect(getter, () => { 12 | if (!this._dirty) 13 | this._dirty = true 14 | }) 15 | } 16 | 17 | get value() { 18 | if (this._dirty) { 19 | this._dirty = false 20 | this._value = this._effect.run() 21 | } 22 | return this._value 23 | } 24 | } 25 | 26 | export function computed(getter: any) { 27 | return new ComputedRefImpl(getter) 28 | } 29 | -------------------------------------------------------------------------------- /src/reactivity/effect.ts: -------------------------------------------------------------------------------- 1 | import { extend } from '../shared' 2 | 3 | type Target = Record 4 | type DepsMap = Map> 5 | interface Runner { 6 | (): any 7 | effect?: ReactiveEffect 8 | } 9 | interface EffectOptions { 10 | scheduler?: () => void 11 | onStop?: () => void 12 | } 13 | 14 | let activeEffect: ReactiveEffect | undefined 15 | let shouldTrack = true 16 | const targetMap = new Map() 17 | export class ReactiveEffect { 18 | private _fn: any 19 | private active = true 20 | public deps: Set[] = [] 21 | parent: ReactiveEffect | undefined = undefined 22 | public onStop?: () => void 23 | public scheduler 24 | constructor(fn: Function, scheduler?: EffectOptions['scheduler']) { 25 | this._fn = fn 26 | this.scheduler = scheduler 27 | } 28 | 29 | run() { 30 | // 是否收集依赖 31 | 32 | // 如果effect已经stop,则直接执行fn 33 | if (!this.active) 34 | return this._fn() 35 | 36 | 37 | 38 | //这里解决了循环依赖的问题: 39 | //effect(()=>{num = num + 1}) 40 | //这种情况会导致无限循环,所以需要使用parent来处理 41 | let parent: ReactiveEffect | undefined = activeEffect 42 | while (parent) { 43 | if (parent === this) 44 | return 45 | parent = parent.parent 46 | } 47 | 48 | //使用parent来处理嵌套effect 49 | //每处理完一个effect,parent都会更新为上一个effect,恢复上一个effect的执行环境,避免反向收集时收集到了内部错误的effect 50 | try { 51 | this.parent = activeEffect 52 | activeEffect = this 53 | return this._fn() 54 | } 55 | finally { 56 | activeEffect = this.parent 57 | // this.parent = undefined 58 | } 59 | } 60 | 61 | stop() { 62 | if (this.active) { 63 | cleanupEffect(this) 64 | if (this.onStop) 65 | this.onStop() 66 | this.active = false 67 | } 68 | } 69 | } 70 | 71 | function cleanupEffect(effect: ReactiveEffect) { 72 | effect.deps.forEach((dep) => { 73 | dep.delete(effect) 74 | }) 75 | effect.deps.length = 0 76 | } 77 | 78 | export function effect(fn: Function, options: EffectOptions = {}) { 79 | const _effect = new ReactiveEffect(fn, options.scheduler) 80 | extend(_effect, options) 81 | _effect.run() 82 | 83 | //返回runner的话,run方法中的this会乱,这里需要先绑定 84 | const runner: Runner = _effect.run.bind(_effect) 85 | 86 | runner.effect = _effect 87 | return runner 88 | } 89 | 90 | export function isTracking() { 91 | if (!activeEffect || !shouldTrack) 92 | return false 93 | else 94 | return true 95 | } 96 | export function track(target: Target, key: any) { 97 | // target:key -> dep 98 | if (!isTracking()) 99 | return 100 | let depsMap = targetMap.get(target) 101 | if (!depsMap) { 102 | depsMap = new Map() 103 | targetMap.set(target, depsMap) 104 | } 105 | 106 | let dep = depsMap.get(key) 107 | if (!dep) { 108 | dep = new Set() 109 | depsMap.set(key, dep) 110 | } 111 | 112 | trackEffects(dep) 113 | } 114 | 115 | export function trackEffects(dep: Set) { 116 | if (!activeEffect) 117 | return 118 | if (dep.has(activeEffect)) 119 | return 120 | dep.add(activeEffect) 121 | // 反向收集 122 | activeEffect.deps.push(dep) 123 | } 124 | 125 | export function trigger(target: Target, key: any) { 126 | const depsMap = targetMap.get(target) 127 | if (!depsMap) 128 | return 129 | const dep = depsMap.get(key) 130 | if (dep) 131 | triggerEffects(dep) 132 | } 133 | 134 | export function triggerEffects(dep: Set) { 135 | for (const effect of dep.values()) { 136 | if (effect.scheduler) 137 | effect.scheduler() 138 | else 139 | effect.run() 140 | } 141 | } 142 | 143 | export function stop(runner: Runner) { 144 | if (runner.effect) 145 | runner.effect.stop() 146 | } 147 | -------------------------------------------------------------------------------- /src/reactivity/index.ts: -------------------------------------------------------------------------------- 1 | export * from './reactive' 2 | export * from './ref' 3 | export * from './computed' 4 | -------------------------------------------------------------------------------- /src/reactivity/reactive.ts: -------------------------------------------------------------------------------- 1 | import { isObject } from './../shared/index' 2 | import type { ProxyHandlers } from './baseHandler' 3 | import { ReactiveFlags, mutableHandlers, readonlyHandlers, shallowReadonlyHandlers } from './baseHandler' 4 | 5 | export function reactive>(raw: T): T { 6 | return createActiveObject(raw, mutableHandlers) 7 | } 8 | 9 | export function isReactive(target: any) { 10 | // trigger getter to get result 11 | // if target is not Proxy, won't trigger getter 12 | // so just use !! to transform value to boolean 13 | return !!target[ReactiveFlags.IS_REACTIVE] 14 | } 15 | 16 | export function readonly(raw: Record) { 17 | return createActiveObject(raw, readonlyHandlers) 18 | } 19 | 20 | export function shallowReadonly(raw: Record) { 21 | return createActiveObject(raw, shallowReadonlyHandlers) 22 | } 23 | 24 | export function isReadonly(target: any) { 25 | return !!target[ReactiveFlags.IS_READONLY] 26 | } 27 | 28 | function createActiveObject>(raw: T, baseHandlers: ProxyHandlers): T { 29 | if (!isObject(raw)) 30 | throw new Error('target of activeObject must be an object') 31 | 32 | return new Proxy(raw, baseHandlers) 33 | } 34 | 35 | export function isProxy(value: any) { 36 | return isReactive(value) || isReadonly(value) 37 | } 38 | -------------------------------------------------------------------------------- /src/reactivity/ref.ts: -------------------------------------------------------------------------------- 1 | import { hasChanged, isObject } from '../shared/index' 2 | import type { ReactiveEffect } from './effect' 3 | import { isTracking, trackEffects, triggerEffects } from './effect' 4 | import { reactive } from './reactive' 5 | 6 | export interface Ref { 7 | value: T 8 | } 9 | 10 | class RefImpl { 11 | private _value: any 12 | private _rawValue: any 13 | public dep: Set 14 | 15 | constructor(value: T) { 16 | this._rawValue = value 17 | this._value = convertObjectToReactive(value) 18 | this.dep = new Set() 19 | } 20 | 21 | get value() { 22 | trackRefValue(this) 23 | return this._value 24 | } 25 | 26 | set value(newValue: any) { 27 | // 先修改value 再进行通知 28 | // this._value可能是reactive对象或者普通值 29 | // 因此需要对比rawValue 30 | if (hasChanged(this._rawValue, newValue)) { 31 | this._rawValue = newValue 32 | this._value = isObject(newValue) ? reactive(newValue) : newValue 33 | triggerEffects(this.dep) 34 | } 35 | } 36 | } 37 | 38 | function convertObjectToReactive(value: any) { 39 | if (isObject(value)) 40 | return reactive(value) 41 | 42 | return value 43 | } 44 | 45 | function trackRefValue(ref: RefImpl) { 46 | // 通过isTracking判断是否有activeEffect 47 | if (isTracking()) 48 | trackEffects(ref.dep) 49 | } 50 | 51 | function createRef(rawValue: unknown) { 52 | if (isRef(rawValue)) 53 | return rawValue 54 | 55 | return new RefImpl(rawValue) 56 | } 57 | 58 | export function ref(value: T): Ref 59 | export function ref(value?: unknown) { 60 | return createRef(value) 61 | } 62 | 63 | export function isRef(r: Ref | unknown): r is Ref 64 | export function isRef(value: any): value is Ref { 65 | return value instanceof RefImpl 66 | } 67 | 68 | export function unRef(ref: T | Ref): T { 69 | return isRef(ref) ? (ref.value as any) : ref 70 | } 71 | 72 | export function proxyRefs(target: T) { 73 | return new Proxy(target, { 74 | get(target, key) { 75 | return unRef(Reflect.get(target, key)) 76 | }, 77 | set(target, key: string, value) { 78 | if (isRef(target[key]) && !isRef(value)) 79 | return (target[key].value = value) 80 | else 81 | return Reflect.set(target, key, value) 82 | }, 83 | }) 84 | } 85 | -------------------------------------------------------------------------------- /src/reactivity/tests/computed.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { computed } from '../computed' 3 | import { reactive } from '../reactive' 4 | 5 | describe('computed', () => { 6 | it('happy path', () => { 7 | const user = reactive({ 8 | age: 1, 9 | }) 10 | 11 | const age = computed(() => user.age) 12 | expect(age.value).toBe(1) 13 | }) 14 | 15 | it('should compute lazily', () => { 16 | const value = reactive({ 17 | foo: 1, 18 | }) 19 | const getter = vi.fn(() => { 20 | return value.foo 21 | }) 22 | const cValue = computed(getter) 23 | 24 | // lazy 25 | expect(getter).not.toHaveBeenCalled() 26 | 27 | expect(cValue.value).toBe(1) 28 | expect(getter).toHaveBeenCalledTimes(1) 29 | 30 | // should not compute again 31 | cValue.value 32 | expect(getter).toHaveBeenCalledTimes(1) 33 | 34 | // should compute until been called 35 | value.foo = 2 36 | expect(getter).toHaveBeenCalledTimes(1) 37 | 38 | // now it should computed 39 | expect(cValue.value).toBe(2) 40 | expect(getter).toHaveBeenCalledTimes(2) 41 | 42 | // should not compute again 43 | cValue.value 44 | expect(getter).toHaveBeenCalledTimes(2) 45 | }) 46 | }) 47 | -------------------------------------------------------------------------------- /src/reactivity/tests/effect.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { reactive } from '../reactive' 3 | import { effect, stop } from '../effect' 4 | 5 | describe('effect', () => { 6 | it('happy path', () => { 7 | const user = reactive({ 8 | age: 10, 9 | }) 10 | 11 | let nextAge 12 | effect(() => { 13 | nextAge = user.age + 1 14 | }) 15 | 16 | expect(nextAge).toBe(11) 17 | 18 | // update 19 | user.age++ 20 | expect(nextAge).toBe(12) 21 | }) 22 | 23 | it('runner', () => { 24 | let foo = 10 25 | const runner = effect(() => { 26 | foo++ 27 | return 'foo' 28 | }) 29 | expect(foo).toBe(11) 30 | const r = runner() 31 | expect(foo).toBe(12) 32 | expect(r).toBe('foo') 33 | }) 34 | 35 | //测试嵌套effect 36 | it('nesting', () => { 37 | const consoleSpy = vi.spyOn(console, 'log') 38 | 39 | const data = reactive({ 40 | a: 1, 41 | b: 2, 42 | }) 43 | 44 | effect(() => { 45 | console.log('level 1') 46 | effect(() => { 47 | console.log('level 2') 48 | effect(() => { 49 | console.log('level 3', data.a) 50 | }) 51 | console.log(data.b) 52 | }) 53 | }) 54 | 55 | //按顺序触发 56 | expect(consoleSpy.mock.calls).toEqual([ 57 | ['level 1'], 58 | ['level 2'], 59 | ['level 3', 1], 60 | [2] 61 | ]) 62 | 63 | consoleSpy.mockClear() 64 | 65 | //修改对应key值应只触发当前key的effect 66 | data.a = 10 67 | expect(consoleSpy.mock.calls).toEqual([ 68 | ['level 3', 10] 69 | ]) 70 | 71 | consoleSpy.mockClear() 72 | 73 | data.b = 20 74 | expect(consoleSpy.mock.calls).toEqual([ 75 | ['level 2'], 76 | ['level 3', 10], 77 | [20] 78 | ]) 79 | 80 | consoleSpy.mockClear() 81 | 82 | }) 83 | 84 | //effect应阻止无限循环的情况发生 85 | it('should prevent infinite loops', () => { 86 | const num = reactive({count:0}) 87 | const spy = vi.fn() 88 | effect(() => { 89 | spy() 90 | num.count 91 | effect(()=>{ 92 | num.count ++ 93 | }) 94 | }) 95 | expect(spy).toHaveBeenCalledTimes(1) 96 | }) 97 | 98 | it('scheduler', () => { 99 | let dummy 100 | let run: any 101 | const scheduler = vi.fn(() => { 102 | /* eslint-disable @typescript-eslint/no-use-before-define */ 103 | run = runner 104 | }) 105 | const obj = reactive({ foo: 1 }) 106 | const runner = effect(() => { 107 | dummy = obj.foo 108 | }, { scheduler }) 109 | expect(scheduler).not.toHaveBeenCalled() 110 | expect(dummy).toBe(1) 111 | 112 | // should be called on first trigger 113 | obj.foo++ 114 | expect(scheduler).toHaveBeenCalledTimes(1) 115 | 116 | // should not run yet 117 | expect(dummy).toBe(1) 118 | 119 | run() 120 | // should have run 121 | expect(dummy).toBe(2) 122 | }) 123 | 124 | it('stop', () => { 125 | let dummy 126 | const obj = reactive({ prop: 1 }) 127 | const runner = effect(() => { 128 | dummy = obj.prop 129 | }) 130 | obj.prop = 2 131 | expect(dummy).toBe(2) 132 | 133 | stop(runner) 134 | // won't trigger effect 135 | obj.prop++ 136 | expect(dummy).toBe(2) 137 | 138 | obj.prop++ 139 | expect(dummy).toBe(2) 140 | // stopped effect should still be manually callable 141 | runner() 142 | expect(dummy).toBe(4) 143 | }) 144 | 145 | it('onStop', () => { 146 | const obj = reactive({ foo: 1 }) 147 | const onStop = vi.fn() 148 | const runner = effect(() => { 149 | obj.foo 150 | }, { onStop }) 151 | stop(runner) 152 | expect(onStop).toBeCalledTimes(1) 153 | }) 154 | }) 155 | -------------------------------------------------------------------------------- /src/reactivity/tests/reactive.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, test } from 'vitest' 2 | import { isProxy, isReactive, reactive } from '../reactive' 3 | 4 | describe('reactive', () => { 5 | it('happy path', () => { 6 | const original = { foo: 1 } 7 | const observed = reactive(original) 8 | expect(observed).not.toBe(original) 9 | expect(observed.foo).toBe(1) 10 | 11 | expect(isReactive(observed)).toBe(true) 12 | expect(isReactive(original)).toBe(false) 13 | const evil = { 14 | __v_isReactive: true, 15 | __v_isReadonly: true, 16 | } 17 | expect(isReactive(evil)).toBe(false) 18 | 19 | expect(isProxy(observed)).toBe(true) 20 | }) 21 | test('nested reactive', () => { 22 | const original: any = { 23 | nested: { 24 | foo: 1, 25 | }, 26 | array: [{ bar: 2 }], 27 | } 28 | const observed = reactive(original) 29 | expect(isReactive(observed.nested)).toBe(true) 30 | expect(isReactive(observed.array)).toBe(true) 31 | expect(isReactive(observed.array[0])).toBe(true) 32 | }) 33 | }) 34 | -------------------------------------------------------------------------------- /src/reactivity/tests/readonly.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { isProxy, isReadonly, readonly } from '../reactive' 3 | 4 | describe('readonly', () => { 5 | it('happy path', () => { 6 | // could not be set 7 | const original = { foo: 1, bar: { baz: 2 } } 8 | const wrapped = readonly(original) 9 | expect(wrapped).not.toBe(original) 10 | expect(wrapped.foo).toBe(1) 11 | }) 12 | 13 | it('should make nested values readonly', () => { 14 | const original = { foo: 1, bar: { baz: 2 } } 15 | const wrapped = readonly(original) 16 | expect(wrapped).not.toBe(original) 17 | expect(isReadonly(wrapped)).toBe(true) 18 | expect(isReadonly(original)).toBe(false) 19 | 20 | expect(isProxy(wrapped)).toBe(true) 21 | 22 | expect(isReadonly(wrapped.bar)).toBe(true) 23 | expect(isReadonly(original.bar)).toBe(false) 24 | 25 | expect(wrapped.foo).toBe(1) 26 | const evil = { 27 | __v_isReadonly: true, 28 | } 29 | expect(isReadonly(evil)).toBe(false) 30 | }) 31 | 32 | it('should warn when set', () => { 33 | console.warn = vi.fn() 34 | 35 | const user = readonly({ 36 | age: 10, 37 | }) 38 | user.age = 11 39 | 40 | expect(console.warn).toBeCalled() 41 | }) 42 | }) 43 | -------------------------------------------------------------------------------- /src/reactivity/tests/ref.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { isRef, proxyRefs, ref, unRef } from '../ref' 3 | import { effect } from '../effect' 4 | import { reactive } from '../reactive' 5 | 6 | describe('ref', () => { 7 | it('happy path', () => { 8 | const a = ref(1) 9 | expect(a.value).toBe(1) 10 | }) 11 | 12 | it('should be reactive', () => { 13 | const a = ref(1) 14 | let dummy 15 | let calls = 0 16 | effect(() => { 17 | calls++ 18 | dummy = a.value 19 | }) 20 | expect(calls).toBe(1) 21 | expect(dummy).toBe(1) 22 | 23 | a.value = 2 24 | expect(calls).toBe(2) 25 | expect(dummy).toBe(2) 26 | 27 | // same value should not trigger 28 | a.value = 2 29 | expect(calls).toBe(2) 30 | expect(dummy).toBe(2) 31 | }) 32 | 33 | it('should make nested properties reactive', () => { 34 | const a = ref({ 35 | count: 1, 36 | }) 37 | let dummy 38 | effect(() => { 39 | dummy = a.value.count 40 | }) 41 | expect(dummy).toBe(1) 42 | a.value.count = 2 43 | expect(dummy).toBe(2) 44 | }) 45 | 46 | it('isRef', () => { 47 | const a = ref(1) 48 | const user = reactive({ 49 | age: 1, 50 | }) 51 | expect(isRef(a)).toBe(true) 52 | expect(isRef(1)).toBe(false) 53 | expect(isRef(user)).toBe(false) 54 | }) 55 | 56 | it('unRef', () => { 57 | const a = ref(1) 58 | expect(unRef(a)).toBe(1) 59 | expect(unRef(1)).toBe(1) 60 | }) 61 | 62 | it('proxyRefs', () => { 63 | // used in template 64 | const user = { 65 | age: ref(10), 66 | name: 'ming', 67 | } 68 | const proxyUser = proxyRefs(user) 69 | expect(user.age.value).toBe(10) 70 | expect(proxyUser.age).toBe(10) 71 | expect(proxyUser.name).toBe('ming') 72 | 73 | proxyUser.age = 20 74 | expect(proxyUser.age).toBe(20) 75 | expect(user.age.value).toBe(20) 76 | }) 77 | }) 78 | 79 | -------------------------------------------------------------------------------- /src/reactivity/tests/shallowReadonly.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, test, vi } from 'vitest' 2 | import { isReadonly, readonly, shallowReadonly } from '../reactive' 3 | 4 | describe('shallowReadonly', () => { 5 | test('should not make nested properties reative', () => { 6 | const props = shallowReadonly({ n: { foo: 1 } }) 7 | expect(isReadonly(props)).toBe(true) 8 | expect(isReadonly(props.n)).toBe(false) 9 | }) 10 | 11 | it('should warn when set', () => { 12 | console.warn = vi.fn() 13 | 14 | const user = readonly({ 15 | age: 10, 16 | }) 17 | user.age = 11 18 | 19 | expect(console.warn).toBeCalled() 20 | }) 21 | }) 22 | -------------------------------------------------------------------------------- /src/runtime-core/apiInject.ts: -------------------------------------------------------------------------------- 1 | import { isFunc } from '../shared' 2 | import { getCurrentInstance } from './component' 3 | 4 | export function provide(key, value) { 5 | // 因为使用了getCurrentInstance 所以只能在setup里使用 6 | const currentInstance: any = getCurrentInstance() 7 | if (currentInstance) { 8 | const parentProvides = currentInstance.parent.provides 9 | 10 | // 只在第一次调用时初始化 11 | if (currentInstance.provides === parentProvides) 12 | // 原型链指向父级 这样inject时get可以一直向上寻找值 13 | currentInstance.provides = Object.create(parentProvides) 14 | 15 | const { provides } = currentInstance 16 | provides[key] = value 17 | } 18 | } 19 | 20 | export function inject(key, defaultValue) { 21 | const currentInstance: any = getCurrentInstance() 22 | if (currentInstance) { 23 | const parentProvides = currentInstance.parent.provides 24 | if (key in parentProvides) { return parentProvides[key] } 25 | else if (defaultValue) { 26 | if (isFunc(defaultValue)) 27 | return defaultValue() 28 | return defaultValue 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/runtime-core/component.ts: -------------------------------------------------------------------------------- 1 | import { shallowReadonly } from '../reactivity/reactive' 2 | import { proxyRefs } from '../reactivity' 3 | import { PublicInstanceProxyHandlers } from './componentPublicInstance' 4 | import type { ComponentInstance } from './types' 5 | import { isObject } from './../shared/index' 6 | import { initProps } from './componentProps' 7 | import { emit } from './componentEmit' 8 | import { initSlots } from './componentSlots' 9 | 10 | let currentInstance = null 11 | export function createComponentInstance(vNode: any, parent) { 12 | const instance = { 13 | vNode, 14 | component: vNode.type, 15 | setupState: {}, 16 | props: {}, 17 | emit: () => {}, 18 | slots: {}, 19 | isMounted: false, // 初始化还是更新 20 | subTree: {}, 21 | // 默认为父组件的provides 如果调用了provide函数则再初始化 22 | provides: parent ? parent.provides : {}, 23 | parent, 24 | } 25 | 26 | // emit需要获取实例内容,而用户使用时只希望传入一个事件名 27 | // 所以这里需要bind 28 | instance.emit = emit.bind(null, instance) as any 29 | return instance 30 | } 31 | 32 | export function setupComponent(instance: ComponentInstance) { 33 | // initProps 34 | initProps(instance, instance.vNode.props) 35 | 36 | // initSlots 37 | initSlots(instance, instance.vNode.children) 38 | 39 | setupStatefulComponent(instance) 40 | } 41 | 42 | // 有状态的组e 43 | function setupStatefulComponent(instance: ComponentInstance) { 44 | const Component = instance.component 45 | 46 | const { setup } = Component 47 | 48 | if (setup) { 49 | setCurrentInstance(instance) 50 | // setup可以返回object或者function 51 | const setupResult = setup(shallowReadonly(instance.props), { emit: instance.emit }) 52 | 53 | handleSetupResult(instance, setupResult) 54 | } 55 | 56 | // 创建代理对象 57 | instance.proxy = new Proxy({ _: instance }, PublicInstanceProxyHandlers) 58 | } 59 | 60 | function handleSetupResult(instance: ComponentInstance, setupResult) { 61 | // TODO:handle function 62 | 63 | // handle object 64 | if (isObject(setupResult)) 65 | //使用proxyRefs进行包裹确保render中直接拿到ref的.value值 66 | instance.setupState = proxyRefs(setupResult) 67 | 68 | finishComponentSetup(instance) 69 | } 70 | 71 | function finishComponentSetup(instance: any) { 72 | const Component = instance.component 73 | if (Component.render) 74 | instance.render = Component.render 75 | } 76 | 77 | export function getCurrentInstance() { 78 | return currentInstance 79 | } 80 | 81 | export function setCurrentInstance(instance) { 82 | currentInstance = instance 83 | } 84 | -------------------------------------------------------------------------------- /src/runtime-core/componentEmit.ts: -------------------------------------------------------------------------------- 1 | import { camelize, toHandlerKey } from '../shared' 2 | 3 | export function emit(instance, event, ...args) { 4 | // 查找props里是否有该事件,有的话则执行 5 | const { props } = instance 6 | 7 | // add -> onAdd 8 | // add-foo -> onAddFoo 9 | const handlerName = toHandlerKey(camelize(event)) 10 | const handler = props[handlerName] 11 | 12 | handler && handler(...args) 13 | } 14 | -------------------------------------------------------------------------------- /src/runtime-core/componentProps.ts: -------------------------------------------------------------------------------- 1 | export function initProps(instance, props) { 2 | instance.props = props ?? {} 3 | // TODO: attrs 4 | } 5 | -------------------------------------------------------------------------------- /src/runtime-core/componentPublicInstance.ts: -------------------------------------------------------------------------------- 1 | import { hasOwn } from './../shared/index' 2 | const publicPropertiesMap = { 3 | $el: i => i.vNode.el, 4 | $slots: i => i.slots, 5 | } 6 | export const PublicInstanceProxyHandlers = { 7 | get({ _: instance }, key) { 8 | // setupState 9 | const { setupState, props } = instance 10 | if (hasOwn(setupState, key)) 11 | return setupState[key] 12 | else if (hasOwn(props, key)) 13 | return props[key] 14 | 15 | // $property 16 | const publicGetter = publicPropertiesMap[key] 17 | if (publicGetter) 18 | return publicGetter(instance) 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /src/runtime-core/componentSlots.ts: -------------------------------------------------------------------------------- 1 | import { isArray } from '../shared' 2 | import { ShapeFlags } from '../shared/ShapeFlags' 3 | 4 | export function initSlots(instance, children) { 5 | // slots 6 | const { vNode } = instance 7 | if (vNode.shapeFlag & ShapeFlags.SLOT_CHILDREN) 8 | normalizeObjectSlots(children, instance.slots) 9 | } 10 | 11 | function normalizeObjectSlots(children, slots) { 12 | for (const [key, val] of Object.entries(children ?? {})) 13 | slots[key] = props => normalizeSlotValue((val as any)(props)) 14 | } 15 | 16 | function normalizeSlotValue(val) { 17 | return isArray(val) ? val : [val] 18 | } 19 | -------------------------------------------------------------------------------- /src/runtime-core/createApp.ts: -------------------------------------------------------------------------------- 1 | import type { Component, Container } from './types' 2 | import { createVNode } from './vNode' 3 | 4 | export function createAppAPI(render) { 5 | return function createApp(rootComponent: Component) { 6 | return { 7 | mount(rootContainer: Container) { 8 | // 先转换成vNode 9 | const vNode = createVNode(rootComponent) 10 | 11 | render(vNode, rootContainer) 12 | }, 13 | } 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/runtime-core/h.ts: -------------------------------------------------------------------------------- 1 | import { createVNode } from './vNode' 2 | 3 | export function h( 4 | type, 5 | props?, 6 | children?, 7 | ) { 8 | return createVNode(type, props, children) 9 | } 10 | -------------------------------------------------------------------------------- /src/runtime-core/helpers/renderSlots.ts: -------------------------------------------------------------------------------- 1 | import { isFunc } from '../../shared' 2 | import { Fragment, createVNode } from '../vNode' 3 | 4 | export function renderSlots(slots, name, props) { 5 | const slot = slots[name] 6 | if (slot) { 7 | if (isFunc(slot)) 8 | return createVNode(Fragment, {}, slot(props)) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/runtime-core/index.ts: -------------------------------------------------------------------------------- 1 | export { h } from './h' 2 | export { renderSlots } from './helpers/renderSlots' 3 | export { createTextVNode } from './vNode' 4 | export { getCurrentInstance } from './component' 5 | export { provide, inject } from './apiInject' 6 | export { createRenderer } from './renderer' 7 | -------------------------------------------------------------------------------- /src/runtime-core/renderer.ts: -------------------------------------------------------------------------------- 1 | import { ShapeFlags } from '../shared/ShapeFlags' 2 | import { effect } from '../reactivity/effect' 3 | import type { ComponentInstance, Container } from './types' 4 | import { createComponentInstance, setupComponent } from './component' 5 | import { Fragment, Text } from './vNode' 6 | import { createAppAPI } from './createApp' 7 | 8 | /** 9 | * 创建渲染器 10 | * @param options 平台特定的 DOM 操作方法 11 | * @returns 返回创建应用的方法 12 | */ 13 | export function createRenderer(options) { 14 | // 解构平台特定的 DOM 操作方法 15 | const { 16 | createElement: hostCreateElement, // 创建元素 17 | patchProp: hostPatchProp, // 处理属性 18 | insert: hostInsert, // 插入元素 19 | remove: hostRemove, // 移除元素 20 | setElementText: hostSetElementText // 设置元素文本 21 | } = options 22 | 23 | /** 24 | * 渲染虚拟节点到容器 25 | * @param vNode 虚拟节点 26 | * @param container 容器元素 27 | */ 28 | function render(vNode, container: Container) { 29 | patch(null, vNode, container, null) 30 | } 31 | 32 | /** 33 | * 处理虚拟节点的更新和挂载 34 | * @param n1 旧的虚拟节点,null 表示首次挂载 35 | * @param n2 新的虚拟节点 36 | * @param container 容器元素 37 | * @param parentComponent 父组件实例 38 | */ 39 | function patch(n1, n2, container: Container, parentComponent) { 40 | const { shapeFlag, type } = n2 41 | 42 | // 根据节点类型分发到不同的处理函数 43 | switch (type) { 44 | case Fragment: 45 | processFragment(n1, n2, container, parentComponent) 46 | break 47 | case Text: 48 | processText(n1, n2, container) 49 | break 50 | default: 51 | // 处理普通元素和组件 52 | if (shapeFlag & ShapeFlags.ELEMENT) 53 | processElement(n1, n2, container, parentComponent) 54 | else if (shapeFlag & ShapeFlags.STATEFUL_COMPONENT) 55 | processComponent(n1, n2, container, parentComponent) 56 | } 57 | } 58 | 59 | /** 60 | * 处理 Fragment 节点(主要用于 slots) 61 | */ 62 | function processFragment(n1, n2, container, parentComponent) { 63 | mountChildren(n2.children, container, parentComponent) 64 | } 65 | 66 | /** 67 | * 处理文本节点 68 | */ 69 | function processText(n1, n2, container) { 70 | const { children } = n2 71 | const textNode = document.createTextNode(children) 72 | n2.el = textNode 73 | container.append(textNode) 74 | } 75 | 76 | /** 77 | * 处理普通元素节点 78 | * 根据是否存在旧节点判断是更新还是挂载 79 | */ 80 | function processElement(n1, n2, container: Container, parentComponent) { 81 | if (!n1) 82 | mountElement(n2, container, parentComponent) 83 | else 84 | patchElement(n1, n2, container, parentComponent) 85 | } 86 | 87 | /** 88 | * 更新元素节点 89 | * 包括更新 props 和 children 90 | */ 91 | function patchElement(n1, n2, container, parentComponent) { 92 | const oldProps = n1.props || {} 93 | const newProps = n2.props || {} 94 | 95 | // 复用 DOM 节点 96 | const el = (n2.el = n1.el) 97 | 98 | // 更新子节点和属性 99 | patchChildren(n1, n2, el, parentComponent) 100 | patchProps(el, oldProps, newProps) 101 | } 102 | 103 | /** 104 | * 更新子节点 105 | * 处理 text children 和 array children 之间的转换 106 | */ 107 | function patchChildren(n1, n2, container, parentComponent) { 108 | const prevShapeFlag = n1.shapeFlag 109 | const newShapeFlag = n2.shapeFlag 110 | const c1 = n1.children 111 | const c2 = n2.children 112 | 113 | // 新节点是文本 114 | if (newShapeFlag & ShapeFlags.TEXT_CHILDREN) { 115 | if (prevShapeFlag & ShapeFlags.ARRAY_CHILDREN) { 116 | unmountChildren(n1.children) // 清空旧的数组子节点 117 | } 118 | if (c1 !== c2) { 119 | hostSetElementText(container, c2) // 设置新的文本 120 | } 121 | } 122 | // 新节点是数组 123 | else { 124 | if (prevShapeFlag & ShapeFlags.TEXT_CHILDREN) { 125 | hostSetElementText(container, '') // 清空旧的文本 126 | mountChildren(c2, container, parentComponent) // 挂载新的数组子节点 127 | } 128 | // TODO: 数组 -> 数组 的 diff 算法 129 | } 130 | } 131 | 132 | /** 133 | * 卸载子节点 134 | */ 135 | function unmountChildren(children) { 136 | for (let i = 0; i < children.length; i++) { 137 | const el = children[i].el 138 | hostRemove(el) 139 | } 140 | } 141 | 142 | /** 143 | * 更新元素属性 144 | * 处理属性的添加、更新和删除 145 | */ 146 | function patchProps(el, oldProps, newProps) { 147 | if (oldProps !== newProps) { 148 | // 更新或添加新属性 149 | for (const key in newProps) { 150 | const prevProp = oldProps[key] 151 | const nextProp = newProps[key] 152 | if (prevProp !== nextProp) 153 | hostPatchProp(el, key, prevProp, nextProp) 154 | } 155 | 156 | // 删除不再存在的旧属性 157 | for (const key in oldProps) { 158 | if (!(key in newProps)) 159 | hostPatchProp(el, key, oldProps[key], null) 160 | } 161 | } 162 | } 163 | 164 | /** 165 | * 挂载元素节点 166 | * 创建元素、设置属性、处理子节点 167 | */ 168 | function mountElement(vNode, container: Container, parentComponent) { 169 | // 创建 DOM 元素 170 | const el = (vNode.el = hostCreateElement(vNode.type)) 171 | 172 | const { children, props, shapeFlag } = vNode 173 | 174 | // 处理 props 175 | if (props) { 176 | for (const key in props) { 177 | const val = props[key] 178 | hostPatchProp(el, key, null, val) 179 | } 180 | } 181 | 182 | // 处理 children 183 | if (children) { 184 | if (shapeFlag & ShapeFlags.TEXT_CHILDREN) 185 | el.textContent = vNode.children 186 | else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) 187 | mountChildren(vNode.children, el, parentComponent) 188 | } 189 | 190 | // 插入到容器 191 | hostInsert(el, container) 192 | } 193 | 194 | /** 195 | * 挂载子节点数组 196 | */ 197 | function mountChildren(children, container, parentComponent) { 198 | for (const child of children) 199 | patch(null, child, container, parentComponent) 200 | } 201 | 202 | /** 203 | * 处理组件 204 | * TODO: 添加组件更新逻辑 205 | */ 206 | function processComponent(n1, n2, container: Container, parentComponent) { 207 | mountComponent(n2, container, parentComponent) 208 | } 209 | 210 | /** 211 | * 挂载组件 212 | * 创建组件实例、设置组件状态、设置渲染效果 213 | */ 214 | function mountComponent(initialVNode, container: Container, parentComponent) { 215 | const instance = createComponentInstance(initialVNode, parentComponent) 216 | setupComponent(instance) 217 | setupRenderEffect(instance, initialVNode, container) 218 | } 219 | 220 | /** 221 | * 设置组件的渲染效果 222 | * 使用 effect 包裹渲染逻辑,实现响应式更新 223 | */ 224 | function setupRenderEffect(instance: ComponentInstance, initialVNode, container: Container) { 225 | effect(() => { 226 | if (!instance.isMounted) { 227 | // 首次挂载 228 | const { proxy } = instance 229 | instance.subTree = instance.render.call(proxy) 230 | const subTree = instance.subTree 231 | patch(null, subTree, container, instance) 232 | 233 | instance.isMounted = true 234 | initialVNode.el = subTree.el 235 | } 236 | else { 237 | // 组件更新 238 | const { proxy } = instance 239 | const subTree = instance.render.call(proxy) 240 | const prevSubTree = instance.subTree 241 | instance.subTree = subTree 242 | patch(prevSubTree, subTree, container, instance) 243 | } 244 | }) 245 | } 246 | 247 | return { 248 | createApp: createAppAPI(render), 249 | } 250 | } 251 | 252 | -------------------------------------------------------------------------------- /src/runtime-core/types.ts: -------------------------------------------------------------------------------- 1 | export interface VNode { 2 | type: keyof HTMLElementTagNameMap 3 | props?: Record 4 | children?: string | VNode[] 5 | } 6 | 7 | type Render = () => VNode 8 | type Setup = () => object | Render 9 | 10 | export interface Component { 11 | setup: Setup 12 | render: Render 13 | } 14 | 15 | export type Container = HTMLElement 16 | 17 | export type ComponentInstance = any 18 | -------------------------------------------------------------------------------- /src/runtime-core/vNode.ts: -------------------------------------------------------------------------------- 1 | import { isArray, isObject, isString } from '../shared' 2 | import { ShapeFlags } from '../shared/ShapeFlags' 3 | 4 | export const Fragment = Symbol('Fragment') 5 | export const Text = Symbol('Text') 6 | 7 | export function createVNode(type, props?, children?) { 8 | const vNode = { 9 | type, 10 | props, 11 | children, 12 | shapeFlag: getShapeFlag(type), 13 | el: null, 14 | } 15 | // text vNode 16 | if (isString(children)) 17 | vNode.shapeFlag |= ShapeFlags.TEXT_CHILDREN 18 | 19 | // vNodes 20 | if (isArray(children)) 21 | vNode.shapeFlag |= ShapeFlags.ARRAY_CHILDREN 22 | 23 | // slots 24 | if (vNode.shapeFlag & ShapeFlags.STATEFUL_COMPONENT) { 25 | if (isObject(children)) 26 | vNode.shapeFlag |= ShapeFlags.SLOT_CHILDREN 27 | } 28 | 29 | return vNode 30 | } 31 | 32 | export function createTextVNode(text: string) { 33 | return createVNode(Text, {}, text) 34 | } 35 | 36 | function getShapeFlag(type) { 37 | return isString(type) ? ShapeFlags.ELEMENT : ShapeFlags.STATEFUL_COMPONENT 38 | } 39 | -------------------------------------------------------------------------------- /src/runtime-dom/index.ts: -------------------------------------------------------------------------------- 1 | import { createRenderer } from '../runtime-core' 2 | 3 | function createElement(type) { 4 | return document.createElement(type) 5 | } 6 | 7 | function patchProp(el, key, prevVal, newVal) { 8 | // 如果为undefined或null,则删除旧属性 9 | if (newVal === undefined || newVal === null) { 10 | el.removeAttribute(prevVal) 11 | return 12 | } 13 | 14 | // 处理事件 15 | const isOn = (key: string) => /^on[A-Z]/.test(key) 16 | if (isOn(key)) { 17 | const event = key.slice(2).toLowerCase() 18 | el.addEventListener(event, newVal) 19 | } 20 | else { 21 | el.setAttribute(key, newVal) 22 | } 23 | } 24 | 25 | function insert(el, parent) { 26 | parent.append(el) 27 | } 28 | 29 | function remove(el) { 30 | const parentNode = el.parentNode 31 | if (parentNode) { 32 | parentNode.removeChild(el) 33 | } 34 | } 35 | 36 | function setElementText(el, text) { 37 | el.textContent = text 38 | } 39 | 40 | const renderer: any = createRenderer({ 41 | createElement, 42 | patchProp, 43 | insert, 44 | remove, 45 | setElementText 46 | }) 47 | 48 | export function createApp(...args) { 49 | return renderer.createApp(...args) 50 | } 51 | 52 | export * from '../runtime-core' 53 | -------------------------------------------------------------------------------- /src/shared/ShapeFlags.ts: -------------------------------------------------------------------------------- 1 | export const enum ShapeFlags { 2 | ELEMENT = 1, // 0001 3 | STATEFUL_COMPONENT = 1 << 1, // 0010 4 | TEXT_CHILDREN = 1 << 2, // 0100 5 | ARRAY_CHILDREN = 1 << 3, // 1000 6 | SLOT_CHILDREN = 1 << 4, 7 | } 8 | -------------------------------------------------------------------------------- /src/shared/index.ts: -------------------------------------------------------------------------------- 1 | export const extend = Object.assign 2 | export const isObject = (val: unknown) => val !== null && typeof val === 'object' 3 | export const isArray = (val: unknown) => Array.isArray(val) 4 | export const isString = (val: unknown) => typeof val === 'string' 5 | export const isFunc = (val: unknown) => typeof val === 'function' 6 | 7 | export const hasChanged = (val: any, newValue: any) => !Object.is(val, newValue) 8 | export const hasOwn = (val: object, key: string | number) => Object.prototype.hasOwnProperty.call(val, key) 9 | 10 | export const capitalize = (str: string) => { 11 | return str.charAt(0).toUpperCase() + str.slice(1) 12 | } 13 | export const toHandlerKey = (str: string) => { 14 | return str ? `on${capitalize(str)}` : '' 15 | } 16 | export const camelize = (str: string) => { 17 | return str.replace(/-(\w)/g, (_, c: string) => { 18 | return c ? c.toUpperCase() : '' 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include":["src/**/*"], 3 | "compilerOptions": { 4 | "target": "es2018", 5 | "module": "esnext", 6 | "lib": ["esnext", "DOM"], 7 | "moduleResolution": "node", 8 | "noImplicitAny": false, 9 | "esModuleInterop": true, 10 | "strict": true, 11 | "strictNullChecks": true, 12 | "resolveJsonModule": true, 13 | "skipLibCheck": true, 14 | "skipDefaultLibCheck": true 15 | } 16 | } 17 | --------------------------------------------------------------------------------