├── .gitignore ├── example ├── .gitignore ├── src │ ├── style.css │ ├── hello.ts │ ├── test.less │ └── main.ts ├── index.html ├── vite.config.ts ├── tsconfig.json ├── package.json ├── header.config.js ├── dist │ └── example-project.user.js └── yarn.lock ├── .eslintignore ├── .editorconfig ├── src ├── common │ ├── type.ts │ ├── constant.ts │ └── utils.ts ├── index.ts └── lib │ ├── client-code.ts │ ├── build-options.ts │ ├── inject.ts │ ├── grants.ts │ ├── tm-header.ts │ └── plugin.ts ├── tsup.config.ts ├── tsconfig.json ├── LICENSE ├── .eslintrc.json ├── package.json ├── dist ├── index.d.ts ├── index.mjs └── index.js ├── scripts └── release.mjs ├── README-ZH.md ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | example 4 | scripts 5 | -------------------------------------------------------------------------------- /example/src/style.css: -------------------------------------------------------------------------------- 1 | #app { 2 | background-color: beige; 3 | } 4 | -------------------------------------------------------------------------------- /example/src/hello.ts: -------------------------------------------------------------------------------- 1 | console.log('hello') 2 | export const hello = () => 'hello' 3 | -------------------------------------------------------------------------------- /example/src/test.less: -------------------------------------------------------------------------------- 1 | .test { 2 | font-size: larger; 3 | .hello { 4 | color: #000; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | [*] 3 | charset = utf-8 4 | indent_style = space 5 | indent_size = 2 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | -------------------------------------------------------------------------------- /src/common/type.ts: -------------------------------------------------------------------------------- 1 | export type Merge = Omit> & N; 2 | export type Nested = T | Nested[]; 3 | export type Writeable = { -readonly [P in keyof T]: T[P] }; 4 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { TmHeaderConfig } from 'common/constant' 2 | 3 | export { tampermonkeyPlugin as default } from 'lib/plugin' 4 | export function defineTmHeader(options: TmHeaderConfig): TmHeaderConfig { return options } 5 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | sourcemap: false, 6 | clean: true, 7 | dts: true, 8 | outDir: 'dist', 9 | format: ['cjs', 'esm'] 10 | }) 11 | -------------------------------------------------------------------------------- /example/src/main.ts: -------------------------------------------------------------------------------- 1 | import './style.css' 2 | import './test.less' 3 | import { hello } from './hello' 4 | import $ from 'jquery' 5 | 6 | console.log('hello world main.ts: ' + hello()) 7 | console.log($.fn.jquery) 8 | $.noop() 9 | 10 | const hasOwnProperty = () => { 11 | console.log('for test') 12 | } 13 | hasOwnProperty() 14 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /example/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import Userscript from '../dist' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [ 7 | Userscript({ 8 | externalGlobals: { 9 | 'vue': 'Vue', 10 | 'jquery': ['jQuery', 'https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js'] 11 | } 12 | }) 13 | ] 14 | }) 15 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"] 13 | }, 14 | "include": ["src/**/*.ts", "src/**/*.d.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example-project", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "preview": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "@types/jquery": "^3.5.14", 12 | "@types/tampermonkey": "^4.0.5", 13 | "less": "^4.1.2", 14 | "typescript": "^4.6.3", 15 | "vite": "^3.0.4" 16 | }, 17 | "dependencies": { 18 | "jquery": "^3.6.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/header.config.js: -------------------------------------------------------------------------------- 1 | const { defineTmHeader } = require('../dist') 2 | 3 | module.exports = defineTmHeader({ 4 | name: 'Test script', 5 | namespace: 'com.script.Test', 6 | version: '0.0.1', 7 | author: 'noname', 8 | description: 'Test script', 9 | homepage: 'https://greasyfork.org/scripts/******', 10 | license: 'MIT', 11 | match: [ 12 | 'https://abc.com/qwe*', 13 | 'https://asd.com/zxc*' 14 | ], 15 | supportURL: 'https://github.com', 16 | grant: [ 17 | 'GM_download' 18 | ], 19 | 'run-at': 'document-body' 20 | }) 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "lib": [ 5 | "esnext", 6 | "dom" 7 | ], 8 | "module": "CommonJS", 9 | "moduleResolution": "node", 10 | "baseUrl": "./src", 11 | "resolveJsonModule": true, 12 | "declaration": false, 13 | "declarationMap": false, 14 | "sourceMap": false, 15 | "outDir": "./dist", 16 | "esModuleInterop": true, 17 | "forceConsistentCasingInFileNames": true, 18 | "strict": true, 19 | "skipLibCheck": true 20 | }, 21 | "include": [ 22 | "./src/**/*.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Sakura Yumine 4 | Copyright (c) 2022 Thinker-ljn 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/lib/client-code.ts: -------------------------------------------------------------------------------- 1 | import type { AddressInfo } from 'node:net' 2 | import { grants } from 'common/constant' 3 | 4 | export function generateClientCode({ address, port }: AddressInfo, entry?: string) { 5 | return ` 6 | const url = 'http://${address}:${port}' 7 | 8 | const originFetch = unsafeWindow.fetch 9 | const ping = '/__vite_ping' 10 | unsafeWindow.fetch = function(input, init) { 11 | if (input === ping) { 12 | input = url + ping 13 | } 14 | return originFetch(input, init) 15 | } 16 | 17 | ${grants.map(item => `unsafeWindow.${item} = ${item}`).join('\n ')} 18 | 19 | function createModuleScript(path) { 20 | if (typeof GM_addElement == 'function') { 21 | return GM_addElement('script', { 22 | type: 'module', 23 | src: url + '/' + path 24 | }) 25 | } else { 26 | const script = document.createElement('script') 27 | script.type = 'module' 28 | script.src = url + '/' + path 29 | document.body.appendChild(script) 30 | return script 31 | } 32 | } 33 | 34 | createModuleScript('@vite/client') 35 | createModuleScript('${entry ?? 'src/main.ts'}') 36 | ` 37 | } 38 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "es6": true, 5 | "node": true 6 | }, 7 | "parser": "@typescript-eslint/parser", 8 | "parserOptions": { 9 | "parser": "@typescript-eslint/parser", 10 | "ecmaVersion": "latest", 11 | "sourceType": "module" 12 | }, 13 | "plugins": ["@typescript-eslint", "unicorn"], 14 | "extends": [ 15 | "eslint:recommended", 16 | "plugin:@typescript-eslint/recommended", 17 | "plugin:unicorn/recommended" 18 | ], 19 | "rules": { 20 | "semi": ["error", "never"], 21 | "quotes": ["error", "single"], 22 | "no-console": "off", 23 | "no-unexpected-multiline": "error", 24 | "space-before-function-paren": [ "error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}], 25 | "arrow-parens": ["error", "as-needed"], 26 | "no-return-await": "error", 27 | "no-use-before-define": ["error", "nofunc"], 28 | "no-useless-concat": "error", 29 | "prefer-const": ["warn", {"ignoreReadBeforeAssign": false}], 30 | "prefer-spread": "warn", 31 | "prefer-rest-params": "warn", 32 | "prefer-destructuring": ["warn", {"object": true, "array": false}], 33 | "prefer-promise-reject-errors": ["warn", {"allowEmptyReject": true}] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/lib/build-options.ts: -------------------------------------------------------------------------------- 1 | import { INTRO_FOR_PLACEHOLDER } from 'common/constant' 2 | import { buildGlobalName, buildName, defaultEntry, readPackageJSON } from 'common/utils' 3 | import type { BuildOptions } from 'vite' 4 | import type { TMPluginOptions, TMExternalGlobals } from './plugin' 5 | 6 | type GetRollupOption = (input: TMExternalGlobals) => BuildOptions['rollupOptions'] 7 | type GetLibraryOption = (entry: TMPluginOptions['entry']) => BuildOptions['lib'] 8 | 9 | export const getRollupOptions: GetRollupOption = input => { 10 | const external = Array.isArray(input) ? input : Object.keys(input ?? {}) 11 | const globals = buildGlobalName(input) 12 | return { 13 | external, 14 | output: { 15 | globals, 16 | intro: INTRO_FOR_PLACEHOLDER, 17 | inlineDynamicImports: true 18 | } 19 | } 20 | } 21 | 22 | export const getLibraryOptions: GetLibraryOption = entry => { 23 | const { name: packageName } = readPackageJSON() 24 | if (!packageName) { 25 | const error = 'props `name` in package.json is required!' 26 | console.error(error) 27 | throw new Error(error) 28 | } 29 | const name = buildName(packageName) 30 | return { 31 | name, 32 | entry: entry ?? defaultEntry(), 33 | formats: ['iife'], 34 | fileName: () => `${packageName}.user.js` 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /example/dist/example-project.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Test script 3 | // @version 0.0.1 4 | // @description Test script 5 | // @author noname 6 | // @namespace com.script.Test 7 | // @license MIT 8 | // @match https://abc.com/qwe* 9 | // @match https://asd.com/zxc* 10 | // @homepage https://greasyfork.org/scripts/****** 11 | // @supportURL https://github.com 12 | // @run-at document-body 13 | // @grant GM_download 14 | // @grant GM_addStyle 15 | // @require https://unpkg.com/vue 16 | // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js 17 | // ==/UserScript== 18 | 19 | (function($) { 20 | "use strict"; 21 | GM_addStyle(` 22 | #app { 23 | background-color: beige; 24 | } 25 | .test { 26 | font-size: larger; 27 | } 28 | .test .hello { 29 | color: #000; 30 | } 31 | `); 32 | const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e }; 33 | const $__default = /* @__PURE__ */ _interopDefaultLegacy($); 34 | 35 | 36 | console.log("hello"); 37 | const hello = () => "hello"; 38 | console.log("hello world main.ts: " + hello()); 39 | console.log($__default.default.fn.jquery); 40 | $__default.default.noop(); 41 | const hasOwnProperty = () => { 42 | console.log("for test"); 43 | }; 44 | hasOwnProperty(); 45 | })(jQuery); 46 | -------------------------------------------------------------------------------- /src/lib/inject.ts: -------------------------------------------------------------------------------- 1 | import { GM_ADD_STYLE, INTRO_FOR_PLACEHOLDER, PROD_MODE } from 'common/constant' 2 | import { readBundleFile, writeBundleFile } from 'common/utils' 3 | import { generateTmHeader } from './tm-header' 4 | import type { Plugin } from 'vite' 5 | import type { TMExternalGlobals } from './plugin' 6 | 7 | export function injectMetaAndCss(input: TMExternalGlobals): Partial { 8 | if (process.env.NODE_ENV != PROD_MODE) return {} 9 | const allCss: string[] = [] 10 | return { 11 | name: 'inject-meta-css', 12 | transform(code, id) { 13 | if (/\.(c|le|sc)ss$/.test(id)) { 14 | allCss.push(code) 15 | return { code: '' } 16 | } 17 | }, 18 | writeBundle({ dir }, bundle) { 19 | for (const [fileName, bundleValue] of Object.entries(bundle)) { 20 | let result = readBundleFile(dir, fileName) 21 | const hasCss = allCss.length > 0 22 | result = result.replace( 23 | INTRO_FOR_PLACEHOLDER, 24 | hasCss 25 | ? `${GM_ADD_STYLE}(\`\n${allCss.join('\n')} \`)` 26 | : '' 27 | ) 28 | if (bundleValue.type === 'chunk') { 29 | for (const [moduleKey, moduleValue] of Object.entries(bundleValue.modules)) { 30 | if (/\.(c|le|sc)ss$/.test(moduleKey) && moduleValue.code) { 31 | const csscode = moduleValue.code.replaceAll('\'', '"') 32 | result = result.replace(csscode, '') 33 | } 34 | } 35 | } 36 | result = generateTmHeader(PROD_MODE, input, hasCss) + '\n\n' + result 37 | writeBundleFile(dir, fileName, result) 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-tm-userscript", 3 | "version": "1.2.1", 4 | "description": "A vite plugin to build userscripts mainly for Tampermonkey.", 5 | "main": "./dist/index.js", 6 | "module": "./dist/index.mjs", 7 | "types": "./dist/index.d.ts", 8 | "files": [ 9 | "dist" 10 | ], 11 | "exports": { 12 | ".": { 13 | "import": "./dist/index.mjs", 14 | "require": "./dist/index.js" 15 | } 16 | }, 17 | "keywords": [ 18 | "userscript", 19 | "userscripts", 20 | "tampermonkey", 21 | "vite-plugin", 22 | "vite" 23 | ], 24 | "scripts": { 25 | "build": "tsup", 26 | "release": "node scripts/release.mjs", 27 | "lint": "eslint src --ext .js,.ts --fix" 28 | }, 29 | "author": "asadahimeka", 30 | "license": "MIT", 31 | "repository": { 32 | "type": "git", 33 | "url": "git+https://github.com/asadahimeka/vite-plugin-tm-userscript.git" 34 | }, 35 | "bugs": { 36 | "url": "https://github.com/asadahimeka/vite-plugin-tm-userscript/issues" 37 | }, 38 | "homepage": "https://github.com/asadahimeka/vite-plugin-tm-userscript#readme", 39 | "dependencies": { 40 | "acorn-walk": "^8.2.0" 41 | }, 42 | "devDependencies": { 43 | "@types/node": "^16.11.7", 44 | "@typescript-eslint/eslint-plugin": "^5.20.0", 45 | "@typescript-eslint/parser": "^5.20.0", 46 | "chalk": "^5.0.1", 47 | "enquirer": "^2.3.6", 48 | "eslint": "^8.13.0", 49 | "eslint-plugin-unicorn": "^42.0.0", 50 | "execa": "^6.1.0", 51 | "minimist": "^1.2.6", 52 | "semver": "^7.3.7", 53 | "tsup": "^5.12.5", 54 | "typescript": "^4.6.3", 55 | "vite": "^3.0.4" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/lib/grants.ts: -------------------------------------------------------------------------------- 1 | import { full as walkFull } from 'acorn-walk' 2 | import { GM_ADD_STYLE, grants } from 'common/constant' 3 | import type { Grant, Grants, TmHeaderConfig } from 'common/constant' 4 | import type { Plugin } from 'vite' 5 | 6 | const grantsSet = new Set(grants) 7 | const usedGrants = new Set() 8 | 9 | export function parseGrant(autoGrant: boolean | undefined): Partial { 10 | if (autoGrant === false) return {} 11 | return { 12 | name: 'tm-userscript-grant', 13 | moduleParsed(moduleInfo) { 14 | if (/\.(ts|js|vue)$/.test(moduleInfo.id) && moduleInfo.ast) { 15 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 16 | walkFull(moduleInfo.ast, (node: any) => { 17 | if (node.type === 'CallExpression') { 18 | const calleeName = node.callee.name 19 | if (calleeName && grantsSet.has(calleeName)) { 20 | usedGrants.add(calleeName) 21 | } 22 | } 23 | if (node.type === 'Identifier' && grantsSet.has(node.name)) { 24 | usedGrants.add(node.name) 25 | } 26 | }) 27 | } 28 | } 29 | } 30 | } 31 | 32 | export function addUsedGrants(tmConfig: TmHeaderConfig, isDevelopment = false) { 33 | if (isDevelopment) { 34 | tmConfig.grant = grants as Grants 35 | return 36 | } 37 | if (!Array.isArray(tmConfig.grant)) { 38 | tmConfig.grant = [tmConfig.grant].filter(Boolean) as Grants 39 | } 40 | tmConfig.grant = [...new Set([...tmConfig.grant, ...usedGrants])] 41 | } 42 | 43 | export function addExtraTmGrant(tmConfig: TmHeaderConfig) { 44 | if (!Array.isArray(tmConfig.grant)) { 45 | tmConfig.grant = [tmConfig.grant].filter(Boolean) as Grants 46 | } 47 | if (!tmConfig.grant.includes(GM_ADD_STYLE)) { 48 | tmConfig.grant.push(GM_ADD_STYLE) 49 | } 50 | return tmConfig 51 | } 52 | -------------------------------------------------------------------------------- /src/lib/tm-header.ts: -------------------------------------------------------------------------------- 1 | import { DEV_MODE, tmHeaderKeys } from 'common/constant' 2 | import { buildRequireCDN, getDefinedConfig, readPackageJSON } from 'common/utils' 3 | import { addExtraTmGrant, addUsedGrants } from './grants' 4 | import type { Nested } from 'common/type' 5 | import type { TmHeaderConfig, TmHeaderConfigKeys } from 'common/constant' 6 | import type { TMExternalGlobals } from './plugin' 7 | 8 | type DealMetaFunction = (v: Nested) => string | Nested[] 9 | 10 | export function generateTmHeader(mode: string, input: TMExternalGlobals, hasCss: boolean, headers?: TmHeaderConfig) { 11 | const definedConfig = headers ?? getDefinedConfig() ?? {} 12 | if (typeof definedConfig == 'string') return definedConfig 13 | const packageJson = readPackageJSON() 14 | const config: TmHeaderConfig = {} 15 | for (const key of tmHeaderKeys) { 16 | const value = definedConfig[key] ?? packageJson[key] 17 | if (value) config[key] = value 18 | } 19 | config.require = [ 20 | ...(Array.isArray(config.require) ? config.require : [config.require ?? '']), 21 | ...buildRequireCDN(input) 22 | ].filter(Boolean) 23 | if (mode === DEV_MODE) { 24 | addUsedGrants(config, true) 25 | config.name = '[ Dev ] - ' + config.name 26 | } else { 27 | hasCss && addExtraTmGrant(config) 28 | addUsedGrants(config) 29 | } 30 | const definedMetaKeys = Object.keys(config) as TmHeaderConfigKeys 31 | const maxKeyLength = Math.max(...definedMetaKeys.map(k => k.length)) 32 | const definedMetaBlock = definedMetaKeys.flatMap(key => { 33 | const value = config[key] as Nested 34 | const spaces = Array.from({ length: maxKeyLength - key.length + 8 }).join(' ') 35 | const dealMeta: DealMetaFunction = v => { 36 | if (Array.isArray(v)) return v.map(element => dealMeta(element)) 37 | if (typeof v == 'boolean' && v === true) return `// @${key}` 38 | return `// @${key}${spaces}${v}` 39 | } 40 | return dealMeta(value) 41 | }) 42 | return [ 43 | '// ==UserScript==', 44 | ...definedMetaBlock, 45 | '// ==/UserScript==', 46 | ].join('\n') 47 | } 48 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'vite'; 2 | 3 | declare type Merge = Omit> & N; 4 | 5 | declare const grants: readonly ["unsafeWindow", "GM_addStyle", "GM_addElement", "GM_deleteValue", "GM_listValues", "GM_addValueChangeListener", "GM_removeValueChangeListener", "GM_setValue", "GM_getValue", "GM_log", "GM_getResourceText", "GM_getResourceURL", "GM_registerMenuCommand", "GM_unregisterMenuCommand", "GM_openInTab", "GM_xmlhttpRequest", "GM_download", "GM_getTab", "GM_saveTab", "GM_getTabs", "GM_notification", "GM_setClipboard", "GM_info"]; 6 | declare type Grant = typeof grants[number]; 7 | declare const tmHeaderKeys: readonly ["name", "name:en", "name:zh", "name:zh-cn", "version", "description", "description:en", "description:zh", "description:zh-cn", "author", "namespace", "license", "match", "include", "require", "homepage", "homepageURL", "website", "source", "icon", "iconURL", "defaulticon", "icon64", "icon64URL", "updateURL", "downloadURL", "supportURL", "contributionURL", "contributionAmount", "compatible", "incompatible", "exclude", "resource", "connect", "run-at", "grant", "noframes", "unwrap", "nocompat", "antifeature"]; 8 | declare type RunAt = 'document-start' | 'document-body' | 'document-end' | 'document-idle' | 'context-menu'; 9 | declare type AntiFeature = 'ads' | 'tracking' | 'miner' | 'membership' | 'payment' | 'referral-link'; 10 | declare type TmHeaderKey = typeof tmHeaderKeys[number]; 11 | declare type BareTmHeaderConfig = Partial>; 12 | declare type TmHeaderConfig = Merge; 20 | 21 | interface TMPluginOptions { 22 | entry?: string; 23 | autoGrant?: boolean; 24 | headers?: TmHeaderConfig; 25 | externalGlobals?: string[] | Record; 26 | } 27 | declare function tampermonkeyPlugin(options?: TMPluginOptions): Plugin[]; 28 | 29 | declare function defineTmHeader(options: TmHeaderConfig): TmHeaderConfig; 30 | 31 | export { tampermonkeyPlugin as default, defineTmHeader }; 32 | -------------------------------------------------------------------------------- /src/common/constant.ts: -------------------------------------------------------------------------------- 1 | import type { Merge, Writeable } from 'common/type' 2 | 3 | export const DEV_MODE = 'development' 4 | export const PROD_MODE = 'production' 5 | export const GM_ADD_STYLE = 'GM_addStyle' 6 | export const DEFAULT_NPM_CDN = 'https://unpkg.com' 7 | export const INTRO_FOR_PLACEHOLDER = 'console.warn("__TEMPLATE_INJECT_CSS_PLACEHOLDER_NOT_WORK__")' 8 | 9 | export const grants = [ 10 | 'unsafeWindow', 11 | 'GM_addStyle', 12 | 'GM_addElement', 13 | 'GM_deleteValue', 14 | 'GM_listValues', 15 | 'GM_addValueChangeListener', 16 | 'GM_removeValueChangeListener', 17 | 'GM_setValue', 18 | 'GM_getValue', 19 | 'GM_log', 20 | 'GM_getResourceText', 21 | 'GM_getResourceURL', 22 | 'GM_registerMenuCommand', 23 | 'GM_unregisterMenuCommand', 24 | 'GM_openInTab', 25 | 'GM_xmlhttpRequest', 26 | 'GM_download', 27 | 'GM_getTab', 28 | 'GM_saveTab', 29 | 'GM_getTabs', 30 | 'GM_notification', 31 | 'GM_setClipboard', 32 | 'GM_info' 33 | ] as const 34 | 35 | export type Grant = typeof grants[number] 36 | export type Grants = Writeable 37 | 38 | export const tmHeaderKeys = [ 39 | 'name', 40 | 'name:en', 41 | 'name:zh', 42 | 'name:zh-cn', 43 | 'version', 44 | 'description', 45 | 'description:en', 46 | 'description:zh', 47 | 'description:zh-cn', 48 | 'author', 49 | 'namespace', 50 | 'license', 51 | 'match', 52 | 'include', 53 | 'require', 54 | 'homepage', 55 | 'homepageURL', 56 | 'website', 57 | 'source', 58 | 'icon', 59 | 'iconURL', 60 | 'defaulticon', 61 | 'icon64', 62 | 'icon64URL', 63 | 'updateURL', 64 | 'downloadURL', 65 | 'supportURL', 66 | 'contributionURL', 67 | 'contributionAmount', 68 | 'compatible', 69 | 'incompatible', 70 | 'exclude', 71 | 'resource', 72 | 'connect', 73 | 'run-at', 74 | 'grant', 75 | 'noframes', 76 | 'unwrap', 77 | 'nocompat', 78 | 'antifeature' 79 | ] as const 80 | 81 | type RunAt = 'document-start' | 'document-body' | 'document-end' | 'document-idle' | 'context-menu' 82 | type AntiFeature = 'ads' | 'tracking' | 'miner' | 'membership' | 'payment' | 'referral-link' 83 | 84 | type TmHeaderKey = typeof tmHeaderKeys[number] 85 | export type BareTmHeaderConfig = Partial> 86 | export type TmHeaderConfig = Merge 94 | export type TmHeaderConfigKeys = Array 95 | -------------------------------------------------------------------------------- /src/common/utils.ts: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs' 2 | import path from 'node:path' 3 | import { DEFAULT_NPM_CDN } from './constant' 4 | import type { TMExternalGlobals } from 'lib/plugin' 5 | 6 | const root = process.cwd() 7 | 8 | export function readJSON(filePath: string) { 9 | const json = fs.readFileSync(filePath, 'utf8') 10 | return JSON.parse(json) 11 | } 12 | 13 | export function readPackageJSON() { 14 | const packagePath = path.resolve(root, 'package.json') 15 | return readJSON(packagePath) 16 | } 17 | 18 | export function buildName(name: string) { 19 | return name.replace(/(^|-)([A-Za-z])/g, m => m.replace('-', '').toUpperCase()) 20 | } 21 | 22 | export function buildGlobalName(input: TMExternalGlobals) { 23 | if (!input) return input 24 | if (Array.isArray(input)) { 25 | const result: Record = {} 26 | for (const name of input) { 27 | result[name] = buildName(name) 28 | } 29 | return result 30 | } 31 | const globals: Record = {} 32 | for (const [key, value] of Object.entries(input)) { 33 | if (Array.isArray(value)) { 34 | globals[key] = value[0] 35 | } else { 36 | globals[key] = value 37 | } 38 | } 39 | return globals 40 | } 41 | 42 | function buildDefaultCDN(packageName: string) { 43 | const packagePath = path.resolve(root, `node_modules/${packageName}/package.json`) 44 | if (fs.existsSync(packagePath)) { 45 | const { version = 'latest' } = readJSON(packagePath) 46 | return `${DEFAULT_NPM_CDN}/${packageName}@${version}` 47 | } 48 | return `${DEFAULT_NPM_CDN}/${packageName}` 49 | } 50 | 51 | export function buildRequireCDN(input: TMExternalGlobals) { 52 | if (!input) return [] 53 | if (Array.isArray(input)) { 54 | return input.map(name => buildDefaultCDN(name)).filter(Boolean) 55 | } 56 | const requireCDNs: string[] = [] 57 | for (const [key, value] of Object.entries(input)) { 58 | if (Array.isArray(value)) { 59 | value[1] && requireCDNs.push(value[1]) 60 | continue 61 | } 62 | requireCDNs.push(buildDefaultCDN(key)) 63 | } 64 | return requireCDNs 65 | } 66 | 67 | export function defaultEntry() { 68 | const tsconfigFile = path.resolve(root, 'vite.config.ts') 69 | const extension = fs.existsSync(tsconfigFile) ? 'ts' : 'js' 70 | return path.resolve(root, `src/main.${extension}`) 71 | } 72 | 73 | export function getDefinedConfig() { 74 | const jsonPath = path.resolve(root, 'header.config.json') 75 | if (fs.existsSync(jsonPath)) { 76 | return readJSON(jsonPath) 77 | } 78 | const jsPath = path.resolve(root, 'header.config.js') 79 | if (fs.existsSync(jsPath)) { 80 | // eslint-disable-next-line unicorn/prefer-module 81 | return require(jsPath) 82 | } 83 | const txtPath = path.resolve(root, 'header.config.txt') 84 | if (fs.existsSync(txtPath)) { 85 | return fs.readFileSync(txtPath, 'utf8') 86 | } 87 | return readPackageJSON().tmHeader 88 | } 89 | 90 | export function readBundleFile(directory: string | undefined, fileName: string) { 91 | const distribution = directory || path.resolve(root, 'dist') 92 | const filePath = path.resolve(distribution, fileName) 93 | return fs.readFileSync(filePath, 'utf8') 94 | } 95 | 96 | export function writeBundleFile(directory: string | undefined, fileName: string, data: string) { 97 | const distribution = directory || path.resolve(root, 'dist') 98 | const filePath = path.resolve(distribution, fileName) 99 | fs.writeFileSync(filePath, data) 100 | } 101 | -------------------------------------------------------------------------------- /src/lib/plugin.ts: -------------------------------------------------------------------------------- 1 | import { generateClientCode } from './client-code' 2 | import { generateTmHeader } from './tm-header' 3 | import { parseGrant } from './grants' 4 | import { getLibraryOptions, getRollupOptions } from './build-options' 5 | import { DEV_MODE, GM_ADD_STYLE, INTRO_FOR_PLACEHOLDER, PROD_MODE, TmHeaderConfig } from 'common/constant' 6 | import type { Plugin } from 'vite' 7 | import type { AddressInfo } from 'node:net' 8 | 9 | export interface TMPluginOptions { 10 | entry?: string; 11 | autoGrant?: boolean; 12 | headers?: TmHeaderConfig; 13 | externalGlobals?: string[] | Record; 14 | } 15 | export type TMExternalGlobals = TMPluginOptions['externalGlobals'] 16 | 17 | type Address = AddressInfo | null | undefined 18 | 19 | function generateDevelopmentCode(address: Address, input: TMExternalGlobals, entry?: string, headers?: TmHeaderConfig) { 20 | if (!address) return '\u5904\u7406\u5927\u5931\u8D25\u4E86\u55F7...' 21 | const tmHeader = generateTmHeader(DEV_MODE, input, true, headers) 22 | const code = generateClientCode(address, entry) 23 | return `${tmHeader}\n\n(function () {\n${code}\n})()` 24 | } 25 | 26 | function getAddress(address: Address | string) { 27 | return typeof address == 'object' ? address : undefined 28 | } 29 | 30 | const DEV_TAMPERMONKEY_PATH = '/_development.user.js' 31 | const showInstallLog = (address: AddressInfo) => { 32 | const url = `http://${address.address}:${address.port}${DEV_TAMPERMONKEY_PATH}` 33 | setTimeout(() => { 34 | console.log('\u001B[36m%s\u001B[0m', `> [TMPlugin] - click link to install userscript: ${url}`) 35 | }) 36 | } 37 | 38 | export function tampermonkeyPlugin(options: TMPluginOptions = {}): Plugin[] { 39 | const { entry, externalGlobals, autoGrant, headers } = options 40 | const { moduleParsed } = parseGrant(autoGrant) 41 | return [ 42 | { 43 | name: 'tm-userscript-builder', 44 | moduleParsed, 45 | configureServer(server) { 46 | return () => { 47 | server.httpServer?.on('listening', () => { 48 | const address = getAddress(server.httpServer?.address()) 49 | address && showInstallLog(address) 50 | }) 51 | server.middlewares.use((request, response, next) => { 52 | if (request.url === DEV_TAMPERMONKEY_PATH) { 53 | const address = getAddress(server.httpServer?.address()) 54 | const developmentCode = generateDevelopmentCode(address, externalGlobals, entry, headers) 55 | response.setHeader('Cache-Control', 'no-store') 56 | response.write(developmentCode) 57 | } 58 | next() 59 | }) 60 | } 61 | }, 62 | config(config) { 63 | let hmr = config.server?.hmr 64 | if (typeof hmr === 'boolean' || !hmr) hmr = {} 65 | hmr.protocol = 'ws' 66 | hmr.host = '127.0.0.1' 67 | config.server = { 68 | ...config.server, 69 | hmr 70 | } 71 | config.build = { 72 | lib: getLibraryOptions(entry), 73 | rollupOptions: getRollupOptions(externalGlobals), 74 | minify: false, 75 | sourcemap: false, 76 | cssCodeSplit: false 77 | } 78 | } 79 | }, 80 | { 81 | name: 'tm-userscript-inject', 82 | apply: 'build', 83 | enforce: 'post', 84 | generateBundle(_options, bundle) { 85 | const bundleKeys = Object.keys(bundle) 86 | const cssBundles = bundleKeys.filter(key => key.endsWith('.css')) 87 | const jsBundles = bundleKeys.filter(key => key.endsWith('.js')) 88 | const cssList = [] 89 | for (const css of cssBundles) { 90 | const chunk = bundle[css] 91 | if (chunk.type === 'asset' && typeof chunk.source == 'string') { 92 | delete bundle[css] 93 | cssList.push(chunk.source) 94 | continue 95 | } 96 | } 97 | const hadCss = cssList.length > 0 98 | const tmHeader = generateTmHeader(PROD_MODE, externalGlobals, hadCss, headers) 99 | for (const js of jsBundles) { 100 | const chunk = bundle[js] 101 | if (chunk.type === 'chunk') { 102 | let chunkCode = chunk.code 103 | for (const [moduleKey, moduleValue] of Object.entries(chunk.modules)) { 104 | if (/\.(c|le|sc)ss$/.test(moduleKey) && moduleValue.code) { 105 | const cssCode = moduleValue.code.replaceAll('\'', '"').replaceAll('#__PURE__', '@__PURE__') 106 | chunkCode = chunkCode.replace(cssCode, '') 107 | } 108 | } 109 | chunk.code = tmHeader + '\n\n' + chunkCode.replace( 110 | INTRO_FOR_PLACEHOLDER, 111 | hadCss ? `${GM_ADD_STYLE}(\`\n${cssList.join('\n')} \`)` : '' 112 | ) 113 | } 114 | } 115 | } 116 | } 117 | ] 118 | } 119 | -------------------------------------------------------------------------------- /scripts/release.mjs: -------------------------------------------------------------------------------- 1 | /** 2 | * fork from vue3.0 3 | */ 4 | 5 | import minimist from 'minimist' 6 | import chalk from 'chalk' 7 | import semver from 'semver' 8 | import enquirer from 'enquirer' 9 | import { readFileSync, writeFileSync } from 'fs' 10 | import { dirname, resolve } from 'path' 11 | import { fileURLToPath } from 'url' 12 | import { execa } from 'execa' 13 | 14 | process.env.FORCE_COLOR = 1 15 | 16 | const args = minimist(process.argv.slice(2)) 17 | const __dirname = dirname(fileURLToPath(import.meta.url)); 18 | 19 | const pkgRoot = resolve(__dirname, '..') 20 | const pkgPath = resolve(pkgRoot, 'package.json') 21 | const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) 22 | const pkgName = pkg.name 23 | const currentVersion = pkg.version 24 | 25 | const preId = 26 | args.preid || 27 | (semver.prerelease(currentVersion) && semver.prerelease(currentVersion)[0]) 28 | const isDryRun = args.dry 29 | const skipTests = args.skipTests 30 | const skipBuild = args.skipBuild 31 | 32 | const versionIncrements = [ 33 | 'patch', 34 | 'minor', 35 | 'major', 36 | ...(preId ? ['prepatch', 'preminor', 'premajor', 'prerelease'] : []), 37 | ] 38 | 39 | const inc = (i) => semver.inc(currentVersion, i, preId) 40 | const bin = (name) => resolve(__dirname, '../node_modules/.bin/' + name) 41 | const run = (bin, args, opts = {}) => 42 | execa(bin, args, { stdio: 'inherit', ...opts }) 43 | const dryRun = (bin, args, opts = {}) => 44 | console.log(chalk.blue(`[dryrun] ${bin} ${args.join(' ')}`), opts) 45 | const runIfNotDry = isDryRun ? dryRun : run 46 | const step = (msg) => console.log(chalk.cyan(msg)) 47 | 48 | async function main() { 49 | let targetVersion = args._[0] 50 | 51 | if (!targetVersion) { 52 | // no explicit version, offer suggestions 53 | const { release } = await enquirer.prompt({ 54 | type: 'select', 55 | name: 'release', 56 | message: 'Select release type', 57 | choices: versionIncrements 58 | .map((i) => `${i} (${inc(i)})`) 59 | .concat(['custom']), 60 | }) 61 | 62 | if (release === 'custom') { 63 | targetVersion = ( 64 | await enquirer.prompt({ 65 | type: 'input', 66 | name: 'version', 67 | message: 'Input custom version', 68 | initial: currentVersion, 69 | }) 70 | ).version 71 | } else { 72 | targetVersion = release.match(/\((.*)\)/)[1] 73 | } 74 | } 75 | 76 | if (!semver.valid(targetVersion)) { 77 | throw new Error(`invalid target version: ${targetVersion}`) 78 | } 79 | 80 | const { yes } = await enquirer.prompt({ 81 | type: 'confirm', 82 | name: 'yes', 83 | message: `Releasing v${targetVersion}. Confirm?`, 84 | }) 85 | 86 | if (!yes) { 87 | return 88 | } 89 | 90 | // run tests before release 91 | // step('\nRunning tests...') 92 | // if (!skipTests && !isDryRun) { 93 | // await run(bin('jest'), ['--clearCache']) 94 | // await run('pnpm', ['test', '--bail']) 95 | // } else { 96 | // console.log(`(skipped)`) 97 | // } 98 | 99 | // update versions 100 | step('\nUpdating version...') 101 | updateVersions(targetVersion) 102 | 103 | // build all packages with types 104 | step('\nBuilding all packages...') 105 | if (!skipBuild && !isDryRun) { 106 | await run('npm', ['run', 'build', '--release']) 107 | } else { 108 | console.log(`(skipped)`) 109 | } 110 | 111 | // generate changelog 112 | // await run(`pnpm`, ['changelog']) 113 | 114 | const { stdout } = await run('git', ['diff'], { stdio: 'pipe' }) 115 | if (stdout) { 116 | step('\nCommitting changes...') 117 | await runIfNotDry('git', ['add', '-A']) 118 | await runIfNotDry('git', ['commit', '-m', `release: v${targetVersion}`]) 119 | } else { 120 | console.log('No changes to commit.') 121 | } 122 | 123 | // publish packages 124 | step('\nPublishing packages...') 125 | await publishPackage(targetVersion, runIfNotDry) 126 | 127 | // push to GitHub 128 | step('\nPushing to GitHub...') 129 | await runIfNotDry('git', ['tag', `v${targetVersion}`]) 130 | await runIfNotDry('git', ['push', 'origin', `refs/tags/v${targetVersion}`]) 131 | await runIfNotDry('git', ['push']) 132 | 133 | if (isDryRun) { 134 | console.log(`\nDry run finished - run git diff to see package changes.`) 135 | } 136 | console.log() 137 | } 138 | 139 | function updateVersions(version) { 140 | pkg.version = version 141 | writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n') 142 | } 143 | 144 | async function publishPackage(version, runIfNotDry) { 145 | if (pkg.private) { 146 | return 147 | } 148 | 149 | let releaseTag = null 150 | if (args.tag) { 151 | releaseTag = args.tag 152 | } else if (version.includes('alpha')) { 153 | releaseTag = 'alpha' 154 | } else if (version.includes('beta')) { 155 | releaseTag = 'beta' 156 | } else if (version.includes('rc')) { 157 | releaseTag = 'rc' 158 | } 159 | 160 | // TODO use inferred release channel after official release 161 | // const releaseTag = semver.prerelease(version)[0] || null 162 | 163 | step(`Publishing ${pkgName}...`) 164 | try { 165 | await runIfNotDry( 166 | 'npm', 167 | [ 168 | 'publish', 169 | ...(releaseTag ? ['--tag', releaseTag] : []), 170 | '--access', 171 | 'public', 172 | '--registry=https://registry.npmjs.org' 173 | ], 174 | { 175 | cwd: pkgRoot, 176 | stdio: 'pipe', 177 | } 178 | ) 179 | console.log(chalk.green(`Successfully published ${pkgName}@${version}`)) 180 | } catch (e) { 181 | if (e.stderr.match(/previously published/)) { 182 | console.log(chalk.red(`Skipping already published: ${pkgName}`)) 183 | } else { 184 | throw e 185 | } 186 | } 187 | } 188 | 189 | main().catch((err) => { 190 | console.error(err) 191 | }) 192 | -------------------------------------------------------------------------------- /README-ZH.md: -------------------------------------------------------------------------------- 1 | # vite-plugin-tm-userscript 2 | 3 | ![](https://img.shields.io/github/package-json/v/asadahimeka/vite-plugin-tm-userscript) 4 | ![](https://img.shields.io/badge/license-MIT-green) 5 | ![](https://img.shields.io/github/package-json/dependency-version/asadahimeka/vite-plugin-tm-userscript/dev/tsup) 6 | ![](https://img.shields.io/github/package-json/dependency-version/asadahimeka/vite-plugin-tm-userscript/dev/typescript) 7 | 8 | 中文 | [English](https://github.com/asadahimeka/vite-plugin-tm-userscript/blob/master/README.md) 9 | 10 | > 建议使用功能更加丰富的 [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 11 | 12 | 基于 `vite` 的 Tampermonkey 用户脚本开发构建插件。 13 | 14 | ## 特点 15 | 16 | - 通过单独的配置文件或者 `package.json` 中的 `tmHeader` 字段来配置 Tampermonkey 的 Userscript Header 17 | - 构建生产时支持自动分析代码用到的 `grant` 18 | - 开发模式时默认导入所有 `grant`,并且把所有的 `grant` 方法加入到 `unsafeWindow` 19 | - 可通过简单配置,把引入的外部包 `require` 化,自动引入 UNPKG CDN,详情见下面的插件配置 20 | 21 | > 鉴于最近的网络环境,jsDelivr 与 UNPKG 相对来说都比较慢,建议自行配置可用的 CDN,配置方式见下文 `externalGlobals` 22 | 23 | > 常用前端 CDN 加速服务: 24 | > 25 | > https://www.bootcdn.cn 26 | > 27 | > https://cdn.baomitu.com 28 | > 29 | > https://staticfile.org 30 | > 31 | > http://cdn.bytedance.com 32 | 33 | ## 使用 34 | 35 | ### 安装 36 | 37 | ```bash 38 | yarn add vite-plugin-tm-userscript -D 39 | # OR 40 | npm install vite-plugin-tm-userscript -D 41 | ``` 42 | 43 | ### 配置 `vite.config.ts` 44 | 45 | ```js 46 | import { defineConfig } from 'vite' 47 | import Userscript from 'vite-plugin-tm-userscript' 48 | 49 | // https://vitejs.dev/config/ 50 | export default defineConfig({ 51 | plugins: [ 52 | Userscript({ 53 | externalGlobals: ['vue'] 54 | }) 55 | ] 56 | }) 57 | ``` 58 | 59 | ### 配置 Userscript Header 60 | 61 | 有几种方式来配置 `Userscript Header`, 优先级如下所示 62 | 63 | 1. 插件的 `headers` 选项 64 | 2. `header.config.json` 65 | 3. `header.config.js` 66 | 4. `header.config.txt` 67 | 5. `package.json` 中的 `tmHeader` 字段 68 | 69 | 其中 `header.config.txt` 使用 Tampermonkey 头部注释配置,不会经过处理,直接插入脚本头部作为 Header 使用 70 | 71 | 其他几种格式按 json 格式配置,多个属性配置如 `match` 用数组表示,经过处理自动添加 `grant` 与 `require` 72 | 73 | 示例配置见 [`example/header.config.js`](https://github.com/asadahimeka/vite-plugin-tm-userscript/blob/master/example/header.config.js) 74 | 75 | 具体属性配置见 [Tampermonkey 文档](https://www.tampermonkey.net/documentation.php) 76 | 77 | ## 插件配置 78 | 79 | ```ts 80 | export interface TMPluginOptions { 81 | entry?: string; 82 | autoGrant?: boolean; 83 | headers?: TmHeaderConfig; 84 | externalGlobals?: string[] | Record; 85 | } 86 | ``` 87 | 88 | ### `headers` 89 | 90 | 见 [配置 Userscript Header](#配置-userscript-header) 91 | 92 | 示例 93 | 94 | ```js 95 | // vite.config.js 96 | import { defineConfig } from 'vite' 97 | import Userscript from 'vite-plugin-tm-userscript' 98 | 99 | export default defineConfig({ 100 | plugins: [ 101 | Userscript({ 102 | entry: 'main.js', 103 | headers: { 104 | name: 'Test', 105 | namespace: 'https://www.nanoka.top', 106 | author: 'asadahimeka', 107 | description: 'No description', 108 | source: 'https://github.com/asadahimeka/userscripts', 109 | supportURL: 'https://github.com/asadahimeka/userscripts/issues', 110 | license: 'MIT', 111 | match: 'https://test.com/*', 112 | require: 'https://lib.baomitu.com/arrive/2.4.1/arrive.min.js', 113 | 'run-at': 'document-start', 114 | }, 115 | }), 116 | ], 117 | }) 118 | ``` 119 | 120 | ### `externalGlobals` 121 | 122 | 配置外部包,比如 `vue`,`axios` 等,减少打包体积,并且会自动声明 `require` ,如下配置: 123 | 124 | 三种配置形式,可自定义 CDN,不配置 CDN 的话默认使用 UNPKG CDN 125 | 126 | ```js 127 | // 1 128 | Userscript({ 129 | externalGlobals: ['vue'] 130 | }) 131 | 132 | // 2 133 | Userscript({ 134 | externalGlobals: { 135 | 'jquery': 'jQuery' 136 | } 137 | }) 138 | 139 | // 3 140 | Userscript({ 141 | externalGlobals: { 142 | 'jquery': ['jQuery', 'https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js'] 143 | } 144 | }) 145 | 146 | // 转化为 => 147 | 148 | return { 149 | rollupOptions: { 150 | external: ['jquery'] 151 | output: { 152 | globals: { 153 | jquery: 'jQuery' 154 | } 155 | } 156 | } 157 | } 158 | 159 | // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js 160 | ``` 161 | 162 | ### `autoGrant` 163 | 164 | `boolean` 类型,默认为 `true` 165 | 166 | 自动分析代码中使用的 Tampermonkey 的 `grant`,并加入 Userscript Header 声明中 167 | 168 | ### `entry` 169 | 170 | 入口文件,默认为 `src/main.js` 或者 `src/main.ts` 171 | 172 | ## 示例 173 | 174 | 见 [`example`](https://github.com/asadahimeka/vite-plugin-tm-userscript/tree/master/example) 文件夹 175 | 176 | ## 说明 177 | 178 | ### vite 配置额外说明 179 | 180 | 生产构建模式将强制配置 `config.build`: 181 | 182 | - 构建的包名为 `package.json` 的 `name` (**必须填写**)属性的驼峰模式,构建的文件名也与其相关 183 | - 文件打包格式为 `iife`,不压缩,不分离 `css` 文件 184 | - 额外配置了 `rollupOptions`,以支持其他功能 185 | 186 | ### 禁止 CSP(Content-Security-Policy) 187 | 188 | 在开发模式下,需要通过 `script` 标签注入 `vite` 的脚本,有些网站开启了 `CSP(Content-Security-Policy)`,导致报错,可以安装 `Chrome` 插件 [Disable Content-Security-Policy](https://chrome.google.com/webstore/detail/disable-content-security/ieelmcmcagommplceebfedjlakkhpden) 或者 [Always Disable Content-Security-Policy](https://chrome.google.com/webstore/detail/always-disable-content-se/ffelghdomoehpceihalcnbmnodohkibj),来禁止 `CSP(Content-Security-Policy)`,**在开发时开启插件即可(其他时间记得关闭以保证网页浏览的安全性)**。 189 | 190 | 也可以打开 Tampermonkey 设置 `extension://iikmkjmpaadaobahmlepeloendndfphd/options.html#nav=settings`,在 `安全` 项下把 `如果站点有内容安全策略(CSP)则向其策略:` 改为 `全部移除(可能不安全)`。 191 | 192 | ![image](https://user-images.githubusercontent.com/31837214/177236988-56a9cb86-a8d7-4320-9f47-b10be9e64582.png) 193 | 194 | 195 | ## 替代项目 196 | 197 | [gorilla](https://github.com/apsking/gorilla) 198 | 199 | [vite-plugin-tampermonkey](https://github.com/Thinker-ljn/vite-plugin-tampermonkey) 200 | 201 | [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 202 | 203 | 204 | ## License 205 | 206 | Forked from [vite-plugin-tampermonkey](https://www.npmjs.com/package/vite-plugin-tampermonkey). 207 | 208 | Licensed under the MIT license. 209 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vite-plugin-tm-userscript 2 | 3 | ![](https://img.shields.io/github/package-json/v/asadahimeka/vite-plugin-tm-userscript) 4 | ![](https://img.shields.io/badge/license-MIT-green) 5 | ![](https://img.shields.io/github/package-json/dependency-version/asadahimeka/vite-plugin-tm-userscript/dev/tsup) 6 | ![](https://img.shields.io/github/package-json/dependency-version/asadahimeka/vite-plugin-tm-userscript/dev/typescript) 7 | 8 | English | [中文](https://github.com/asadahimeka/vite-plugin-tm-userscript/blob/master/README-ZH.md) 9 | 10 | > Recommended to use [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 11 | > 12 | > 推荐使用功能更丰富的 [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 13 | 14 | Tampermonkey userscript developing & build plugin based on `vite`. 15 | 16 | ## Features 17 | 18 | - Configure Tampermonkey's Userscript Header via a separate config file or the `tmHeader` field in `package.json` 19 | - Automatically add used `grant` when building for production 20 | - Import all `grant` by default in development mode, and add all `grant` methods to `unsafeWindow` 21 | - Through simple configuration, the imported external package can be `require` and automatically imported UNPKG CDN, see the plugin configuration below for details 22 | 23 | ## Usage 24 | 25 | ### Install 26 | 27 | ```bash 28 | yarn add vite-plugin-tm-userscript -D 29 | # OR 30 | npm install vite-plugin-tm-userscript -D 31 | ``` 32 | 33 | ### Configure `vite.config.ts` 34 | 35 | ```js 36 | import { defineConfig } from 'vite' 37 | import Userscript from 'vite-plugin-tm-userscript' 38 | 39 | // https://vitejs.dev/config/ 40 | export default defineConfig({ 41 | plugins: [ 42 | Userscript({ 43 | externalGlobals: ['vue'] 44 | }) 45 | ] 46 | }) 47 | ``` 48 | 49 | ### Configure Userscript Header 50 | 51 | There are five ways to configure `Userscript Header`, the priority is as follows 52 | 53 | 1. Plugin option `headers` 54 | 2. `header.config.json` 55 | 3. `header.config.js` 56 | 4. `header.config.txt` 57 | 5. `tmHeader` field in `package.json` 58 | 59 | Among them, `header.config.txt` uses Tampermonkey header annotation configuration, will not be processed, directly inserted into the script header 60 | 61 | The other four formats are configured in json format, and multiple attribute configurations such as `match` are represented by an array, and `grant` and `require` are automatically added after processing 62 | 63 | See [`example/header.config.js`](https://github.com/asadahimeka/vite-plugin-tm-userscript/blob/master/example/header.config.js) for example configuration 64 | 65 | For specific property configuration, see [Tampermonkey Documentation](https://www.tampermonkey.net/documentation.php) 66 | 67 | ## Plugin Configuration 68 | 69 | ```ts 70 | export interface TMPluginOptions { 71 | entry?: string; 72 | autoGrant?: boolean; 73 | headers?: TmHeaderConfig; 74 | externalGlobals?: string[] | Record; 75 | } 76 | ``` 77 | 78 | ### `headers` 79 | 80 | See [Configure Userscript Header](#configure-userscript-header) 81 | 82 | For example 83 | 84 | ```js 85 | // vite.config.js 86 | import { defineConfig } from 'vite' 87 | import Userscript from 'vite-plugin-tm-userscript' 88 | 89 | export default defineConfig({ 90 | plugins: [ 91 | Userscript({ 92 | entry: 'main.js', 93 | headers: { 94 | name: 'Test', 95 | namespace: 'https://www.nanoka.top', 96 | author: 'asadahimeka', 97 | description: 'No description', 98 | source: 'https://github.com/asadahimeka/userscripts', 99 | supportURL: 'https://github.com/asadahimeka/userscripts/issues', 100 | license: 'MIT', 101 | match: 'https://test.com/*', 102 | require: 'https://lib.baomitu.com/arrive/2.4.1/arrive.min.js', 103 | 'run-at': 'document-start', 104 | }, 105 | }), 106 | ], 107 | }) 108 | ``` 109 | 110 | ### `externalGlobals` 111 | 112 | Configure external packages, such as `vue`, `axios`, etc., to reduce the package size, and automatically declare `require` 113 | 114 | Three configuration forms, CDN can be customized, if CDN is not configured, UNPKG CDN is used by default 115 | 116 | ```js 117 | // 1 118 | Userscript({ 119 | externalGlobals: ['jquery'] 120 | }) 121 | 122 | // 2 123 | Userscript({ 124 | externalGlobals: { 125 | 'jquery': 'jQuery' 126 | } 127 | }) 128 | 129 | // 3 130 | Userscript({ 131 | externalGlobals: { 132 | 'jquery': ['jQuery', 'https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js'] 133 | } 134 | }) 135 | 136 | // => 137 | 138 | return { 139 | rollupOptions: { 140 | external: ['jquery'] 141 | output: { 142 | globals: { 143 | jquery: 'jQuery' 144 | } 145 | } 146 | } 147 | } 148 | 149 | // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js 150 | ``` 151 | 152 | ### `autoGrant` 153 | 154 | `boolean` type, defaults to `true` 155 | 156 | Automatically analyze the Tampermonkey `grant` used in the code and add it to the Userscript Header declaration 157 | 158 | ### `entry` 159 | 160 | Entry file, default is `src/main.js` or `src/main.ts` 161 | 162 | ## Example 163 | 164 | See the [`example`](https://github.com/asadahimeka/vite-plugin-tm-userscript/tree/master/example) folder 165 | 166 | ## Notice 167 | 168 | ### Vite Configuration Additional Instructions 169 | 170 | Production build mode will force the configuration of `config.build`: 171 | 172 | - Camel case of the `name` (**required**) attribute of the package name `package.json` to build, and the file name to build is also related to it 173 | - The file packaging format is `iife`, no compression, no separation of `css` files 174 | - Additionally configured `rollupOptions` to support other features 175 | 176 | ### Disable CSP(Content-Security-Policy) 177 | 178 | In development mode, the script of `vite` needs to be injected through the `script` tag. Some websites have enabled `CSP(Content-Security-Policy)`, resulting in an error. You can install the `Chrome` plugin [Disable Content-Security-Policy](https://chrome.google.com/webstore/detail/disable-content-security/ieelmcmcagommplceebfedjlakkhpden) or [Always Disable Content-Security-Policy](https://chrome.google.com/webstore/detail/always-disable-content-se/ffelghdomoehpceihalcnbmnodohkibj), to disable `CSP(Content-Security-Policy)`, **open the plug-in during development (remember to close it at other times to ensure the security of web browsing)**. 179 | 180 | Also, you can change Tampermonkey options(open `extension://iikmkjmpaadaobahmlepeloendndfphd/options.html#nav=settings`) at `Security`, set `Modify existing content security policy (CSP) headers` to `Remove entirely (possibly unsecure)`. 181 | 182 | ## Alternatives 183 | 184 | [gorilla](https://github.com/apsking/gorilla) 185 | 186 | [vite-plugin-tampermonkey](https://github.com/Thinker-ljn/vite-plugin-tampermonkey) 187 | 188 | [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 189 | 190 | ## License 191 | 192 | Forked from [vite-plugin-tampermonkey](https://www.npmjs.com/package/vite-plugin-tampermonkey). 193 | 194 | Licensed under the MIT license. 195 | -------------------------------------------------------------------------------- /dist/index.mjs: -------------------------------------------------------------------------------- 1 | var __defProp = Object.defineProperty; 2 | var __defProps = Object.defineProperties; 3 | var __getOwnPropDescs = Object.getOwnPropertyDescriptors; 4 | var __getOwnPropSymbols = Object.getOwnPropertySymbols; 5 | var __hasOwnProp = Object.prototype.hasOwnProperty; 6 | var __propIsEnum = Object.prototype.propertyIsEnumerable; 7 | var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; 8 | var __spreadValues = (a, b) => { 9 | for (var prop in b || (b = {})) 10 | if (__hasOwnProp.call(b, prop)) 11 | __defNormalProp(a, prop, b[prop]); 12 | if (__getOwnPropSymbols) 13 | for (var prop of __getOwnPropSymbols(b)) { 14 | if (__propIsEnum.call(b, prop)) 15 | __defNormalProp(a, prop, b[prop]); 16 | } 17 | return a; 18 | }; 19 | var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); 20 | var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { 21 | get: (a, b) => (typeof require !== "undefined" ? require : a)[b] 22 | }) : x)(function(x) { 23 | if (typeof require !== "undefined") 24 | return require.apply(this, arguments); 25 | throw new Error('Dynamic require of "' + x + '" is not supported'); 26 | }); 27 | 28 | // src/common/constant.ts 29 | var DEV_MODE = "development"; 30 | var PROD_MODE = "production"; 31 | var GM_ADD_STYLE = "GM_addStyle"; 32 | var DEFAULT_NPM_CDN = "https://unpkg.com"; 33 | var INTRO_FOR_PLACEHOLDER = 'console.warn("__TEMPLATE_INJECT_CSS_PLACEHOLDER_NOT_WORK__")'; 34 | var grants = [ 35 | "unsafeWindow", 36 | "GM_addStyle", 37 | "GM_addElement", 38 | "GM_deleteValue", 39 | "GM_listValues", 40 | "GM_addValueChangeListener", 41 | "GM_removeValueChangeListener", 42 | "GM_setValue", 43 | "GM_getValue", 44 | "GM_log", 45 | "GM_getResourceText", 46 | "GM_getResourceURL", 47 | "GM_registerMenuCommand", 48 | "GM_unregisterMenuCommand", 49 | "GM_openInTab", 50 | "GM_xmlhttpRequest", 51 | "GM_download", 52 | "GM_getTab", 53 | "GM_saveTab", 54 | "GM_getTabs", 55 | "GM_notification", 56 | "GM_setClipboard", 57 | "GM_info" 58 | ]; 59 | var tmHeaderKeys = [ 60 | "name", 61 | "name:en", 62 | "name:zh", 63 | "name:zh-cn", 64 | "version", 65 | "description", 66 | "description:en", 67 | "description:zh", 68 | "description:zh-cn", 69 | "author", 70 | "namespace", 71 | "license", 72 | "match", 73 | "include", 74 | "require", 75 | "homepage", 76 | "homepageURL", 77 | "website", 78 | "source", 79 | "icon", 80 | "iconURL", 81 | "defaulticon", 82 | "icon64", 83 | "icon64URL", 84 | "updateURL", 85 | "downloadURL", 86 | "supportURL", 87 | "contributionURL", 88 | "contributionAmount", 89 | "compatible", 90 | "incompatible", 91 | "exclude", 92 | "resource", 93 | "connect", 94 | "run-at", 95 | "grant", 96 | "noframes", 97 | "unwrap", 98 | "nocompat", 99 | "antifeature" 100 | ]; 101 | 102 | // src/lib/client-code.ts 103 | function generateClientCode({ address, port }, entry) { 104 | return ` 105 | const url = 'http://${address}:${port}' 106 | 107 | const originFetch = unsafeWindow.fetch 108 | const ping = '/__vite_ping' 109 | unsafeWindow.fetch = function(input, init) { 110 | if (input === ping) { 111 | input = url + ping 112 | } 113 | return originFetch(input, init) 114 | } 115 | 116 | ${grants.map((item) => `unsafeWindow.${item} = ${item}`).join("\n ")} 117 | 118 | function createModuleScript(path) { 119 | if (typeof GM_addElement == 'function') { 120 | return GM_addElement('script', { 121 | type: 'module', 122 | src: url + '/' + path 123 | }) 124 | } else { 125 | const script = document.createElement('script') 126 | script.type = 'module' 127 | script.src = url + '/' + path 128 | document.body.appendChild(script) 129 | return script 130 | } 131 | } 132 | 133 | createModuleScript('@vite/client') 134 | createModuleScript('${entry != null ? entry : "src/main.ts"}') 135 | `; 136 | } 137 | 138 | // src/common/utils.ts 139 | import fs from "fs"; 140 | import path from "path"; 141 | var root = process.cwd(); 142 | function readJSON(filePath) { 143 | const json = fs.readFileSync(filePath, "utf8"); 144 | return JSON.parse(json); 145 | } 146 | function readPackageJSON() { 147 | const packagePath = path.resolve(root, "package.json"); 148 | return readJSON(packagePath); 149 | } 150 | function buildName(name) { 151 | return name.replace(/(^|-)([A-Za-z])/g, (m) => m.replace("-", "").toUpperCase()); 152 | } 153 | function buildGlobalName(input) { 154 | if (!input) 155 | return input; 156 | if (Array.isArray(input)) { 157 | const result = {}; 158 | for (const name of input) { 159 | result[name] = buildName(name); 160 | } 161 | return result; 162 | } 163 | const globals = {}; 164 | for (const [key, value] of Object.entries(input)) { 165 | if (Array.isArray(value)) { 166 | globals[key] = value[0]; 167 | } else { 168 | globals[key] = value; 169 | } 170 | } 171 | return globals; 172 | } 173 | function buildDefaultCDN(packageName) { 174 | const packagePath = path.resolve(root, `node_modules/${packageName}/package.json`); 175 | if (fs.existsSync(packagePath)) { 176 | const { version = "latest" } = readJSON(packagePath); 177 | return `${DEFAULT_NPM_CDN}/${packageName}@${version}`; 178 | } 179 | return `${DEFAULT_NPM_CDN}/${packageName}`; 180 | } 181 | function buildRequireCDN(input) { 182 | if (!input) 183 | return []; 184 | if (Array.isArray(input)) { 185 | return input.map((name) => buildDefaultCDN(name)).filter(Boolean); 186 | } 187 | const requireCDNs = []; 188 | for (const [key, value] of Object.entries(input)) { 189 | if (Array.isArray(value)) { 190 | value[1] && requireCDNs.push(value[1]); 191 | continue; 192 | } 193 | requireCDNs.push(buildDefaultCDN(key)); 194 | } 195 | return requireCDNs; 196 | } 197 | function defaultEntry() { 198 | const tsconfigFile = path.resolve(root, "vite.config.ts"); 199 | const extension = fs.existsSync(tsconfigFile) ? "ts" : "js"; 200 | return path.resolve(root, `src/main.${extension}`); 201 | } 202 | function getDefinedConfig() { 203 | const jsonPath = path.resolve(root, "header.config.json"); 204 | if (fs.existsSync(jsonPath)) { 205 | return readJSON(jsonPath); 206 | } 207 | const jsPath = path.resolve(root, "header.config.js"); 208 | if (fs.existsSync(jsPath)) { 209 | return __require(jsPath); 210 | } 211 | const txtPath = path.resolve(root, "header.config.txt"); 212 | if (fs.existsSync(txtPath)) { 213 | return fs.readFileSync(txtPath, "utf8"); 214 | } 215 | return readPackageJSON().tmHeader; 216 | } 217 | 218 | // src/lib/grants.ts 219 | import { full as walkFull } from "acorn-walk"; 220 | var grantsSet = new Set(grants); 221 | var usedGrants = /* @__PURE__ */ new Set(); 222 | function parseGrant(autoGrant) { 223 | if (autoGrant === false) 224 | return {}; 225 | return { 226 | name: "tm-userscript-grant", 227 | moduleParsed(moduleInfo) { 228 | if (/\.(ts|js|vue)$/.test(moduleInfo.id) && moduleInfo.ast) { 229 | walkFull(moduleInfo.ast, (node) => { 230 | if (node.type === "CallExpression") { 231 | const calleeName = node.callee.name; 232 | if (calleeName && grantsSet.has(calleeName)) { 233 | usedGrants.add(calleeName); 234 | } 235 | } 236 | if (node.type === "Identifier" && grantsSet.has(node.name)) { 237 | usedGrants.add(node.name); 238 | } 239 | }); 240 | } 241 | } 242 | }; 243 | } 244 | function addUsedGrants(tmConfig, isDevelopment = false) { 245 | if (isDevelopment) { 246 | tmConfig.grant = grants; 247 | return; 248 | } 249 | if (!Array.isArray(tmConfig.grant)) { 250 | tmConfig.grant = [tmConfig.grant].filter(Boolean); 251 | } 252 | tmConfig.grant = [.../* @__PURE__ */ new Set([...tmConfig.grant, ...usedGrants])]; 253 | } 254 | function addExtraTmGrant(tmConfig) { 255 | if (!Array.isArray(tmConfig.grant)) { 256 | tmConfig.grant = [tmConfig.grant].filter(Boolean); 257 | } 258 | if (!tmConfig.grant.includes(GM_ADD_STYLE)) { 259 | tmConfig.grant.push(GM_ADD_STYLE); 260 | } 261 | return tmConfig; 262 | } 263 | 264 | // src/lib/tm-header.ts 265 | function generateTmHeader(mode, input, hasCss, headers) { 266 | var _a, _b, _c; 267 | const definedConfig = (_a = headers != null ? headers : getDefinedConfig()) != null ? _a : {}; 268 | if (typeof definedConfig == "string") 269 | return definedConfig; 270 | const packageJson = readPackageJSON(); 271 | const config = {}; 272 | for (const key of tmHeaderKeys) { 273 | const value = (_b = definedConfig[key]) != null ? _b : packageJson[key]; 274 | if (value) 275 | config[key] = value; 276 | } 277 | config.require = [ 278 | ...Array.isArray(config.require) ? config.require : [(_c = config.require) != null ? _c : ""], 279 | ...buildRequireCDN(input) 280 | ].filter(Boolean); 281 | if (mode === DEV_MODE) { 282 | addUsedGrants(config, true); 283 | config.name = "[ Dev ] - " + config.name; 284 | } else { 285 | hasCss && addExtraTmGrant(config); 286 | addUsedGrants(config); 287 | } 288 | const definedMetaKeys = Object.keys(config); 289 | const maxKeyLength = Math.max(...definedMetaKeys.map((k) => k.length)); 290 | const definedMetaBlock = definedMetaKeys.flatMap((key) => { 291 | const value = config[key]; 292 | const spaces = Array.from({ length: maxKeyLength - key.length + 8 }).join(" "); 293 | const dealMeta = (v) => { 294 | if (Array.isArray(v)) 295 | return v.map((element) => dealMeta(element)); 296 | if (typeof v == "boolean" && v === true) 297 | return `// @${key}`; 298 | return `// @${key}${spaces}${v}`; 299 | }; 300 | return dealMeta(value); 301 | }); 302 | return [ 303 | "// ==UserScript==", 304 | ...definedMetaBlock, 305 | "// ==/UserScript==" 306 | ].join("\n"); 307 | } 308 | 309 | // src/lib/build-options.ts 310 | var getRollupOptions = (input) => { 311 | const external = Array.isArray(input) ? input : Object.keys(input != null ? input : {}); 312 | const globals = buildGlobalName(input); 313 | return { 314 | external, 315 | output: { 316 | globals, 317 | intro: INTRO_FOR_PLACEHOLDER, 318 | inlineDynamicImports: true 319 | } 320 | }; 321 | }; 322 | var getLibraryOptions = (entry) => { 323 | const { name: packageName } = readPackageJSON(); 324 | if (!packageName) { 325 | const error = "props `name` in package.json is required!"; 326 | console.error(error); 327 | throw new Error(error); 328 | } 329 | const name = buildName(packageName); 330 | return { 331 | name, 332 | entry: entry != null ? entry : defaultEntry(), 333 | formats: ["iife"], 334 | fileName: () => `${packageName}.user.js` 335 | }; 336 | }; 337 | 338 | // src/lib/plugin.ts 339 | function generateDevelopmentCode(address, input, entry, headers) { 340 | if (!address) 341 | return "\u5904\u7406\u5927\u5931\u8D25\u4E86\u55F7..."; 342 | const tmHeader = generateTmHeader(DEV_MODE, input, true, headers); 343 | const code = generateClientCode(address, entry); 344 | return `${tmHeader} 345 | 346 | (function () { 347 | ${code} 348 | })()`; 349 | } 350 | function getAddress(address) { 351 | return typeof address == "object" ? address : void 0; 352 | } 353 | var DEV_TAMPERMONKEY_PATH = "/_development.user.js"; 354 | var showInstallLog = (address) => { 355 | const url = `http://${address.address}:${address.port}${DEV_TAMPERMONKEY_PATH}`; 356 | setTimeout(() => { 357 | console.log("\x1B[36m%s\x1B[0m", `> [TMPlugin] - click link to install userscript: ${url}`); 358 | }); 359 | }; 360 | function tampermonkeyPlugin(options = {}) { 361 | const { entry, externalGlobals, autoGrant, headers } = options; 362 | const { moduleParsed } = parseGrant(autoGrant); 363 | return [ 364 | { 365 | name: "tm-userscript-builder", 366 | moduleParsed, 367 | configureServer(server) { 368 | return () => { 369 | var _a; 370 | (_a = server.httpServer) == null ? void 0 : _a.on("listening", () => { 371 | var _a2; 372 | const address = getAddress((_a2 = server.httpServer) == null ? void 0 : _a2.address()); 373 | address && showInstallLog(address); 374 | }); 375 | server.middlewares.use((request, response, next) => { 376 | var _a2; 377 | if (request.url === DEV_TAMPERMONKEY_PATH) { 378 | const address = getAddress((_a2 = server.httpServer) == null ? void 0 : _a2.address()); 379 | const developmentCode = generateDevelopmentCode(address, externalGlobals, entry, headers); 380 | response.setHeader("Cache-Control", "no-store"); 381 | response.write(developmentCode); 382 | } 383 | next(); 384 | }); 385 | }; 386 | }, 387 | config(config) { 388 | var _a; 389 | let hmr = (_a = config.server) == null ? void 0 : _a.hmr; 390 | if (typeof hmr === "boolean" || !hmr) 391 | hmr = {}; 392 | hmr.protocol = "ws"; 393 | hmr.host = "127.0.0.1"; 394 | config.server = __spreadProps(__spreadValues({}, config.server), { 395 | hmr 396 | }); 397 | config.build = { 398 | lib: getLibraryOptions(entry), 399 | rollupOptions: getRollupOptions(externalGlobals), 400 | minify: false, 401 | sourcemap: false, 402 | cssCodeSplit: false 403 | }; 404 | } 405 | }, 406 | { 407 | name: "tm-userscript-inject", 408 | apply: "build", 409 | enforce: "post", 410 | generateBundle(_options, bundle) { 411 | const bundleKeys = Object.keys(bundle); 412 | const cssBundles = bundleKeys.filter((key) => key.endsWith(".css")); 413 | const jsBundles = bundleKeys.filter((key) => key.endsWith(".js")); 414 | const cssList = []; 415 | for (const css of cssBundles) { 416 | const chunk = bundle[css]; 417 | if (chunk.type === "asset" && typeof chunk.source == "string") { 418 | delete bundle[css]; 419 | cssList.push(chunk.source); 420 | continue; 421 | } 422 | } 423 | const hadCss = cssList.length > 0; 424 | const tmHeader = generateTmHeader(PROD_MODE, externalGlobals, hadCss, headers); 425 | for (const js of jsBundles) { 426 | const chunk = bundle[js]; 427 | if (chunk.type === "chunk") { 428 | let chunkCode = chunk.code; 429 | for (const [moduleKey, moduleValue] of Object.entries(chunk.modules)) { 430 | if (/\.(c|le|sc)ss$/.test(moduleKey) && moduleValue.code) { 431 | const cssCode = moduleValue.code.replaceAll("'", '"').replaceAll("#__PURE__", "@__PURE__"); 432 | chunkCode = chunkCode.replace(cssCode, ""); 433 | } 434 | } 435 | chunk.code = tmHeader + "\n\n" + chunkCode.replace(INTRO_FOR_PLACEHOLDER, hadCss ? `${GM_ADD_STYLE}(\` 436 | ${cssList.join("\n")} \`)` : ""); 437 | } 438 | } 439 | } 440 | } 441 | ]; 442 | } 443 | 444 | // src/index.ts 445 | function defineTmHeader(options) { 446 | return options; 447 | } 448 | export { 449 | tampermonkeyPlugin as default, 450 | defineTmHeader 451 | }; 452 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | var __create = Object.create; 2 | var __defProp = Object.defineProperty; 3 | var __defProps = Object.defineProperties; 4 | var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 5 | var __getOwnPropDescs = Object.getOwnPropertyDescriptors; 6 | var __getOwnPropNames = Object.getOwnPropertyNames; 7 | var __getOwnPropSymbols = Object.getOwnPropertySymbols; 8 | var __getProtoOf = Object.getPrototypeOf; 9 | var __hasOwnProp = Object.prototype.hasOwnProperty; 10 | var __propIsEnum = Object.prototype.propertyIsEnumerable; 11 | var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; 12 | var __spreadValues = (a, b) => { 13 | for (var prop in b || (b = {})) 14 | if (__hasOwnProp.call(b, prop)) 15 | __defNormalProp(a, prop, b[prop]); 16 | if (__getOwnPropSymbols) 17 | for (var prop of __getOwnPropSymbols(b)) { 18 | if (__propIsEnum.call(b, prop)) 19 | __defNormalProp(a, prop, b[prop]); 20 | } 21 | return a; 22 | }; 23 | var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); 24 | var __export = (target, all) => { 25 | for (var name in all) 26 | __defProp(target, name, { get: all[name], enumerable: true }); 27 | }; 28 | var __copyProps = (to, from, except, desc) => { 29 | if (from && typeof from === "object" || typeof from === "function") { 30 | for (let key of __getOwnPropNames(from)) 31 | if (!__hasOwnProp.call(to, key) && key !== except) 32 | __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 33 | } 34 | return to; 35 | }; 36 | var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); 37 | var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 38 | 39 | // src/index.ts 40 | var src_exports = {}; 41 | __export(src_exports, { 42 | default: () => tampermonkeyPlugin, 43 | defineTmHeader: () => defineTmHeader 44 | }); 45 | module.exports = __toCommonJS(src_exports); 46 | 47 | // src/common/constant.ts 48 | var DEV_MODE = "development"; 49 | var PROD_MODE = "production"; 50 | var GM_ADD_STYLE = "GM_addStyle"; 51 | var DEFAULT_NPM_CDN = "https://unpkg.com"; 52 | var INTRO_FOR_PLACEHOLDER = 'console.warn("__TEMPLATE_INJECT_CSS_PLACEHOLDER_NOT_WORK__")'; 53 | var grants = [ 54 | "unsafeWindow", 55 | "GM_addStyle", 56 | "GM_addElement", 57 | "GM_deleteValue", 58 | "GM_listValues", 59 | "GM_addValueChangeListener", 60 | "GM_removeValueChangeListener", 61 | "GM_setValue", 62 | "GM_getValue", 63 | "GM_log", 64 | "GM_getResourceText", 65 | "GM_getResourceURL", 66 | "GM_registerMenuCommand", 67 | "GM_unregisterMenuCommand", 68 | "GM_openInTab", 69 | "GM_xmlhttpRequest", 70 | "GM_download", 71 | "GM_getTab", 72 | "GM_saveTab", 73 | "GM_getTabs", 74 | "GM_notification", 75 | "GM_setClipboard", 76 | "GM_info" 77 | ]; 78 | var tmHeaderKeys = [ 79 | "name", 80 | "name:en", 81 | "name:zh", 82 | "name:zh-cn", 83 | "version", 84 | "description", 85 | "description:en", 86 | "description:zh", 87 | "description:zh-cn", 88 | "author", 89 | "namespace", 90 | "license", 91 | "match", 92 | "include", 93 | "require", 94 | "homepage", 95 | "homepageURL", 96 | "website", 97 | "source", 98 | "icon", 99 | "iconURL", 100 | "defaulticon", 101 | "icon64", 102 | "icon64URL", 103 | "updateURL", 104 | "downloadURL", 105 | "supportURL", 106 | "contributionURL", 107 | "contributionAmount", 108 | "compatible", 109 | "incompatible", 110 | "exclude", 111 | "resource", 112 | "connect", 113 | "run-at", 114 | "grant", 115 | "noframes", 116 | "unwrap", 117 | "nocompat", 118 | "antifeature" 119 | ]; 120 | 121 | // src/lib/client-code.ts 122 | function generateClientCode({ address, port }, entry) { 123 | return ` 124 | const url = 'http://${address}:${port}' 125 | 126 | const originFetch = unsafeWindow.fetch 127 | const ping = '/__vite_ping' 128 | unsafeWindow.fetch = function(input, init) { 129 | if (input === ping) { 130 | input = url + ping 131 | } 132 | return originFetch(input, init) 133 | } 134 | 135 | ${grants.map((item) => `unsafeWindow.${item} = ${item}`).join("\n ")} 136 | 137 | function createModuleScript(path) { 138 | if (typeof GM_addElement == 'function') { 139 | return GM_addElement('script', { 140 | type: 'module', 141 | src: url + '/' + path 142 | }) 143 | } else { 144 | const script = document.createElement('script') 145 | script.type = 'module' 146 | script.src = url + '/' + path 147 | document.body.appendChild(script) 148 | return script 149 | } 150 | } 151 | 152 | createModuleScript('@vite/client') 153 | createModuleScript('${entry != null ? entry : "src/main.ts"}') 154 | `; 155 | } 156 | 157 | // src/common/utils.ts 158 | var import_node_fs = __toESM(require("fs")); 159 | var import_node_path = __toESM(require("path")); 160 | var root = process.cwd(); 161 | function readJSON(filePath) { 162 | const json = import_node_fs.default.readFileSync(filePath, "utf8"); 163 | return JSON.parse(json); 164 | } 165 | function readPackageJSON() { 166 | const packagePath = import_node_path.default.resolve(root, "package.json"); 167 | return readJSON(packagePath); 168 | } 169 | function buildName(name) { 170 | return name.replace(/(^|-)([A-Za-z])/g, (m) => m.replace("-", "").toUpperCase()); 171 | } 172 | function buildGlobalName(input) { 173 | if (!input) 174 | return input; 175 | if (Array.isArray(input)) { 176 | const result = {}; 177 | for (const name of input) { 178 | result[name] = buildName(name); 179 | } 180 | return result; 181 | } 182 | const globals = {}; 183 | for (const [key, value] of Object.entries(input)) { 184 | if (Array.isArray(value)) { 185 | globals[key] = value[0]; 186 | } else { 187 | globals[key] = value; 188 | } 189 | } 190 | return globals; 191 | } 192 | function buildDefaultCDN(packageName) { 193 | const packagePath = import_node_path.default.resolve(root, `node_modules/${packageName}/package.json`); 194 | if (import_node_fs.default.existsSync(packagePath)) { 195 | const { version = "latest" } = readJSON(packagePath); 196 | return `${DEFAULT_NPM_CDN}/${packageName}@${version}`; 197 | } 198 | return `${DEFAULT_NPM_CDN}/${packageName}`; 199 | } 200 | function buildRequireCDN(input) { 201 | if (!input) 202 | return []; 203 | if (Array.isArray(input)) { 204 | return input.map((name) => buildDefaultCDN(name)).filter(Boolean); 205 | } 206 | const requireCDNs = []; 207 | for (const [key, value] of Object.entries(input)) { 208 | if (Array.isArray(value)) { 209 | value[1] && requireCDNs.push(value[1]); 210 | continue; 211 | } 212 | requireCDNs.push(buildDefaultCDN(key)); 213 | } 214 | return requireCDNs; 215 | } 216 | function defaultEntry() { 217 | const tsconfigFile = import_node_path.default.resolve(root, "vite.config.ts"); 218 | const extension = import_node_fs.default.existsSync(tsconfigFile) ? "ts" : "js"; 219 | return import_node_path.default.resolve(root, `src/main.${extension}`); 220 | } 221 | function getDefinedConfig() { 222 | const jsonPath = import_node_path.default.resolve(root, "header.config.json"); 223 | if (import_node_fs.default.existsSync(jsonPath)) { 224 | return readJSON(jsonPath); 225 | } 226 | const jsPath = import_node_path.default.resolve(root, "header.config.js"); 227 | if (import_node_fs.default.existsSync(jsPath)) { 228 | return require(jsPath); 229 | } 230 | const txtPath = import_node_path.default.resolve(root, "header.config.txt"); 231 | if (import_node_fs.default.existsSync(txtPath)) { 232 | return import_node_fs.default.readFileSync(txtPath, "utf8"); 233 | } 234 | return readPackageJSON().tmHeader; 235 | } 236 | 237 | // src/lib/grants.ts 238 | var import_acorn_walk = require("acorn-walk"); 239 | var grantsSet = new Set(grants); 240 | var usedGrants = /* @__PURE__ */ new Set(); 241 | function parseGrant(autoGrant) { 242 | if (autoGrant === false) 243 | return {}; 244 | return { 245 | name: "tm-userscript-grant", 246 | moduleParsed(moduleInfo) { 247 | if (/\.(ts|js|vue)$/.test(moduleInfo.id) && moduleInfo.ast) { 248 | (0, import_acorn_walk.full)(moduleInfo.ast, (node) => { 249 | if (node.type === "CallExpression") { 250 | const calleeName = node.callee.name; 251 | if (calleeName && grantsSet.has(calleeName)) { 252 | usedGrants.add(calleeName); 253 | } 254 | } 255 | if (node.type === "Identifier" && grantsSet.has(node.name)) { 256 | usedGrants.add(node.name); 257 | } 258 | }); 259 | } 260 | } 261 | }; 262 | } 263 | function addUsedGrants(tmConfig, isDevelopment = false) { 264 | if (isDevelopment) { 265 | tmConfig.grant = grants; 266 | return; 267 | } 268 | if (!Array.isArray(tmConfig.grant)) { 269 | tmConfig.grant = [tmConfig.grant].filter(Boolean); 270 | } 271 | tmConfig.grant = [.../* @__PURE__ */ new Set([...tmConfig.grant, ...usedGrants])]; 272 | } 273 | function addExtraTmGrant(tmConfig) { 274 | if (!Array.isArray(tmConfig.grant)) { 275 | tmConfig.grant = [tmConfig.grant].filter(Boolean); 276 | } 277 | if (!tmConfig.grant.includes(GM_ADD_STYLE)) { 278 | tmConfig.grant.push(GM_ADD_STYLE); 279 | } 280 | return tmConfig; 281 | } 282 | 283 | // src/lib/tm-header.ts 284 | function generateTmHeader(mode, input, hasCss, headers) { 285 | var _a, _b, _c; 286 | const definedConfig = (_a = headers != null ? headers : getDefinedConfig()) != null ? _a : {}; 287 | if (typeof definedConfig == "string") 288 | return definedConfig; 289 | const packageJson = readPackageJSON(); 290 | const config = {}; 291 | for (const key of tmHeaderKeys) { 292 | const value = (_b = definedConfig[key]) != null ? _b : packageJson[key]; 293 | if (value) 294 | config[key] = value; 295 | } 296 | config.require = [ 297 | ...Array.isArray(config.require) ? config.require : [(_c = config.require) != null ? _c : ""], 298 | ...buildRequireCDN(input) 299 | ].filter(Boolean); 300 | if (mode === DEV_MODE) { 301 | addUsedGrants(config, true); 302 | config.name = "[ Dev ] - " + config.name; 303 | } else { 304 | hasCss && addExtraTmGrant(config); 305 | addUsedGrants(config); 306 | } 307 | const definedMetaKeys = Object.keys(config); 308 | const maxKeyLength = Math.max(...definedMetaKeys.map((k) => k.length)); 309 | const definedMetaBlock = definedMetaKeys.flatMap((key) => { 310 | const value = config[key]; 311 | const spaces = Array.from({ length: maxKeyLength - key.length + 8 }).join(" "); 312 | const dealMeta = (v) => { 313 | if (Array.isArray(v)) 314 | return v.map((element) => dealMeta(element)); 315 | if (typeof v == "boolean" && v === true) 316 | return `// @${key}`; 317 | return `// @${key}${spaces}${v}`; 318 | }; 319 | return dealMeta(value); 320 | }); 321 | return [ 322 | "// ==UserScript==", 323 | ...definedMetaBlock, 324 | "// ==/UserScript==" 325 | ].join("\n"); 326 | } 327 | 328 | // src/lib/build-options.ts 329 | var getRollupOptions = (input) => { 330 | const external = Array.isArray(input) ? input : Object.keys(input != null ? input : {}); 331 | const globals = buildGlobalName(input); 332 | return { 333 | external, 334 | output: { 335 | globals, 336 | intro: INTRO_FOR_PLACEHOLDER, 337 | inlineDynamicImports: true 338 | } 339 | }; 340 | }; 341 | var getLibraryOptions = (entry) => { 342 | const { name: packageName } = readPackageJSON(); 343 | if (!packageName) { 344 | const error = "props `name` in package.json is required!"; 345 | console.error(error); 346 | throw new Error(error); 347 | } 348 | const name = buildName(packageName); 349 | return { 350 | name, 351 | entry: entry != null ? entry : defaultEntry(), 352 | formats: ["iife"], 353 | fileName: () => `${packageName}.user.js` 354 | }; 355 | }; 356 | 357 | // src/lib/plugin.ts 358 | function generateDevelopmentCode(address, input, entry, headers) { 359 | if (!address) 360 | return "\u5904\u7406\u5927\u5931\u8D25\u4E86\u55F7..."; 361 | const tmHeader = generateTmHeader(DEV_MODE, input, true, headers); 362 | const code = generateClientCode(address, entry); 363 | return `${tmHeader} 364 | 365 | (function () { 366 | ${code} 367 | })()`; 368 | } 369 | function getAddress(address) { 370 | return typeof address == "object" ? address : void 0; 371 | } 372 | var DEV_TAMPERMONKEY_PATH = "/_development.user.js"; 373 | var showInstallLog = (address) => { 374 | const url = `http://${address.address}:${address.port}${DEV_TAMPERMONKEY_PATH}`; 375 | setTimeout(() => { 376 | console.log("\x1B[36m%s\x1B[0m", `> [TMPlugin] - click link to install userscript: ${url}`); 377 | }); 378 | }; 379 | function tampermonkeyPlugin(options = {}) { 380 | const { entry, externalGlobals, autoGrant, headers } = options; 381 | const { moduleParsed } = parseGrant(autoGrant); 382 | return [ 383 | { 384 | name: "tm-userscript-builder", 385 | moduleParsed, 386 | configureServer(server) { 387 | return () => { 388 | var _a; 389 | (_a = server.httpServer) == null ? void 0 : _a.on("listening", () => { 390 | var _a2; 391 | const address = getAddress((_a2 = server.httpServer) == null ? void 0 : _a2.address()); 392 | address && showInstallLog(address); 393 | }); 394 | server.middlewares.use((request, response, next) => { 395 | var _a2; 396 | if (request.url === DEV_TAMPERMONKEY_PATH) { 397 | const address = getAddress((_a2 = server.httpServer) == null ? void 0 : _a2.address()); 398 | const developmentCode = generateDevelopmentCode(address, externalGlobals, entry, headers); 399 | response.setHeader("Cache-Control", "no-store"); 400 | response.write(developmentCode); 401 | } 402 | next(); 403 | }); 404 | }; 405 | }, 406 | config(config) { 407 | var _a; 408 | let hmr = (_a = config.server) == null ? void 0 : _a.hmr; 409 | if (typeof hmr === "boolean" || !hmr) 410 | hmr = {}; 411 | hmr.protocol = "ws"; 412 | hmr.host = "127.0.0.1"; 413 | config.server = __spreadProps(__spreadValues({}, config.server), { 414 | hmr 415 | }); 416 | config.build = { 417 | lib: getLibraryOptions(entry), 418 | rollupOptions: getRollupOptions(externalGlobals), 419 | minify: false, 420 | sourcemap: false, 421 | cssCodeSplit: false 422 | }; 423 | } 424 | }, 425 | { 426 | name: "tm-userscript-inject", 427 | apply: "build", 428 | enforce: "post", 429 | generateBundle(_options, bundle) { 430 | const bundleKeys = Object.keys(bundle); 431 | const cssBundles = bundleKeys.filter((key) => key.endsWith(".css")); 432 | const jsBundles = bundleKeys.filter((key) => key.endsWith(".js")); 433 | const cssList = []; 434 | for (const css of cssBundles) { 435 | const chunk = bundle[css]; 436 | if (chunk.type === "asset" && typeof chunk.source == "string") { 437 | delete bundle[css]; 438 | cssList.push(chunk.source); 439 | continue; 440 | } 441 | } 442 | const hadCss = cssList.length > 0; 443 | const tmHeader = generateTmHeader(PROD_MODE, externalGlobals, hadCss, headers); 444 | for (const js of jsBundles) { 445 | const chunk = bundle[js]; 446 | if (chunk.type === "chunk") { 447 | let chunkCode = chunk.code; 448 | for (const [moduleKey, moduleValue] of Object.entries(chunk.modules)) { 449 | if (/\.(c|le|sc)ss$/.test(moduleKey) && moduleValue.code) { 450 | const cssCode = moduleValue.code.replaceAll("'", '"').replaceAll("#__PURE__", "@__PURE__"); 451 | chunkCode = chunkCode.replace(cssCode, ""); 452 | } 453 | } 454 | chunk.code = tmHeader + "\n\n" + chunkCode.replace(INTRO_FOR_PLACEHOLDER, hadCss ? `${GM_ADD_STYLE}(\` 455 | ${cssList.join("\n")} \`)` : ""); 456 | } 457 | } 458 | } 459 | } 460 | ]; 461 | } 462 | 463 | // src/index.ts 464 | function defineTmHeader(options) { 465 | return options; 466 | } 467 | // Annotate the CommonJS export names for ESM import in node: 468 | 0 && (module.exports = { 469 | defineTmHeader 470 | }); 471 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/jquery@^3.5.14": 6 | version "3.5.14" 7 | resolved "https://registry.npmmirror.com/@types/jquery/-/jquery-3.5.14.tgz#ac8e11ee591e94d4d58da602cb3a5a8320dee577" 8 | integrity sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg== 9 | dependencies: 10 | "@types/sizzle" "*" 11 | 12 | "@types/sizzle@*": 13 | version "2.3.3" 14 | resolved "https://registry.npmmirror.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" 15 | integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== 16 | 17 | "@types/tampermonkey@^4.0.5": 18 | version "4.0.5" 19 | resolved "https://registry.npmmirror.com/@types/tampermonkey/-/tampermonkey-4.0.5.tgz" 20 | integrity sha512-FGPo7d+qZkDF7vyrwY1WNhcUnfDyVpt2uyL7krAu3WKCUMCfIUzOuvt8aSk8N2axHT8XPr9stAEDGVHLvag6Pw== 21 | 22 | copy-anything@^2.0.1: 23 | version "2.0.6" 24 | resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" 25 | integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== 26 | dependencies: 27 | is-what "^3.14.1" 28 | 29 | debug@^3.2.6: 30 | version "3.2.7" 31 | resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 32 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 33 | dependencies: 34 | ms "^2.1.1" 35 | 36 | errno@^0.1.1: 37 | version "0.1.8" 38 | resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" 39 | integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== 40 | dependencies: 41 | prr "~1.0.1" 42 | 43 | esbuild-android-64@0.14.51: 44 | version "0.14.51" 45 | resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" 46 | integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== 47 | 48 | esbuild-android-arm64@0.14.51: 49 | version "0.14.51" 50 | resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" 51 | integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== 52 | 53 | esbuild-darwin-64@0.14.51: 54 | version "0.14.51" 55 | resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" 56 | integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== 57 | 58 | esbuild-darwin-arm64@0.14.51: 59 | version "0.14.51" 60 | resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" 61 | integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== 62 | 63 | esbuild-freebsd-64@0.14.51: 64 | version "0.14.51" 65 | resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" 66 | integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== 67 | 68 | esbuild-freebsd-arm64@0.14.51: 69 | version "0.14.51" 70 | resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" 71 | integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== 72 | 73 | esbuild-linux-32@0.14.51: 74 | version "0.14.51" 75 | resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" 76 | integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== 77 | 78 | esbuild-linux-64@0.14.51: 79 | version "0.14.51" 80 | resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" 81 | integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== 82 | 83 | esbuild-linux-arm64@0.14.51: 84 | version "0.14.51" 85 | resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" 86 | integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== 87 | 88 | esbuild-linux-arm@0.14.51: 89 | version "0.14.51" 90 | resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" 91 | integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== 92 | 93 | esbuild-linux-mips64le@0.14.51: 94 | version "0.14.51" 95 | resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" 96 | integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== 97 | 98 | esbuild-linux-ppc64le@0.14.51: 99 | version "0.14.51" 100 | resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" 101 | integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== 102 | 103 | esbuild-linux-riscv64@0.14.51: 104 | version "0.14.51" 105 | resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" 106 | integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== 107 | 108 | esbuild-linux-s390x@0.14.51: 109 | version "0.14.51" 110 | resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" 111 | integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== 112 | 113 | esbuild-netbsd-64@0.14.51: 114 | version "0.14.51" 115 | resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" 116 | integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== 117 | 118 | esbuild-openbsd-64@0.14.51: 119 | version "0.14.51" 120 | resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" 121 | integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== 122 | 123 | esbuild-sunos-64@0.14.51: 124 | version "0.14.51" 125 | resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" 126 | integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== 127 | 128 | esbuild-windows-32@0.14.51: 129 | version "0.14.51" 130 | resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" 131 | integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== 132 | 133 | esbuild-windows-64@0.14.51: 134 | version "0.14.51" 135 | resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" 136 | integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== 137 | 138 | esbuild-windows-arm64@0.14.51: 139 | version "0.14.51" 140 | resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" 141 | integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== 142 | 143 | esbuild@^0.14.47: 144 | version "0.14.51" 145 | resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" 146 | integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== 147 | optionalDependencies: 148 | esbuild-android-64 "0.14.51" 149 | esbuild-android-arm64 "0.14.51" 150 | esbuild-darwin-64 "0.14.51" 151 | esbuild-darwin-arm64 "0.14.51" 152 | esbuild-freebsd-64 "0.14.51" 153 | esbuild-freebsd-arm64 "0.14.51" 154 | esbuild-linux-32 "0.14.51" 155 | esbuild-linux-64 "0.14.51" 156 | esbuild-linux-arm "0.14.51" 157 | esbuild-linux-arm64 "0.14.51" 158 | esbuild-linux-mips64le "0.14.51" 159 | esbuild-linux-ppc64le "0.14.51" 160 | esbuild-linux-riscv64 "0.14.51" 161 | esbuild-linux-s390x "0.14.51" 162 | esbuild-netbsd-64 "0.14.51" 163 | esbuild-openbsd-64 "0.14.51" 164 | esbuild-sunos-64 "0.14.51" 165 | esbuild-windows-32 "0.14.51" 166 | esbuild-windows-64 "0.14.51" 167 | esbuild-windows-arm64 "0.14.51" 168 | 169 | fsevents@~2.3.2: 170 | version "2.3.2" 171 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 172 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 173 | 174 | function-bind@^1.1.1: 175 | version "1.1.1" 176 | resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz" 177 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 178 | 179 | graceful-fs@^4.1.2: 180 | version "4.2.10" 181 | resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 182 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 183 | 184 | has@^1.0.3: 185 | version "1.0.3" 186 | resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz" 187 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 188 | dependencies: 189 | function-bind "^1.1.1" 190 | 191 | iconv-lite@^0.4.4: 192 | version "0.4.24" 193 | resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 194 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 195 | dependencies: 196 | safer-buffer ">= 2.1.2 < 3" 197 | 198 | image-size@~0.5.0: 199 | version "0.5.5" 200 | resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" 201 | integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== 202 | 203 | is-core-module@^2.9.0: 204 | version "2.9.0" 205 | resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 206 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 207 | dependencies: 208 | has "^1.0.3" 209 | 210 | is-what@^3.14.1: 211 | version "3.14.1" 212 | resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" 213 | integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== 214 | 215 | jquery@^3.6.0: 216 | version "3.6.0" 217 | resolved "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz" 218 | integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== 219 | 220 | less@^4.1.2: 221 | version "4.1.2" 222 | resolved "https://registry.npmmirror.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0" 223 | integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA== 224 | dependencies: 225 | copy-anything "^2.0.1" 226 | parse-node-version "^1.0.1" 227 | tslib "^2.3.0" 228 | optionalDependencies: 229 | errno "^0.1.1" 230 | graceful-fs "^4.1.2" 231 | image-size "~0.5.0" 232 | make-dir "^2.1.0" 233 | mime "^1.4.1" 234 | needle "^2.5.2" 235 | source-map "~0.6.0" 236 | 237 | make-dir@^2.1.0: 238 | version "2.1.0" 239 | resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 240 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 241 | dependencies: 242 | pify "^4.0.1" 243 | semver "^5.6.0" 244 | 245 | mime@^1.4.1: 246 | version "1.6.0" 247 | resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 248 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 249 | 250 | ms@^2.1.1: 251 | version "2.1.3" 252 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 253 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 254 | 255 | nanoid@^3.3.4: 256 | version "3.3.4" 257 | resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 258 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 259 | 260 | needle@^2.5.2: 261 | version "2.9.1" 262 | resolved "https://registry.npmmirror.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" 263 | integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== 264 | dependencies: 265 | debug "^3.2.6" 266 | iconv-lite "^0.4.4" 267 | sax "^1.2.4" 268 | 269 | parse-node-version@^1.0.1: 270 | version "1.0.1" 271 | resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" 272 | integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== 273 | 274 | path-parse@^1.0.7: 275 | version "1.0.7" 276 | resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz" 277 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 278 | 279 | picocolors@^1.0.0: 280 | version "1.0.0" 281 | resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" 282 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 283 | 284 | pify@^4.0.1: 285 | version "4.0.1" 286 | resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 287 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 288 | 289 | postcss@^8.4.14: 290 | version "8.4.14" 291 | resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" 292 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 293 | dependencies: 294 | nanoid "^3.3.4" 295 | picocolors "^1.0.0" 296 | source-map-js "^1.0.2" 297 | 298 | prr@~1.0.1: 299 | version "1.0.1" 300 | resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" 301 | integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== 302 | 303 | resolve@^1.22.1: 304 | version "1.22.1" 305 | resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 306 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 307 | dependencies: 308 | is-core-module "^2.9.0" 309 | path-parse "^1.0.7" 310 | supports-preserve-symlinks-flag "^1.0.0" 311 | 312 | rollup@^2.75.6: 313 | version "2.77.2" 314 | resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" 315 | integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== 316 | optionalDependencies: 317 | fsevents "~2.3.2" 318 | 319 | "safer-buffer@>= 2.1.2 < 3": 320 | version "2.1.2" 321 | resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 322 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 323 | 324 | sax@^1.2.4: 325 | version "1.2.4" 326 | resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 327 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 328 | 329 | semver@^5.6.0: 330 | version "5.7.1" 331 | resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 332 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 333 | 334 | source-map-js@^1.0.2: 335 | version "1.0.2" 336 | resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" 337 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 338 | 339 | source-map@~0.6.0: 340 | version "0.6.1" 341 | resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 342 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 343 | 344 | supports-preserve-symlinks-flag@^1.0.0: 345 | version "1.0.0" 346 | resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 347 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 348 | 349 | tslib@^2.3.0: 350 | version "2.4.0" 351 | resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 352 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 353 | 354 | typescript@^4.6.3: 355 | version "4.6.3" 356 | resolved "https://registry.npmmirror.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" 357 | integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== 358 | 359 | vite@^3.0.4: 360 | version "3.0.4" 361 | resolved "https://registry.npmmirror.com/vite/-/vite-3.0.4.tgz#c61688d6b97573e96cf5ac25f2d68597b5ce68e8" 362 | integrity sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA== 363 | dependencies: 364 | esbuild "^0.14.47" 365 | postcss "^8.4.14" 366 | resolve "^1.22.1" 367 | rollup "^2.75.6" 368 | optionalDependencies: 369 | fsevents "~2.3.2" 370 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.16.7" 7 | resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 8 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 9 | dependencies: 10 | "@babel/highlight" "^7.16.7" 11 | 12 | "@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.16.7": 18 | version "7.17.9" 19 | resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" 20 | integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^1.2.1": 27 | version "1.2.1" 28 | resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" 29 | integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.3.2" 33 | espree "^9.3.1" 34 | globals "^13.9.0" 35 | ignore "^5.2.0" 36 | import-fresh "^3.2.1" 37 | js-yaml "^4.1.0" 38 | minimatch "^3.0.4" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@humanwhocodes/config-array@^0.9.2": 42 | version "0.9.5" 43 | resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 44 | integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 45 | dependencies: 46 | "@humanwhocodes/object-schema" "^1.2.1" 47 | debug "^4.1.1" 48 | minimatch "^3.0.4" 49 | 50 | "@humanwhocodes/object-schema@^1.2.1": 51 | version "1.2.1" 52 | resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 53 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 54 | 55 | "@nodelib/fs.scandir@2.1.5": 56 | version "2.1.5" 57 | resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 58 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 59 | dependencies: 60 | "@nodelib/fs.stat" "2.0.5" 61 | run-parallel "^1.1.9" 62 | 63 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 64 | version "2.0.5" 65 | resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 66 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 67 | 68 | "@nodelib/fs.walk@^1.2.3": 69 | version "1.2.8" 70 | resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 71 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 72 | dependencies: 73 | "@nodelib/fs.scandir" "2.1.5" 74 | fastq "^1.6.0" 75 | 76 | "@types/json-schema@^7.0.9": 77 | version "7.0.11" 78 | resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 79 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 80 | 81 | "@types/node@^16.11.7": 82 | version "16.11.27" 83 | resolved "https://registry.npmmirror.com/@types/node/-/node-16.11.27.tgz#5da19383bdbeda99bc0d09cfbb88cab7297ebc51" 84 | integrity sha512-C1pD3kgLoZ56Uuy5lhfOxie4aZlA3UMGLX9rXteq4WitEZH6Rl80mwactt9QG0w0gLFlN/kLBTFnGXtDVWvWQw== 85 | 86 | "@types/normalize-package-data@^2.4.0": 87 | version "2.4.1" 88 | resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" 89 | integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== 90 | 91 | "@typescript-eslint/eslint-plugin@^5.20.0": 92 | version "5.20.0" 93 | resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz#022531a639640ff3faafaf251d1ce00a2ef000a1" 94 | integrity sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q== 95 | dependencies: 96 | "@typescript-eslint/scope-manager" "5.20.0" 97 | "@typescript-eslint/type-utils" "5.20.0" 98 | "@typescript-eslint/utils" "5.20.0" 99 | debug "^4.3.2" 100 | functional-red-black-tree "^1.0.1" 101 | ignore "^5.1.8" 102 | regexpp "^3.2.0" 103 | semver "^7.3.5" 104 | tsutils "^3.21.0" 105 | 106 | "@typescript-eslint/parser@^5.20.0": 107 | version "5.20.0" 108 | resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.20.0.tgz#4991c4ee0344315c2afc2a62f156565f689c8d0b" 109 | integrity sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w== 110 | dependencies: 111 | "@typescript-eslint/scope-manager" "5.20.0" 112 | "@typescript-eslint/types" "5.20.0" 113 | "@typescript-eslint/typescript-estree" "5.20.0" 114 | debug "^4.3.2" 115 | 116 | "@typescript-eslint/scope-manager@5.20.0": 117 | version "5.20.0" 118 | resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz#79c7fb8598d2942e45b3c881ced95319818c7980" 119 | integrity sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg== 120 | dependencies: 121 | "@typescript-eslint/types" "5.20.0" 122 | "@typescript-eslint/visitor-keys" "5.20.0" 123 | 124 | "@typescript-eslint/type-utils@5.20.0": 125 | version "5.20.0" 126 | resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz#151c21cbe9a378a34685735036e5ddfc00223be3" 127 | integrity sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw== 128 | dependencies: 129 | "@typescript-eslint/utils" "5.20.0" 130 | debug "^4.3.2" 131 | tsutils "^3.21.0" 132 | 133 | "@typescript-eslint/types@5.20.0": 134 | version "5.20.0" 135 | resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" 136 | integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== 137 | 138 | "@typescript-eslint/typescript-estree@5.20.0": 139 | version "5.20.0" 140 | resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz#ab73686ab18c8781bbf249c9459a55dc9417d6b0" 141 | integrity sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w== 142 | dependencies: 143 | "@typescript-eslint/types" "5.20.0" 144 | "@typescript-eslint/visitor-keys" "5.20.0" 145 | debug "^4.3.2" 146 | globby "^11.0.4" 147 | is-glob "^4.0.3" 148 | semver "^7.3.5" 149 | tsutils "^3.21.0" 150 | 151 | "@typescript-eslint/utils@5.20.0": 152 | version "5.20.0" 153 | resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.20.0.tgz#b8e959ed11eca1b2d5414e12417fd94cae3517a5" 154 | integrity sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w== 155 | dependencies: 156 | "@types/json-schema" "^7.0.9" 157 | "@typescript-eslint/scope-manager" "5.20.0" 158 | "@typescript-eslint/types" "5.20.0" 159 | "@typescript-eslint/typescript-estree" "5.20.0" 160 | eslint-scope "^5.1.1" 161 | eslint-utils "^3.0.0" 162 | 163 | "@typescript-eslint/visitor-keys@5.20.0": 164 | version "5.20.0" 165 | resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz#70236b5c6b67fbaf8b2f58bf3414b76c1e826c2a" 166 | integrity sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg== 167 | dependencies: 168 | "@typescript-eslint/types" "5.20.0" 169 | eslint-visitor-keys "^3.0.0" 170 | 171 | acorn-jsx@^5.3.1: 172 | version "5.3.2" 173 | resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 174 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 175 | 176 | acorn-walk@^8.2.0: 177 | version "8.2.0" 178 | resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 179 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 180 | 181 | acorn@^8.7.0: 182 | version "8.7.0" 183 | resolved "https://registry.npmmirror.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" 184 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== 185 | 186 | ajv@^6.10.0, ajv@^6.12.4: 187 | version "6.12.6" 188 | resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 189 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 190 | dependencies: 191 | fast-deep-equal "^3.1.1" 192 | fast-json-stable-stringify "^2.0.0" 193 | json-schema-traverse "^0.4.1" 194 | uri-js "^4.2.2" 195 | 196 | ansi-colors@^4.1.1: 197 | version "4.1.3" 198 | resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" 199 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 200 | 201 | ansi-regex@^5.0.1: 202 | version "5.0.1" 203 | resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 204 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 205 | 206 | ansi-styles@^3.2.1: 207 | version "3.2.1" 208 | resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 209 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 210 | dependencies: 211 | color-convert "^1.9.0" 212 | 213 | ansi-styles@^4.1.0: 214 | version "4.3.0" 215 | resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 216 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 217 | dependencies: 218 | color-convert "^2.0.1" 219 | 220 | any-promise@^1.0.0: 221 | version "1.3.0" 222 | resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 223 | integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== 224 | 225 | anymatch@~3.1.2: 226 | version "3.1.2" 227 | resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 228 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 229 | dependencies: 230 | normalize-path "^3.0.0" 231 | picomatch "^2.0.4" 232 | 233 | argparse@^2.0.1: 234 | version "2.0.1" 235 | resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 236 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 237 | 238 | array-union@^2.1.0: 239 | version "2.1.0" 240 | resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 241 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 242 | 243 | balanced-match@^1.0.0: 244 | version "1.0.2" 245 | resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 246 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 247 | 248 | binary-extensions@^2.0.0: 249 | version "2.2.0" 250 | resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 251 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 252 | 253 | brace-expansion@^1.1.7: 254 | version "1.1.11" 255 | resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 256 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 257 | dependencies: 258 | balanced-match "^1.0.0" 259 | concat-map "0.0.1" 260 | 261 | braces@^3.0.2, braces@~3.0.2: 262 | version "3.0.2" 263 | resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 264 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 265 | dependencies: 266 | fill-range "^7.0.1" 267 | 268 | builtin-modules@^3.0.0: 269 | version "3.2.0" 270 | resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 271 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 272 | 273 | bundle-require@^3.0.2: 274 | version "3.0.4" 275 | resolved "https://registry.npmmirror.com/bundle-require/-/bundle-require-3.0.4.tgz#2b52ba77d99c0a586b5854cd21d36954e63cc110" 276 | integrity sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A== 277 | dependencies: 278 | load-tsconfig "^0.2.0" 279 | 280 | cac@^6.7.12: 281 | version "6.7.12" 282 | resolved "https://registry.npmmirror.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" 283 | integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== 284 | 285 | callsites@^3.0.0: 286 | version "3.1.0" 287 | resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 288 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 289 | 290 | chalk@^2.0.0: 291 | version "2.4.2" 292 | resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 293 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 294 | dependencies: 295 | ansi-styles "^3.2.1" 296 | escape-string-regexp "^1.0.5" 297 | supports-color "^5.3.0" 298 | 299 | chalk@^4.0.0: 300 | version "4.1.2" 301 | resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 302 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 303 | dependencies: 304 | ansi-styles "^4.1.0" 305 | supports-color "^7.1.0" 306 | 307 | chalk@^5.0.1: 308 | version "5.0.1" 309 | resolved "https://registry.npmmirror.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" 310 | integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== 311 | 312 | chokidar@^3.5.1: 313 | version "3.5.3" 314 | resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 315 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 316 | dependencies: 317 | anymatch "~3.1.2" 318 | braces "~3.0.2" 319 | glob-parent "~5.1.2" 320 | is-binary-path "~2.1.0" 321 | is-glob "~4.0.1" 322 | normalize-path "~3.0.0" 323 | readdirp "~3.6.0" 324 | optionalDependencies: 325 | fsevents "~2.3.2" 326 | 327 | ci-info@^3.3.0: 328 | version "3.3.0" 329 | resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" 330 | integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== 331 | 332 | clean-regexp@^1.0.0: 333 | version "1.0.0" 334 | resolved "https://registry.npmmirror.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" 335 | integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== 336 | dependencies: 337 | escape-string-regexp "^1.0.5" 338 | 339 | color-convert@^1.9.0: 340 | version "1.9.3" 341 | resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 342 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 343 | dependencies: 344 | color-name "1.1.3" 345 | 346 | color-convert@^2.0.1: 347 | version "2.0.1" 348 | resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 349 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 350 | dependencies: 351 | color-name "~1.1.4" 352 | 353 | color-name@1.1.3: 354 | version "1.1.3" 355 | resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 356 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 357 | 358 | color-name@~1.1.4: 359 | version "1.1.4" 360 | resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 361 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 362 | 363 | commander@^4.0.0: 364 | version "4.1.1" 365 | resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" 366 | integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 367 | 368 | concat-map@0.0.1: 369 | version "0.0.1" 370 | resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 371 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 372 | 373 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 374 | version "7.0.3" 375 | resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 376 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 377 | dependencies: 378 | path-key "^3.1.0" 379 | shebang-command "^2.0.0" 380 | which "^2.0.1" 381 | 382 | debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: 383 | version "4.3.4" 384 | resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 385 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 386 | dependencies: 387 | ms "2.1.2" 388 | 389 | deep-is@^0.1.3: 390 | version "0.1.4" 391 | resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 392 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 393 | 394 | dir-glob@^3.0.1: 395 | version "3.0.1" 396 | resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 397 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 398 | dependencies: 399 | path-type "^4.0.0" 400 | 401 | doctrine@^3.0.0: 402 | version "3.0.0" 403 | resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 404 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 405 | dependencies: 406 | esutils "^2.0.2" 407 | 408 | enquirer@^2.3.6: 409 | version "2.3.6" 410 | resolved "https://registry.npmmirror.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 411 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 412 | dependencies: 413 | ansi-colors "^4.1.1" 414 | 415 | error-ex@^1.3.1: 416 | version "1.3.2" 417 | resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 418 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 419 | dependencies: 420 | is-arrayish "^0.2.1" 421 | 422 | esbuild-android-64@0.14.37: 423 | version "0.14.37" 424 | resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.37.tgz#da0dd1f4bf7ee03ba3cc7f735222a12cef9d3e94" 425 | integrity sha512-Jb61ihbS3iSj3+PhURe7sEuBg4h16CeT4CiT3W4Aop6rr5p/N6IvNXNWFX0gzUaRWtGoAFfCXFBEIn6zWUU3hQ== 426 | 427 | esbuild-android-64@0.14.51: 428 | version "0.14.51" 429 | resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" 430 | integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== 431 | 432 | esbuild-android-arm64@0.14.37: 433 | version "0.14.37" 434 | resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.37.tgz#b9502b0ccecf5e6cb7aa75a1607cae516580f6f8" 435 | integrity sha512-wwcI+EUHWe1LlxBE7vjdqZ53DEiCllD6XsYOIiGxzL8KaG7eOLXNS7tNhdK0QIR4wwMNTPLDB40ZKuAXZ8zv6Q== 436 | 437 | esbuild-android-arm64@0.14.51: 438 | version "0.14.51" 439 | resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" 440 | integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== 441 | 442 | esbuild-darwin-64@0.14.37: 443 | version "0.14.37" 444 | resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.37.tgz#4ef30c559fa4281790575bd029a3d0f56fa56aa4" 445 | integrity sha512-gg/UZ/FZrRzPq+tAOiMwyBoa6eNxX6bcjuivZ8v2Tny83RhIyeDhvC84dgVcPinqK39u8pOYw6a7nffotUrjKQ== 446 | 447 | esbuild-darwin-64@0.14.51: 448 | version "0.14.51" 449 | resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" 450 | integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== 451 | 452 | esbuild-darwin-arm64@0.14.37: 453 | version "0.14.37" 454 | resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.37.tgz#2d4ffb4f0e65567290b69c4e9a0f7b4a8d4ec5ce" 455 | integrity sha512-eFwy5il5yvIHAVau97kWoNYfxuCd1X7hfgKc4Ns5ymlYXhyRzRywwJfknHax5rDyZxfDXtnFaT/nftUiYwsHIQ== 456 | 457 | esbuild-darwin-arm64@0.14.51: 458 | version "0.14.51" 459 | resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" 460 | integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== 461 | 462 | esbuild-freebsd-64@0.14.37: 463 | version "0.14.37" 464 | resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.37.tgz#e70c6f3c600fa52faf135aeeb6a5e6bfd90dd8dc" 465 | integrity sha512-4iFbdmohve6wyPwsVPe/1j5rVwg5uPTopmgIUiJBbnPKMmo8NecUSbz3HwddsDHLrvGoIs5aOiETPWo9rg3wyg== 466 | 467 | esbuild-freebsd-64@0.14.51: 468 | version "0.14.51" 469 | resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" 470 | integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== 471 | 472 | esbuild-freebsd-arm64@0.14.37: 473 | version "0.14.37" 474 | resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.37.tgz#2379edb519847d2bb1703033ffe9fb6a4627bfc5" 475 | integrity sha512-MGmZ9akBdqcIH7FcWhUrVTmTW18Xz/EVrvBcV6BHSFDQci0YnOhPAGCrV54t1JNG/5poHNBnaG3R2zNxnmJT5Q== 476 | 477 | esbuild-freebsd-arm64@0.14.51: 478 | version "0.14.51" 479 | resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" 480 | integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== 481 | 482 | esbuild-linux-32@0.14.37: 483 | version "0.14.37" 484 | resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.37.tgz#727907c90b1863a908cadfa56261005663f47ee5" 485 | integrity sha512-UCyQrn3n3dHXHDQTPO3gWxfoqtEpGObBdAgevuUtw0//TSyNftnaLcQYyBiGC6J85sM8f/c+Minz5jUFOKrmOA== 486 | 487 | esbuild-linux-32@0.14.51: 488 | version "0.14.51" 489 | resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" 490 | integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== 491 | 492 | esbuild-linux-64@0.14.37: 493 | version "0.14.37" 494 | resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.37.tgz#068deed6b0bf09f6f7eaad371cadde4085945ca7" 495 | integrity sha512-UURL6k1Ffr6K4faFgdP6lKVvMKYwq8JmAh+odCukzIWN4EpjIzgmhBUzyFVU+VQLh1+K3tlE1SPJ057PNpayUQ== 496 | 497 | esbuild-linux-64@0.14.51: 498 | version "0.14.51" 499 | resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" 500 | integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== 501 | 502 | esbuild-linux-arm64@0.14.37: 503 | version "0.14.37" 504 | resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.37.tgz#f433ae4902003d8b499c05ab3b48b99a6e79c8f6" 505 | integrity sha512-vDHyuFsDpz6nquJO7CAxU2CBj+PB+BJhGawzBrHtcM249fXK4GfVNVArgWFKkSGMZW1ZpKSeef7FeOvM6juhPg== 506 | 507 | esbuild-linux-arm64@0.14.51: 508 | version "0.14.51" 509 | resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" 510 | integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== 511 | 512 | esbuild-linux-arm@0.14.37: 513 | version "0.14.37" 514 | resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.37.tgz#7789d3fc96c2edc2ebf96cc0fadc3708668de399" 515 | integrity sha512-SgWcdAivyK2z2kcYAGwLTBSTECXXj/lC0S/BiayyHLYJHA6C3aEGexB6ZDMgffj4Quy/l3Tyr9ktZh8bgcmJrA== 516 | 517 | esbuild-linux-arm@0.14.51: 518 | version "0.14.51" 519 | resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" 520 | integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== 521 | 522 | esbuild-linux-mips64le@0.14.37: 523 | version "0.14.37" 524 | resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.37.tgz#7f100a9b0ea6d60bd1585bdd75d5d7d3ea432bf4" 525 | integrity sha512-azRAGYGKg3dxbYE7C+L35/2Oyg1RCuXvT3Z8M76JZF2N1ZNEA9g01zbuw3GtXWLyI6mhhoHxQL0H1SQUL0At1w== 526 | 527 | esbuild-linux-mips64le@0.14.51: 528 | version "0.14.51" 529 | resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" 530 | integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== 531 | 532 | esbuild-linux-ppc64le@0.14.37: 533 | version "0.14.37" 534 | resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.37.tgz#11d839accb1b97398959c9c64644aed2a7757f5e" 535 | integrity sha512-SyNitGH/h7Hti7A+a5rkRDHhjra1TM1JnJJymRndOzw5Vd+AkWpoSQxxTfvmRw62g42zoeHBgcyrvGfT053l5w== 536 | 537 | esbuild-linux-ppc64le@0.14.51: 538 | version "0.14.51" 539 | resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" 540 | integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== 541 | 542 | esbuild-linux-riscv64@0.14.37: 543 | version "0.14.37" 544 | resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.37.tgz#467cdea5fbd3c26bd7a342bfaf07b131be6738af" 545 | integrity sha512-IgEwVXYGC3HpCmZ1nl+vZw1h72i9WEf4mx+JBZ1s+Z0QVGww/8LI6oYZVboPtr7Lok1gKdg5tUZdFukGn5Fr/A== 546 | 547 | esbuild-linux-riscv64@0.14.51: 548 | version "0.14.51" 549 | resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" 550 | integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== 551 | 552 | esbuild-linux-s390x@0.14.37: 553 | version "0.14.37" 554 | resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.37.tgz#e4fcb6cabf13baa2f8699f30c9668b9383945ee4" 555 | integrity sha512-X105T1x7PV9pZ/rDpOeNiTWGBd1A0BGUbi6hK9BW7X8IxzQZNwAsaahLOlAFf+OKezoSQrhHfNdBwIu9UZMmtw== 556 | 557 | esbuild-linux-s390x@0.14.51: 558 | version "0.14.51" 559 | resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" 560 | integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== 561 | 562 | esbuild-netbsd-64@0.14.37: 563 | version "0.14.37" 564 | resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.37.tgz#ec06cfbec53fd5331fecfcc11d752b8aff840c53" 565 | integrity sha512-93mHLGTTFWAemDNGxlx0RJyNQ4E2OnnUGNHpNhKu/zzYw/Imf6dWGB6h7e9axtce8yOg5rOnx8BMhRu0NwQnKA== 566 | 567 | esbuild-netbsd-64@0.14.51: 568 | version "0.14.51" 569 | resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" 570 | integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== 571 | 572 | esbuild-openbsd-64@0.14.37: 573 | version "0.14.37" 574 | resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.37.tgz#4c8f6640a2a961ad28e74638731512f204be2a3a" 575 | integrity sha512-jdhv2koRbF69artwD4aaSS72b+syfcdVHKs1SqjyfPvi/MsL7OC+jWGOSCZ329RmnECAwCOaL4dO7ZaJiLLj3Q== 576 | 577 | esbuild-openbsd-64@0.14.51: 578 | version "0.14.51" 579 | resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" 580 | integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== 581 | 582 | esbuild-sunos-64@0.14.37: 583 | version "0.14.37" 584 | resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.37.tgz#c529c3838c0a8c797b2cf94bb6b8edf761cdc126" 585 | integrity sha512-YvQsr++g0ZBHJUjPeR1Ui81eFcZTH5qJp8s5GP8jur0BwBM+2wCTNutXSh/ZKYp+4ejOo54PFTy3tGo36q7D6g== 586 | 587 | esbuild-sunos-64@0.14.51: 588 | version "0.14.51" 589 | resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" 590 | integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== 591 | 592 | esbuild-windows-32@0.14.37: 593 | version "0.14.37" 594 | resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.37.tgz#719e02307545bda14b3b74cf2652884c5ea42725" 595 | integrity sha512-aQlHyME09dWo2FVAniTXLurr/xYZre5bJrnW8yALPUu09ExCC7LzlFQFoJuuSyCdMDHcxYLc6HcrJLwRdR3b/Q== 596 | 597 | esbuild-windows-32@0.14.51: 598 | version "0.14.51" 599 | resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" 600 | integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== 601 | 602 | esbuild-windows-64@0.14.37: 603 | version "0.14.37" 604 | resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.37.tgz#a1481bda1e9d963b6c4fed37d5f6dbe483b1035b" 605 | integrity sha512-4mJjpS71AV4rj5PXrOn19uQwiASiyziJwyZT+qQ3M/hc/fIWS2Pgv5gbgytC1O8jptMB6NIpgrauCw56lKgckA== 606 | 607 | esbuild-windows-64@0.14.51: 608 | version "0.14.51" 609 | resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" 610 | integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== 611 | 612 | esbuild-windows-arm64@0.14.37: 613 | version "0.14.37" 614 | resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.37.tgz#eb1b1b848dcedf0b57fdf207df9879fe3aaaf3cd" 615 | integrity sha512-wQy+sAKD7/d6vDrgH+i+ZdbRLVHGG5BjBpBRStvGgLiuIo46/QEQCaHbBy2LOtXu/o1JYchxilzeQ+ExZdYkeA== 616 | 617 | esbuild-windows-arm64@0.14.51: 618 | version "0.14.51" 619 | resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" 620 | integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== 621 | 622 | esbuild@^0.14.25: 623 | version "0.14.37" 624 | resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.37.tgz#24a73ed0ded0b582dd184101427df94897e88fac" 625 | integrity sha512-sPlTpEkjzgFjWjYdve5xM1A3fpKXWNc+0yh0u9tqdER992OEpvde1c/+5rbRFsaSEEjQM9qXRcYn3EvNwgLF9w== 626 | optionalDependencies: 627 | esbuild-android-64 "0.14.37" 628 | esbuild-android-arm64 "0.14.37" 629 | esbuild-darwin-64 "0.14.37" 630 | esbuild-darwin-arm64 "0.14.37" 631 | esbuild-freebsd-64 "0.14.37" 632 | esbuild-freebsd-arm64 "0.14.37" 633 | esbuild-linux-32 "0.14.37" 634 | esbuild-linux-64 "0.14.37" 635 | esbuild-linux-arm "0.14.37" 636 | esbuild-linux-arm64 "0.14.37" 637 | esbuild-linux-mips64le "0.14.37" 638 | esbuild-linux-ppc64le "0.14.37" 639 | esbuild-linux-riscv64 "0.14.37" 640 | esbuild-linux-s390x "0.14.37" 641 | esbuild-netbsd-64 "0.14.37" 642 | esbuild-openbsd-64 "0.14.37" 643 | esbuild-sunos-64 "0.14.37" 644 | esbuild-windows-32 "0.14.37" 645 | esbuild-windows-64 "0.14.37" 646 | esbuild-windows-arm64 "0.14.37" 647 | 648 | esbuild@^0.14.47: 649 | version "0.14.51" 650 | resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" 651 | integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== 652 | optionalDependencies: 653 | esbuild-android-64 "0.14.51" 654 | esbuild-android-arm64 "0.14.51" 655 | esbuild-darwin-64 "0.14.51" 656 | esbuild-darwin-arm64 "0.14.51" 657 | esbuild-freebsd-64 "0.14.51" 658 | esbuild-freebsd-arm64 "0.14.51" 659 | esbuild-linux-32 "0.14.51" 660 | esbuild-linux-64 "0.14.51" 661 | esbuild-linux-arm "0.14.51" 662 | esbuild-linux-arm64 "0.14.51" 663 | esbuild-linux-mips64le "0.14.51" 664 | esbuild-linux-ppc64le "0.14.51" 665 | esbuild-linux-riscv64 "0.14.51" 666 | esbuild-linux-s390x "0.14.51" 667 | esbuild-netbsd-64 "0.14.51" 668 | esbuild-openbsd-64 "0.14.51" 669 | esbuild-sunos-64 "0.14.51" 670 | esbuild-windows-32 "0.14.51" 671 | esbuild-windows-64 "0.14.51" 672 | esbuild-windows-arm64 "0.14.51" 673 | 674 | escape-string-regexp@^1.0.5: 675 | version "1.0.5" 676 | resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 677 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 678 | 679 | escape-string-regexp@^4.0.0: 680 | version "4.0.0" 681 | resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 682 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 683 | 684 | eslint-plugin-unicorn@^42.0.0: 685 | version "42.0.0" 686 | resolved "https://registry.npmmirror.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz#47d60c00c263ad743403b052db689e39acbacff1" 687 | integrity sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg== 688 | dependencies: 689 | "@babel/helper-validator-identifier" "^7.15.7" 690 | ci-info "^3.3.0" 691 | clean-regexp "^1.0.0" 692 | eslint-utils "^3.0.0" 693 | esquery "^1.4.0" 694 | indent-string "^4.0.0" 695 | is-builtin-module "^3.1.0" 696 | lodash "^4.17.21" 697 | pluralize "^8.0.0" 698 | read-pkg-up "^7.0.1" 699 | regexp-tree "^0.1.24" 700 | safe-regex "^2.1.1" 701 | semver "^7.3.5" 702 | strip-indent "^3.0.0" 703 | 704 | eslint-scope@^5.1.1: 705 | version "5.1.1" 706 | resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 707 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 708 | dependencies: 709 | esrecurse "^4.3.0" 710 | estraverse "^4.1.1" 711 | 712 | eslint-scope@^7.1.1: 713 | version "7.1.1" 714 | resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 715 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 716 | dependencies: 717 | esrecurse "^4.3.0" 718 | estraverse "^5.2.0" 719 | 720 | eslint-utils@^3.0.0: 721 | version "3.0.0" 722 | resolved "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 723 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 724 | dependencies: 725 | eslint-visitor-keys "^2.0.0" 726 | 727 | eslint-visitor-keys@^2.0.0: 728 | version "2.1.0" 729 | resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 730 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 731 | 732 | eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: 733 | version "3.3.0" 734 | resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 735 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 736 | 737 | eslint@^8.13.0: 738 | version "8.13.0" 739 | resolved "https://registry.npmmirror.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7" 740 | integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ== 741 | dependencies: 742 | "@eslint/eslintrc" "^1.2.1" 743 | "@humanwhocodes/config-array" "^0.9.2" 744 | ajv "^6.10.0" 745 | chalk "^4.0.0" 746 | cross-spawn "^7.0.2" 747 | debug "^4.3.2" 748 | doctrine "^3.0.0" 749 | escape-string-regexp "^4.0.0" 750 | eslint-scope "^7.1.1" 751 | eslint-utils "^3.0.0" 752 | eslint-visitor-keys "^3.3.0" 753 | espree "^9.3.1" 754 | esquery "^1.4.0" 755 | esutils "^2.0.2" 756 | fast-deep-equal "^3.1.3" 757 | file-entry-cache "^6.0.1" 758 | functional-red-black-tree "^1.0.1" 759 | glob-parent "^6.0.1" 760 | globals "^13.6.0" 761 | ignore "^5.2.0" 762 | import-fresh "^3.0.0" 763 | imurmurhash "^0.1.4" 764 | is-glob "^4.0.0" 765 | js-yaml "^4.1.0" 766 | json-stable-stringify-without-jsonify "^1.0.1" 767 | levn "^0.4.1" 768 | lodash.merge "^4.6.2" 769 | minimatch "^3.0.4" 770 | natural-compare "^1.4.0" 771 | optionator "^0.9.1" 772 | regexpp "^3.2.0" 773 | strip-ansi "^6.0.1" 774 | strip-json-comments "^3.1.0" 775 | text-table "^0.2.0" 776 | v8-compile-cache "^2.0.3" 777 | 778 | espree@^9.3.1: 779 | version "9.3.1" 780 | resolved "https://registry.npmmirror.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" 781 | integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== 782 | dependencies: 783 | acorn "^8.7.0" 784 | acorn-jsx "^5.3.1" 785 | eslint-visitor-keys "^3.3.0" 786 | 787 | esquery@^1.4.0: 788 | version "1.4.0" 789 | resolved "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 790 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 791 | dependencies: 792 | estraverse "^5.1.0" 793 | 794 | esrecurse@^4.3.0: 795 | version "4.3.0" 796 | resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 797 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 798 | dependencies: 799 | estraverse "^5.2.0" 800 | 801 | estraverse@^4.1.1: 802 | version "4.3.0" 803 | resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 804 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 805 | 806 | estraverse@^5.1.0, estraverse@^5.2.0: 807 | version "5.3.0" 808 | resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 809 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 810 | 811 | esutils@^2.0.2: 812 | version "2.0.3" 813 | resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 814 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 815 | 816 | execa@^5.0.0: 817 | version "5.1.1" 818 | resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 819 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 820 | dependencies: 821 | cross-spawn "^7.0.3" 822 | get-stream "^6.0.0" 823 | human-signals "^2.1.0" 824 | is-stream "^2.0.0" 825 | merge-stream "^2.0.0" 826 | npm-run-path "^4.0.1" 827 | onetime "^5.1.2" 828 | signal-exit "^3.0.3" 829 | strip-final-newline "^2.0.0" 830 | 831 | execa@^6.1.0: 832 | version "6.1.0" 833 | resolved "https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" 834 | integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== 835 | dependencies: 836 | cross-spawn "^7.0.3" 837 | get-stream "^6.0.1" 838 | human-signals "^3.0.1" 839 | is-stream "^3.0.0" 840 | merge-stream "^2.0.0" 841 | npm-run-path "^5.1.0" 842 | onetime "^6.0.0" 843 | signal-exit "^3.0.7" 844 | strip-final-newline "^3.0.0" 845 | 846 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 847 | version "3.1.3" 848 | resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 849 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 850 | 851 | fast-glob@^3.2.9: 852 | version "3.2.11" 853 | resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 854 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 855 | dependencies: 856 | "@nodelib/fs.stat" "^2.0.2" 857 | "@nodelib/fs.walk" "^1.2.3" 858 | glob-parent "^5.1.2" 859 | merge2 "^1.3.0" 860 | micromatch "^4.0.4" 861 | 862 | fast-json-stable-stringify@^2.0.0: 863 | version "2.1.0" 864 | resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 865 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 866 | 867 | fast-levenshtein@^2.0.6: 868 | version "2.0.6" 869 | resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 870 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 871 | 872 | fastq@^1.6.0: 873 | version "1.13.0" 874 | resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 875 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 876 | dependencies: 877 | reusify "^1.0.4" 878 | 879 | file-entry-cache@^6.0.1: 880 | version "6.0.1" 881 | resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 882 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 883 | dependencies: 884 | flat-cache "^3.0.4" 885 | 886 | fill-range@^7.0.1: 887 | version "7.0.1" 888 | resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 889 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 890 | dependencies: 891 | to-regex-range "^5.0.1" 892 | 893 | find-up@^4.1.0: 894 | version "4.1.0" 895 | resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 896 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 897 | dependencies: 898 | locate-path "^5.0.0" 899 | path-exists "^4.0.0" 900 | 901 | flat-cache@^3.0.4: 902 | version "3.0.4" 903 | resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 904 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 905 | dependencies: 906 | flatted "^3.1.0" 907 | rimraf "^3.0.2" 908 | 909 | flatted@^3.1.0: 910 | version "3.2.5" 911 | resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 912 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 913 | 914 | fs.realpath@^1.0.0: 915 | version "1.0.0" 916 | resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 917 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 918 | 919 | fsevents@~2.3.2: 920 | version "2.3.2" 921 | resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 922 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 923 | 924 | function-bind@^1.1.1: 925 | version "1.1.1" 926 | resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 927 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 928 | 929 | functional-red-black-tree@^1.0.1: 930 | version "1.0.1" 931 | resolved "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 932 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 933 | 934 | get-stream@^6.0.0, get-stream@^6.0.1: 935 | version "6.0.1" 936 | resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 937 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 938 | 939 | glob-parent@^5.1.2, glob-parent@~5.1.2: 940 | version "5.1.2" 941 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 942 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 943 | dependencies: 944 | is-glob "^4.0.1" 945 | 946 | glob-parent@^6.0.1: 947 | version "6.0.2" 948 | resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 949 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 950 | dependencies: 951 | is-glob "^4.0.3" 952 | 953 | glob@7.1.6: 954 | version "7.1.6" 955 | resolved "https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 956 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 957 | dependencies: 958 | fs.realpath "^1.0.0" 959 | inflight "^1.0.4" 960 | inherits "2" 961 | minimatch "^3.0.4" 962 | once "^1.3.0" 963 | path-is-absolute "^1.0.0" 964 | 965 | glob@^7.1.3: 966 | version "7.2.0" 967 | resolved "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 968 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 969 | dependencies: 970 | fs.realpath "^1.0.0" 971 | inflight "^1.0.4" 972 | inherits "2" 973 | minimatch "^3.0.4" 974 | once "^1.3.0" 975 | path-is-absolute "^1.0.0" 976 | 977 | globals@^13.6.0, globals@^13.9.0: 978 | version "13.13.0" 979 | resolved "https://registry.npmmirror.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" 980 | integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== 981 | dependencies: 982 | type-fest "^0.20.2" 983 | 984 | globby@^11.0.3, globby@^11.0.4: 985 | version "11.1.0" 986 | resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 987 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 988 | dependencies: 989 | array-union "^2.1.0" 990 | dir-glob "^3.0.1" 991 | fast-glob "^3.2.9" 992 | ignore "^5.2.0" 993 | merge2 "^1.4.1" 994 | slash "^3.0.0" 995 | 996 | has-flag@^3.0.0: 997 | version "3.0.0" 998 | resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 999 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1000 | 1001 | has-flag@^4.0.0: 1002 | version "4.0.0" 1003 | resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1004 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1005 | 1006 | has@^1.0.3: 1007 | version "1.0.3" 1008 | resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1009 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1010 | dependencies: 1011 | function-bind "^1.1.1" 1012 | 1013 | hosted-git-info@^2.1.4: 1014 | version "2.8.9" 1015 | resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 1016 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 1017 | 1018 | human-signals@^2.1.0: 1019 | version "2.1.0" 1020 | resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1021 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1022 | 1023 | human-signals@^3.0.1: 1024 | version "3.0.1" 1025 | resolved "https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" 1026 | integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== 1027 | 1028 | ignore@^5.1.8, ignore@^5.2.0: 1029 | version "5.2.0" 1030 | resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1031 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1032 | 1033 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1034 | version "3.3.0" 1035 | resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1036 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1037 | dependencies: 1038 | parent-module "^1.0.0" 1039 | resolve-from "^4.0.0" 1040 | 1041 | imurmurhash@^0.1.4: 1042 | version "0.1.4" 1043 | resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1044 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1045 | 1046 | indent-string@^4.0.0: 1047 | version "4.0.0" 1048 | resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1049 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1050 | 1051 | inflight@^1.0.4: 1052 | version "1.0.6" 1053 | resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1054 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1055 | dependencies: 1056 | once "^1.3.0" 1057 | wrappy "1" 1058 | 1059 | inherits@2: 1060 | version "2.0.4" 1061 | resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1062 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1063 | 1064 | is-arrayish@^0.2.1: 1065 | version "0.2.1" 1066 | resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1067 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1068 | 1069 | is-binary-path@~2.1.0: 1070 | version "2.1.0" 1071 | resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1072 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1073 | dependencies: 1074 | binary-extensions "^2.0.0" 1075 | 1076 | is-builtin-module@^3.1.0: 1077 | version "3.1.0" 1078 | resolved "https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" 1079 | integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== 1080 | dependencies: 1081 | builtin-modules "^3.0.0" 1082 | 1083 | is-core-module@^2.8.1, is-core-module@^2.9.0: 1084 | version "2.9.0" 1085 | resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 1086 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 1087 | dependencies: 1088 | has "^1.0.3" 1089 | 1090 | is-extglob@^2.1.1: 1091 | version "2.1.1" 1092 | resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1093 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1094 | 1095 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1096 | version "4.0.3" 1097 | resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1098 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1099 | dependencies: 1100 | is-extglob "^2.1.1" 1101 | 1102 | is-number@^7.0.0: 1103 | version "7.0.0" 1104 | resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1105 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1106 | 1107 | is-stream@^2.0.0: 1108 | version "2.0.1" 1109 | resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1110 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1111 | 1112 | is-stream@^3.0.0: 1113 | version "3.0.0" 1114 | resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 1115 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 1116 | 1117 | isexe@^2.0.0: 1118 | version "2.0.0" 1119 | resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1120 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1121 | 1122 | joycon@^3.0.1: 1123 | version "3.1.1" 1124 | resolved "https://registry.npmmirror.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" 1125 | integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== 1126 | 1127 | js-tokens@^4.0.0: 1128 | version "4.0.0" 1129 | resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1130 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1131 | 1132 | js-yaml@^4.1.0: 1133 | version "4.1.0" 1134 | resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1135 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1136 | dependencies: 1137 | argparse "^2.0.1" 1138 | 1139 | json-parse-even-better-errors@^2.3.0: 1140 | version "2.3.1" 1141 | resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1142 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1143 | 1144 | json-schema-traverse@^0.4.1: 1145 | version "0.4.1" 1146 | resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1147 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1148 | 1149 | json-stable-stringify-without-jsonify@^1.0.1: 1150 | version "1.0.1" 1151 | resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1152 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1153 | 1154 | levn@^0.4.1: 1155 | version "0.4.1" 1156 | resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1157 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1158 | dependencies: 1159 | prelude-ls "^1.2.1" 1160 | type-check "~0.4.0" 1161 | 1162 | lilconfig@^2.0.5: 1163 | version "2.0.5" 1164 | resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" 1165 | integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== 1166 | 1167 | lines-and-columns@^1.1.6: 1168 | version "1.2.4" 1169 | resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1170 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1171 | 1172 | load-tsconfig@^0.2.0: 1173 | version "0.2.3" 1174 | resolved "https://registry.npmmirror.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" 1175 | integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== 1176 | 1177 | locate-path@^5.0.0: 1178 | version "5.0.0" 1179 | resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1180 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1181 | dependencies: 1182 | p-locate "^4.1.0" 1183 | 1184 | lodash.merge@^4.6.2: 1185 | version "4.6.2" 1186 | resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1187 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1188 | 1189 | lodash@^4.17.21: 1190 | version "4.17.21" 1191 | resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1192 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1193 | 1194 | lru-cache@^6.0.0: 1195 | version "6.0.0" 1196 | resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1197 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1198 | dependencies: 1199 | yallist "^4.0.0" 1200 | 1201 | merge-stream@^2.0.0: 1202 | version "2.0.0" 1203 | resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1204 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1205 | 1206 | merge2@^1.3.0, merge2@^1.4.1: 1207 | version "1.4.1" 1208 | resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1209 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1210 | 1211 | micromatch@^4.0.4: 1212 | version "4.0.5" 1213 | resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1214 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1215 | dependencies: 1216 | braces "^3.0.2" 1217 | picomatch "^2.3.1" 1218 | 1219 | mimic-fn@^2.1.0: 1220 | version "2.1.0" 1221 | resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1222 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1223 | 1224 | mimic-fn@^4.0.0: 1225 | version "4.0.0" 1226 | resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 1227 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 1228 | 1229 | min-indent@^1.0.0: 1230 | version "1.0.1" 1231 | resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" 1232 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== 1233 | 1234 | minimatch@^3.0.4: 1235 | version "3.1.2" 1236 | resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1237 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1238 | dependencies: 1239 | brace-expansion "^1.1.7" 1240 | 1241 | minimist@^1.2.6: 1242 | version "1.2.6" 1243 | resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1244 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1245 | 1246 | ms@2.1.2: 1247 | version "2.1.2" 1248 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1249 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1250 | 1251 | mz@^2.7.0: 1252 | version "2.7.0" 1253 | resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 1254 | integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 1255 | dependencies: 1256 | any-promise "^1.0.0" 1257 | object-assign "^4.0.1" 1258 | thenify-all "^1.0.0" 1259 | 1260 | nanoid@^3.3.4: 1261 | version "3.3.4" 1262 | resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 1263 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1264 | 1265 | natural-compare@^1.4.0: 1266 | version "1.4.0" 1267 | resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1268 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1269 | 1270 | normalize-package-data@^2.5.0: 1271 | version "2.5.0" 1272 | resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1273 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1274 | dependencies: 1275 | hosted-git-info "^2.1.4" 1276 | resolve "^1.10.0" 1277 | semver "2 || 3 || 4 || 5" 1278 | validate-npm-package-license "^3.0.1" 1279 | 1280 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1281 | version "3.0.0" 1282 | resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1283 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1284 | 1285 | npm-run-path@^4.0.1: 1286 | version "4.0.1" 1287 | resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1288 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1289 | dependencies: 1290 | path-key "^3.0.0" 1291 | 1292 | npm-run-path@^5.1.0: 1293 | version "5.1.0" 1294 | resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" 1295 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== 1296 | dependencies: 1297 | path-key "^4.0.0" 1298 | 1299 | object-assign@^4.0.1: 1300 | version "4.1.1" 1301 | resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1302 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1303 | 1304 | once@^1.3.0: 1305 | version "1.4.0" 1306 | resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1307 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1308 | dependencies: 1309 | wrappy "1" 1310 | 1311 | onetime@^5.1.2: 1312 | version "5.1.2" 1313 | resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1314 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1315 | dependencies: 1316 | mimic-fn "^2.1.0" 1317 | 1318 | onetime@^6.0.0: 1319 | version "6.0.0" 1320 | resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 1321 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 1322 | dependencies: 1323 | mimic-fn "^4.0.0" 1324 | 1325 | optionator@^0.9.1: 1326 | version "0.9.1" 1327 | resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1328 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1329 | dependencies: 1330 | deep-is "^0.1.3" 1331 | fast-levenshtein "^2.0.6" 1332 | levn "^0.4.1" 1333 | prelude-ls "^1.2.1" 1334 | type-check "^0.4.0" 1335 | word-wrap "^1.2.3" 1336 | 1337 | p-limit@^2.2.0: 1338 | version "2.3.0" 1339 | resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1340 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1341 | dependencies: 1342 | p-try "^2.0.0" 1343 | 1344 | p-locate@^4.1.0: 1345 | version "4.1.0" 1346 | resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1347 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1348 | dependencies: 1349 | p-limit "^2.2.0" 1350 | 1351 | p-try@^2.0.0: 1352 | version "2.2.0" 1353 | resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1354 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1355 | 1356 | parent-module@^1.0.0: 1357 | version "1.0.1" 1358 | resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1359 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1360 | dependencies: 1361 | callsites "^3.0.0" 1362 | 1363 | parse-json@^5.0.0: 1364 | version "5.2.0" 1365 | resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1366 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1367 | dependencies: 1368 | "@babel/code-frame" "^7.0.0" 1369 | error-ex "^1.3.1" 1370 | json-parse-even-better-errors "^2.3.0" 1371 | lines-and-columns "^1.1.6" 1372 | 1373 | path-exists@^4.0.0: 1374 | version "4.0.0" 1375 | resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1376 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1377 | 1378 | path-is-absolute@^1.0.0: 1379 | version "1.0.1" 1380 | resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1381 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1382 | 1383 | path-key@^3.0.0, path-key@^3.1.0: 1384 | version "3.1.1" 1385 | resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1386 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1387 | 1388 | path-key@^4.0.0: 1389 | version "4.0.0" 1390 | resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 1391 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 1392 | 1393 | path-parse@^1.0.7: 1394 | version "1.0.7" 1395 | resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1396 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1397 | 1398 | path-type@^4.0.0: 1399 | version "4.0.0" 1400 | resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1401 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1402 | 1403 | picocolors@^1.0.0: 1404 | version "1.0.0" 1405 | resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1406 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1407 | 1408 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1409 | version "2.3.1" 1410 | resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1411 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1412 | 1413 | pirates@^4.0.1: 1414 | version "4.0.5" 1415 | resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 1416 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 1417 | 1418 | pluralize@^8.0.0: 1419 | version "8.0.0" 1420 | resolved "https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" 1421 | integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== 1422 | 1423 | postcss-load-config@^3.0.1: 1424 | version "3.1.4" 1425 | resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" 1426 | integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== 1427 | dependencies: 1428 | lilconfig "^2.0.5" 1429 | yaml "^1.10.2" 1430 | 1431 | postcss@^8.4.14: 1432 | version "8.4.14" 1433 | resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" 1434 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 1435 | dependencies: 1436 | nanoid "^3.3.4" 1437 | picocolors "^1.0.0" 1438 | source-map-js "^1.0.2" 1439 | 1440 | prelude-ls@^1.2.1: 1441 | version "1.2.1" 1442 | resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1443 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1444 | 1445 | punycode@^2.1.0: 1446 | version "2.1.1" 1447 | resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1448 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1449 | 1450 | queue-microtask@^1.2.2: 1451 | version "1.2.3" 1452 | resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1453 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1454 | 1455 | read-pkg-up@^7.0.1: 1456 | version "7.0.1" 1457 | resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" 1458 | integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== 1459 | dependencies: 1460 | find-up "^4.1.0" 1461 | read-pkg "^5.2.0" 1462 | type-fest "^0.8.1" 1463 | 1464 | read-pkg@^5.2.0: 1465 | version "5.2.0" 1466 | resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" 1467 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== 1468 | dependencies: 1469 | "@types/normalize-package-data" "^2.4.0" 1470 | normalize-package-data "^2.5.0" 1471 | parse-json "^5.0.0" 1472 | type-fest "^0.6.0" 1473 | 1474 | readdirp@~3.6.0: 1475 | version "3.6.0" 1476 | resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1477 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1478 | dependencies: 1479 | picomatch "^2.2.1" 1480 | 1481 | regexp-tree@^0.1.24, regexp-tree@~0.1.1: 1482 | version "0.1.24" 1483 | resolved "https://registry.npmmirror.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" 1484 | integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== 1485 | 1486 | regexpp@^3.2.0: 1487 | version "3.2.0" 1488 | resolved "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1489 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1490 | 1491 | resolve-from@^4.0.0: 1492 | version "4.0.0" 1493 | resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1494 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1495 | 1496 | resolve-from@^5.0.0: 1497 | version "5.0.0" 1498 | resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1499 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1500 | 1501 | resolve@^1.10.0: 1502 | version "1.22.0" 1503 | resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 1504 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 1505 | dependencies: 1506 | is-core-module "^2.8.1" 1507 | path-parse "^1.0.7" 1508 | supports-preserve-symlinks-flag "^1.0.0" 1509 | 1510 | resolve@^1.22.1: 1511 | version "1.22.1" 1512 | resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1513 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1514 | dependencies: 1515 | is-core-module "^2.9.0" 1516 | path-parse "^1.0.7" 1517 | supports-preserve-symlinks-flag "^1.0.0" 1518 | 1519 | reusify@^1.0.4: 1520 | version "1.0.4" 1521 | resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1522 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1523 | 1524 | rimraf@^3.0.2: 1525 | version "3.0.2" 1526 | resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1527 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1528 | dependencies: 1529 | glob "^7.1.3" 1530 | 1531 | rollup@^2.60.0: 1532 | version "2.70.2" 1533 | resolved "https://registry.npmmirror.com/rollup/-/rollup-2.70.2.tgz#808d206a8851628a065097b7ba2053bd83ba0c0d" 1534 | integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg== 1535 | optionalDependencies: 1536 | fsevents "~2.3.2" 1537 | 1538 | rollup@^2.75.6: 1539 | version "2.77.2" 1540 | resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" 1541 | integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== 1542 | optionalDependencies: 1543 | fsevents "~2.3.2" 1544 | 1545 | run-parallel@^1.1.9: 1546 | version "1.2.0" 1547 | resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1548 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1549 | dependencies: 1550 | queue-microtask "^1.2.2" 1551 | 1552 | safe-regex@^2.1.1: 1553 | version "2.1.1" 1554 | resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" 1555 | integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== 1556 | dependencies: 1557 | regexp-tree "~0.1.1" 1558 | 1559 | "semver@2 || 3 || 4 || 5": 1560 | version "5.7.1" 1561 | resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1562 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1563 | 1564 | semver@^7.3.5, semver@^7.3.7: 1565 | version "7.3.7" 1566 | resolved "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1567 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1568 | dependencies: 1569 | lru-cache "^6.0.0" 1570 | 1571 | shebang-command@^2.0.0: 1572 | version "2.0.0" 1573 | resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1574 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1575 | dependencies: 1576 | shebang-regex "^3.0.0" 1577 | 1578 | shebang-regex@^3.0.0: 1579 | version "3.0.0" 1580 | resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1581 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1582 | 1583 | signal-exit@^3.0.3, signal-exit@^3.0.7: 1584 | version "3.0.7" 1585 | resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1586 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1587 | 1588 | slash@^3.0.0: 1589 | version "3.0.0" 1590 | resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1591 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1592 | 1593 | source-map-js@^1.0.2: 1594 | version "1.0.2" 1595 | resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1596 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1597 | 1598 | source-map@^0.7.3: 1599 | version "0.7.3" 1600 | resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 1601 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 1602 | 1603 | spdx-correct@^3.0.0: 1604 | version "3.1.1" 1605 | resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1606 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1607 | dependencies: 1608 | spdx-expression-parse "^3.0.0" 1609 | spdx-license-ids "^3.0.0" 1610 | 1611 | spdx-exceptions@^2.1.0: 1612 | version "2.3.0" 1613 | resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1614 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1615 | 1616 | spdx-expression-parse@^3.0.0: 1617 | version "3.0.1" 1618 | resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1619 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1620 | dependencies: 1621 | spdx-exceptions "^2.1.0" 1622 | spdx-license-ids "^3.0.0" 1623 | 1624 | spdx-license-ids@^3.0.0: 1625 | version "3.0.11" 1626 | resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" 1627 | integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== 1628 | 1629 | strip-ansi@^6.0.1: 1630 | version "6.0.1" 1631 | resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1632 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1633 | dependencies: 1634 | ansi-regex "^5.0.1" 1635 | 1636 | strip-final-newline@^2.0.0: 1637 | version "2.0.0" 1638 | resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1639 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1640 | 1641 | strip-final-newline@^3.0.0: 1642 | version "3.0.0" 1643 | resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 1644 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 1645 | 1646 | strip-indent@^3.0.0: 1647 | version "3.0.0" 1648 | resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" 1649 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== 1650 | dependencies: 1651 | min-indent "^1.0.0" 1652 | 1653 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1654 | version "3.1.1" 1655 | resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1656 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1657 | 1658 | sucrase@^3.20.3: 1659 | version "3.21.0" 1660 | resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" 1661 | integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== 1662 | dependencies: 1663 | commander "^4.0.0" 1664 | glob "7.1.6" 1665 | lines-and-columns "^1.1.6" 1666 | mz "^2.7.0" 1667 | pirates "^4.0.1" 1668 | ts-interface-checker "^0.1.9" 1669 | 1670 | supports-color@^5.3.0: 1671 | version "5.5.0" 1672 | resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1673 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1674 | dependencies: 1675 | has-flag "^3.0.0" 1676 | 1677 | supports-color@^7.1.0: 1678 | version "7.2.0" 1679 | resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1680 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1681 | dependencies: 1682 | has-flag "^4.0.0" 1683 | 1684 | supports-preserve-symlinks-flag@^1.0.0: 1685 | version "1.0.0" 1686 | resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1687 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1688 | 1689 | text-table@^0.2.0: 1690 | version "0.2.0" 1691 | resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1692 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1693 | 1694 | thenify-all@^1.0.0: 1695 | version "1.6.0" 1696 | resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 1697 | integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== 1698 | dependencies: 1699 | thenify ">= 3.1.0 < 4" 1700 | 1701 | "thenify@>= 3.1.0 < 4": 1702 | version "3.3.1" 1703 | resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" 1704 | integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 1705 | dependencies: 1706 | any-promise "^1.0.0" 1707 | 1708 | to-regex-range@^5.0.1: 1709 | version "5.0.1" 1710 | resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1711 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1712 | dependencies: 1713 | is-number "^7.0.0" 1714 | 1715 | tree-kill@^1.2.2: 1716 | version "1.2.2" 1717 | resolved "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 1718 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 1719 | 1720 | ts-interface-checker@^0.1.9: 1721 | version "0.1.13" 1722 | resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" 1723 | integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== 1724 | 1725 | tslib@^1.8.1: 1726 | version "1.14.1" 1727 | resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1728 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1729 | 1730 | tsup@^5.12.5: 1731 | version "5.12.5" 1732 | resolved "https://registry.npmmirror.com/tsup/-/tsup-5.12.5.tgz#3cb67b568d5ea7460756469329f8533f933bf815" 1733 | integrity sha512-lKwzJsB49sDto51QjqOB4SdiBLKRvgTymEBuBCovcksdDwFEz3esrkbf3m497PXntUKVTzcgOfPdTgknMtvufw== 1734 | dependencies: 1735 | bundle-require "^3.0.2" 1736 | cac "^6.7.12" 1737 | chokidar "^3.5.1" 1738 | debug "^4.3.1" 1739 | esbuild "^0.14.25" 1740 | execa "^5.0.0" 1741 | globby "^11.0.3" 1742 | joycon "^3.0.1" 1743 | postcss-load-config "^3.0.1" 1744 | resolve-from "^5.0.0" 1745 | rollup "^2.60.0" 1746 | source-map "^0.7.3" 1747 | sucrase "^3.20.3" 1748 | tree-kill "^1.2.2" 1749 | 1750 | tsutils@^3.21.0: 1751 | version "3.21.0" 1752 | resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1753 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1754 | dependencies: 1755 | tslib "^1.8.1" 1756 | 1757 | type-check@^0.4.0, type-check@~0.4.0: 1758 | version "0.4.0" 1759 | resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1760 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1761 | dependencies: 1762 | prelude-ls "^1.2.1" 1763 | 1764 | type-fest@^0.20.2: 1765 | version "0.20.2" 1766 | resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1767 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1768 | 1769 | type-fest@^0.6.0: 1770 | version "0.6.0" 1771 | resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" 1772 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== 1773 | 1774 | type-fest@^0.8.1: 1775 | version "0.8.1" 1776 | resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1777 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1778 | 1779 | typescript@^4.6.3: 1780 | version "4.6.3" 1781 | resolved "https://registry.npmmirror.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" 1782 | integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== 1783 | 1784 | uri-js@^4.2.2: 1785 | version "4.4.1" 1786 | resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1787 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1788 | dependencies: 1789 | punycode "^2.1.0" 1790 | 1791 | v8-compile-cache@^2.0.3: 1792 | version "2.3.0" 1793 | resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1794 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1795 | 1796 | validate-npm-package-license@^3.0.1: 1797 | version "3.0.4" 1798 | resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1799 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1800 | dependencies: 1801 | spdx-correct "^3.0.0" 1802 | spdx-expression-parse "^3.0.0" 1803 | 1804 | vite@^3.0.4: 1805 | version "3.0.4" 1806 | resolved "https://registry.npmmirror.com/vite/-/vite-3.0.4.tgz#c61688d6b97573e96cf5ac25f2d68597b5ce68e8" 1807 | integrity sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA== 1808 | dependencies: 1809 | esbuild "^0.14.47" 1810 | postcss "^8.4.14" 1811 | resolve "^1.22.1" 1812 | rollup "^2.75.6" 1813 | optionalDependencies: 1814 | fsevents "~2.3.2" 1815 | 1816 | which@^2.0.1: 1817 | version "2.0.2" 1818 | resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1819 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1820 | dependencies: 1821 | isexe "^2.0.0" 1822 | 1823 | word-wrap@^1.2.3: 1824 | version "1.2.3" 1825 | resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1826 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1827 | 1828 | wrappy@1: 1829 | version "1.0.2" 1830 | resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1831 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1832 | 1833 | yallist@^4.0.0: 1834 | version "4.0.0" 1835 | resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1836 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1837 | 1838 | yaml@^1.10.2: 1839 | version "1.10.2" 1840 | resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1841 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1842 | --------------------------------------------------------------------------------