From 8a5b1b63394b4165eaca4823e1b88ef8974aa696 Mon Sep 17 00:00:00 2001 From: haozhigang Date: Thu, 6 Oct 2022 22:10:32 +0800 Subject: [PATCH] feat(demo): add demos --- README.md | 103 ++- example-vue/.gitignore | 26 + example-vue/.vscode/extensions.json | 3 + example-vue/README.md | 16 + example-vue/index.html | 13 + example-vue/package.json | 24 + example-vue/public/vite.svg | 1 + example-vue/src/App.vue | 288 +++++++ example-vue/src/assets/vue.svg | 1 + example-vue/src/components/HelloWorld.vue | 38 + example-vue/src/main.ts | 10 + example-vue/src/plugin.ts | 93 +++ example-vue/src/printer.ts | 13 + example-vue/src/stores/counter.ts | 16 + example-vue/src/stores/printer.ts | 16 + example-vue/src/style.css | 76 ++ example-vue/src/vite-env.d.ts | 7 + example-vue/tsconfig.json | 33 + example-vue/tsconfig.node.json | 13 + example-vue/vite.config.ts | 17 + example-vue/yarn.lock | 939 ++++++++++++++++++++++ example/src/index.ts | 33 +- src/index.ts | 7 +- src/interfaces.ts | 4 +- src/printProvider.ts | 75 +- src/printer.ts | 2 +- src/providers/cainiao.ts | 11 +- src/providers/douyin.ts | 12 +- src/providers/jingdong.ts | 10 +- src/providers/kuaishou.ts | 10 +- src/providers/meituan.ts | 13 +- src/providers/pinduoduo.ts | 10 +- 32 files changed, 1852 insertions(+), 81 deletions(-) create mode 100644 example-vue/.gitignore create mode 100644 example-vue/.vscode/extensions.json create mode 100644 example-vue/README.md create mode 100644 example-vue/index.html create mode 100644 example-vue/package.json create mode 100644 example-vue/public/vite.svg create mode 100644 example-vue/src/App.vue create mode 100644 example-vue/src/assets/vue.svg create mode 100644 example-vue/src/components/HelloWorld.vue create mode 100644 example-vue/src/main.ts create mode 100644 example-vue/src/plugin.ts create mode 100644 example-vue/src/printer.ts create mode 100644 example-vue/src/stores/counter.ts create mode 100644 example-vue/src/stores/printer.ts create mode 100644 example-vue/src/style.css create mode 100644 example-vue/src/vite-env.d.ts create mode 100644 example-vue/tsconfig.json create mode 100644 example-vue/tsconfig.node.json create mode 100644 example-vue/vite.config.ts create mode 100644 example-vue/yarn.lock diff --git a/README.md b/README.md index f8579bf..772730c 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,109 @@ All in one print toolkit for e-commerce ,integrated cainiao,pinduouo,jingdong, ```bash yarn add ec-print ``` +#### use in your project -## License +```typescript +import Printer,{Providers} from 'ec-print'; + +const cainiao = new Providers.Cainiao(undefined, { + WebSocket, + // maxRetries: 2, + debug: true, +}); +const doudian = new Providers.Doudian(undefined, { + WebSocket, + debug: true, +}); +const printer = new Printer(); +printer.register([ + { key: cainiao.providerKey, provider: cainiao }, + { key: doudian.providerKey, provider: doudian }, +]); +async run(){ + const connected = await printer.connect(); + console.log('connected', connected); + const version = await printer.getAgentInfo('cainiao'); + console.log('version', version); + const res1 = await printer.print(cainiao_print_task); + console.log('cainiao print response', res1); + const res2 = await printer.print(douyin_print_task, 'doudian'); + console.log('douyin print response', res2); +} + + +``` +# features +### Auto reconnect +see [reconnecting-websocket](https://github.com/pladaria/reconnecting-websocket) + +#### options +``` +type SocketOptions = { + WebSocket?: any; // WebSocket constructor, if none provided, defaults to global WebSocket + maxReconnectionDelay?: number; // max delay in ms between reconnections + minReconnectionDelay?: number; // min delay in ms between reconnections + reconnectionDelayGrowFactor?: number; // how fast the reconnection delay grows + minUptime?: number; // min time in ms to consider connection as stable + connectionTimeout?: number; // retry connect if not connected after this time, in ms + maxRetries?: number; // maximum number of retries + maxEnqueuedMessages?: number; // maximum number of messages to buffer until reconnection + startClosed?: boolean; // start websocket in CLOSED state, call `.reconnect()` to connect + debug?: boolean; // enables debug output + autoReconnect?: boolean; //if true attempt to reconnect when send message to ws +}; +``` + +### custom printer provider + +``` typescript +import { PrinterProvider, PrinterProps} from 'ec-printer'; +class CustomPrinter extends PrinterProvider { + readonly providerKey: string = 'yourKey'; + private version: string; + constructor(props: PrinterProps = { url: 'ws://localhost:1111' }) { + const url = props.url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; + } + // implement abstract methods handleResponseMessage and handleRequestMessage + handleResponseMessage(event: MessageEvent): T { + const res = JSON.parse(event.data); + let success = true; + if (res.status) { + success = res.status === 'success'; + } + return { ...res, success } as unknown as T; + } + handleRequestMessage(jsonData: Request): T { + return jsonData as unknown as T; + } + protected getRequestHeader(cmd: CMD): { cmd: CMD; version: string } { + return { + cmd, + version: this.version || '1.0', + }; + } +} +``` +then + +```typescript +const printer = new Printer(); +printer.register([ + { key: cainiao.providerKey, provider: cainiao }, + { key: 'providerKey', provider: new CustomPrinter() }, +]); + +printer.connect().then(res=>{ + printer.getPrinter('providerKey') +}) +``` +# Demos + +[nodejs-example](./example/src/index.ts) +[vue3-example](./example-vue/src/main.ts) +# License [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fgavin-hao%2Fec-print.svg?type=large)](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fgavin-hao%2Fec-print.svg?type=badge_large) # Analytics diff --git a/example-vue/.gitignore b/example-vue/.gitignore new file mode 100644 index 0000000..ba6aa14 --- /dev/null +++ b/example-vue/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +auto-imports.d.ts +components.d.ts diff --git a/example-vue/.vscode/extensions.json b/example-vue/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/example-vue/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/example-vue/README.md b/example-vue/README.md new file mode 100644 index 0000000..30b15e2 --- /dev/null +++ b/example-vue/README.md @@ -0,0 +1,16 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/example-vue/package.json b/example-vue/package.json new file mode 100644 index 0000000..70d84a6 --- /dev/null +++ b/example-vue/package.json @@ -0,0 +1,24 @@ +{ + "name": "example-vue", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview" + }, + "dependencies": { + "element-plus": "^2.2.17", + "pinia": "^2.0.22", + "vue": "^3.2.37" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^3.1.0", + "typescript": "^4.6.4", + "unplugin-auto-import": "^0.11.2", + "unplugin-vue-components": "^0.22.8", + "vite": "^3.1.0", + "vue-tsc": "^0.40.4" + } +} diff --git a/example-vue/public/vite.svg b/example-vue/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/example-vue/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/example-vue/src/App.vue b/example-vue/src/App.vue new file mode 100644 index 0000000..871ed28 --- /dev/null +++ b/example-vue/src/App.vue @@ -0,0 +1,288 @@ + + + diff --git a/example-vue/src/assets/vue.svg b/example-vue/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/example-vue/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/example-vue/src/components/HelloWorld.vue b/example-vue/src/components/HelloWorld.vue new file mode 100644 index 0000000..5230910 --- /dev/null +++ b/example-vue/src/components/HelloWorld.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/example-vue/src/main.ts b/example-vue/src/main.ts new file mode 100644 index 0000000..84c24a2 --- /dev/null +++ b/example-vue/src/main.ts @@ -0,0 +1,10 @@ +import { createApp } from 'vue'; +import './style.css'; +import App from './App.vue'; +import printer from './printer'; +import { createPinia } from 'pinia'; + +const app = createApp(App); +app.use(createPinia()); +app.use(printer); +app.mount('#app'); diff --git a/example-vue/src/plugin.ts b/example-vue/src/plugin.ts new file mode 100644 index 0000000..950d14f --- /dev/null +++ b/example-vue/src/plugin.ts @@ -0,0 +1,93 @@ +import EcPrinter, { Providers, PrintProvider, SocketOption, DerivedProvider } from 'ec-print'; +import { App, computed, inject, InjectionKey, Plugin, reactive, Ref, ref, unref } from 'vue'; +const __DEV__ = import.meta.env.DEV; +declare module 'vue' { + interface ComponentCustomProperties { + $printer: typeof EcPrinter; + } +} +interface IPrinter { + instance: EcPrinter; + install(app: App): void; +} +interface PrinterOptions { + providers: Array<{ + key?: string; + providerFactory: DerivedProvider | (() => PrintProvider); + socketOption?: SocketOption; + }>; + socketOption?: SocketOption; +} +interface PrinterStatus { + [k: string]: boolean; +} +const printerKey = Symbol(__DEV__ ? 'ec-printer' : '') as InjectionKey; +const printerStatusKey = Symbol(__DEV__ ? 'ec-printer-status' : '') as InjectionKey>; +const allProviders = Object.keys(Providers).map((p) => { + return { + key: p.toLowerCase(), + providerFactory: (Providers as { [k: string]: DerivedProvider })[p], + options: {}, + }; +}); +const _defaultOptions: PrinterOptions = { + providers: allProviders, + socketOption: { + autoReconnect: true, + }, +}; +const printerStatusRef = ref({}); + +export function createPrinter(options: PrinterOptions): IPrinter { + const printer = new EcPrinter(); + const _opts = _defaultOptions; + if (options) { + _opts.providers = options.providers && options.providers.length ? options.providers : _defaultOptions.providers; + _opts.socketOption = { ..._opts.socketOption, ...(options.socketOption || {}) }; + } + _opts.providers.forEach((provider) => { + let agent; + // typeof class extends PrintProvider + if (provider.providerFactory.prototype.print) { + const construct = provider.providerFactory as DerivedProvider; + agent = new construct({ + options: { ...provider.socketOption, ..._opts.socketOption }, + }); + } else { + agent = (provider.providerFactory as () => PrintProvider)(); + } + const key = provider.key ?? agent.providerKey; + agent.addEventListener('open', (e) => { + printerStatusRef.value[key] = true; + }); + agent.addEventListener('close', (e) => { + // console.log('agent on close>>>', key); + printerStatusRef.value[key] = false; + }); + printer.registerOne(key, agent); + }); + + function install(app: App) { + app.config.globalProperties['$printer'] = printer; + Object.defineProperty(app.config.globalProperties, '$printer_connect_status', { + enumerable: true, + get: () => unref(printerStatusRef), + }); + app.provide(printerKey, printer); + + app.provide(printerStatusKey, reactive(printerStatusRef)); + const unmountApp = app.unmount; + app.unmount = function () { + printer?.disconnect(); + unmountApp(); + }; + } + return { instance: printer, install }; +} + +export function usePrinter(): EcPrinter { + return inject(printerKey)!; +} +export function usePrinterConnectStatus() { + return inject(printerStatusKey)!; +} diff --git a/example-vue/src/printer.ts b/example-vue/src/printer.ts new file mode 100644 index 0000000..06d7a78 --- /dev/null +++ b/example-vue/src/printer.ts @@ -0,0 +1,13 @@ +import { createPrinter } from './plugin'; + +const printer = createPrinter({ + providers: [], + socketOption: { + autoReconnect: true, + maxRetries: 2, + debug: true, + }, +}); +printer.instance.connect(); + +export default printer; diff --git a/example-vue/src/stores/counter.ts b/example-vue/src/stores/counter.ts new file mode 100644 index 0000000..7b5eb8b --- /dev/null +++ b/example-vue/src/stores/counter.ts @@ -0,0 +1,16 @@ +import { defineStore } from 'pinia'; + +export const useCounterStore = defineStore({ + id: 'counter', + state: () => ({ + counter: 0, + }), + getters: { + doubleCount: (state) => state.counter * 2, + }, + actions: { + increment() { + this.counter++; + }, + }, +}); diff --git a/example-vue/src/stores/printer.ts b/example-vue/src/stores/printer.ts new file mode 100644 index 0000000..334de21 --- /dev/null +++ b/example-vue/src/stores/printer.ts @@ -0,0 +1,16 @@ +import { defineStore } from 'pinia'; + +export const usePrinterStatusStore = defineStore({ + id: 'counter', + state: () => ({ + counter: 0, + }), + getters: { + doubleCount: (state) => state.counter * 2, + }, + actions: { + increment() { + this.counter++; + }, + }, +}); diff --git a/example-vue/src/style.css b/example-vue/src/style.css new file mode 100644 index 0000000..072e611 --- /dev/null +++ b/example-vue/src/style.css @@ -0,0 +1,76 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; +} +body { + margin: 0; + padding: 0; + background-color: #f8f8f8; + min-height: 100vh; +} +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/example-vue/src/vite-env.d.ts b/example-vue/src/vite-env.d.ts new file mode 100644 index 0000000..323c78a --- /dev/null +++ b/example-vue/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/example-vue/tsconfig.json b/example-vue/tsconfig.json new file mode 100644 index 0000000..17d42fd --- /dev/null +++ b/example-vue/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": [ + "ESNext", + "DOM" + ], + "skipLibCheck": true, + "types": [ + "element-plus/global", + ], + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/example-vue/tsconfig.node.json b/example-vue/tsconfig.node.json new file mode 100644 index 0000000..f46f581 --- /dev/null +++ b/example-vue/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*" + ], +} \ No newline at end of file diff --git a/example-vue/vite.config.ts b/example-vue/vite.config.ts new file mode 100644 index 0000000..0645efc --- /dev/null +++ b/example-vue/vite.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import AutoImport from 'unplugin-auto-import/vite'; +import Components from 'unplugin-vue-components/vite'; +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'; +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + AutoImport({ + resolvers: [ElementPlusResolver()], + }), + Components({ + resolvers: [ElementPlusResolver()], + }), + ], +}); diff --git a/example-vue/yarn.lock b/example-vue/yarn.lock new file mode 100644 index 0000000..b7d449c --- /dev/null +++ b/example-vue/yarn.lock @@ -0,0 +1,939 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@antfu/utils@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b" + integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA== + +"@babel/parser@^7.16.4": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + +"@ctrl/tinycolor@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" + integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== + +"@element-plus/icons-vue@^2.0.6": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@element-plus/icons-vue/-/icons-vue-2.0.9.tgz#b7777c57534522e387303d194451d50ff549d49a" + integrity sha512-okdrwiVeKBmW41Hkl0eMrXDjzJwhQMuKiBOu17rOszqM+LS/yBYpNQNV5Jvoh06Wc+89fMmb/uhzf8NZuDuUaQ== + +"@esbuild/android-arm@0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.10.tgz#a5f9432eb221afc243c321058ef25fe899886892" + integrity sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg== + +"@esbuild/linux-loong64@0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz#78a42897c2cf8db9fd5f1811f7590393b77774c7" + integrity sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg== + +"@floating-ui/core@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.0.1.tgz#00e64d74e911602c8533957af0cce5af6b2e93c8" + integrity sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA== + +"@floating-ui/dom@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.0.2.tgz#c5184c52c6f50abd11052d71204f4be2d9245237" + integrity sha512-5X9WSvZ8/fjy3gDu8yx9HAA4KG1lazUN2P4/VnaXLxTO9Dz53HI1oYoh1OlhqFNlHgGDiwFX5WhFCc2ljbW3yA== + dependencies: + "@floating-ui/core" "^1.0.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": + version "2.11.7" + resolved "https://registry.yarnpkg.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671" + integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== + +"@rollup/pluginutils@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@types/lodash-es@^4.17.6": + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" + integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*", "@types/lodash@^4.14.182": + version "4.14.186" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.186.tgz#862e5514dd7bd66ada6c70ee5fce844b06c8ee97" + integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw== + +"@types/web-bluetooth@^0.0.15": + version "0.0.15" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz#d60330046a6ed8a13b4a53df3813c44942ebdf72" + integrity sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA== + +"@vitejs/plugin-vue@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz#3cd52114e8871a0b5e7bd7d837469c032e503036" + integrity sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ== + +"@volar/code-gen@0.40.13": + version "0.40.13" + resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.40.13.tgz#cd69a67b11462b93d79ea2139f9f1e0a76e15111" + integrity sha512-4gShBWuMce868OVvgyA1cU5WxHbjfEme18Tw6uVMfweZCF5fB2KECG0iPrA9D54vHk3FeHarODNwgIaaFfUBlA== + dependencies: + "@volar/source-map" "0.40.13" + +"@volar/source-map@0.40.13": + version "0.40.13" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.40.13.tgz#9acbc47614bbd8fa710d233d10fff1b18cb78a80" + integrity sha512-dbdkAB2Nxb0wLjAY5O64o3ywVWlAGONnBIoKAkXSf6qkGZM+nJxcizsoiI66K+RHQG0XqlyvjDizfnTxr+6PWg== + dependencies: + "@vue/reactivity" "3.2.38" + +"@volar/typescript-faster@0.40.13": + version "0.40.13" + resolved "https://registry.yarnpkg.com/@volar/typescript-faster/-/typescript-faster-0.40.13.tgz#5d9600333cc250ad53e8604ff6a2a32e4acfbc86" + integrity sha512-uy+TlcFkKoNlKEnxA4x5acxdxLyVDIXGSc8cYDNXpPKjBKXrQaetzCzlO3kVBqu1VLMxKNGJMTKn35mo+ILQmw== + dependencies: + semver "^7.3.7" + +"@volar/vue-language-core@0.40.13": + version "0.40.13" + resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-0.40.13.tgz#13a79c29ef63d66a40afd1b29166404703b240c4" + integrity sha512-QkCb8msi2KUitTdM6Y4kAb7/ZlEvuLcbBFOC2PLBlFuoZwyxvSP7c/dBGmKGtJlEvMX0LdCyrg5V2aBYxD38/Q== + dependencies: + "@volar/code-gen" "0.40.13" + "@volar/source-map" "0.40.13" + "@vue/compiler-core" "^3.2.38" + "@vue/compiler-dom" "^3.2.38" + "@vue/compiler-sfc" "^3.2.38" + "@vue/reactivity" "^3.2.38" + "@vue/shared" "^3.2.38" + +"@volar/vue-typescript@0.40.13": + version "0.40.13" + resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-0.40.13.tgz#50fe8e0965f4e14596eca57550b5ca13388c244c" + integrity sha512-o7bNztwjs8JmbQjVkrnbZUOfm7q4B8ZYssETISN1tRaBdun6cfNqgpkvDYd+VUBh1O4CdksvN+5BUNnwAz4oCQ== + dependencies: + "@volar/code-gen" "0.40.13" + "@volar/typescript-faster" "0.40.13" + "@volar/vue-language-core" "0.40.13" + +"@vue/compiler-core@3.2.40", "@vue/compiler-core@^3.2.38": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.40.tgz#c785501f09536748121e937fb87605bbb1ada8e5" + integrity sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.40" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.40", "@vue/compiler-dom@^3.2.38": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.40.tgz#c225418773774db536174d30d3f25ba42a33e7e4" + integrity sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw== + dependencies: + "@vue/compiler-core" "3.2.40" + "@vue/shared" "3.2.40" + +"@vue/compiler-sfc@3.2.40", "@vue/compiler-sfc@^3.2.38": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.40.tgz#61823283efc84d25d9d2989458f305d32a2ed141" + integrity sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.40" + "@vue/compiler-dom" "3.2.40" + "@vue/compiler-ssr" "3.2.40" + "@vue/reactivity-transform" "3.2.40" + "@vue/shared" "3.2.40" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.40": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.40.tgz#67df95a096c63e9ec4b50b84cc6f05816793629c" + integrity sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ== + dependencies: + "@vue/compiler-dom" "3.2.40" + "@vue/shared" "3.2.40" + +"@vue/devtools-api@^6.2.1": + version "6.4.3" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.4.3.tgz#784aa9e397adde727ca892c3574f5f1cfb2bc1c2" + integrity sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg== + +"@vue/reactivity-transform@3.2.40": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.40.tgz#dc24b9074b26f0d9dd2034c6349f5bb2a51c86ac" + integrity sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.40" + "@vue/shared" "3.2.40" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.38.tgz#d576fdcea98eefb96a1f1ad456e289263e87292e" + integrity sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw== + dependencies: + "@vue/shared" "3.2.38" + +"@vue/reactivity@3.2.40", "@vue/reactivity@^3.2.38": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.40.tgz#ae65496f5b364e4e481c426f391568ed7d133cca" + integrity sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA== + dependencies: + "@vue/shared" "3.2.40" + +"@vue/runtime-core@3.2.40": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.40.tgz#e814358bf1b0ff6d4a6b4f8f62d9f341964fb275" + integrity sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg== + dependencies: + "@vue/reactivity" "3.2.40" + "@vue/shared" "3.2.40" + +"@vue/runtime-dom@3.2.40": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.40.tgz#975119feac5ab703aa9bbbf37c9cc966602c8eab" + integrity sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww== + dependencies: + "@vue/runtime-core" "3.2.40" + "@vue/shared" "3.2.40" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.40": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.40.tgz#55eaac31f7105c3907e1895129bf4efb6b0ce393" + integrity sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w== + dependencies: + "@vue/compiler-ssr" "3.2.40" + "@vue/shared" "3.2.40" + +"@vue/shared@3.2.38": + version "3.2.38" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.38.tgz#e823f0cb2e85b6bf43430c0d6811b1441c300f3c" + integrity sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg== + +"@vue/shared@3.2.40", "@vue/shared@^3.2.38": + version "3.2.40" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.40.tgz#e57799da2a930b975321981fcee3d1e90ed257ae" + integrity sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ== + +"@vueuse/core@^9.1.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-9.3.0.tgz#74d855bd19cb5eadd2edb30c871918fac881e8b8" + integrity sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ== + dependencies: + "@types/web-bluetooth" "^0.0.15" + "@vueuse/metadata" "9.3.0" + "@vueuse/shared" "9.3.0" + vue-demi "*" + +"@vueuse/metadata@9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-9.3.0.tgz#c107fe77a577e1f221536cd1b291039c0c7c4bce" + integrity sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA== + +"@vueuse/shared@9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-9.3.0.tgz#40fc138ba4e379c894075830aa2e15404aaa8a5b" + integrity sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ== + dependencies: + vue-demi "*" + +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +async-validator@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +csstype@^2.6.8: + version "2.6.21" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== + +dayjs@^1.11.3: + version "1.11.5" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== + +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +element-plus@^2.2.17: + version "2.2.17" + resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.2.17.tgz#abbb12c19dc029c95b0271822ea9a0e635704bc2" + integrity sha512-MGwMIE/q+FFD3kgS23x8HIe5043tmD1cTRwjhIX9o6fim1avFnUkrsfYRvybbz4CkyqSb185EheZS5AUPpXh2g== + dependencies: + "@ctrl/tinycolor" "^3.4.1" + "@element-plus/icons-vue" "^2.0.6" + "@floating-ui/dom" "^1.0.1" + "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7" + "@types/lodash" "^4.14.182" + "@types/lodash-es" "^4.17.6" + "@vueuse/core" "^9.1.0" + async-validator "^4.2.5" + dayjs "^1.11.3" + escape-html "^1.0.3" + lodash "^4.17.21" + lodash-es "^4.17.21" + lodash-unified "^1.0.2" + memoize-one "^6.0.0" + normalize-wheel-es "^1.2.0" + +esbuild-android-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz#8a59a84acbf2eca96996cadc35642cf055c494f0" + integrity sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA== + +esbuild-android-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz#f453851dc1d8c5409a38cf7613a33852faf4915d" + integrity sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg== + +esbuild-darwin-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz#778bd29c8186ff47b176c8af58c08cf0fb8e6b86" + integrity sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA== + +esbuild-darwin-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz#b30bbefb46dc3c5d4708b0435e52f6456578d6df" + integrity sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ== + +esbuild-freebsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz#ab301c5f6ded5110dbdd611140bef1a7c2e99236" + integrity sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w== + +esbuild-freebsd-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz#a5b09b867a6ff49110f52343b6f12265db63d43f" + integrity sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg== + +esbuild-linux-32@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz#5282fe9915641caf9c8070e4ba2c3e16d358f837" + integrity sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w== + +esbuild-linux-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz#f3726e85a00149580cb19f8abfabcbb96f5d52bb" + integrity sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA== + +esbuild-linux-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz#2f0056e9d5286edb0185b56655caa8c574d8dbe7" + integrity sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A== + +esbuild-linux-arm@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz#40a9270da3c8ffa32cf72e24a79883e323dff08d" + integrity sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A== + +esbuild-linux-mips64le@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz#90ce1c4ee0202edb4ac69807dea77f7e5804abc4" + integrity sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q== + +esbuild-linux-ppc64le@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz#782837ae7bd5b279178106c9dd801755a21fabdf" + integrity sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ== + +esbuild-linux-riscv64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz#d7420d806ece5174f24f4634303146f915ab4207" + integrity sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q== + +esbuild-linux-s390x@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz#21fdf0cb3494a7fb520a71934e4dffce67fe47be" + integrity sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA== + +esbuild-netbsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz#6c06b3107e3df53de381e6299184d4597db0440f" + integrity sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw== + +esbuild-openbsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz#4daef5f5d8e74bbda53b65160029445d582570cf" + integrity sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ== + +esbuild-sunos-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz#5fe7bef267a02f322fd249a8214d0274937388a7" + integrity sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg== + +esbuild-windows-32@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz#48e3dde25ab0135579a288b30ab6ddef6d1f0b28" + integrity sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg== + +esbuild-windows-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz#387a9515bef3fee502d277a5d0a2db49a4ecda05" + integrity sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA== + +esbuild-windows-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz#5a6fcf2fa49e895949bf5495cf088ab1b43ae879" + integrity sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw== + +esbuild@^0.15.6: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.10.tgz#85c2f8446e9b1fe04fae68daceacba033eedbd42" + integrity sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng== + optionalDependencies: + "@esbuild/android-arm" "0.15.10" + "@esbuild/linux-loong64" "0.15.10" + esbuild-android-64 "0.15.10" + esbuild-android-arm64 "0.15.10" + esbuild-darwin-64 "0.15.10" + esbuild-darwin-arm64 "0.15.10" + esbuild-freebsd-64 "0.15.10" + esbuild-freebsd-arm64 "0.15.10" + esbuild-linux-32 "0.15.10" + esbuild-linux-64 "0.15.10" + esbuild-linux-arm "0.15.10" + esbuild-linux-arm64 "0.15.10" + esbuild-linux-mips64le "0.15.10" + esbuild-linux-ppc64le "0.15.10" + esbuild-linux-riscv64 "0.15.10" + esbuild-linux-s390x "0.15.10" + esbuild-netbsd-64 "0.15.10" + esbuild-openbsd-64 "0.15.10" + esbuild-sunos-64 "0.15.10" + esbuild-windows-32 "0.15.10" + esbuild-windows-64 "0.15.10" + esbuild-windows-arm64 "0.15.10" + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +local-pkg@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" + integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash-unified@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lodash-unified/-/lodash-unified-1.0.2.tgz#bb2694db3533781e5cce984af60cfaea318b83c1" + integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.26.2, magic-string@^0.26.4, magic-string@^0.26.5: + version "0.26.6" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.6.tgz#b61e417c9f40b7b53bf7e73c0a803258e20d25ee" + integrity sha512-6d+3bFybzyQFJYSoRsl9ZC0wheze8M1LrQC7tNMRqXR4izUTDOLMd9BtSuExK9iAukFh+s5K0WAhc/dlQ+HKYA== + dependencies: + sourcemap-codec "^1.4.8" + +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +mlly@^0.5.14, mlly@^0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-0.5.16.tgz#adb7d39fed81396a50b43173c88589de314015c7" + integrity sha512-LaJ8yuh4v0zEmge/g3c7jjFlhoCPfQn6RCjXgm9A0Qiuochq4BcuOxVfWmdnCoLTlg2MV+hqhOek+W2OhG0Lwg== + dependencies: + acorn "^8.8.0" + pathe "^0.3.8" + pkg-types "^0.3.5" + ufo "^0.8.5" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-wheel-es@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e" + integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pathe@^0.3.7, pathe@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.8.tgz#3584f03fda1981a6efe8bc24623d82cbb4219acb" + integrity sha512-c71n61F1skhj/jzZe+fWE9XDoTYjWbUwIKVwFftZ5IOgiX44BVkTkD+/803YDgR50tqeO4eXWxLyVHBLWQAD1g== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pinia@^2.0.22: + version "2.0.22" + resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.22.tgz#435468e8e6d6aa6f319cb727b23bd51db0844c4a" + integrity sha512-u+b8/BC+tmvo3ACbYO2w5NfxHWFOjvvw9DQnyT0dW8aUMCPRQT5QnfZ5R5W2MzZBMTeZRMQI7V/QFbafmM9QHw== + dependencies: + "@vue/devtools-api" "^6.2.1" + vue-demi "*" + +pkg-types@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-0.3.5.tgz#ea01c7cf28da9e4c5b85de9b250de4b3dc2e9abc" + integrity sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q== + dependencies: + jsonc-parser "^3.2.0" + mlly "^0.5.14" + pathe "^0.3.7" + +postcss@^8.1.10, postcss@^8.4.16: + version "8.4.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.17.tgz#f87863ec7cd353f81f7ab2dec5d67d861bbb1be5" + integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@~2.78.0: + version "2.78.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" + integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +scule@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/scule/-/scule-0.3.2.tgz#472445cecd8357165a94a067f78cee40e700b596" + integrity sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +strip-literal@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-0.4.2.tgz#4f9fa6c38bb157b924e9ace7155ebf8a2342cbcf" + integrity sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw== + dependencies: + acorn "^8.8.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +typescript@^4.6.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +ufo@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.5.tgz#e367b4205ece9d9723f2fa54f887d43ed1bce5d0" + integrity sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA== + +unimport@^0.6.7: + version "0.6.8" + resolved "https://registry.yarnpkg.com/unimport/-/unimport-0.6.8.tgz#5f1b770aa0cc0557c67c9b2187ad2d226fcc06c1" + integrity sha512-MWkaPYvN0j+6jfEuiVFhfmy+aOtgAP11CozSbu/I3Cx+8ybjXIueB7GVlKofHabtjzSlPeAvWKJSFjHWsG2JaA== + dependencies: + "@rollup/pluginutils" "^4.2.1" + escape-string-regexp "^5.0.0" + fast-glob "^3.2.12" + local-pkg "^0.4.2" + magic-string "^0.26.4" + mlly "^0.5.16" + pathe "^0.3.8" + scule "^0.3.2" + strip-literal "^0.4.2" + unplugin "^0.9.6" + +unplugin-auto-import@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-0.11.2.tgz#9b541f65e2800f298b13d73bca8e4eb333f94de7" + integrity sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ== + dependencies: + "@antfu/utils" "^0.5.2" + "@rollup/pluginutils" "^4.2.1" + local-pkg "^0.4.2" + magic-string "^0.26.2" + unimport "^0.6.7" + unplugin "^0.9.3" + +unplugin-vue-components@^0.22.8: + version "0.22.8" + resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-0.22.8.tgz#84b8158beadb0c3a77eb29ed9bdc85b3880805bc" + integrity sha512-Musnwdtr6uj9Zopo4oeh4lp9+fJ2ArXVDzSiZxF4YC9v+pLnasKVKEEAjdXuQQ3u3KtntVw6PCscyAt52eS75g== + dependencies: + "@antfu/utils" "^0.5.2" + "@rollup/pluginutils" "^4.2.1" + chokidar "^3.5.3" + debug "^4.3.4" + fast-glob "^3.2.12" + local-pkg "^0.4.2" + magic-string "^0.26.5" + minimatch "^5.1.0" + resolve "^1.22.1" + unplugin "^0.9.6" + +unplugin@^0.9.3, unplugin@^0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.9.6.tgz#f449173b619b9970bf3190d5419a66a727bb5d18" + integrity sha512-YYLtfoNiie/lxswy1GOsKXgnLJTE27la/PeCGznSItk+8METYZErO+zzV9KQ/hXhPwzIJsfJ4s0m1Rl7ZCWZ4Q== + dependencies: + acorn "^8.8.0" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.4.5" + +vite@^3.1.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.1.4.tgz#b75824b819d8354a6f36e4b988943c7e4947e155" + integrity sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA== + dependencies: + esbuild "^0.15.6" + postcss "^8.4.16" + resolve "^1.22.1" + rollup "~2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +vue-demi@*: + version "0.13.11" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" + integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== + +vue-tsc@^0.40.4: + version "0.40.13" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.40.13.tgz#0a193014f7cadb47459cf0809ce3953b74a1348c" + integrity sha512-xzuN3g5PnKfJcNrLv4+mAjteMd5wLm5fRhW0034OfNJZY4WhB07vhngea/XeGn7wNYt16r7syonzvW/54dcNiA== + dependencies: + "@volar/vue-language-core" "0.40.13" + "@volar/vue-typescript" "0.40.13" + +vue@^3.2.37: + version "3.2.40" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.40.tgz#23f387f6f9b3a0767938db6751e4fb5900f0ee34" + integrity sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A== + dependencies: + "@vue/compiler-dom" "3.2.40" + "@vue/compiler-sfc" "3.2.40" + "@vue/runtime-dom" "3.2.40" + "@vue/server-renderer" "3.2.40" + "@vue/shared" "3.2.40" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.5.tgz#e476842dab5eafb7beb844aa2f747fc12ebbf6ec" + integrity sha512-8bWq0Iluiv9lVf9YaqWQ9+liNgXSHICm+rg544yRgGYaR8yXZTVBaHZkINZSB2yZSWo4b0F6MIxqJezVfOEAlg== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/example/src/index.ts b/example/src/index.ts index 8c7e79d..6ca1a76 100644 --- a/example/src/index.ts +++ b/example/src/index.ts @@ -2,23 +2,26 @@ import Printer, { Providers, Response } from '../../src'; import WebSocket from 'ws'; const url = 'ws://localhost:13528'; -const cainiao = new Providers.Cainiao(undefined, { - WebSocket, - // maxRetries: 2, - debug: true, +const cainiao = new Providers.Cainiao({ + options: { + WebSocket, + // maxRetries: 2, + debug: true, + }, }); -const doudian = new Providers.Doudian(undefined, { - WebSocket, - // maxRetries: 2, - debug: true, +const doudian = new Providers.Doudian({ + options: { + WebSocket, + // maxRetries: 2, + debug: true, + }, }); const printer = new Printer(); printer.register([ { key: cainiao.providerKey, provider: cainiao }, { key: doudian.providerKey, provider: doudian }, ]); -printer.connect(); -printer.allAgents.map((a) => { +printer.allAgents.forEach((a) => { a.addEventListener('close', (e) => { console.log(`${a.providerKey} printer connect closed`, e.reason, e.code); }); @@ -75,15 +78,7 @@ async function run() { } run(); -// while (true) { -// console.log(printer.isConnect); -// } -// const count = 0; + setInterval(() => { - // printer.print(task); console.log(new Date().getTime(), printer.isConnect); - // if (!printer.isConnect && count > 5) { - // printer.reconnect(); - // } - // count++; }, 10000 * Math.random()); diff --git a/src/index.ts b/src/index.ts index b14b0ca..1d80f57 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,7 +4,7 @@ import Jingdong from './providers/jingdong'; import Kuaishou from './providers/kuaishou'; import Meituan from './providers/meituan'; import Doudyin from './providers/douyin'; - +import PrintProvider, { PrinterProps } from './printProvider'; import Printer from './printer'; export { Cainiao, Pinduoduo, Kuaishou, Doudyin, Meituan, Jingdong }; export { default as getUUID } from './uuid'; @@ -18,9 +18,10 @@ export { NotifyResultCallback, CallbackMap, PrinterListenersMap, + PrinterProps, } from './printProvider'; - -export const Providers = { +export type DerivedProvider = { new (args: PrinterProps): PrintProvider }; +export const Providers: { [k: string]: DerivedProvider } = { Cainiao, Pinduoduo, Jingdong, diff --git a/src/interfaces.ts b/src/interfaces.ts index 17aba8a..492429c 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -2,7 +2,7 @@ export enum Platform { cainiao = 'cainiao', pinduoduo = 'pinduoduo', jingdong = 'jingdong', - douyin = 'douyin', + douyin = 'doudian', meituan = 'meituan', kuaishou = 'kuaishou', } @@ -163,7 +163,7 @@ export interface PrintTask extends JsonObject { /** * 京东打印组件请求参数字段,其他平台使用documents 中的数据 */ - parameters?: { printerName: string; contents: Array } & JsonObject; + parameters?: { printName?: string; contents: Array } & JsonObject; } export interface PrinterConfig extends Record { diff --git a/src/printProvider.ts b/src/printProvider.ts index 7c1f8a8..a00ea4d 100644 --- a/src/printProvider.ts +++ b/src/printProvider.ts @@ -26,6 +26,11 @@ export type PrinterListenersMap = { // message: (event: MessageEvent) => void; open: Array<(event: Event) => void>; }; +export interface PrinterProps { + url?: UrlProvider; + options?: SocketOption; + version?: string; +} export interface SocketOption extends Options { /** * if true attempt to reconnect when send message to ws @@ -56,7 +61,8 @@ export default abstract class PrinterProvider implements IPrinter { open: [], close: [], }; - constructor(url: UrlProvider, options: SocketOption = {}) { + constructor(props: PrinterProps = { url: '' }) { + const { url, options = {} } = props; this.url = url; this.options = { ...this.options, ...(options || {}) }; } @@ -67,10 +73,15 @@ export default abstract class PrinterProvider implements IPrinter { public onclose: ((event: CloseEvent) => void) | null = null; public onerror: ((event: ErrorEvent) => void) | null = null; public onopen: ((event: Event) => void) | null = null; + private _connectLock = false; connect() { if (!this.url) { throw Error('url is required!'); } + if (this._connectLock) { + return Promise.resolve(true); + } + this._connectLock = true; if (!this.ws || this.ws.readyState === this.ws.CLOSED) { this.ws = new ReconnectingWebSocket(this.url, undefined, this.options); } @@ -78,36 +89,51 @@ export default abstract class PrinterProvider implements IPrinter { this._onMessage(event); }); this.ws?.addEventListener('open', (event) => { - this.startRequest(); - this._dispatchCallback('open', [true]); - if (this.onopen) { - this.onopen(event); - } - this._listeners.open.forEach((listener) => listener(event)); + this._handleOpen(event); }); this.ws.addEventListener('error', (event) => { - this._debug('connect error', this.url, event.message); - this._dispatchCallback('error', [false]); - if (this.onerror) { - this.onerror(event); - } - this._listeners.error.forEach((listener) => listener(event)); + this._handleError(event); }); this.ws.addEventListener('close', (event) => { - this._debug(`connect closed url[${this.url}],code:${event.code},reason:${event.reason}`); - this.$requestQueue.forEach((req) => { - req.start = false; - }); - if (this.onclose) { - this.onclose(event); - } - this._listeners.close.forEach((listener) => listener(event)); + this._handleClose(event); }); return new Promise((resolve) => { - this._addCallback('open', resolve); - this._addCallback('error', resolve); + this._addCallback('open', (evt) => { + this._connectLock = false; + resolve(evt); + }); + this._addCallback('error', (evt) => { + this._connectLock = false; + resolve(evt); + }); }); } + private _handleOpen(event: Event) { + this.startRequest(); + this._dispatchCallback('open', [true]); + if (this.onopen) { + this.onopen(event); + } + this._listeners.open.forEach((listener) => listener(event)); + } + private _handleError(event: ErrorEvent) { + this._debug('connect error', this.url, event.message); + this._dispatchCallback('error', [false]); + if (this.onerror) { + this.onerror(event); + } + this._listeners.error.forEach((listener) => listener(event)); + } + private _handleClose(event: CloseEvent) { + this._debug(`connect closed url[${this.url}],code:${event.code},reason:${event.reason}`); + this.$requestQueue.forEach((req) => { + req.start = false; + }); + if (this.onclose) { + this.onclose(event); + } + this._listeners.close.forEach((listener) => listener(event)); + } reconnect() { this.disconnect(1000, 'reconnect'); return this.connect(); @@ -117,6 +143,9 @@ export default abstract class PrinterProvider implements IPrinter { Object.keys(this.$callback).forEach((k: string) => (this.$callback[k as keyof CallbackMap] = undefined)); this.$notifyPrintResultListener.splice(0); this.$requestQueue.splice(0); + this._removeListners(); + } + private _removeListners() { this.onclose = null; this.onerror = null; this.onopen = null; diff --git a/src/printer.ts b/src/printer.ts index 3a029be..e108682 100644 --- a/src/printer.ts +++ b/src/printer.ts @@ -113,7 +113,7 @@ class Printer { delete task.agentKey; return (await agent!.printPreview(task)) as T; } - async getPrinters(agentKey?: string): Promise { + async getPrinters } & Response>(agentKey?: string): Promise { this.throwIfNoAgents(); let agent = this.getAgentOrDefault(agentKey); if (!agent?.isConnect) { diff --git a/src/providers/cainiao.ts b/src/providers/cainiao.ts index bd64e5a..2cd58e4 100644 --- a/src/providers/cainiao.ts +++ b/src/providers/cainiao.ts @@ -1,15 +1,16 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject } from '../interfaces'; const Url = 'ws://localhost:13528'; class CainiaoPrinter extends PrinterProvider { readonly providerKey: string = 'cainiao'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '1.0') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } + handleResponseMessage(event: MessageEvent): T { const res = JSON.parse(event.data); let success = true; diff --git a/src/providers/douyin.ts b/src/providers/douyin.ts index 43a6258..34e3c72 100644 --- a/src/providers/douyin.ts +++ b/src/providers/douyin.ts @@ -1,15 +1,15 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject } from '../interfaces'; const Url = 'ws://localhost:13888'; -// const WssUrl = 'wss://localhost:13999'; +/**const WssUrl = 'wss://localhost:13999'; */ class DoudianPrinter extends PrinterProvider { readonly providerKey: string = 'doudian'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '1.0') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } handleResponseMessage(event: MessageEvent): T { const res = JSON.parse(event.data); diff --git a/src/providers/jingdong.ts b/src/providers/jingdong.ts index 8d15b85..883f5da 100644 --- a/src/providers/jingdong.ts +++ b/src/providers/jingdong.ts @@ -1,4 +1,4 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject, PrintTask } from '../interfaces'; const Url = 'ws://localhost:9113'; @@ -23,10 +23,10 @@ export interface JDResponse extends JsonObject { class JingdongPrinter extends PrinterProvider { readonly providerKey: string = 'jingdong'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '2') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } printPreview(task: PrintTask): Promise { diff --git a/src/providers/kuaishou.ts b/src/providers/kuaishou.ts index fbfcb74..dd558ec 100644 --- a/src/providers/kuaishou.ts +++ b/src/providers/kuaishou.ts @@ -1,14 +1,14 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject } from '../interfaces'; const Url = 'ws://localhost:16888/ks/printer'; class KuaishouPrinter extends PrinterProvider { readonly providerKey: string = 'kuaishou'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '1.0') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } handleResponseMessage(event: MessageEvent): T { const res = JSON.parse(event.data); diff --git a/src/providers/meituan.ts b/src/providers/meituan.ts index 3855ec2..d6ea532 100644 --- a/src/providers/meituan.ts +++ b/src/providers/meituan.ts @@ -1,18 +1,19 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject } from '../interfaces'; -const Urls = ['https://localhost:28613', 'https://localhost:28713', 'https://localhost:28813']; +const Urls = ['ws://localhost:28613', 'ws://localhost:28713', 'ws://localhost:28813']; let urlIndex = 0; const Url = () => { return Urls[urlIndex++ % Urls.length]; }; +// const Url = 'ws://localhost:28613'; class MeituanPrinter extends PrinterProvider { readonly providerKey: string = 'meituan'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '1.0') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } handleResponseMessage(event: MessageEvent): T { diff --git a/src/providers/pinduoduo.ts b/src/providers/pinduoduo.ts index de6d260..ff2601a 100644 --- a/src/providers/pinduoduo.ts +++ b/src/providers/pinduoduo.ts @@ -1,4 +1,4 @@ -import PrinterProvider, { SocketOption, UrlProvider } from '../printProvider'; +import PrinterProvider, { PrinterProps } from '../printProvider'; import { Response, Request, CMD, JsonObject } from '../interfaces'; const Url = 'ws://127.0.0.1:5000'; @@ -6,10 +6,10 @@ const Url = 'ws://127.0.0.1:5000'; class PinduoduoPrinter extends PrinterProvider { readonly providerKey: string = 'pinduoduo'; private version: string; - constructor(url: UrlProvider = Url, options: SocketOption = {}, version: string = '1.0') { - url = url || Url; - super(url, options); - this.version = version; + constructor(props: PrinterProps = { url: Url }) { + const url = props.url || Url; + super({ url, options: props.options }); + this.version = props.version || '1.0'; } handleResponseMessage(event: MessageEvent): T { const res = JSON.parse(event.data);