浏览代码

refactor(架构调整): ts动态获取InputComponents

gemercheung 2 年之前
父节点
当前提交
192ff7fb22

+ 2 - 0
.npmrc

@@ -0,0 +1,2 @@
+auto-install-peers=true
+strict-peer-dependencies=false

+ 84 - 3
packages/components/basic/input/src/input.ts

@@ -1,24 +1,105 @@
 import { buildProps, definePropType } from '@kankan/utils'
-import type { ExtractPropTypes } from 'vue'
+import type { ExtractPropTypes, VNode } from 'vue'
 
-export type InputType = 'checkbox' | 'text' | 'select' | 'radio' | 'range' | 'number' | 'switch' | 'textarea' | 'search' | 'richtext'
+export type InputType = 'checkbox' | 'text' | 'select' | 'radio' | 'range' | 'number' | 'switch' | 'textarea' | 'search' | 'richtext' | 'file'
 
 import { checkboxInputProps } from './checkbox/checkbox'
 import { checkRadioProps } from './checkRadio/checkRadio'
 import { fileProps } from './file/file'
 import { radioProps } from './radio/radio'
+import { numberProps } from './number/number'
+import { rangProps } from './range/range'
+import { richTextProps } from './richtext/richtext'
+import { searchProps } from './search/search'
+import { selectProps } from './select/select'
+import { switchProps } from './switch/switch'
+import { textInputProps } from './text/text'
+import { textareaProps } from './textarea/textarea'
+import radio from './radio/radio.vue'
+import * as UISwitch from './switch/switch.vue'
+import text from './text/text.vue'
+import checkbox from './checkbox/checkbox.vue'
+import select from './select/select.vue'
+import range from './range/range.vue'
+import textarea from './textarea/textarea.vue'
+import number from './number/number.vue'
+import file from './file/file.vue'
+import search from './search/search.vue'
+import richtext from './richtext/richtext.vue'
 
 export const inputProps = buildProps({
     ...checkboxInputProps,
     ...checkRadioProps,
     ...radioProps,
     ...fileProps,
+    ...numberProps,
+    ...rangProps,
+    ...richTextProps,
+    ...searchProps,
+    ...selectProps,
+    ...switchProps,
+    ...textInputProps,
+    ...textareaProps,
     type: {
         type: definePropType<InputType>(String),
     },
 })
 
-export type RichTextProps = ExtractPropTypes<typeof inputProps>
+export type InputProps = ExtractPropTypes<typeof inputProps>
+
+type ComponentsType = {
+    [propsName in InputType]: ComponentsPropType
+}
+interface ComponentsPropType {
+    component: VNode
+    props: InputProps | unknown
+}
+export const InputComponents: ComponentsType = {
+    radio: {
+        props: radioProps,
+        component: radio,
+    },
+    text: {
+        props: textInputProps,
+        component: text,
+    },
+    number: {
+        props: numberProps,
+        component: number,
+    },
+    checkbox: {
+        props: checkRadioProps,
+        component: checkbox,
+    },
+    select: {
+        props: selectProps,
+        component: select,
+    },
+    range: {
+        props: rangProps,
+        component: range,
+    },
+    switch: {
+        props: switchProps,
+        component: UISwitch,
+    },
+    textarea: {
+        props: textareaProps,
+        component: textarea,
+    },
+    search: {
+        props: searchProps,
+        component: search,
+    },
+    richtext: {
+        props: richTextProps,
+        component: richtext,
+    },
+    file: {
+        props: fileProps,
+        component: file,
+    },
+}
 
 // export type
 export * from './checkbox/checkbox'

+ 16 - 23
packages/components/basic/input/src/input.vue

@@ -1,37 +1,31 @@
 <template>
     <div class="ui-input">
-        <!-- <component :is="types[type].component" v-bind="childProps" :modelValue="props.modelValue" @update:model-value="newValue => emit('update:modelValue', newValue)">
-            <template v-for="(slot, name) in $slots" #[name]="raw">
-                <slot :name="name" v-bind="raw"></slot>
-            </template>
-        </component> -->
-        <slot></slot>
-
-        <!-- <p class="error-msg" v-if="error">{{ error }}</p> -->
+        <template v-if="type">
+            <component :is="InputComponents[type].component" v-bind="childProps" :modelValue="props.modelValue" @update:model-value="newValue => emit('update:modelValue', newValue)">
+                <template v-for="(slot, name) in $slots" #[name]="raw">
+                    <slot :name="name" v-bind="raw"></slot>
+                </template>
+            </component>
+            <slot></slot>
+
+            <!-- <p class="error-msg" v-if="error">{{ error }}</p> -->
+        </template>
     </div>
 </template>
 
 <script setup lang="ts">
 import { computed } from 'vue'
-import { inputProps } from './input'
-import radio from './radio/radio.vue'
-// import checkbox from './checkbox.vue'
-// import text from './text.vue'
-// import select from './select.vue'
-// import range from './range.vue'
-// import textarea from './textarea.vue'
-// import number from './number.vue'
-// import uiSwitch from './switch.vue'
-// import file from './file.vue'
-// import search from './search.vue'
-// import richtext from './richtext.vue'
-
+import { inputProps, InputComponents } from './input'
 const props = defineProps(inputProps)
 console.log('props', props)
 
 // const emit = defineEmits(['update:modelValue'])
 // const type = computed(() => (types[props.type] ? props.type : 'text'))
 const childProps = computed(() => {
+    if (props.type) {
+        console.log('props--type', InputComponents[props.type])
+        return InputComponents[props.type].props
+    }
     // const retain = Object.keys(types[type.value].propsDesc)
     // const childProps = {}
     // for (let key in props) {
@@ -43,9 +37,8 @@ const childProps = computed(() => {
     //     childProps.type = props.type
     // }
     // return childProps
-    return {}
+    return false
 })
-console.log('childProps', childProps, radio)
 
 // const style = computed(() => {
 //     const style = {}

+ 43 - 11
packages/components/basic/input/src/range/range.ts

@@ -1,26 +1,21 @@
 import { buildProps, definePropType } from '@kankan/utils'
 import type { ExtractPropTypes } from 'vue'
 
-export const switchProps = buildProps({
+export const rangProps = buildProps({
     type: {
         type: String,
     },
     name: {
         type: String,
     },
-    width: {
-        type: definePropType<number | string>([Number, String]),
-    },
-    height: {
-        type: definePropType<number | string>([Number, String]),
-    },
     disabled: {
         type: Boolean,
         default: false,
     },
     modelValue: {
-        type: Boolean,
-        default: false,
+        type: String,
+        required: false,
+        default: '',
     },
     placeholder: {
         type: String,
@@ -31,7 +26,7 @@ export const switchProps = buildProps({
     },
     readonly: {
         type: Boolean,
-        default: true,
+        default: false,
     },
     other: {
         type: Object,
@@ -51,6 +46,43 @@ export const switchProps = buildProps({
         type: Boolean,
         default: true,
     },
+    inInput: {
+        type: Boolean,
+        default: true,
+    },
+    ctrl: {
+        type: Boolean,
+        default: true,
+    },
+    step: {
+        type: Number,
+        require: true,
+        default: 1,
+    },
+    min: {
+        type: definePropType<number | string>([Number, String]),
+        require: false,
+    },
+    max: {
+        type: definePropType<number | string>([Number, String]),
+        require: false,
+    },
+    limit: {
+        type: Number,
+        default: 0,
+    },
+    inch: {
+        type: [Boolean, String],
+        default: false,
+    },
+    rangeInput: {
+        type: Boolean,
+        default: true,
+    },
+    rangeTips: {
+        type: Boolean,
+        default: false,
+    },
 })
 
-export type SelectProps = ExtractPropTypes<typeof selectProps>
+export type RangProps = ExtractPropTypes<typeof rangProps>

+ 16 - 15
packages/components/basic/input/src/range/range.vue

@@ -9,23 +9,24 @@
         </div>
         <div v-if="rangeInput">
             <UItext v-if="inch" :modelValue="inch" class="range-text" style="pointer-events: none" />
-            <UInumber v-else :modelValue="modelValue" @update:modelValue="inputUpdateHandler" :min="min" :max="max" :step="step" :ctrl="false" right class="range-text" />
+            <UInumber v-else :modelValue="modelValue" @update:model-value="inputUpdateHandler" :min="min" :max="max" :step="step" :ctrl="false" right class="range-text" />
         </div>
     </div>
 </template>
 
 <script setup lang="ts">
 import { ref, computed, onMounted, defineProps, nextTick } from 'vue'
-import { rangePropsDesc } from './state'
+import { rangProps } from './range'
 import UInumber from '../number/number.vue'
 import UItext from '../text/text.vue'
-const props = defineProps(rangePropsDesc)
+
+const props = defineProps(rangProps)
 const emit = defineEmits(['update:modelValue'])
-const getValue = value => {
+const getValue = (value: number) => {
     const calcStep = Math.ceil(1 / props.step)
     const calcValue = Math.round(value * calcStep)
-    const calcMin = props.min * calcStep
-    const calcMax = props.max * calcStep
+    const calcMin = Number(props.min) * calcStep
+    const calcMax = Number(props.max) * calcStep
 
     const newVal = calcValue >= calcMax ? calcMax : calcValue <= calcMin ? calcMin : calcValue - (calcValue % (calcStep * props.step))
 
@@ -34,15 +35,15 @@ const getValue = value => {
 
 const percen = computed({
     get() {
-        return (Number(props.modelValue) - props.min) / (props.max - props.min)
+        return (Number(props.modelValue) - Number(props.min)) / (Number(props.max) - Number(props.min))
     },
     set(val) {
-        const len = props.max - props.min
+        const len = Number(props.max) - Number(props.min)
         let num
-        if (props.limit > 0 && props.min + len * val > props.limit) {
+        if (props.limit > 0 && Number(props.min) + len * val > props.limit) {
             num = getValue(props.limit)
         } else {
-            num = getValue(props.min + len * val)
+            num = getValue(Number(props.min) + len * val)
         }
 
         emit('update:modelValue', num)
@@ -82,9 +83,9 @@ const rangeClickHandler = ev => {
     console.log(ev.offsetX, rangeWidth.value)
     //首次点击,获取limit的值
     let t = setTimeout(() => {
-        const len = props.max - props.min
-        if (props.limit > 0 && props.min + len * percen.value > props.limit) {
-            percen.value = (props.limit - props.min) / len
+        const len = Number(props.max) - Number(props.min)
+        if (props.limit > 0 && Number(props.min) + len * percen.value > props.limit) {
+            percen.value = (props.limit - Number(props.min)) / len
         } else {
             // percen.value = ev.offsetX / rangeWidth.value
         }
@@ -112,10 +113,10 @@ const slideDownHandler = ev => {
         mode.value = modeEmun.default
         parent.removeEventListener('mousemove', moveHandler, false)
         parent.removeEventListener('mouseup', upHandler, false)
-        player.removeEventListener('mouseup', upHandler, false)
+        player && player.removeEventListener('mouseup', upHandler, false)
     }
     parent.addEventListener('mousemove', moveHandler, false)
     parent.addEventListener('mouseup', upHandler, false)
-    player.addEventListener('mouseup', upHandler, false)
+    player && player.addEventListener('mouseup', upHandler, false)
 }
 </script>

+ 2 - 2
packages/components/basic/input/src/text/text.ts

@@ -1,6 +1,6 @@
 import { buildProps, definePropType } from '@kankan/utils'
 import type { ExtractPropTypes } from 'vue'
-export const TextInputProps = buildProps({
+export const textInputProps = buildProps({
     type: {
         type: String,
     },
@@ -36,4 +36,4 @@ export const TextInputProps = buildProps({
     },
 })
 
-export type TextInputProps = ExtractPropTypes<typeof TextInputProps>
+export type TextInputProps = ExtractPropTypes<typeof textInputProps>

+ 20 - 21
playground/package.json

@@ -1,23 +1,22 @@
 {
-  "name": "playground",
-  "private": true,
-  "version": "0.0.0",
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "vue-tsc --noEmit && vite build",
-    "preview": "vite preview"
-  },
-  "dependencies": {
-    "@kankan/components": "workspace:^1.0.0",
-    "@kankan/sdk": "4.3.0-alpha.10",
-    "@kankan/utils": "workspace:^1.0.0",
-    "vue": "^3.2.37"
-  },
-  "devDependencies": {
-    "@vitejs/plugin-vue": "^3.1.0",
-    "typescript": "^4.6.4",
-    "vite": "^3.1.0",
-    "vue-tsc": "^0.40.4"
-  }
+    "name": "playground",
+    "private": true,
+    "version": "0.0.0",
+    "type": "module",
+    "scripts": {
+        "dev": "vite",
+        "build": "vue-tsc --noEmit && vite build",
+        "preview": "vite preview"
+    },
+    "dependencies": {
+        "@kankan/components": "workspace:^1.0.0",
+        "@kankan/utils": "workspace:^1.0.0",
+        "vue": "^3.2.37"
+    },
+    "devDependencies": {
+        "@vitejs/plugin-vue": "^3.1.0",
+        "typescript": "^4.6.4",
+        "vite": "^3.1.0",
+        "vue-tsc": "^0.40.4"
+    }
 }

+ 57 - 54
pnpm-lock.yaml

@@ -49,7 +49,7 @@ importers:
       '@commitlint/cli': 17.1.2
       '@types/jsdom': 16.2.15
       '@types/node': 18.7.18
-      '@typescript-eslint/eslint-plugin': 5.38.1_txkdgmgh2rkzjuhcevlsuge22a
+      '@typescript-eslint/eslint-plugin': 5.38.1_d64ffx4fgvgxtf4rpww7ew343e
       '@vitejs/plugin-vue': 3.1.0_vite@3.1.3+vue@3.2.39
       '@vitejs/plugin-vue-jsx': 2.0.1_vite@3.1.3+vue@3.2.39
       '@vue/test-utils': 2.0.2_vue@3.2.39
@@ -60,7 +60,7 @@ importers:
       eslint: 8.23.1
       eslint-config-prettier: 8.5.0_eslint@8.23.1
       eslint-define-config: 1.7.0
-      eslint-plugin-import: 2.26.0_wfx2yfijvczfpf7w4mrpxonr7y
+      eslint-plugin-import: 2.26.0_fumqvfbraoqt4p3hqd4vn5oumq
       eslint-plugin-jest: 25.7.0_4xzxfnxnj5ib7tuffkt7ewn6a4
       eslint-plugin-prettier: 4.2.1_cabrci5exjdaojcvd6xoxgeowu
       eslint-plugin-vue: 8.7.1_eslint@8.23.1
@@ -125,7 +125,6 @@ importers:
   playground:
     specifiers:
       '@kankan/components': workspace:^1.0.0
-      '@kankan/sdk': 4.3.0-alpha.10
       '@kankan/utils': workspace:^1.0.0
       '@vitejs/plugin-vue': ^3.1.0
       typescript: ^4.6.4
@@ -134,7 +133,6 @@ importers:
       vue-tsc: ^0.40.4
     dependencies:
       '@kankan/components': link:../packages/components
-      '@kankan/sdk': 4.3.0-alpha.10
       '@kankan/utils': link:../packages/utils
       vue: 3.2.39
     devDependencies:
@@ -1241,21 +1239,6 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.14
     dev: true
 
-  /@kankan/sdk-deps/4.3.0-alpha.10:
-    resolution: {integrity: sha512-MW6r7wFQjKs1y5+3e5Pi1SAqZ9GCMf6g72EkCr9wmyclSYcwVYk48X8HMOONVCvKDhQqLNBy2lBi27SF6PntxA==}
-    dev: false
-
-  /@kankan/sdk/4.3.0-alpha.10:
-    resolution: {integrity: sha512-HrBIGADu7xEQ90+6Ep2Mo2jkErt4XgGhEE/4Mh9EVvo8IkMYkJhpmllL+VONL3LQCG97/nimLGgZyNvLQPhXiA==}
-    dependencies:
-      '@kankan/sdk-deps': 4.3.0-alpha.10
-      '@vue/reactivity': 3.2.39
-      axios: 0.21.4
-      tiny-emitter: 2.1.0
-    transitivePeerDependencies:
-      - debug
-    dev: false
-
   /@manypkg/find-root/1.1.0:
     resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
     dependencies:
@@ -1552,7 +1535,7 @@ packages:
       '@types/yargs-parser': 21.0.0
     dev: true
 
-  /@typescript-eslint/eslint-plugin/5.38.1_txkdgmgh2rkzjuhcevlsuge22a:
+  /@typescript-eslint/eslint-plugin/5.38.1_d64ffx4fgvgxtf4rpww7ew343e:
     resolution: {integrity: sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -1563,7 +1546,7 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.38.1_4brgkhw6cq4me3drk3kxrpb2mm
+      '@typescript-eslint/parser': 5.39.0_4brgkhw6cq4me3drk3kxrpb2mm
       '@typescript-eslint/scope-manager': 5.38.1
       '@typescript-eslint/type-utils': 5.38.1_4brgkhw6cq4me3drk3kxrpb2mm
       '@typescript-eslint/utils': 5.38.1_4brgkhw6cq4me3drk3kxrpb2mm
@@ -1591,8 +1574,8 @@ packages:
       - typescript
     dev: true
 
-  /@typescript-eslint/parser/5.38.1_4brgkhw6cq4me3drk3kxrpb2mm:
-    resolution: {integrity: sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==}
+  /@typescript-eslint/parser/5.39.0_4brgkhw6cq4me3drk3kxrpb2mm:
+    resolution: {integrity: sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1601,9 +1584,9 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/scope-manager': 5.38.1
-      '@typescript-eslint/types': 5.38.1
-      '@typescript-eslint/typescript-estree': 5.38.1_typescript@4.7.4
+      '@typescript-eslint/scope-manager': 5.39.0
+      '@typescript-eslint/types': 5.39.0
+      '@typescript-eslint/typescript-estree': 5.39.0_typescript@4.7.4
       debug: 4.3.4
       eslint: 8.23.1
       typescript: 4.7.4
@@ -1627,6 +1610,14 @@ packages:
       '@typescript-eslint/visitor-keys': 5.38.1
     dev: true
 
+  /@typescript-eslint/scope-manager/5.39.0:
+    resolution: {integrity: sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.39.0
+      '@typescript-eslint/visitor-keys': 5.39.0
+    dev: true
+
   /@typescript-eslint/type-utils/5.38.1_4brgkhw6cq4me3drk3kxrpb2mm:
     resolution: {integrity: sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1657,6 +1648,11 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
+  /@typescript-eslint/types/5.39.0:
+    resolution: {integrity: sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
   /@typescript-eslint/typescript-estree/5.38.0_typescript@4.7.4:
     resolution: {integrity: sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1699,6 +1695,27 @@ packages:
       - supports-color
     dev: true
 
+  /@typescript-eslint/typescript-estree/5.39.0_typescript@4.7.4:
+    resolution: {integrity: sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 5.39.0
+      '@typescript-eslint/visitor-keys': 5.39.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.3.7
+      tsutils: 3.21.0_typescript@4.7.4
+      typescript: 4.7.4
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /@typescript-eslint/utils/5.38.0_4brgkhw6cq4me3drk3kxrpb2mm:
     resolution: {integrity: sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1751,6 +1768,14 @@ packages:
       eslint-visitor-keys: 3.3.0
     dev: true
 
+  /@typescript-eslint/visitor-keys/5.39.0:
+    resolution: {integrity: sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.39.0
+      eslint-visitor-keys: 3.3.0
+    dev: true
+
   /@vitejs/plugin-vue-jsx/2.0.1_vite@3.1.3+vue@3.2.39:
     resolution: {integrity: sha512-lmiR1k9+lrF7LMczO0pxtQ8mOn6XeppJDHxnpxkJQpT5SiKz4SKhKdeNstXaTNuR8qZhUo5X0pJlcocn72Y4Jg==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -2283,14 +2308,6 @@ packages:
     resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==}
     dev: true
 
-  /axios/0.21.4:
-    resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
-    dependencies:
-      follow-redirects: 1.15.2
-    transitivePeerDependencies:
-      - debug
-    dev: false
-
   /babel-jest/29.0.3_@babel+core@7.19.1:
     resolution: {integrity: sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3492,7 +3509,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-module-utils/2.7.4_ftdawgvuzamm6kaf2cslfedolq:
+  /eslint-module-utils/2.7.4_klwm4zkjy4q54jz64lw2gongxa:
     resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -3513,7 +3530,7 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.38.1_4brgkhw6cq4me3drk3kxrpb2mm
+      '@typescript-eslint/parser': 5.39.0_4brgkhw6cq4me3drk3kxrpb2mm
       debug: 3.2.7
       eslint: 8.23.1
       eslint-import-resolver-node: 0.3.6
@@ -3521,7 +3538,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-import/2.26.0_wfx2yfijvczfpf7w4mrpxonr7y:
+  /eslint-plugin-import/2.26.0_fumqvfbraoqt4p3hqd4vn5oumq:
     resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -3531,14 +3548,14 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 5.38.1_4brgkhw6cq4me3drk3kxrpb2mm
+      '@typescript-eslint/parser': 5.39.0_4brgkhw6cq4me3drk3kxrpb2mm
       array-includes: 3.1.5
       array.prototype.flat: 1.3.0
       debug: 2.6.9
       doctrine: 2.1.0
       eslint: 8.23.1
       eslint-import-resolver-node: 0.3.6
-      eslint-module-utils: 2.7.4_ftdawgvuzamm6kaf2cslfedolq
+      eslint-module-utils: 2.7.4_klwm4zkjy4q54jz64lw2gongxa
       has: 1.0.3
       is-core-module: 2.10.0
       is-glob: 4.0.3
@@ -3565,7 +3582,7 @@ packages:
       jest:
         optional: true
     dependencies:
-      '@typescript-eslint/eslint-plugin': 5.38.1_txkdgmgh2rkzjuhcevlsuge22a
+      '@typescript-eslint/eslint-plugin': 5.38.1_d64ffx4fgvgxtf4rpww7ew343e
       '@typescript-eslint/experimental-utils': 5.38.0_4brgkhw6cq4me3drk3kxrpb2mm
       eslint: 8.23.1
       jest: 29.0.3_sgupjgtkb76w4hsvieap2xky7i
@@ -3954,16 +3971,6 @@ packages:
     resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
     dev: true
 
-  /follow-redirects/1.15.2:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-    dev: false
-
   /forever-agent/0.6.1:
     resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
     dev: true
@@ -7024,10 +7031,6 @@ packages:
       readable-stream: 3.6.0
     dev: true
 
-  /tiny-emitter/2.1.0:
-    resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
-    dev: false
-
   /tinybench/2.1.5:
     resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==}
     dev: true