├── .gitignore ├── .babelrc ├── codeType ├── index.ts └── code128.ts ├── .npmignore ├── rollup.config.js ├── index.ts ├── package.json ├── tsconfig.json ├── README.md ├── types └── code.d.ts ├── common ├── metadata.ts └── support.ts ├── lib ├── qrcode.ts └── barcode.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .idea -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env"] 3 | } -------------------------------------------------------------------------------- /codeType/index.ts: -------------------------------------------------------------------------------- 1 | import { StringToCode128 } from './code128' 2 | 3 | export const BarCode128 = StringToCode128; -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | src 3 | .idea 4 | codeType 5 | common 6 | lib 7 | types 8 | index.ts 9 | .babelrc 10 | rollup.config.js 11 | package-lock.json 12 | package.json 13 | tsconfig.json 14 | README.md 15 | yarn.lock 16 | .npmignore 17 | .git* -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import babel from 'rollup-plugin-babel'; 2 | import path from 'path' 3 | import { uglify } from 'rollup-plugin-uglify'; 4 | import typescript from 'rollup-plugin-typescript2'; 5 | const getPath = _path => path.resolve(__dirname, _path) 6 | export default { 7 | input: 'index.ts', 8 | output: { 9 | file: 'dist/code.wmf.min.js', 10 | name: 'CODE', 11 | format: 'es'//amd,cjs,es,iife,umd 12 | }, 13 | plugins: [ 14 | babel({ 15 | exclude: 'node_modules/**' 16 | }), 17 | uglify(), 18 | typescript({ 19 | tsconfig: getPath('./tsconfig.json') 20 | }) 21 | ] 22 | }; -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @author wmf❤洛尘 3 | * @version 1.0.0 4 | * @Date 2021-11-08 5 | * @LastEditTime 2021-11-08 6 | * @description UniApp 二维码 条形码 7 | * */ 8 | import { OperationCode } from './lib/barcode' 9 | import { WidgetCode } from './lib/qrcode' 10 | import { SaveCodeImg, getPixelRatio, UNIT_CONVERSION , UtF16TO8} from './common/support' 11 | 12 | // 条形码 13 | export const BarCode = OperationCode; 14 | 15 | // 二维码 16 | export const QRCode = WidgetCode; 17 | 18 | // 获取条形码或者二维码图片 19 | export const GetImg = SaveCodeImg; 20 | 21 | // 获取设备信息 22 | export const GetPixelRatio = getPixelRatio; 23 | 24 | // 汉子转换 25 | export const GetUtF16TO8 = UtF16TO8 26 | 27 | // rpx=>px 28 | export const GetPx = UNIT_CONVERSION; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@uni-ui/code-plugs", 3 | "version": "1.9.5", 4 | "description": "条形码 二维码 js_sdk", 5 | "main": "dist/code.wmf.min.js", 6 | "scripts": { 7 | "build": "rollup -c", 8 | "dev": "rollup -c -w", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "keywords": [ 12 | "QR code", 13 | "barcode", 14 | "BarCode", 15 | "QRCode", 16 | "uni-code", 17 | "TS" 18 | ], 19 | "author": "wmf", 20 | "license": "ISC", 21 | "devDependencies": { 22 | "@babel/core": "^7.15.5", 23 | "@babel/preset-env": "^7.15.6", 24 | "@dcloudio/types": "^2.5.12", 25 | "rollup": "^2.57.0", 26 | "rollup-plugin-babel": "^4.4.0", 27 | "rollup-plugin-typescript2": "^0.30.0", 28 | "rollup-plugin-uglify": "^5.0.2", 29 | "typescript": "^4.4.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | // "baseUrl": ".", 4 | // "outDir": "./dist", // 输出目录 5 | // "sourceMap": false, // 是否生成sourceMap 6 | "target": "es5", // 编译目标 7 | "module": "esnext", // 模块类型 8 | "removeComments": true,// 删除注释 9 | "sourceMap": true, 10 | "suppressImplicitAnyIndexErrors": true, 11 | "moduleResolution": "node", 12 | "allowUnreachableCode": true, // 不报告执行不到的代码错误。 13 | "allowJs": false, // 是否编辑js文件 14 | "strict": true, // 严格模式 15 | // "noUnusedLocals": true, // 未使用变量报错 16 | "experimentalDecorators": true, // 启动装饰器 17 | "esModuleInterop": true, 18 | "declarationMap": false, // 生成定义sourceMapss 19 | "lib": ["es5","esnext", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020", "es2021", "dom"], // 导入库类型定义 20 | "types": [// 导入指定类型包 21 | "@dcloudio/types", 22 | "./types/code" 23 | ] 24 | }, 25 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 文档说明 2 | 3 | ```js 4 | npm run install //安装依赖 5 | 6 | npm run build // 打包 7 | 8 | ``` 9 | 10 | # type="2d" 11 | 12 | * canvas 2d 没有draw() 方法 13 | * 清空可以使用clearRect()方法 14 | * 没有setFillStyle方法,只有fillStyle属性 15 | * 没有setStrokeStyle方法,只有strokeStyle属性 16 | * 没有setGlobalAlpha方法,只要有globalAlpha属性 17 | 18 | # 百度小程序 19 | * canvas不支持arcTo方法 20 | # 相关问题 21 | 22 | 1. 支付宝小程序画布模糊问题 https://opendocs.alipay.com/support/01rb8t 23 | ## 示例地址 24 | 25 | `https://ext.dcloud.net.cn/plugin?id=4662` 26 | # 预览 27 |
28 | 29 | 30 | 31 |
32 | 33 | # 参数 34 | 35 | ```js 36 | bar: {//条形码 37 | code: 'E01181016286106', 38 | color: ['#45B649','#00c3ff', '#ee0979'], // 条形码的颜色 不传 默认黑色支持颜色渐变 39 | bgColor: '#FFFFFF', // 背景色 不传 默认白色 40 | type: 'CODE128', //条码类型 默认CODE128 可选值 CODE39 UPCE UPC EAN13 ITF ITF14 MSI Codabar Pharmacode 41 | width: 670, // 宽度 42 | height: 100 // 高度 43 | }, 44 | qrc: {// 二维码 45 | code: 'https://qm.qq.com/cgi-bin/qm/qr?k=LKqML292dD2WvwQfAJXBUmvgbiB_TZWF&noverify=0', 46 | size: 460, // 二维码大小 47 | level: 4, //纠错等级 0~4 48 | type: 'none', // 二维码 码点 默认none 可选值 dots square starry custom 49 | src: '/static/35.png',//画布背景 50 | bgColor: '#FFFFFF', //二维码背景色 默认白色 transparent 透明 51 | padding: 0,//二维码margin 默认0 非必传 52 | border: { 53 | opacity: 1,//边框透明度 0~1 默认1 54 | degree: 15,//圆角度数 默认5 55 | color: ['#F27121','#8A2387','#1b82d2'], //边框颜色支持渐变色 最多10中颜色 56 | lineWidth: 5 //边框宽度 默认 5 57 | }, 58 | text:{ 59 | // opacity: 1, //文字透明度 默认不透明 60 | position: 'center', //中间 top bottom 61 | size: 20, 62 | font: 'bold 20px system-ui',//文字是否加粗 默认normal 20px system-ui 63 | color: ["#000000"], // 文字颜色支持渐变色 64 | content: "这是一个测试" //文字内容 65 | }, 66 | img: { 67 | src: '/static/logo.png', 68 | size: 40, 69 | degree: 15, 70 | type: 'round',//图片展示类型 默认none 可选值 round圆角 circle圆 如果为round 可以传入degree设置圆角大小 默认 5 71 | color: '#ffffff', //图片周围的白色边框 72 | width: 8 //图片周围白色边框的宽度 默认5 73 | }, 74 | color: ['#8A2387', '#F27121'] //边框颜色支持渐变色 最多10中颜色 75 | } 76 | 77 | ``` 78 | -------------------------------------------------------------------------------- /types/code.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace StrongCode { 2 | 3 | /** 4 | * @description 保存图片 兼容Nvue 5 | */ 6 | interface NvueCanvasConText extends UniApp.CanvasContext { 7 | toTempFilePath(x: number, y: number, w: number, h: number, dw: number, dh:number, type?: string, quality?: number, callback?: (result: any) => void): void; 8 | } 9 | /** 10 | * @description 二维码边框参数 11 | * @param color 边框颜色 默认没有边框 如果需要传数组 多个颜色支持渐变 12 | * @param lineWidth 二维码边框的宽度 13 | * @param opacity 二维码边框颜色透明度 默认不透明 0~1 14 | * @param degree 二维码边框的角度 15 | */ 16 | interface BorderCode { 17 | color: string[], 18 | degree: number, 19 | lineWidth: number, 20 | opacity: number, 21 | } 22 | /** 23 | * @description 二维码边中间图片参数 24 | * @param src 图片地址 25 | * @param size 图片大小 26 | * @param color 图片边框颜色 默认为 #FFFFFF 27 | * @param type 图片类型 none circle round 默认none 28 | * @param width 如果type = circle | round 图片周围的白色边框粗细 默认为5 29 | */ 30 | interface CodeImg { 31 | src: string, 32 | size?: number, 33 | type?: string, 34 | color?: string, 35 | width?: number, 36 | degree: number, 37 | } 38 | /** 39 | * @description 二维码文字绘制 40 | * @param color 二维码绘制的文字颜色 默认黑色 如果需要修改 必须传数组 多种颜色表示可以渐变 41 | * @param font 二维码绘制的文字 默认normal 20px system-ui 42 | * @param content 要绘制的文字内容 43 | */ 44 | interface CodeText { 45 | opacity?: number, 46 | font?: string, 47 | position?: string, 48 | weight?: string, 49 | size?: number, 50 | color?: string[], 51 | content: string 52 | } 53 | /** 54 | * @description 生成二维码参数 55 | * @param id String canvasID 或者实列 必传√ 56 | * @param type String 二维码绘制码点类型 可以使用自定义图片绘制 默认为 none 非必传 57 | * @param size Number 画布canvas大小单位rpx 必传√ 58 | * @param code String/Number 生成二维码的code 必传√ 59 | * @param eyeSrc String 如果 type设置为 custom 则次属性必传 二维码的码眼图片地址 非必传 60 | * @param src String 二维码背景图片地址 非必传 61 | * @param padding Number 二维码内边距 默认0 单位rpx 非必穿 62 | * @param level Number 纠错等级 默认4 非必传 63 | * @param bgColor String 画布背景色 默认 #FFFFFF 非必传 64 | * @param text Object 要绘制的文字参数 不传则没有文字 非必传 65 | * @param color Array 二维码绘制的颜色 数组 可以传入多个颜色渐变 默认最多10种颜色渐变 不传默认#000000 非比传 66 | * @param img String 二维码中间log图片配置 不传则没有边框 非必传 67 | * @param border Object 二维码边框配置 不传则没有边框 非必传 68 | * @param source String 来源 非必传 69 | * @param ctx Object 自定义组件时需要 传this 必传√ 70 | */ 71 | interface BarCodePars { 72 | id: string | UniApp.CanvasContext, 73 | type?: string, 74 | source?: string, 75 | size: string | number, 76 | code: string, 77 | src?: string, 78 | eyeSrc?: string, 79 | padding?: number, 80 | level?: number, 81 | bgColor?: string, 82 | text?: CodeText, 83 | color?: string[], 84 | img?: CodeImg, 85 | border?: BorderCode, 86 | ctx: object 87 | } 88 | /** 89 | * @description 保存二维码或者条形码为图片 90 | * @param id String 保存画布的canvas-id 必传√ 91 | * @param width Number 保存画布的宽度 单位rpx 必传√ 92 | * @param height Number 保存画布的高度 单位rpx 必传√ß 93 | * @param type String 保存图片的类型 默认 png 非必传 94 | * @param quality Number 保存图片的质量 默认 1 可选 0~1 非必传 95 | * @param source 96 | * @param ctx Object 当前上下文 97 | */ 98 | interface SaveCanvasPars { 99 | id: string | UniApp.CanvasContext, 100 | type?: string, 101 | width: string | number, 102 | height: string | number, 103 | quality?: number, 104 | source?: string, 105 | ctx: object 106 | } 107 | /** 108 | * @description 条形码文字 109 | * @param size Number 文字大小 单位rpx 110 | * @param content String 文字内容 111 | * @param color Array 文字颜色 默认黑色 112 | * @param position String 文字位置 top bottom 113 | * @param padding Number 文字上下距离 114 | */ 115 | interface TextConfig { 116 | size?: number, 117 | content: string, 118 | opacity?: number, 119 | color?: string[], 120 | position?: string, 121 | padding?: number, 122 | } 123 | /** 124 | * @description 条形码生成参数 125 | * @param id String 条形码canvas ID 必传√ 126 | * @param width Number 条形码宽度 单位rpx 必传√ 127 | * @param height Number 条形码高度 单位rpx 必传√ 128 | * @param type String 生成条形码的类型 默认CODE128 可选值 CODE39 EAN ITF MSI Codabar Pharmacode 非必传 129 | * @param bgColor String 生成条形码的背景色 默认 #FFFFFF 非必传 130 | * @param color Array 条形码的颜色 默认黑色不见变 传入多个颜色渐变 最多10种颜色 如果颜色一样则不会渐变 131 | * @param ctx Object 自定义组建需要的上下文 必传√ 132 | * @param source 来源渠道 非必传 133 | */ 134 | interface OperationCodePars { 135 | id: string | UniApp.CanvasContext, 136 | width: number, 137 | height: number, 138 | type?: string, 139 | source?: string, 140 | text?: TextConfig, 141 | code: string, 142 | orient?: string, //horizontal水平 vertical垂直 143 | bgColor?: string, 144 | color?: string[], 145 | ctx: object 146 | } 147 | /** 148 | * @description 保存图片 兼容Nvue 149 | */ 150 | interface areaPars { 151 | width: number, 152 | height: number, 153 | top: number, 154 | left: number 155 | } 156 | /** 157 | * @description 保存图片 兼容Nvue 158 | */ 159 | interface BarcOpt { 160 | currcs: number, 161 | } 162 | /** 163 | * @description 绘制条形码所需参数 164 | */ 165 | interface PCodeOpt { 166 | CHAR_TILDE: number 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /codeType/code128.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @author wmf❤洛尘 3 | * @param code CODE128 4 | * @returns number[] 5 | * @description 生成条形码所需要的数据 6 | */ 7 | export const StringToCode128 = function (code: string): number[] { 8 | interface BarcOpt { 9 | currcs: number, 10 | } 11 | let barc: BarcOpt = { 12 | currcs: CODESET.C 13 | }; 14 | let bytes = GetBytes(code); 15 | let index = bytes[0] == CHAR_TILDE_TYPE.CHAR_TILDE ? 1 : 0; 16 | 17 | const perhapsCodeC = function (bytes: number[], codeset: number): number { 18 | for (let i = 0; i < bytes.length; i++) { 19 | const b = bytes[i] 20 | if ((b < 48 || b > 57) && b != CHAR_TILDE_TYPE.CHAR_TILDE) 21 | return codeset; 22 | } 23 | return CODESET.C; 24 | } 25 | const codesForChar = function (chr1: number, chr2: number, currcs: number): number[] { 26 | let result: number[] = []; 27 | let shifter = -1; 28 | if (charCompatible(chr1, currcs)) { 29 | if (currcs == CODESET.C) { 30 | if (chr2 == -1) { 31 | shifter = CHAR_TILDE_TYPE.SET_CODEB; 32 | currcs = CODESET.B; 33 | } 34 | else if ((chr2 != -1) && !charCompatible(chr2, currcs)) { 35 | if (charCompatible(chr2, CODESET.A)) { 36 | shifter = CHAR_TILDE_TYPE.SET_CODEA; 37 | currcs = CODESET.A; 38 | } 39 | else { 40 | shifter = CHAR_TILDE_TYPE.SET_CODEB; 41 | currcs = CODESET.B; 42 | } 43 | } 44 | } 45 | } 46 | else { 47 | if ((chr2 != -1) && !charCompatible(chr2, currcs)) { 48 | switch (currcs) { 49 | case CODESET.A: 50 | shifter = CHAR_TILDE_TYPE.SET_CODEB; 51 | currcs = CODESET.B; 52 | break; 53 | case CODESET.B: 54 | shifter = CHAR_TILDE_TYPE.SET_CODEA; 55 | currcs = CODESET.A; 56 | break; 57 | } 58 | } 59 | else { 60 | shifter = CHAR_TILDE_TYPE.SET_SHIFT; 61 | } 62 | } 63 | if (shifter != -1) { 64 | result.push(shifter); 65 | result.push(codeValue(chr1)); 66 | } 67 | else { 68 | if (currcs == CODESET.C) { 69 | result.push(codeValue(chr1, chr2)); 70 | } 71 | else { 72 | result.push(codeValue(chr1)); 73 | } 74 | } 75 | barc.currcs = currcs; 76 | 77 | return result; 78 | } 79 | const csa1 = bytes.length > 0 ? CodeSetAllowedFor(bytes[index++]) : CODESET.AB; 80 | const csa2 = bytes.length > 0 ? CodeSetAllowedFor(bytes[index++]) : CODESET.AB; 81 | barc.currcs = getBestStartSet(csa1, csa2); 82 | barc.currcs = perhapsCodeC(bytes, barc.currcs); 83 | let codes: number[] = []; 84 | 85 | switch (barc.currcs) { 86 | case CODESET.A: 87 | codes.push(CHAR_TILDE_TYPE.SET_STARTA); 88 | break; 89 | case CODESET.B: 90 | codes.push(CHAR_TILDE_TYPE.SET_STARTB); 91 | break; 92 | default: 93 | codes.push(CHAR_TILDE_TYPE.SET_STARTC); 94 | break; 95 | } 96 | for (let i = 0; i < bytes.length; i++) { 97 | let b1 = bytes[i]; 98 | if (b1 in REPLACE_CODES) { 99 | codes.push(REPLACE_CODES[b1]); 100 | i++; 101 | b1 = bytes[i]; 102 | } 103 | const b2 = bytes.length > (i + 1) ? bytes[i + 1] : -1; 104 | codes = codes.concat(codesForChar(b1, b2, barc.currcs)); 105 | 106 | if (barc.currcs == CODESET.C) i++; 107 | } 108 | let checksum = codes[0]; 109 | for (let weight = 1; weight < codes.length; weight++) { 110 | checksum += (weight * codes[weight]); 111 | } 112 | codes.push(checksum % 103); 113 | codes.push(CHAR_TILDE_TYPE.SET_STOP); 114 | return codes; 115 | } 116 | /** 117 | * @author wmf❤洛尘 118 | * @method GetBytes 119 | * @description 字符串转Unicode编码 120 | * @param str 121 | * @returns 编码数组 122 | */ 123 | export const GetBytes = function (str: string) { 124 | const bytes: number[] = []; 125 | for (let i = 0; i < str.length; i++) { 126 | bytes.push(str.charCodeAt(i)); 127 | } 128 | return bytes; 129 | } 130 | export const CodeSetAllowedFor = function (chr: number) { 131 | if (chr >= 48 && chr <= 57) { 132 | return CODESET.ANY; 133 | } 134 | else if (chr >= 32 && chr <= 95) { 135 | return CODESET.AB; 136 | } 137 | else { 138 | return chr < 32 ? CODESET.A : CODESET.B; 139 | } 140 | } 141 | 142 | export const getBestStartSet = function (csa1: number, csa2: number): number { 143 | let vote = 0; 144 | vote += csa1 == CODESET.A ? 1 : 0; 145 | vote += csa1 == CODESET.B ? -1 : 0; 146 | vote += csa2 == CODESET.A ? 1 : 0; 147 | vote += csa2 == CODESET.B ? -1 : 0; 148 | return vote > 0 ? CODESET.A : CODESET.B; 149 | } 150 | export const codeValue = function (chr1: number, chr2?: number): number { 151 | if (typeof chr2 == "undefined") { 152 | return chr1 >= 32 ? chr1 - 32 : chr1 + 64; 153 | } 154 | else { 155 | return parseInt(String.fromCharCode(chr1) + String.fromCharCode(chr2)); 156 | } 157 | } 158 | 159 | export const charCompatible = function (chr: number, codeset: number): boolean { 160 | let csa = codeSetAllowedFor(chr); 161 | if (csa == CODESET.ANY) return true; 162 | if (csa == CODESET.AB) return true; 163 | if (csa == CODESET.A && codeset == CODESET.A) return true; 164 | if (csa == CODESET.B && codeset == CODESET.B) return true; 165 | return false; 166 | } 167 | 168 | export const codeSetAllowedFor = function (chr: number): number { 169 | if (chr >= 48 && chr <= 57) { 170 | return CODESET.ANY; 171 | } 172 | else if (chr >= 32 && chr <= 95) { 173 | return CODESET.AB; 174 | } 175 | else { 176 | return chr < 32 ? CODESET.A : CODESET.B; 177 | } 178 | } 179 | 180 | export const enum CHAR_TILDE_TYPE { 181 | CHAR_TILDE = 126, 182 | CODE_FNC1 = 102, 183 | SET_STARTA = 103, 184 | SET_STARTB = 104, 185 | SET_STARTC = 105, 186 | SET_SHIFT = 98, 187 | SET_CODEA = 101, 188 | SET_CODEB = 100, 189 | SET_STOP = 106 190 | } 191 | 192 | 193 | export const REPLACE_CODES: StrongCode.PCodeOpt = { 194 | CHAR_TILDE: CHAR_TILDE_TYPE.CODE_FNC1 //GS1-128 195 | } 196 | export const enum CODESET { 197 | ANY= 1, 198 | AB = 2, 199 | A = 3, 200 | B = 4, 201 | C = 5 202 | }; -------------------------------------------------------------------------------- /common/metadata.ts: -------------------------------------------------------------------------------- 1 | export const ADELTA: number[] = [ 2 | 0, 11, 15, 19, 23, 27, 31,16, 3 | 18, 20, 22, 24,26, 28, 20, 22, 4 | 24, 24, 26, 28, 28, 22, 24,24, 5 | 26, 26, 28, 28, 24, 24, 26, 26, 6 | 26, 28, 28, 24, 26, 26, 26, 28, 28 7 | ]; 8 | export const VPAT: number[] = [ 9 | 0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d, 10 | 0x928, 0xb78, 0x45d, 0xa17, 0x532, 0x9a6, 0x683, 0x8c9, 11 | 0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75, 12 | 0x250, 0x9d5, 0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64, 13 | 0x541, 0xc69 14 | ]; 15 | export const fmtword: number[] = [//纠错等级 16 | 0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976, //L 17 | 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, //M 18 | 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed, //Q 19 | 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b //H 20 | ]; 21 | export const ECBLOCKS: number[] = [ 22 | 1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17, 1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28,1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22, 1, 0, 80, 23 | 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16, 1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22, 2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28, 2, 0, 78, 20, 4, 24 | 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26, 2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26, 2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24, 2, 2, 68, 18, 4, 1, 43, 25 | 26, 6, 2, 19, 24, 6, 2, 15, 28, 4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24, 2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28, 4, 0, 107, 26, 8, 1, 37, 22, 8, 26 | 4, 20, 24, 12, 4, 11, 22, 3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24, 5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24, 5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 27 | 19, 24, 3, 13, 15, 30, 1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28, 5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28, 3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 28 | 21, 26, 9, 16, 13, 26, 3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28, 4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30, 2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 29 | 24, 30, 34, 0, 13, 24, 4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30, 6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30, 8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 30 | 24, 30, 22, 13, 15, 30, 10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30, 8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30, 3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 31 | 24, 30, 11, 31, 15, 30, 7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30, 5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30, 13, 3, 115, 30, 2, 29, 46, 28, 42, 32 | 1, 24, 30, 23, 28, 15, 30, 17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30, 17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30, 13, 6, 115, 30, 14, 23, 46, 33 | 28, 44, 7, 24, 30, 59, 1, 16, 30, 12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30, 6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30, 17, 4, 122, 30, 29, 14, 34 | 46, 28, 49, 10, 24, 30, 24, 46, 15, 30, 4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30, 20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30, 19, 6, 118, 30, 35 | 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30 36 | ]; 37 | 38 | export const GLOG: number[] = [ 39 | 0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b, 40 | 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71, 41 | 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45, 42 | 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6, 43 | 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88, 44 | 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40, 45 | 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d, 46 | 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57, 47 | 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18, 48 | 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e, 49 | 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61, 50 | 0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2, 51 | 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6, 52 | 0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a, 53 | 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7, 54 | 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf 55 | ]; 56 | // 指数表 57 | export const GEXP: number[] = [ 58 | 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 59 | 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 60 | 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 61 | 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, 62 | 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 63 | 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 64 | 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 65 | 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 66 | 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 67 | 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 68 | 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 69 | 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 70 | 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 71 | 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09, 72 | 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, 73 | 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00 74 | ]; 75 | // 条形码所需byte 76 | export const PATTERNS: Array> = [ 77 | [2, 1, 2, 2, 2, 2, 0, 0], // 0 78 | [2, 2, 2, 1, 2, 2, 0, 0], // 1 79 | [2, 2, 2, 2, 2, 1, 0, 0], // 2 80 | [1, 2, 1, 2, 2, 3, 0, 0], // 3 81 | [1, 2, 1, 3, 2, 2, 0, 0], // 4 82 | [1, 3, 1, 2, 2, 2, 0, 0], // 5 83 | [1, 2, 2, 2, 1, 3, 0, 0], // 6 84 | [1, 2, 2, 3, 1, 2, 0, 0], // 7 85 | [1, 3, 2, 2, 1, 2, 0, 0], // 8 86 | [2, 2, 1, 2, 1, 3, 0, 0], // 9 87 | [2, 2, 1, 3, 1, 2, 0, 0], // 10 88 | [2, 3, 1, 2, 1, 2, 0, 0], // 11 89 | [1, 1, 2, 2, 3, 2, 0, 0], // 12 90 | [1, 2, 2, 1, 3, 2, 0, 0], // 13 91 | [1, 2, 2, 2, 3, 1, 0, 0], // 14 92 | [1, 1, 3, 2, 2, 2, 0, 0], // 15 93 | [1, 2, 3, 1, 2, 2, 0, 0], // 16 94 | [1, 2, 3, 2, 2, 1, 0, 0], // 17 95 | [2, 2, 3, 2, 1, 1, 0, 0], // 18 96 | [2, 2, 1, 1, 3, 2, 0, 0], // 19 97 | [2, 2, 1, 2, 3, 1, 0, 0], // 20 98 | [2, 1, 3, 2, 1, 2, 0, 0], // 21 99 | [2, 2, 3, 1, 1, 2, 0, 0], // 22 100 | [3, 1, 2, 1, 3, 1, 0, 0], // 23 101 | [3, 1, 1, 2, 2, 2, 0, 0], // 24 102 | [3, 2, 1, 1, 2, 2, 0, 0], // 25 103 | [3, 2, 1, 2, 2, 1, 0, 0], // 26 104 | [3, 1, 2, 2, 1, 2, 0, 0], // 27 105 | [3, 2, 2, 1, 1, 2, 0, 0], // 28 106 | [3, 2, 2, 2, 1, 1, 0, 0], // 29 107 | [2, 1, 2, 1, 2, 3, 0, 0], // 30 108 | [2, 1, 2, 3, 2, 1, 0, 0], // 31 109 | [2, 3, 2, 1, 2, 1, 0, 0], // 32 110 | [1, 1, 1, 3, 2, 3, 0, 0], // 33 111 | [1, 3, 1, 1, 2, 3, 0, 0], // 34 112 | [1, 3, 1, 3, 2, 1, 0, 0], // 35 113 | [1, 1, 2, 3, 1, 3, 0, 0], // 36 114 | [1, 3, 2, 1, 1, 3, 0, 0], // 37 115 | [1, 3, 2, 3, 1, 1, 0, 0], // 38 116 | [2, 1, 1, 3, 1, 3, 0, 0], // 39 117 | [2, 3, 1, 1, 1, 3, 0, 0], // 40 118 | [2, 3, 1, 3, 1, 1, 0, 0], // 41 119 | [1, 1, 2, 1, 3, 3, 0, 0], // 42 120 | [1, 1, 2, 3, 3, 1, 0, 0], // 43 121 | [1, 3, 2, 1, 3, 1, 0, 0], // 44 122 | [1, 1, 3, 1, 2, 3, 0, 0], // 45 123 | [1, 1, 3, 3, 2, 1, 0, 0], // 46 124 | [1, 3, 3, 1, 2, 1, 0, 0], // 47 125 | [3, 1, 3, 1, 2, 1, 0, 0], // 48 126 | [2, 1, 1, 3, 3, 1, 0, 0], // 49 127 | [2, 3, 1, 1, 3, 1, 0, 0], // 50 128 | [2, 1, 3, 1, 1, 3, 0, 0], // 51 129 | [2, 1, 3, 3, 1, 1, 0, 0], // 52 130 | [2, 1, 3, 1, 3, 1, 0, 0], // 53 131 | [3, 1, 1, 1, 2, 3, 0, 0], // 54 132 | [3, 1, 1, 3, 2, 1, 0, 0], // 55 133 | [3, 3, 1, 1, 2, 1, 0, 0], // 56 134 | [3, 1, 2, 1, 1, 3, 0, 0], // 57 135 | [3, 1, 2, 3, 1, 1, 0, 0], // 58 136 | [3, 3, 2, 1, 1, 1, 0, 0], // 59 137 | [3, 1, 4, 1, 1, 1, 0, 0], // 60 138 | [2, 2, 1, 4, 1, 1, 0, 0], // 61 139 | [4, 3, 1, 1, 1, 1, 0, 0], // 62 140 | [1, 1, 1, 2, 2, 4, 0, 0], // 63 141 | [1, 1, 1, 4, 2, 2, 0, 0], // 64 142 | [1, 2, 1, 1, 2, 4, 0, 0], // 65 143 | [1, 2, 1, 4, 2, 1, 0, 0], // 66 144 | [1, 4, 1, 1, 2, 2, 0, 0], // 67 145 | [1, 4, 1, 2, 2, 1, 0, 0], // 68 146 | [1, 1, 2, 2, 1, 4, 0, 0], // 69 147 | [1, 1, 2, 4, 1, 2, 0, 0], // 70 148 | [1, 2, 2, 1, 1, 4, 0, 0], // 71 149 | [1, 2, 2, 4, 1, 1, 0, 0], // 72 150 | [1, 4, 2, 1, 1, 2, 0, 0], // 73 151 | [1, 4, 2, 2, 1, 1, 0, 0], // 74 152 | [2, 4, 1, 2, 1, 1, 0, 0], // 75 153 | [2, 2, 1, 1, 1, 4, 0, 0], // 76 154 | [4, 1, 3, 1, 1, 1, 0, 0], // 77 155 | [2, 4, 1, 1, 1, 2, 0, 0], // 78 156 | [1, 3, 4, 1, 1, 1, 0, 0], // 79 157 | [1, 1, 1, 2, 4, 2, 0, 0], // 80 158 | [1, 2, 1, 1, 4, 2, 0, 0], // 81 159 | [1, 2, 1, 2, 4, 1, 0, 0], // 82 160 | [1, 1, 4, 2, 1, 2, 0, 0], // 83 161 | [1, 2, 4, 1, 1, 2, 0, 0], // 84 162 | [1, 2, 4, 2, 1, 1, 0, 0], // 85 163 | [4, 1, 1, 2, 1, 2, 0, 0], // 86 164 | [4, 2, 1, 1, 1, 2, 0, 0], // 87 165 | [4, 2, 1, 2, 1, 1, 0, 0], // 88 166 | [2, 1, 2, 1, 4, 1, 0, 0], // 89 167 | [2, 1, 4, 1, 2, 1, 0, 0], // 90 168 | [4, 1, 2, 1, 2, 1, 0, 0], // 91 169 | [1, 1, 1, 1, 4, 3, 0, 0], // 92 170 | [1, 1, 1, 3, 4, 1, 0, 0], // 93 171 | [1, 3, 1, 1, 4, 1, 0, 0], // 94 172 | [1, 1, 4, 1, 1, 3, 0, 0], // 95 173 | [1, 1, 4, 3, 1, 1, 0, 0], // 96 174 | [4, 1, 1, 1, 1, 3, 0, 0], // 97 175 | [4, 1, 1, 3, 1, 1, 0, 0], // 98 176 | [1, 1, 3, 1, 4, 1, 0, 0], // 99 177 | [1, 1, 4, 1, 3, 1, 0, 0], // 100 178 | [3, 1, 1, 1, 4, 1, 0, 0], // 101 179 | [4, 1, 1, 1, 3, 1, 0, 0], // 102 180 | [2, 1, 1, 4, 1, 2, 0, 0], // 103 181 | [2, 1, 1, 2, 1, 4, 0, 0], // 104 182 | [2, 1, 1, 2, 3, 2, 0, 0], // 105 183 | [2, 3, 3, 1, 1, 1, 2, 0] // 106 184 | ] 185 | export const characters: string[] = [ 186 | "0", "1", "2", "3", 187 | "4", "5", "6", "7", 188 | "8", "9", "A", "B", 189 | "C", "D", "E", "F", 190 | "G", "H", "I", "J", 191 | "K", "L", "M", "N", 192 | "O", "P", "Q", "R", 193 | "S", "T", "U", "V", 194 | "W", "X", "Y", "Z", 195 | "-", ".", " ", "$", 196 | "/", "+", "%", "*" 197 | ]; 198 | export const encodings: number[] = [ 199 | 20957, 29783, 23639, 30485, 200 | 20951, 29813, 23669, 20855, 201 | 29789, 23645, 29975, 23831, 202 | 30533, 22295, 30149, 24005, 203 | 21623, 29981, 23837, 22301, 204 | 30023, 23879, 30545, 22343, 205 | 30161, 24017, 21959, 30065, 206 | 23921, 22385, 29015, 18263, 207 | 29141, 17879, 29045, 18293, 208 | 17783, 29021, 18269, 17477, 209 | 17489, 17681, 20753, 35770 210 | ]; 211 | -------------------------------------------------------------------------------- /lib/qrcode.ts: -------------------------------------------------------------------------------- 1 | import { 2 | QRCodeInit, 3 | UNIT_CONVERSION, 4 | UtF16TO8, 5 | SaveCodeImg, 6 | SetGradient, 7 | getTimeDate, 8 | GETSIZE, 9 | getPixelRatio 10 | } from '../common/support' 11 | 12 | export const WidgetCode = function(opt: StrongCode.BarCodePars,callback?: Function){ 13 | if (!opt.code) { 14 | console.warn("没有找到二维码code"); 15 | return 16 | } 17 | if (!opt.id){ 18 | console.warn("没有找到二维码canvas id或者实列!"); 19 | return 20 | } 21 | let CTX: UniApp.CanvasContext; 22 | //二维码绘制时间记录开始 23 | const timeStar: number = new Date().getTime(); 24 | //实例化QRCodeInit 25 | const BARCODE: QRCodeInit = new QRCodeInit(opt.level); 26 | // 二维码code转码 主要针对纯汉字 27 | const CODE: string = UtF16TO8(opt.code) 28 | if (!CODE) { 29 | console.warn("二维码code转换错误"); 30 | return 31 | } 32 | // 生成二维码所需要的数据 33 | const frame: number[] = BARCODE.Genframe(CODE); 34 | 35 | const width: number = BARCODE.getWidth(); 36 | 37 | if (Object.prototype.toString.call(opt.id) == '[object String]') { 38 | CTX = uni.createCanvasContext(opt.id, opt.ctx || null); 39 | RepaintCanvas(timeStar,opt, CTX,frame, width, callback) 40 | } else if (Object.prototype.toString.call(opt.id) == '[object Object]') {//在此兼容nvue 41 | CTX = opt.id as UniApp.CanvasContext; 42 | RepaintCanvas(timeStar,opt, CTX,frame, width,callback) 43 | } 44 | 45 | } 46 | const RepaintCanvas = function (time: number,opt: StrongCode.BarCodePars, ctx: UniApp.CanvasContext, frame: number[], width: number, callback?: Function) { 47 | const SIZE: number = GETSIZE[opt.source || 'none'] ? GETSIZE[opt.source || 'none'](opt.size) : UNIT_CONVERSION(opt.size); //画布大小 48 | const W: number = GETSIZE[opt.source || 'none'] ? GETSIZE[opt.source || 'none'](opt.size) : UNIT_CONVERSION(opt.size); 49 | const H: number = GETSIZE[opt.source || 'none'] ? GETSIZE[opt.source || 'none'](opt.size) : UNIT_CONVERSION(opt.size); 50 | const padding: number = ( UNIT_CONVERSION(opt.padding || 0) || 0) + (opt.border ? opt.border.lineWidth || 5 : 0);// 画布内边距 默认 0 单位rpx 51 | const px: number = Math.round((SIZE / (width + padding))); 52 | const offset: number = Math.floor((SIZE - px * width) / 2); 53 | 54 | ctx.clearRect(0, 0, W, H); 55 | ctx.setFillStyle(opt.bgColor || '#FFFFFF');//二维码背景色 56 | ctx.fillRect(0, 0, W, H);//设置画布大小 57 | // 设置画布背景 58 | opt.src ? ctx.drawImage(opt.src,0,0, SIZE, SIZE) : false; 59 | //绘制二维码颜色 支持渐变 60 | opt.color ? SetColorCode(ctx, W, H, opt.color) : ctx.setFillStyle("#000000"); 61 | 62 | for (let i = 0; i < width; i++) {//开始生成二维码 63 | for (let j = 0; j < width; j++) { 64 | if (frame[j * width + i]) { 65 | SetCodeType[opt.type || 'none'] ? SetCodeType[opt.type || 'none'](opt.bgColor,ctx,px * i + offset, px * j + offset , px, px,opt.source) : SetCodeType[opt.type || 'none'](opt.bgColor,ctx,px * i + offset, px * j + offset , px, px,opt.source) 66 | } 67 | } 68 | } 69 | // 图片放在下面 防止图片在二维码下面 70 | opt.img ? SetImageType[opt.img?.type || 'none'] ? SetImageType[opt.img?.type || 'none'](ctx,SIZE,opt.img,opt.source || 'none') : SetImageType['none'](ctx,SIZE,opt.img,opt.source || 'none') : false; 71 | //绘制二维码文字 72 | opt.text ? SetTextCode(ctx, W, H, opt.text,opt.source || "none") : false; 73 | // 绘制二维码边框 支持渐变 透明度 74 | opt.border ? SetBorderCode(ctx, W, H , opt.border, opt.source || "none") : false; 75 | ctx.restore(); 76 | starDraw(ctx,opt,time,callback)//开始绘制 77 | 78 | } 79 | const starDraw = function (ctx: UniApp.CanvasContext,opt: StrongCode.BarCodePars,time: number,callback?: Function): void { 80 | setTimeout(()=>{ 81 | ctx.draw(false, async (res) => { 82 | callback ? callback({ 83 | ...res, 84 | createTime: getTimeDate(), 85 | takeUpTime: ((new Date()).getTime()) - time, 86 | img: await SaveCodeImg({ 87 | width: opt.size, 88 | height: opt.size, 89 | id: opt.id, 90 | source: opt.source, 91 | ctx: opt.ctx || null 92 | }), 93 | source: opt.source, 94 | model: getPixelRatio('model') as string,// 设备型号 95 | system: getPixelRatio('system') as string,// 操作系统名称及版本,如Android 10 96 | platform: getPixelRatio('platform') as string, //客户端平台,值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+) 97 | code: opt.code, 98 | size: UNIT_CONVERSION(opt.size), 99 | id: Object.prototype.toString.call(opt.id) == '[object String]' ? opt.id : "nvue" 100 | }) : null; 101 | }); 102 | },300) 103 | 104 | } 105 | type codeGroup = 'none' | 'starry'| 'square' | 'dots'| 'custom'; 106 | interface CodeTypeValue { 107 | (bg: string,ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string): void 108 | } 109 | type QRCodeType = Record 110 | /** 111 | * @method SetCodeType 112 | * @author wmf 113 | * @Date 2021-11-15 114 | * @LastEditTime 2021-11-22 115 | * @description 设置二维码码点 116 | */ 117 | const SetCodeType: QRCodeType = { 118 | // 正常码点 119 | 'none': function (bg: string = "#ffffff",ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string){ 120 | ctx.fillRect(x,y,w,h); 121 | }, 122 | // 星星码点 暂未实现 123 | 'starry': function (bg: string = "#ffffff",ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string){ 124 | ctx.drawImage('', x, y, w, h) 125 | }, 126 | // 圆点码点 127 | 'dots': function (bg: string = "#ffffff",ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string){ 128 | ctx.save(); 129 | ctx.beginPath(); 130 | ctx.arc(x, y, w/2, 0, 2 * Math.PI); 131 | ctx.closePath(); 132 | ctx.fill(); 133 | ctx.setLineWidth(1); 134 | ctx.setStrokeStyle(bg); 135 | ctx.stroke(); 136 | ctx.clip(); 137 | ctx.restore(); 138 | }, 139 | //正方形码点 140 | 'square': function (bg: string = "#ffffff", ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string) { 141 | if(source == 'MP-BAIDU'){//百度小程序不支持arcTo方法 142 | ctx.fillRect(x,y,w,h); 143 | return 144 | } 145 | ctx.save(); 146 | ctx.beginPath(); 147 | ctx.moveTo(x, y); 148 | ctx.arcTo(x + w, y, x + w, y + h, 0); 149 | ctx.arcTo(x + w, y + h, x, y + h, 0); 150 | ctx.arcTo(x, y + h, x, y, 0); 151 | ctx.arcTo(x, y, x + w, y, 0); 152 | ctx.fill(); 153 | ctx.closePath(); 154 | ctx.setLineWidth(1); 155 | ctx.setStrokeStyle(bg); 156 | ctx.stroke(); 157 | ctx.clip(); 158 | ctx.restore() 159 | }, 160 | // 自定义图片为码点 暂未实现 161 | 'custom': function (bg: string = "#ffffff", ctx: UniApp.CanvasContext,x: number, y: number, w: number, h: number,source: string) { 162 | ctx.drawImage('', x, y, w, h) 163 | }, 164 | } 165 | /** 166 | * @method SetColorCode 167 | * @author wmf 168 | * @Date 2021-11-08 169 | * @LastEditTime 2021-11-08 170 | * @todo 颜色支持多种渐变 171 | * @description 设置二维码颜色 支持渐变色 172 | */ 173 | const SetColorCode = function (ctx: UniApp.CanvasContext,w: number,h: number,colors: string[]): void { 174 | const GRD = SetGradient(ctx,w,h,colors) 175 | ctx.setFillStyle(GRD) 176 | } 177 | 178 | 179 | type imgGroup = 'none' | 'circle' | 'round'; 180 | interface ImageTypeValue { 181 | (ctx:UniApp.CanvasContext,size: number, img: StrongCode.CodeImg,source: string): void 182 | } 183 | type ImageType = Record 184 | /** 185 | * @author wmf 186 | * @method SetImageType 187 | * @description 二维码中间log绘制 188 | */ 189 | const SetImageType: ImageType = {//none circle round 190 | 'none': function SetImageCode(ctx: UniApp.CanvasContext,size: number, img: StrongCode.CodeImg,source: string){ 191 | const iconSize = GETSIZE[source](img.size || 30) 192 | const width = Number(((size - iconSize) / 2).toFixed(2)); 193 | ctx.save(); 194 | ctx.drawImage(img.src, width, width, iconSize, iconSize) 195 | }, 196 | /** 197 | * @method SetCircleImg 198 | * @author wmf 199 | * @todo 二维码中间log 圆形 200 | * @description 设置二维码log为圆形 201 | */ 202 | 'circle': function SetCircleImg(ctx: UniApp.CanvasContext,size: number, img: StrongCode.CodeImg,source: string){ 203 | const r: number = GETSIZE[source](img.size || 30); 204 | const w: number = r * 2; 205 | const x: number = size/2 - r; 206 | const y: number = size/2 - r; 207 | const cx: number = x + r; 208 | const cy: number = y + r; 209 | ctx.save(); 210 | ctx.beginPath(); 211 | ctx.arc(cx, cy, r, 0, 2 * Math.PI); 212 | ctx.closePath(); 213 | ctx.setLineWidth(GETSIZE[source](img.width || 5)) 214 | ctx.setStrokeStyle(img.color || "#FFFFFF"); // 设置绘制圆形边框的颜色 215 | ctx.stroke(); 216 | ctx.clip(); 217 | ctx.drawImage(img.src, x, y, w, w); 218 | }, 219 | /** 220 | * @method SetRoundImg 221 | * @author wmf 222 | * @todo 二维码中间log 圆角 223 | * @description 设置二维码log为圆角 224 | */ 225 | 'round': function SetRoundImg(ctx: UniApp.CanvasContext,size: number, img: StrongCode.CodeImg,source: string) { 226 | if(source == 'MP-BAIDU'){//百度小程序不支持arcTo方法 227 | const r: number = GETSIZE[source](img.size || 30); 228 | const w: number = r * 2; 229 | const x: number = size/2 - r; 230 | const y: number = size/2 - r; 231 | const cx: number = x + r; 232 | const cy: number = y + r; 233 | ctx.save(); 234 | ctx.beginPath(); 235 | ctx.arc(cx, cy, r, 0, 2 * Math.PI); 236 | ctx.closePath(); 237 | ctx.setLineWidth(GETSIZE[source](img.width || 5)) 238 | ctx.setStrokeStyle(img.color || "#FFFFFF"); // 设置绘制圆形边框的颜色 239 | ctx.stroke(); 240 | ctx.clip(); 241 | ctx.drawImage(img.src, x, y, w, w); 242 | return 243 | 244 | } 245 | let r: number = img.degree || 5; 246 | const iconSize = GETSIZE[source](img.size || 30); 247 | const w: number = iconSize; 248 | const h: number = iconSize; 249 | const x: number = size/2 - iconSize/2; 250 | const y: number = size/2 - iconSize/2; 251 | w < 2 * r ? r = w / 2 : false; 252 | h < 2 * r ? r = h / 2 : false; 253 | ctx.save(); 254 | ctx.beginPath(); 255 | ctx.moveTo(x + r, y); 256 | ctx.arcTo(x + w, y, x + w, y + h, r); 257 | ctx.arcTo(x + w, y + h, x, y + h, r); 258 | ctx.arcTo(x, y + h, x, y, r); 259 | ctx.arcTo(x, y, x + w, y, r); 260 | ctx.closePath(); 261 | ctx.setLineWidth(GETSIZE[source](img.width || 5)) 262 | ctx.setStrokeStyle(img.color || "#FFFFFF"); // 设置绘制圆形边框的颜色 263 | ctx.stroke(); 264 | ctx.clip(); 265 | ctx.drawImage(img.src, x, y, w , w); 266 | } 267 | } 268 | /** 269 | * 270 | * @method SetBorderCode 271 | * @author wmf 272 | * @todo 二维码边框 圆角 边框颜色支持多种渐变 273 | * @description 设置二维码边框 274 | */ 275 | 276 | const SetBorderCode = function(ctx: UniApp.CanvasContext,w: number, h: number, border: StrongCode.BorderCode, source: string): void { 277 | const colors: string[] = border?.color || ['#000000']; 278 | const r: number = border?.degree || 5; 279 | const x: number = 0; 280 | const y: number = 0; 281 | const GRD = SetGradient(ctx,w,h,colors) 282 | ctx.restore(); 283 | ctx.setGlobalAlpha(border?.opacity || 1); 284 | if(source == 'MP-BAIDU'){//百度小程序不支持arcTo方法 285 | ctx.setLineWidth(border?.lineWidth || 5) 286 | ctx.setStrokeStyle(GRD); // 设置绘制边框的颜色 287 | ctx.strokeRect(0,0,w,h); 288 | }else{ 289 | ctx.beginPath(); 290 | ctx.moveTo(x + r, y); 291 | ctx.arcTo(x + w, y, x + w, y + h, r); 292 | ctx.arcTo(x + w, y + h, x, y + h, r); 293 | ctx.arcTo(x, y + h, x, y, r); 294 | ctx.arcTo(x, y, x + w, y, r); 295 | ctx.closePath(); 296 | ctx.setLineWidth(border?.lineWidth || 5) 297 | ctx.setStrokeStyle(GRD); // 设置绘制圆形边框的颜色 298 | ctx.stroke(); 299 | ctx.clip(); 300 | } 301 | ctx.setGlobalAlpha(1) 302 | } 303 | 304 | /** 305 | * @method SetTextCode 306 | * @author wmf 307 | * @Date 2021-11-08 308 | * @LastEditTime 2021-11-08 309 | * @todo 颜色支持多种渐变 310 | * @description 在二维码上设置文本 311 | */ 312 | const SetTextCode = function (ctx: UniApp.CanvasContext, w: number, h: number, text: StrongCode.CodeText, source: string ): void { 313 | let colors = text.color || ["#FFFFFF"]; 314 | const GRD = SetGradient(ctx, w, h, colors) 315 | ctx.restore(); 316 | ctx.setGlobalAlpha(text?.opacity || 1) 317 | ctx.setTextAlign('center');//'left'、'center'、'right' 318 | ctx.setTextBaseline('middle');//可选值 'top'、'bottom'、'middle'、'normal' 319 | ctx.font = text?.font || "normal 20px system-ui", 320 | // 小程序平台文字颜色不支持渐变 321 | source == 'H5' ? ctx.setFillStyle(GRD) : ctx.setFillStyle(colors[0]); 322 | ctx.fillText(text.content, w/2, w/2); 323 | ctx.setGlobalAlpha(1) 324 | } 325 | -------------------------------------------------------------------------------- /lib/barcode.ts: -------------------------------------------------------------------------------- 1 | import { 2 | UNIT_CONVERSION, 3 | UtF16TO8, 4 | SaveCodeImg, 5 | SetGradient, 6 | getTimeDate, 7 | getPixelRatio, 8 | GETSIZE 9 | } from '../common/support' 10 | 11 | import { BarCode128} from '../codeType' 12 | 13 | import {PATTERNS} from '../common/metadata' 14 | 15 | /** 16 | * @author wmf❤洛尘 17 | * @method OperationCode 创建条形码 18 | * @description 使用UniApp的条形码 19 | */ 20 | export const OperationCode = function (opt: StrongCode.OperationCodePars, callback?: Function) { 21 | if (!opt.code) { 22 | console.warn("没有找到条形码code"); 23 | return 24 | } 25 | if (!opt.id){ 26 | console.warn("没有找到条形码canvas id或者实列!"); 27 | return 28 | } 29 | let CTX: UniApp.CanvasContext; 30 | const timeStar: number = new Date().getTime(); 31 | if (Object.prototype.toString.call(opt.id) == '[object String]') { 32 | CTX = uni.createCanvasContext(opt.id, opt.ctx || null); 33 | BarCodeCanvas(timeStar,opt, CTX, callback) 34 | } else if (Object.prototype.toString.call(opt.id) == '[object Object]') {//在此兼容nvue 35 | CTX = opt.id as UniApp.CanvasContext; 36 | BarCodeCanvas(timeStar,opt, CTX, callback) 37 | } 38 | } 39 | export const BarCodeCanvas = function (time: number,opt: StrongCode.OperationCodePars, ctx: UniApp.CanvasContext, callback?: Function) { 40 | const HSize = opt.text ? (opt.text.size || 40) + (opt.text.padding || 20) : 0; 41 | const width: number = GETSIZE[opt.source || 'none'](opt.width); 42 | const height: number = GETSIZE[opt.source || 'none'](opt.height); 43 | // 条形码code转码 主要针对纯汉字 44 | const CODE: string = UtF16TO8(opt.code) 45 | //设置背景色 46 | ctx.setFillStyle(opt.bgColor || '#FFFFFF');//条形码背景色 47 | if (opt.orient == 'horizontal') { 48 | ctx.fillRect(0, 0, width, GETSIZE[opt.source || 'none'](opt.height + HSize));//设置画布大小 49 | }else{ 50 | ctx.fillRect(0, 0, GETSIZE[opt.source || 'none'](opt.height + HSize),width);//设 51 | } 52 | ctx.setFillStyle(opt.bgColor || '#FFFFFF');//二维码背景色 53 | let gc = new GraphicContentInit(ctx, width, height); 54 | 55 | //设置颜色 56 | opt.color ? SetBarCodeColors(ctx, width, height, opt.color || ['#000000'],opt.orient) : ctx.setFillStyle("#000000"); 57 | //开始画条形码 58 | SetBarCodeType[opt.type || 'CODE128'](CODE,gc,height,opt.orient,opt.text); 59 | //设置文字 60 | opt.text ? setBarCodeText(ctx,opt.text,width,height,opt.source || 'H5',opt.orient || 'horizontal') : false; 61 | starDraw(ctx,opt,time,callback); 62 | } 63 | const starDraw = function (ctx: UniApp.CanvasContext,opt: StrongCode.OperationCodePars,time: number,callback?: Function): void { 64 | setTimeout(()=>{ 65 | ctx.draw(false, async (res) => { 66 | callback ? callback({ 67 | ...res, 68 | createTime: getTimeDate(), 69 | takeUpTime: ((new Date()).getTime()) - time, 70 | img: await SaveCodeImg({ 71 | width: opt.orient == 'vertical' ? opt.height : opt.width, 72 | height: opt.orient == 'vertical' ? opt.width : opt.height, 73 | id: opt.id, 74 | source: opt.source, 75 | ctx: opt.ctx || null 76 | }), 77 | model: getPixelRatio('model') as string,// 设备型号 78 | system: getPixelRatio('system') as string,// 操作系统名称及版本,如Android 10 79 | platform: getPixelRatio('platform') as string, //客户端平台,值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+) 80 | code: opt.code, 81 | source: opt.source, 82 | with: UNIT_CONVERSION(opt.width), 83 | height: UNIT_CONVERSION(opt.height), 84 | id: Object.prototype.toString.call(opt.id) == '[object String]' ? opt.id : "nvue" 85 | }) : null; 86 | }); 87 | }) 88 | } 89 | //设置条形码颜色渐变色 90 | const SetBarCodeColors = function (ctx: UniApp.CanvasContext,width: number,height: number,colors: string[],orient: string = 'horizontal') { 91 | const GRD = SetGradient(ctx,orient == 'vertical' ? height : width,orient == 'vertical' ? width : height,colors) 92 | ctx.setFillStyle(GRD) 93 | } 94 | // 设置条形码文字 95 | const setBarCodeText = function (ctx: UniApp.CanvasContext, text: StrongCode.TextConfig, w: number, h: number,source: string,orient: string){ 96 | let colors = text.color || ["#000000"]; 97 | const GRD = SetGradient(ctx, w, h, colors); 98 | ctx.setGlobalAlpha(text?.opacity || 1) 99 | ctx.setTextAlign('center'); 100 | ctx.setTextBaseline('middle'); 101 | ctx.setFillStyle("#000000"); 102 | ctx.setFontSize(UNIT_CONVERSION(text.size as number || 40)); 103 | // 小程序平台文字颜色不支持渐变 104 | source == 'H5' ? ctx.setFillStyle(GRD) : ctx.setFillStyle(colors[0]); 105 | let y: number = text.position == 'bottom' ? h + UNIT_CONVERSION((text.padding || 40) + (text.size || 20)/2) : UNIT_CONVERSION(text.size as number)/2; 106 | if(orient =='vertical'){ 107 | ctx.rotate(90 * Math.PI / 180); 108 | if(text.position == 'bottom'){ 109 | ctx.translate(w,-h) 110 | ctx.fillText(text.content, -w/2, -UNIT_CONVERSION(text.padding || 20 + (text.size || 40)/2)); 111 | }else{ 112 | ctx.translate(-w/2,-y) 113 | ctx.fillText(text.content, w,-y); 114 | } 115 | }else{ 116 | ctx.fillText(text.content, w / 2, y); 117 | } 118 | ctx.setGlobalAlpha(1) 119 | } 120 | type codeGroup = 'CODE128' | 'CODE39' | 'EAN13' | 'UPCE' | 'UPCE' | 'UPC' | 'ITF' | 'ITF14' | 'MSI' | 'Codabar' | 'Pharmacode'; 121 | interface CodeTypeValue { 122 | (code: string, gc: GraphicContentInit,height: number,orient: string,text?: StrongCode.TextConfig): void 123 | } 124 | type BarCodeType = Record 125 | 126 | /** 127 | * @method SetBarCodeType 128 | * @author wmf❤洛尘 129 | * @Date 2021-11-22 130 | * @LastEditTime 2021-11-22 131 | * @description 生成的条形码类型 132 | */ 133 | const SetBarCodeType: BarCodeType = { 134 | /** 135 | * @method CODE128 136 | * @param code 条形码的值 137 | * @param gc 138 | * @param height 139 | * @description 条形码类型 默认CODE128 140 | */ 141 | "CODE128": function CODE128 (code: string, gc: GraphicContentInit,height: number,orient: string = 'horizontal',text?: StrongCode.TextConfig) { 142 | const CodeNum: number[] = BarCode128(code); 143 | let barWeight = gc.area.width / ((CodeNum.length - 3) * 11 + 35); 144 | let x: number = gc.area.left; 145 | let size: number = 0; 146 | if(text){ 147 | text.position == 'bottom' ? 0 : size = UNIT_CONVERSION((text?.size || 40) + (text?.padding || 20)) 148 | } 149 | const y = gc.area.top + size; 150 | // const barH = height - y - this.border 151 | const barH = height - gc.area.top; 152 | for (let i = 0; i < CodeNum.length; i++) { 153 | const c = CodeNum[i]; 154 | for (let bar = 0; bar < 8; bar += 2) { 155 | const barW = PATTERNS[c][bar] * barWeight; 156 | const spcW = PATTERNS[c][bar + 1] * barWeight; 157 | if (barW > 0) { 158 | gc.fillFgRect(orient == 'vertical' ? y : x, orient == 'vertical' ? x : y, orient == 'vertical' ? barH : barW, orient == 'vertical' ? barW : barH); 159 | } 160 | 161 | x += barW + spcW; 162 | } 163 | } 164 | }, 165 | /** 166 | * @method CODE39 167 | * @param code 条形码的值 168 | * @param gc 169 | * @param height 170 | * @todo 待实现 171 | * @description 条形码类型 CODE39 172 | */ 173 | "CODE39": function CODE39 (code: string, gc: GraphicContentInit, height: number): void { 174 | // const CodeNum: string = BarCode39(code); 175 | // console.log(CodeNum) 176 | console.error("条形码编码类型:CODE39暂未实现"); 177 | 178 | }, 179 | /** 180 | * @method EAN13 181 | * @param code 条形码的值 182 | * @param gc 183 | * @param height 184 | * @todo 待实现 185 | * @description 条形码类型 EAN2 186 | */ 187 | "EAN13": function EAN13 (code: string, gc: GraphicContentInit, height: number): void { 188 | if(code.search(/^[0-9]{12}$/) === -1){ 189 | console.error("条形码编码:code不符合EAN13规范"); 190 | return 191 | } 192 | console.error("条形码编码类型:EAN暂未实现"); 193 | }, 194 | /** 195 | * @method UPCE 196 | * @param code 条形码的值 197 | * @param gc 198 | * @param height 199 | * @todo 待实现 200 | * @description 条形码类型 UPCE 201 | */ 202 | "UPCE": function UPCE (code: string, gc: GraphicContentInit, height: number): void { 203 | if(code.search(/^[0-9]{6}$/) === -1){ 204 | console.error("条形码编码:code不符合UPCE规范"); 205 | return 206 | } 207 | console.error("条形码编码类型:EAN暂未实现"); 208 | }, 209 | /** 210 | * @method UPC 211 | * @param code 条形码的值 212 | * @param gc 213 | * @param height 214 | * @todo 待实现 215 | * @description 条形码类型 UPC 216 | */ 217 | "UPC": function UPC (code: string, gc: GraphicContentInit, height: number): void { 218 | if(code.search(/^[0-9]{1}$/) === -1){ 219 | console.error("条形码编码:code不符合UPC规范"); 220 | return 221 | } 222 | console.error("条形码编码类型:EAN暂未实现"); 223 | }, 224 | /** 225 | * @method ITF 226 | * @param code 条形码的值 227 | * @param gc 228 | * @param height 229 | * @todo 待实现 230 | * @description 条形码类型 ITF 231 | */ 232 | "ITF": function ITF (code: string, gc: GraphicContentInit, height: number): void { 233 | if(code.search(/^([0-9]{2})+$/) === -1){ 234 | console.error("条形码编码:code不符合ITF规范"); 235 | return 236 | } 237 | console.error("条形码编码类型:ITF暂未实现"); 238 | }, 239 | /** 240 | * @method ITF14 241 | * @param code 条形码的值 242 | * @param gc 243 | * @param height 244 | * @todo 待实现 245 | * @description 条形码类型 ITF14 246 | */ 247 | "ITF14": function ITF14 (code: string, gc: GraphicContentInit, height: number): void { 248 | if(code.search(/^[0-9]{14}$/) === -1){ 249 | console.error("条形码编码:code不符合ITF14规范"); 250 | return 251 | } 252 | console.error("条形码编码类型:ITF14暂未实现"); 253 | }, 254 | /** 255 | * @method MSI 256 | * @param code 条形码的值 257 | * @param gc 258 | * @param height 259 | * @todo 待实现 260 | * @description 条形码类型 MSI 261 | */ 262 | "MSI": function MSI (code: string, gc: GraphicContentInit, height: number): void { 263 | if(code.search(/^[0-9]+$/) === -1){ 264 | console.error("条形码编码:code不符合MSI规范"); 265 | return 266 | } 267 | console.error("条形码编码类型:MSI暂未实现"); 268 | }, 269 | /** 270 | * @method Codabar 271 | * @param code 条形码的值 272 | * @param gc 273 | * @param height 274 | * @todo 待实现 275 | * @description 条形码类型 Codabar 276 | */ 277 | "Codabar": function Codabar (code: string, gc: GraphicContentInit, height: number): void { 278 | if(code.search(/^[A-D][0-9\-\$\:\.\+\/]+[A-D]$/) === -1){ 279 | console.error("条形码编码:code不符合Codabar规范"); 280 | return 281 | } 282 | console.error("条形码编码类型:Codabar暂未实现"); 283 | }, 284 | /** 285 | * @method Pharmacode 286 | * @param code 条形码的值 287 | * @param gc 288 | * @param height 289 | * @todo 待实现 290 | * @description 条形码类型 Pharmacode 291 | */ 292 | "Pharmacode": function Pharmacode (code: string, gc: GraphicContentInit, height: number): void { 293 | 294 | if(isNaN(parseInt(code,10))){ 295 | console.error("条形码编码:code不符合Pharmacode类型"); 296 | return 297 | } 298 | if(!(Number(code) >= 3 && Number(code) <= 131070)){ 299 | console.error("条形码编码:code不符合Pharmacode类型"); 300 | return 301 | } 302 | console.error("条形码编码类型:Pharmacode暂未实现"); 303 | } 304 | } 305 | /** 306 | * @method GraphicContentInit 307 | * @description 初始化条形码 308 | */ 309 | class GraphicContentInit { 310 | width: number; 311 | height:number; 312 | quiet: number; 313 | borderSize: number = 0; 314 | paddingWidth: number = 0; 315 | ctx: UniApp.CanvasContext; 316 | area: StrongCode.areaPars; 317 | 318 | constructor (ctx: UniApp.CanvasContext,width: number,height: number) { 319 | this.ctx = ctx; 320 | this.width = width; 321 | this.height = height; 322 | this.quiet = Math.round(this.width / 40); 323 | this.area = { 324 | width: width - this.paddingWidth * 2 - this.quiet * 2, 325 | height: height - this.borderSize * 2, 326 | top: this.borderSize - 4, 327 | left: this.borderSize + this.quiet 328 | }; 329 | this.fillBgRect(0,0, width, height); 330 | this.fillBgRect(0, this.borderSize, width, height - this.borderSize * 2); 331 | } 332 | 333 | fillFgRect(x: number,y: number, width: number, height: number) { 334 | this.FILLRECT(x,y,width, height); 335 | }; 336 | fillBgRect(x: number,y: number, width: number, height: number) { 337 | this.FILLRECT(x,y, width, height); 338 | }; 339 | FILLRECT(x: number,y: number, width: number, height: number) { 340 | this.ctx.fillRect(x, y, width, height); 341 | } 342 | } 343 | -------------------------------------------------------------------------------- /common/support.ts: -------------------------------------------------------------------------------- 1 | import {ADELTA, VPAT,fmtword, ECBLOCKS, GLOG, GEXP} from './metadata' 2 | /** 3 | * @author wmf❤洛尘 4 | * @method UNIT_CONVERSION 5 | * @description UniApp rpx ——> px 默认750 6 | * @param num 7 | * @returns 转换后的像素 8 | */ 9 | export const UNIT_CONVERSION = function (num: string | number): number{ 10 | return uni.upx2px(Number(num)); 11 | } 12 | /** 13 | * @author wmf❤洛尘 14 | * @method getPixelRatio 15 | * @description 获取设备像素比 获取系统信息同步接口。 16 | * @returns num Number/String 17 | */ 18 | export const getPixelRatio = function(name?: string): string | number { 19 | const res = uni.getSystemInfoSync(); 20 | return res[name || 'pixelRatio'] 21 | } 22 | /** 23 | * @author wmf❤洛尘 24 | * @method getTimeDate 25 | * @description 获取当前日期 26 | * @returns YY-MM-DD HH:hh:mm 27 | */ 28 | export const getTimeDate = function(): string { 29 | const date: Date = new Date(); 30 | const year: string = date.toLocaleDateString().replace(/\//g,'-'); 31 | const hour: string = date.toTimeString().slice(0,8); 32 | return `${year} ${hour}` 33 | } 34 | type sizeGroup = 'none' | 'NVUE' | 'APP-PLUS' |'H5'| 'MP' | 'MP-ALIPAY' | 'MP-WEIXIN' | 'MP-BAIDU' | 'MP-TOUTIAO' | 'MP-LARK' | 'MP-QQ' | 'MP-KUAISHOU' | 'MP-360' | 'QUICKAPP-WEBVIEW' | 'QUICKAPP-WEBVIEW-UNION' | 'QUICKAPP-WEBVIEW-HUAWEI'; 35 | interface SizeTypeValue { 36 | (size: string | number): number 37 | } 38 | type SizeType = Record 39 | export const GETSIZE: SizeType = { 40 | // 支付宝小程序 41 | 'MP-ALIPAY': function (size: string | number): number { 42 | return UNIT_CONVERSION(size) * (getPixelRatio() as number) 43 | }, 44 | // 微信小程序 45 | 'MP-WEIXIN': function (size: string | number): number { 46 | return UNIT_CONVERSION(size) as number 47 | }, 48 | // 百度小程序 49 | 'MP-BAIDU': function (size: string | number): number { 50 | return UNIT_CONVERSION(size) as number 51 | }, 52 | // 字节小程序 53 | 'MP-TOUTIAO': function (size: string | number): number { 54 | return UNIT_CONVERSION(size) as number 55 | }, 56 | // QQ小程序 57 | 'MP-QQ': function (size: string | number): number { 58 | return UNIT_CONVERSION(size) as number 59 | }, 60 | // 飞书小程序 61 | 'MP-LARK': function (size: string | number): number { 62 | return UNIT_CONVERSION(size) as number 63 | }, 64 | // 快手小程序 65 | 'MP-KUAISHOU': function (size: string | number): number { 66 | return UNIT_CONVERSION(size) as number 67 | }, 68 | // 360小程序 69 | 'MP-360': function (size: string | number): number { 70 | return UNIT_CONVERSION(size) as number 71 | }, 72 | // 快应用通用(包含联盟、华为) 73 | 'QUICKAPP-WEBVIEW': function (size: string | number): number { 74 | return UNIT_CONVERSION(size) as number 75 | }, 76 | // 快应用联盟 77 | 'QUICKAPP-WEBVIEW-UNION': function (size: string | number): number { 78 | return UNIT_CONVERSION(size) as number 79 | }, 80 | // 快应用华为 81 | 'QUICKAPP-WEBVIEW-HUAWEI': function (size: string | number): number { 82 | return UNIT_CONVERSION(size) as number 83 | }, 84 | // 微信小程序/支付宝小程序/百度小程序/字节跳动小程序/飞书小程序/QQ小程序/360小程序 85 | 'MP': function (size: string | number): number { 86 | return UNIT_CONVERSION(size) as number 87 | }, 88 | // App 89 | 'APP-PLUS': function (size: string | number): number { 90 | return UNIT_CONVERSION(size) as number 91 | }, 92 | // App nvue 93 | 'NVUE': function (size: string | number): number { 94 | return UNIT_CONVERSION(size) as number 95 | }, 96 | // H5 97 | 'H5': function (size: string | number): number { 98 | return UNIT_CONVERSION(size) as number 99 | }, 100 | 'none': function (size: string | number): number { 101 | return UNIT_CONVERSION(size) as number 102 | } 103 | } 104 | /** 105 | * @author wmf❤洛尘 106 | * @method UtF16TO8 107 | * @description 汉字编码 108 | * @param code 109 | * @returns 编码后的字符串 110 | */ 111 | export const UtF16TO8 = function (code: string | number): string{ 112 | const CODE = code.toString(); 113 | let out: string = ''; 114 | let c: number = 0; 115 | for (let i = 0; i < CODE.length; i++) { 116 | c = CODE.charCodeAt(i); 117 | if ((c >= 0x0001) && (c <= 0x007F)) { 118 | out += CODE.charAt(i); 119 | } else if (c > 0x07FF) { 120 | out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); 121 | out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); 122 | out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 123 | } else { 124 | out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); 125 | out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 126 | } 127 | } 128 | return out; 129 | } 130 | 131 | /** 132 | * @author wmf❤洛尘 133 | * @method SaveCodeImg 134 | * @description 保存二维码或者条形码为图片 135 | * @param k 136 | * @returns 137 | */ 138 | export const SaveCodeImg = function(k: StrongCode.SaveCanvasPars): object{ 139 | let width: number = UNIT_CONVERSION(Number(k.width)); 140 | let height: number = UNIT_CONVERSION(Number(k.height)); 141 | const pixelRatio: number = getPixelRatio('pixelRatio') as number; 142 | const destWidth: number = width * pixelRatio; 143 | const destHeight: number = height * pixelRatio; 144 | if(k.source == 'MP-ALIPAY'){//支付宝小程序特殊处理 145 | width = destWidth; 146 | height = destHeight; 147 | } 148 | console.log(width,height) 149 | return new Promise((resolve)=>{ 150 | if (Object.prototype.toString.call(k.id) == '[object String]') { 151 | uni.canvasToTempFilePath({ 152 | canvasId: k.id as string, 153 | width: width, 154 | height: height, 155 | destWidth: destWidth, 156 | destHeight: destHeight, 157 | fileType: k.type || 'jpg', 158 | quality: k.quality || 1, 159 | complete: function(res) { 160 | resolve(res) 161 | } 162 | }, k.ctx) 163 | } else if (Object.prototype.toString.call(k.id) == '[object Object]') {//兼容nvue 164 | const ctx = k.id as StrongCode.NvueCanvasConText; 165 | ctx.toTempFilePath(0, 0, width, height, destWidth, destHeight, k.type || 'png', 1,(res)=> { 166 | resolve(res) 167 | }) 168 | } 169 | }) 170 | } 171 | // 颜色渐变设置 后期优化此方法 172 | export const SetGradient = function (ctx: UniApp.CanvasContext,width: number,height: number,colors: string[]): UniApp.CanvasGradient { 173 | let GRD: UniApp.CanvasGradient = ctx.createLinearGradient(0, 0, width, height); 174 | if(colors.length === 1){ 175 | GRD.addColorStop(0, colors[0]); 176 | GRD.addColorStop(1, colors[0]); 177 | } 178 | if(colors.length === 2){ 179 | GRD.addColorStop(0, colors[0]); 180 | GRD.addColorStop(1, colors[1]); 181 | } 182 | if(colors.length === 3){ 183 | GRD.addColorStop(0, colors[0]); 184 | GRD.addColorStop(0.5, colors[1]); 185 | GRD.addColorStop(1, colors[2]); 186 | } 187 | if(colors.length === 4){ 188 | GRD.addColorStop(0, colors[0]); 189 | GRD.addColorStop(0.35, colors[1]); 190 | GRD.addColorStop(0.7, colors[2]); 191 | GRD.addColorStop(1, colors[3]); 192 | } 193 | if(colors.length === 5){ 194 | GRD.addColorStop(0, colors[0]); 195 | GRD.addColorStop(0.35, colors[1]); 196 | GRD.addColorStop(0.6, colors[2]); 197 | GRD.addColorStop(0.8, colors[3]); 198 | GRD.addColorStop(1, colors[4]); 199 | } 200 | if(colors.length === 6){ 201 | GRD.addColorStop(0, colors[0]); 202 | GRD.addColorStop(0.25, colors[1]); 203 | GRD.addColorStop(0.45, colors[2]); 204 | GRD.addColorStop(0.65, colors[3]); 205 | GRD.addColorStop(0.85, colors[4]); 206 | GRD.addColorStop(1, colors[5]); 207 | } 208 | if(colors.length === 7){ 209 | GRD.addColorStop(0, colors[0]); 210 | GRD.addColorStop(0.15, colors[1]); 211 | GRD.addColorStop(0.35, colors[2]); 212 | GRD.addColorStop(0.45, colors[3]); 213 | GRD.addColorStop(0.65, colors[4]); 214 | GRD.addColorStop(0.85, colors[5]); 215 | GRD.addColorStop(1, colors[6]); 216 | } 217 | if(colors.length === 8){ 218 | GRD.addColorStop(0, colors[0]); 219 | GRD.addColorStop(0.1, colors[1]); 220 | GRD.addColorStop(0.25, colors[2]); 221 | GRD.addColorStop(0.45, colors[3]); 222 | GRD.addColorStop(0.65, colors[4]); 223 | GRD.addColorStop(0.85, colors[5]); 224 | GRD.addColorStop(0.9, colors[6]); 225 | GRD.addColorStop(1, colors[7]); 226 | } 227 | if(colors.length === 9){ 228 | GRD.addColorStop(0, colors[0]); 229 | GRD.addColorStop(0.2, colors[1]); 230 | GRD.addColorStop(0.3, colors[2]); 231 | GRD.addColorStop(0.5, colors[3]); 232 | GRD.addColorStop(0.6, colors[4]); 233 | GRD.addColorStop(0.7, colors[5]); 234 | GRD.addColorStop(0.8, colors[6]); 235 | GRD.addColorStop(0.9, colors[7]); 236 | GRD.addColorStop(1, colors[8]); 237 | } 238 | if(colors.length >= 10){ 239 | GRD.addColorStop(0, colors[0]); 240 | GRD.addColorStop(0.1, colors[1]); 241 | GRD.addColorStop(0.2, colors[2]); 242 | GRD.addColorStop(0.3, colors[3]); 243 | GRD.addColorStop(0.4, colors[4]); 244 | GRD.addColorStop(0.5, colors[5]); 245 | GRD.addColorStop(0.6, colors[6]); 246 | GRD.addColorStop(0.7, colors[7]); 247 | GRD.addColorStop(0.85, colors[8]); 248 | GRD.addColorStop(1, colors[9]); 249 | } 250 | return GRD 251 | 252 | } 253 | /** 254 | * @author wmf❤洛尘 255 | * @method QRCodeInit 256 | * @returns number[] 257 | * @description 生成二维码所需要的数据 258 | */ 259 | export class QRCodeInit { 260 | private strinbuf: number[] = []; 261 | private eccbuf: number[] = []; 262 | private qrframe: number[] = []; 263 | private framask: number[] = []; 264 | private rlens: number[] = []; 265 | private genpoly: number[] = [] 266 | 267 | private ecclevel:number = 2; 268 | private N1:number = 3; 269 | private N2:number = 3; 270 | private N3:number = 40; 271 | private N4:number = 10; 272 | 273 | private neccblk2: number = 0; 274 | private width: number = 0; 275 | private neccblk1: number = 0; 276 | private datablkw: number = 0; 277 | private eccblkwid: number = 0; 278 | constructor(level: number = 2){ 279 | this.ecclevel = level 280 | } 281 | private setmask (x: number,y: number) { 282 | let bt = null; 283 | if (x > y) { 284 | bt = x; 285 | x = y; 286 | y = bt; 287 | } 288 | bt = y; 289 | bt *= y; 290 | bt += y; 291 | bt >>= 1; 292 | bt += x; 293 | this.framask[bt] = 1; 294 | } 295 | public getWidth () { 296 | return this.width; 297 | } 298 | private putalign (x: number,y: number) { 299 | this.qrframe[x + this.width * y] = 1; 300 | for (let j = -2; j < 2; j++) { 301 | this.qrframe[(x + j) + this.width * (y - 2)] = 1; 302 | this.qrframe[(x - 2) + this.width * (y + j + 1)] = 1; 303 | this.qrframe[(x + 2) + this.width * (y + j)] = 1; 304 | this.qrframe[(x + j + 1) + this.width * (y + 2)] = 1; 305 | } 306 | for (let j = 0; j < 2; j++) { 307 | this.setmask(x - 1, y + j); 308 | this.setmask(x + 1, y - j); 309 | this.setmask(x - j, y - 1); 310 | this.setmask(x + j, y + 1); 311 | } 312 | 313 | } 314 | private modnn (x: number) :number{ 315 | while (x >= 255) { 316 | x -= 255; 317 | x = (x >> 8) + (x & 255); 318 | } 319 | return x; 320 | } 321 | private appendrs (data: number, dlen: number, ecbuf: number, eclen: number) { 322 | let fb: number; 323 | for (let i = 0; i < eclen; i++){ 324 | this.strinbuf[ecbuf + i] = 0; 325 | } 326 | for (let i = 0; i < dlen; i++) { 327 | fb = GLOG[this.strinbuf[data + i] ^ this.strinbuf[ecbuf]]; 328 | if (fb != 255){ 329 | for (let j = 1; j < eclen; j++){ 330 | this.strinbuf[ecbuf + j - 1] = this.strinbuf[ecbuf + j] ^ GEXP[this.modnn(fb + this.genpoly[eclen - j])]; 331 | } 332 | }else{ 333 | for( let j = ecbuf ; j < ecbuf + eclen; j++ ){ 334 | this.strinbuf[j] = this.strinbuf[j + 1]; 335 | } 336 | } 337 | this.strinbuf[ ecbuf + eclen - 1] = fb == 255 ? 0 : GEXP[this.modnn(fb + this.genpoly[0])]; 338 | } 339 | } 340 | private ismasked (x: number, y: number) :number { 341 | let bt: number; 342 | if (x > y) { 343 | bt = x; 344 | x = y; 345 | y = bt; 346 | } 347 | bt = y; 348 | bt += y * y; 349 | bt >>= 1; 350 | bt += x; 351 | return this.framask[bt]; 352 | } 353 | private badruns (length: number) :number{ 354 | let runsbad: number = 0; 355 | for (let i = 0; i <= length; i++){ 356 | if (this.rlens[i] >= 5){ 357 | runsbad += this.N1 + this.rlens[i] - 5; 358 | } 359 | } 360 | for (let i = 3; i < length - 1; i += 2){ 361 | if (this.rlens[i - 2] == this.rlens[i + 2] 362 | && this.rlens[i + 2] == this.rlens[i - 1] 363 | && this.rlens[i - 1] == this.rlens[i + 1] 364 | && this.rlens[i - 1] * 3 == this.rlens[i] 365 | && (this.rlens[i - 3] == 0 366 | || i + 3 > length // end 367 | || this.rlens[i - 3] * 3 >= this.rlens[i] * 4 || this.rlens[i + 3] * 3 >= this.rlens[i] * 4) 368 | ){ 369 | runsbad += this.N3; 370 | } 371 | } 372 | return runsbad; 373 | } 374 | private toNum (num: number): number { 375 | return num === 0 ? 1 : 0 376 | } 377 | private applymask (m: number) { 378 | switch (m) { 379 | case 0: 380 | for (let y = 0; y < this.width; y++){ 381 | for (let x = 0; x < this.width; x++){ 382 | if (!((x + y) & 1) && !this.ismasked(x, y)){ 383 | this.qrframe[x + y * this.width] ^= 1; 384 | } 385 | } 386 | } 387 | break; 388 | case 1: 389 | for (let y = 0; y < this.width; y++){ 390 | for (let x = 0; x < this.width; x++){ 391 | if (!(y & 1) && !this.ismasked(x, y)){ 392 | this.qrframe[x + y * this.width] ^= 1; 393 | } 394 | } 395 | } 396 | break; 397 | case 2: 398 | for (let y = 0; y > 1) & 1), x = 0; x < this.width; x++, r3x++) { 426 | if (r3x == 3) { 427 | r3x = 0; 428 | r3y = r3y > 0 ? 0 : 1; 429 | } 430 | if (!r3y && !this.ismasked(x, y)){ 431 | this.qrframe[x + y * this.width] ^= 1; 432 | } 433 | } 434 | break; 435 | case 5: 436 | for (let r3y = 0, y = 0; y < this.width; y++, r3y++) { 437 | if (r3y == 3){ 438 | r3y = 0; 439 | } 440 | for (let r3x = 0, x = 0; x < this.width; x++, r3x++) { 441 | if (r3x == 3){ 442 | r3x = 0; 443 | } 444 | if (!((x & y & 1) + this.toNum((this.toNum(r3x) | this.toNum(r3y)))) && !this.ismasked(x, y)){ 445 | this.qrframe[x + y * this.width] ^= 1; 446 | } 447 | } 448 | } 449 | break; 450 | case 6: 451 | for (let r3y = 0, y = 0; y < this.width; y++, r3y++) { 452 | if (r3y == 3){ 453 | r3y = 0; 454 | } 455 | for (let r3x = 0, x = 0; x < this.width; x++, r3x++) { 456 | if (r3x == 3){ 457 | r3x = 0; 458 | } 459 | if (!(((x & y & 1) + (r3x && (r3x == r3y ? 1 : 0))) & 1) && !this.ismasked(x, y)){ 460 | this.qrframe[x + y * this.width] ^= 1; 461 | } 462 | } 463 | } 464 | break; 465 | case 7: 466 | for (let r3y = 0, y = 0; y < this.width; y++, r3y++) { 467 | if (r3y == 3) { 468 | r3y = 0; 469 | } 470 | for (let r3x = 0, x = 0; x < this.width; x++, r3x++) { 471 | if (r3x == 3) { 472 | r3x = 0; 473 | } 474 | if (!(((r3x && (r3x == r3y ? 1 : 0)) + ((x + y) & 1)) & 1) && !this.ismasked(x, y)) { 475 | this.qrframe[x + y * this.width] ^= 1; 476 | } 477 | } 478 | } 479 | break; 480 | } 481 | return; 482 | } 483 | public Genframe (code: string) :number[] { 484 | let TT: number = code.length; 485 | let CODES: string = code.slice(0); 486 | let XX: number = 0; 487 | let KK:number = 0; 488 | let YY: number = 0; 489 | let VV: number = 0; 490 | let version: number = 0; 491 | let IF: number = 0; 492 | let MM: number = 0; 493 | do { 494 | version++; 495 | KK = (this.ecclevel - 1) * 4 + (version - 1) * 16; 496 | this.neccblk1 = ECBLOCKS[KK++]; 497 | this.neccblk2 = ECBLOCKS[KK++]; 498 | this.datablkw = ECBLOCKS[KK++]; 499 | this.eccblkwid = ECBLOCKS[KK]; 500 | KK = this.datablkw * (this.neccblk1 + this.neccblk2) + this.neccblk2 - 3 + (version <= 9 ? 1 : 0); 501 | if (TT <= KK) 502 | break; 503 | } while (version < 40); 504 | this.width = 17 + 4 * version; 505 | 506 | VV = this.datablkw + (this.datablkw + this.eccblkwid) * (this.neccblk1 + this.neccblk2) + this.neccblk2; 507 | for( let t = 0; t < VV; t++ ){ 508 | this.eccbuf[t] = 0; 509 | } 510 | 511 | for( let t = 0; t < this.width * this.width; t++ ){ 512 | this.qrframe[t] = 0; 513 | } 514 | for( let t = 0 ; t < (this.width * (this.width + 1) + 1) / 2; t++){ 515 | this.framask[t] = 0; 516 | } 517 | for (let t = 0; t < 3; t++) { 518 | KK = 0; 519 | YY = 0; 520 | if (t == 1){ 521 | KK = (this.width - 7); 522 | } 523 | if (t == 2){ 524 | YY = (this.width - 7); 525 | } 526 | this.qrframe[(YY + 3) + this.width * (KK + 3)] = 1; 527 | for (let x = 0; x < 6; x++) { 528 | this.qrframe[(YY + x) + this.width * KK] = 1; 529 | this.qrframe[YY + this.width * (KK + x + 1)] = 1; 530 | this.qrframe[(YY + 6) + this.width * (KK + x)] = 1; 531 | this.qrframe[(YY + x + 1) + this.width * (KK + 6)] = 1; 532 | } 533 | for (let x = 1; x < 5; x++) { 534 | this.setmask(YY + x, KK + 1); 535 | this.setmask(YY + 1, KK + x + 1); 536 | this.setmask(YY + 5, KK + x); 537 | this.setmask(YY + x + 1, KK + 5); 538 | } 539 | for (let x = 2; x < 4; x++) { 540 | this.qrframe[(YY + x) + this.width * (KK + 2)] = 1; 541 | this.qrframe[(YY + 2) + this.width * (KK + x + 1)] = 1; 542 | this.qrframe[(YY + 4) + this.width * (KK + x)] = 1; 543 | this.qrframe[(YY + x + 1) + this.width * (KK + 4)] = 1; 544 | } 545 | } 546 | if (version > 1) { 547 | TT = ADELTA[version]; 548 | YY = this.width - 7; 549 | for (;;) { 550 | XX = this.width - 7; 551 | while (XX > TT - 3) { 552 | this.putalign(XX, YY); 553 | if (XX < TT) 554 | break; 555 | XX -= TT; 556 | } 557 | if (YY <= TT + 9) 558 | break; 559 | YY -= TT; 560 | this.putalign(6, YY); 561 | this.putalign(YY, 6); 562 | } 563 | } 564 | this.qrframe[8 + this.width * (this.width - 8)] = 1; 565 | for (let y = 0; y < 7; y++) { 566 | this.setmask(7, y); 567 | this.setmask(this.width - 8, y); 568 | this.setmask(7, y + this.width - 7); 569 | } 570 | for (let x = 0; x < 8; x++) { 571 | this.setmask(x, 7); 572 | this.setmask(x + this.width - 8, 7); 573 | this.setmask(x, this.width - 8); 574 | } 575 | for (let x = 0; x < 9; x++) 576 | this.setmask(x, 8); 577 | 578 | for (let x = 0; x < 8; x++) { 579 | this.setmask(x + this.width - 8, 8); 580 | this.setmask(8, x); 581 | } 582 | for (let y = 0; y < 7; y++){ 583 | this.setmask(8, y + this.width - 7); 584 | } 585 | 586 | for (let x = 0; x < this.width - 14; x++){ 587 | if (x & 1) { 588 | this.setmask(8 + x, 6); 589 | this.setmask(6, 8 + x); 590 | } 591 | else { 592 | this.qrframe[(8 + x) + this.width * 6] = 1; 593 | this.qrframe[6 + this.width * (8 + x)] = 1; 594 | } 595 | } 596 | if (version > 6) { 597 | TT = VPAT[version - 7]; 598 | KK = 17; 599 | for (let x = 0; x < 6; x++){ 600 | for (let y = 0; y < 3; y++, KK--){ 601 | if (1 & (KK > 11 ? version >> (KK - 12) : TT >> KK)) { 602 | this.qrframe[(5 - x) + this.width * (2 - y + this.width - 11)] = 1; 603 | this.qrframe[(2 - y + this.width - 11) + this.width * (5 - x)] = 1; 604 | } else { 605 | this.setmask(5 - x, 2 - y + this.width - 11); 606 | this.setmask(2 - y + this.width - 11, 5 - x); 607 | } 608 | } 609 | } 610 | } 611 | for (let y = 0; y < this.width; y++){ 612 | for (let x = 0; x <= y; x++){ 613 | if (this.qrframe[x + this.width * y]){ 614 | this.setmask(x, y); 615 | } 616 | } 617 | } 618 | VV = CODES.length; 619 | for( let i = 0 ; i < VV; i++ ){ 620 | this.eccbuf[i] = CODES.charCodeAt(i); 621 | } 622 | this.strinbuf = this.eccbuf.slice(0); 623 | XX = this.datablkw * (this.neccblk1 + this.neccblk2) + this.neccblk2; 624 | if (VV >= XX - 2) { 625 | VV = XX - 2; 626 | if (version > 9){ 627 | VV--; 628 | } 629 | } 630 | IF = VV; 631 | if (version > 9) { 632 | this.strinbuf[IF + 2] = 0; 633 | this.strinbuf[IF + 3] = 0; 634 | while (IF--) { 635 | TT = this.strinbuf[IF]; 636 | this.strinbuf[IF + 3] |= 255 & (TT as number << 4); 637 | this.strinbuf[IF + 2] = TT as number >> 4; 638 | } 639 | this.strinbuf[2] |= 255 & (VV << 4); 640 | this.strinbuf[1] = VV >> 4; 641 | this.strinbuf[0] = 0x40 | (VV >> 12); 642 | }else { 643 | this.strinbuf[IF + 1] = 0; 644 | this.strinbuf[IF + 2] = 0; 645 | while (IF--) { 646 | TT = this.strinbuf[IF]; 647 | this.strinbuf[IF + 2] |= 255 & (TT as number << 4); 648 | this.strinbuf[IF + 1] = TT >> 4; 649 | } 650 | this.strinbuf[1] |= 255 & (VV << 4); 651 | this.strinbuf[0] = 0x40 | (VV >> 4); 652 | } 653 | IF = VV + 3 - (version < 10 ? 1 : 0); 654 | while (IF < XX) { 655 | this.strinbuf[IF++] = 0xec; 656 | this.strinbuf[IF++] = 0x11; 657 | } 658 | this.genpoly[0] = 1; 659 | for (let i = 0; i < this.eccblkwid; i++) { 660 | this.genpoly[i + 1] = 1; 661 | for (let j = i; j > 0; j--){ 662 | this.genpoly[j] = this.genpoly[j] ? this.genpoly[j - 1] ^ GEXP[this.modnn(GLOG[this.genpoly[j]] + i)] : this.genpoly[j - 1]; 663 | } 664 | this.genpoly[0] = GEXP[this.modnn(GLOG[this.genpoly[0]] + i)]; 665 | } 666 | for (let i = 0; i <= this.eccblkwid; i++){ 667 | this.genpoly[i] = GLOG[this.genpoly[i]]; 668 | } 669 | KK = XX; 670 | YY = 0; 671 | for (let i = 0; i < this.neccblk1; i++) { 672 | this.appendrs(YY, this.datablkw, KK, this.eccblkwid); 673 | YY += this.datablkw; 674 | KK += this.eccblkwid; 675 | } 676 | for (let i = 0; i < this.neccblk2; i++) { 677 | this.appendrs(YY, this.datablkw + 1, KK, this.eccblkwid); 678 | YY += this.datablkw + 1; 679 | KK += this.eccblkwid; 680 | } 681 | 682 | YY = 0; 683 | for (let i = 0; i < this.datablkw; i++) { 684 | for (let j = 0; j < this.neccblk1; j++){ 685 | this.eccbuf[YY++] = this.strinbuf[i + j * this.datablkw]; 686 | } 687 | for (let j = 0; j < this.neccblk2; j++){ 688 | this.eccbuf[YY++] = this.strinbuf[(this.neccblk1 * this.datablkw) + i + (j * (this.datablkw + 1))]; 689 | } 690 | } 691 | for (let j = 0; j < this.neccblk2; j++){ 692 | this.eccbuf[YY++] = this.strinbuf[(this.neccblk1 * this.datablkw) + IF + (j * (this.datablkw + 1))]; 693 | } 694 | for (let i = 0; i < this.eccblkwid; i++){ 695 | for (let j = 0; j < this.neccblk1 + this.neccblk2; j++){ 696 | this.eccbuf[YY++] = this.strinbuf[XX + i + j * this.eccblkwid]; 697 | } 698 | } 699 | this.strinbuf = this.eccbuf; 700 | XX = YY = this.width - 1; 701 | KK = VV = 1; 702 | 703 | MM = (this.datablkw + this.eccblkwid) * (this.neccblk1 + this.neccblk2) + this.neccblk2; 704 | for (let i = 0; i < MM; i++) { 705 | TT = this.strinbuf[i]; 706 | for (let j = 0; j < 8; j++, TT <<= 1) { 707 | if (0x80 & TT){ 708 | this.qrframe[XX + this.width * YY] = 1; 709 | } 710 | do { 711 | if (VV) 712 | XX--; 713 | else { 714 | XX++; 715 | if (KK) { 716 | if (YY != 0) 717 | YY--; 718 | else { 719 | XX -= 2; 720 | KK = (KK === 0 ? 1 : 0); 721 | if (XX == 6) { 722 | XX--; 723 | YY = 9; 724 | } 725 | } 726 | } 727 | else { 728 | if (YY != this.width - 1) 729 | YY++; 730 | else { 731 | XX -= 2; 732 | KK = (KK === 0 ? 1: 0); 733 | if (XX == 6) { 734 | XX--; 735 | YY -= 8; 736 | } 737 | } 738 | } 739 | } 740 | VV = (VV >0 ? 0 : 1); 741 | } while (this.ismasked(XX, YY)); 742 | } 743 | } 744 | 745 | this.strinbuf = this.qrframe.slice(0); 746 | TT = 0; 747 | YY = 30000; 748 | for ( KK = 0; KK < 8; KK++) { 749 | this.applymask(KK); 750 | XX = this.badcheck(); 751 | if (XX < YY) { 752 | YY = XX; 753 | TT = KK; 754 | } 755 | if (TT == 7) 756 | break; 757 | this.qrframe = this.strinbuf.slice(0); 758 | } 759 | if (TT != KK){ 760 | this.applymask(TT); 761 | } 762 | YY = fmtword[TT + ((this.ecclevel - 1) << 3)]; 763 | 764 | for (let k = 0; k < 8; k++, YY >>= 1){ 765 | if (YY & 1) { 766 | this.qrframe[(this.width - 1 - k) + this.width * 8] = 1; 767 | if (k < 6){ 768 | this.qrframe[8 + this.width * k] = 1; 769 | }else{ 770 | this.qrframe[8 + this.width * (k + 1)] = 1; 771 | } 772 | } 773 | } 774 | for (let k = 0; k < 7; k++, YY >>= 1){ 775 | if (YY & 1) { 776 | this.qrframe[8 + this.width * (this.width - 7 + k)] = 1; 777 | if (k){ 778 | this.qrframe[(6 - k) + this.width * 8] = 1; 779 | }else{ 780 | this.qrframe[7 + this.width * 8] = 1; 781 | } 782 | } 783 | } 784 | return this.qrframe; 785 | } 786 | private badcheck () :number { 787 | let thisbad: number = 0; 788 | let bw: number = 0; 789 | let h: number = 0; 790 | let b: number = 0; 791 | let b1: number = 0; 792 | let w: number = 0; 793 | let f: number = 0; 794 | for (let y = 0; y < this.width - 1; y++){ 795 | for (let x = 0; x < this.width - 1; x++) 796 | if ((this.qrframe[x + this.width * y] && this.qrframe[(x + 1) + this.width * y] 797 | && this.qrframe[x + this.width * (y + 1)] && this.qrframe[(x + 1) + this.width * (y + 1)]) // all black 798 | || !(this.qrframe[x + this.width * y] || this.qrframe[(x + 1) + this.width * y] 799 | || this.qrframe[x + this.width * (y + 1)] || this.qrframe[(x + 1) + this.width * (y + 1)])) { 800 | thisbad += this.N2; 801 | } 802 | } 803 | for (let y = 0; y < this.width; y++) { 804 | this.rlens[0] = 0; 805 | for (h = b = w = 0; w < this.width; w++) { 806 | if ((b1 = this.qrframe[w + this.width * y]) == b){ 807 | this.rlens[h]++; 808 | }else{ 809 | this.rlens[++h] = 1; 810 | } 811 | b = b1; 812 | bw += b ? 1 : -1; 813 | } 814 | thisbad += this.badruns(h); 815 | } 816 | if (bw < 0){ 817 | bw = -bw; 818 | } 819 | 820 | let big: number = bw; 821 | let count: number = 0; 822 | big += big << 2; 823 | big <<= 1; 824 | while (big > this.width * this.width) 825 | big -= this.width * this.width, count++; 826 | thisbad += count * this.N4; 827 | for (let x = 0; x < this.width; x++) { 828 | this.rlens[0] = 0; 829 | for (h = b = f = 0; f < this.width; f++) { 830 | if ((b1 = this.qrframe[x + this.width * f]) == b){ 831 | this.rlens[h]++; 832 | }else{ 833 | this.rlens[++h] = 1; 834 | } 835 | b = b1; 836 | } 837 | thisbad += this.badruns(h); 838 | } 839 | return thisbad; 840 | } 841 | } 842 | -------------------------------------------------------------------------------- /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", "@babel/code-frame@^7.14.5": 6 | "integrity" "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==" 7 | "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" 8 | "version" "7.14.5" 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": 13 | "integrity" "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" 14 | "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz" 15 | "version" "7.15.0" 16 | 17 | "@babel/core@^7.15.5": 18 | "integrity" "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==" 19 | "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz" 20 | "version" "7.15.5" 21 | dependencies: 22 | "@babel/code-frame" "^7.14.5" 23 | "@babel/generator" "^7.15.4" 24 | "@babel/helper-compilation-targets" "^7.15.4" 25 | "@babel/helper-module-transforms" "^7.15.4" 26 | "@babel/helpers" "^7.15.4" 27 | "@babel/parser" "^7.15.5" 28 | "@babel/template" "^7.15.4" 29 | "@babel/traverse" "^7.15.4" 30 | "@babel/types" "^7.15.4" 31 | "convert-source-map" "^1.7.0" 32 | "debug" "^4.1.0" 33 | "gensync" "^1.0.0-beta.2" 34 | "json5" "^2.1.2" 35 | "semver" "^6.3.0" 36 | "source-map" "^0.5.0" 37 | 38 | "@babel/generator@^7.15.4": 39 | "integrity" "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==" 40 | "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz" 41 | "version" "7.15.4" 42 | dependencies: 43 | "@babel/types" "^7.15.4" 44 | "jsesc" "^2.5.1" 45 | "source-map" "^0.5.0" 46 | 47 | "@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": 48 | "integrity" "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==" 49 | "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz" 50 | "version" "7.15.4" 51 | dependencies: 52 | "@babel/types" "^7.15.4" 53 | 54 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": 55 | "integrity" "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==" 56 | "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz" 57 | "version" "7.15.4" 58 | dependencies: 59 | "@babel/helper-explode-assignable-expression" "^7.15.4" 60 | "@babel/types" "^7.15.4" 61 | 62 | "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": 63 | "integrity" "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==" 64 | "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz" 65 | "version" "7.15.4" 66 | dependencies: 67 | "@babel/compat-data" "^7.15.0" 68 | "@babel/helper-validator-option" "^7.14.5" 69 | "browserslist" "^4.16.6" 70 | "semver" "^6.3.0" 71 | 72 | "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": 73 | "integrity" "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==" 74 | "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz" 75 | "version" "7.15.4" 76 | dependencies: 77 | "@babel/helper-annotate-as-pure" "^7.15.4" 78 | "@babel/helper-function-name" "^7.15.4" 79 | "@babel/helper-member-expression-to-functions" "^7.15.4" 80 | "@babel/helper-optimise-call-expression" "^7.15.4" 81 | "@babel/helper-replace-supers" "^7.15.4" 82 | "@babel/helper-split-export-declaration" "^7.15.4" 83 | 84 | "@babel/helper-create-regexp-features-plugin@^7.14.5": 85 | "integrity" "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==" 86 | "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz" 87 | "version" "7.14.5" 88 | dependencies: 89 | "@babel/helper-annotate-as-pure" "^7.14.5" 90 | "regexpu-core" "^4.7.1" 91 | 92 | "@babel/helper-define-polyfill-provider@^0.2.2": 93 | "integrity" "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==" 94 | "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz" 95 | "version" "0.2.3" 96 | dependencies: 97 | "@babel/helper-compilation-targets" "^7.13.0" 98 | "@babel/helper-module-imports" "^7.12.13" 99 | "@babel/helper-plugin-utils" "^7.13.0" 100 | "@babel/traverse" "^7.13.0" 101 | "debug" "^4.1.1" 102 | "lodash.debounce" "^4.0.8" 103 | "resolve" "^1.14.2" 104 | "semver" "^6.1.2" 105 | 106 | "@babel/helper-explode-assignable-expression@^7.15.4": 107 | "integrity" "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==" 108 | "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz" 109 | "version" "7.15.4" 110 | dependencies: 111 | "@babel/types" "^7.15.4" 112 | 113 | "@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": 114 | "integrity" "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==" 115 | "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz" 116 | "version" "7.15.4" 117 | dependencies: 118 | "@babel/helper-get-function-arity" "^7.15.4" 119 | "@babel/template" "^7.15.4" 120 | "@babel/types" "^7.15.4" 121 | 122 | "@babel/helper-get-function-arity@^7.15.4": 123 | "integrity" "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==" 124 | "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz" 125 | "version" "7.15.4" 126 | dependencies: 127 | "@babel/types" "^7.15.4" 128 | 129 | "@babel/helper-hoist-variables@^7.15.4": 130 | "integrity" "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==" 131 | "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz" 132 | "version" "7.15.4" 133 | dependencies: 134 | "@babel/types" "^7.15.4" 135 | 136 | "@babel/helper-member-expression-to-functions@^7.15.4": 137 | "integrity" "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==" 138 | "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz" 139 | "version" "7.15.4" 140 | dependencies: 141 | "@babel/types" "^7.15.4" 142 | 143 | "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": 144 | "integrity" "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==" 145 | "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz" 146 | "version" "7.15.4" 147 | dependencies: 148 | "@babel/types" "^7.15.4" 149 | 150 | "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4": 151 | "integrity" "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==" 152 | "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz" 153 | "version" "7.15.7" 154 | dependencies: 155 | "@babel/helper-module-imports" "^7.15.4" 156 | "@babel/helper-replace-supers" "^7.15.4" 157 | "@babel/helper-simple-access" "^7.15.4" 158 | "@babel/helper-split-export-declaration" "^7.15.4" 159 | "@babel/helper-validator-identifier" "^7.15.7" 160 | "@babel/template" "^7.15.4" 161 | "@babel/traverse" "^7.15.4" 162 | "@babel/types" "^7.15.6" 163 | 164 | "@babel/helper-optimise-call-expression@^7.15.4": 165 | "integrity" "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==" 166 | "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz" 167 | "version" "7.15.4" 168 | dependencies: 169 | "@babel/types" "^7.15.4" 170 | 171 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": 172 | "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" 173 | "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" 174 | "version" "7.14.5" 175 | 176 | "@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": 177 | "integrity" "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==" 178 | "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz" 179 | "version" "7.15.4" 180 | dependencies: 181 | "@babel/helper-annotate-as-pure" "^7.15.4" 182 | "@babel/helper-wrap-function" "^7.15.4" 183 | "@babel/types" "^7.15.4" 184 | 185 | "@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": 186 | "integrity" "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==" 187 | "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz" 188 | "version" "7.15.4" 189 | dependencies: 190 | "@babel/helper-member-expression-to-functions" "^7.15.4" 191 | "@babel/helper-optimise-call-expression" "^7.15.4" 192 | "@babel/traverse" "^7.15.4" 193 | "@babel/types" "^7.15.4" 194 | 195 | "@babel/helper-simple-access@^7.15.4": 196 | "integrity" "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==" 197 | "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz" 198 | "version" "7.15.4" 199 | dependencies: 200 | "@babel/types" "^7.15.4" 201 | 202 | "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": 203 | "integrity" "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==" 204 | "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz" 205 | "version" "7.15.4" 206 | dependencies: 207 | "@babel/types" "^7.15.4" 208 | 209 | "@babel/helper-split-export-declaration@^7.15.4": 210 | "integrity" "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==" 211 | "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz" 212 | "version" "7.15.4" 213 | dependencies: 214 | "@babel/types" "^7.15.4" 215 | 216 | "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": 217 | "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" 218 | "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" 219 | "version" "7.15.7" 220 | 221 | "@babel/helper-validator-option@^7.14.5": 222 | "integrity" "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" 223 | "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" 224 | "version" "7.14.5" 225 | 226 | "@babel/helper-wrap-function@^7.15.4": 227 | "integrity" "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==" 228 | "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz" 229 | "version" "7.15.4" 230 | dependencies: 231 | "@babel/helper-function-name" "^7.15.4" 232 | "@babel/template" "^7.15.4" 233 | "@babel/traverse" "^7.15.4" 234 | "@babel/types" "^7.15.4" 235 | 236 | "@babel/helpers@^7.15.4": 237 | "integrity" "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==" 238 | "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz" 239 | "version" "7.15.4" 240 | dependencies: 241 | "@babel/template" "^7.15.4" 242 | "@babel/traverse" "^7.15.4" 243 | "@babel/types" "^7.15.4" 244 | 245 | "@babel/highlight@^7.14.5": 246 | "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" 247 | "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" 248 | "version" "7.14.5" 249 | dependencies: 250 | "@babel/helper-validator-identifier" "^7.14.5" 251 | "chalk" "^2.0.0" 252 | "js-tokens" "^4.0.0" 253 | 254 | "@babel/parser@^7.15.4", "@babel/parser@^7.15.5": 255 | "integrity" "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==" 256 | "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz" 257 | "version" "7.15.7" 258 | 259 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": 260 | "integrity" "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==" 261 | "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz" 262 | "version" "7.15.4" 263 | dependencies: 264 | "@babel/helper-plugin-utils" "^7.14.5" 265 | "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" 266 | "@babel/plugin-proposal-optional-chaining" "^7.14.5" 267 | 268 | "@babel/plugin-proposal-async-generator-functions@^7.15.4": 269 | "integrity" "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==" 270 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz" 271 | "version" "7.15.4" 272 | dependencies: 273 | "@babel/helper-plugin-utils" "^7.14.5" 274 | "@babel/helper-remap-async-to-generator" "^7.15.4" 275 | "@babel/plugin-syntax-async-generators" "^7.8.4" 276 | 277 | "@babel/plugin-proposal-class-properties@^7.14.5": 278 | "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==" 279 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz" 280 | "version" "7.14.5" 281 | dependencies: 282 | "@babel/helper-create-class-features-plugin" "^7.14.5" 283 | "@babel/helper-plugin-utils" "^7.14.5" 284 | 285 | "@babel/plugin-proposal-class-static-block@^7.15.4": 286 | "integrity" "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==" 287 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz" 288 | "version" "7.15.4" 289 | dependencies: 290 | "@babel/helper-create-class-features-plugin" "^7.15.4" 291 | "@babel/helper-plugin-utils" "^7.14.5" 292 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 293 | 294 | "@babel/plugin-proposal-dynamic-import@^7.14.5": 295 | "integrity" "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==" 296 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz" 297 | "version" "7.14.5" 298 | dependencies: 299 | "@babel/helper-plugin-utils" "^7.14.5" 300 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 301 | 302 | "@babel/plugin-proposal-export-namespace-from@^7.14.5": 303 | "integrity" "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==" 304 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz" 305 | "version" "7.14.5" 306 | dependencies: 307 | "@babel/helper-plugin-utils" "^7.14.5" 308 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 309 | 310 | "@babel/plugin-proposal-json-strings@^7.14.5": 311 | "integrity" "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==" 312 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz" 313 | "version" "7.14.5" 314 | dependencies: 315 | "@babel/helper-plugin-utils" "^7.14.5" 316 | "@babel/plugin-syntax-json-strings" "^7.8.3" 317 | 318 | "@babel/plugin-proposal-logical-assignment-operators@^7.14.5": 319 | "integrity" "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==" 320 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz" 321 | "version" "7.14.5" 322 | dependencies: 323 | "@babel/helper-plugin-utils" "^7.14.5" 324 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 325 | 326 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": 327 | "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==" 328 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz" 329 | "version" "7.14.5" 330 | dependencies: 331 | "@babel/helper-plugin-utils" "^7.14.5" 332 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 333 | 334 | "@babel/plugin-proposal-numeric-separator@^7.14.5": 335 | "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==" 336 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz" 337 | "version" "7.14.5" 338 | dependencies: 339 | "@babel/helper-plugin-utils" "^7.14.5" 340 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 341 | 342 | "@babel/plugin-proposal-object-rest-spread@^7.15.6": 343 | "integrity" "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==" 344 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz" 345 | "version" "7.15.6" 346 | dependencies: 347 | "@babel/compat-data" "^7.15.0" 348 | "@babel/helper-compilation-targets" "^7.15.4" 349 | "@babel/helper-plugin-utils" "^7.14.5" 350 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 351 | "@babel/plugin-transform-parameters" "^7.15.4" 352 | 353 | "@babel/plugin-proposal-optional-catch-binding@^7.14.5": 354 | "integrity" "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==" 355 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz" 356 | "version" "7.14.5" 357 | dependencies: 358 | "@babel/helper-plugin-utils" "^7.14.5" 359 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 360 | 361 | "@babel/plugin-proposal-optional-chaining@^7.14.5": 362 | "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==" 363 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz" 364 | "version" "7.14.5" 365 | dependencies: 366 | "@babel/helper-plugin-utils" "^7.14.5" 367 | "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" 368 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 369 | 370 | "@babel/plugin-proposal-private-methods@^7.14.5": 371 | "integrity" "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==" 372 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz" 373 | "version" "7.14.5" 374 | dependencies: 375 | "@babel/helper-create-class-features-plugin" "^7.14.5" 376 | "@babel/helper-plugin-utils" "^7.14.5" 377 | 378 | "@babel/plugin-proposal-private-property-in-object@^7.15.4": 379 | "integrity" "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==" 380 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz" 381 | "version" "7.15.4" 382 | dependencies: 383 | "@babel/helper-annotate-as-pure" "^7.15.4" 384 | "@babel/helper-create-class-features-plugin" "^7.15.4" 385 | "@babel/helper-plugin-utils" "^7.14.5" 386 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 387 | 388 | "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": 389 | "integrity" "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==" 390 | "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz" 391 | "version" "7.14.5" 392 | dependencies: 393 | "@babel/helper-create-regexp-features-plugin" "^7.14.5" 394 | "@babel/helper-plugin-utils" "^7.14.5" 395 | 396 | "@babel/plugin-syntax-async-generators@^7.8.4": 397 | "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" 398 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" 399 | "version" "7.8.4" 400 | dependencies: 401 | "@babel/helper-plugin-utils" "^7.8.0" 402 | 403 | "@babel/plugin-syntax-class-properties@^7.12.13": 404 | "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" 405 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" 406 | "version" "7.12.13" 407 | dependencies: 408 | "@babel/helper-plugin-utils" "^7.12.13" 409 | 410 | "@babel/plugin-syntax-class-static-block@^7.14.5": 411 | "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" 412 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" 413 | "version" "7.14.5" 414 | dependencies: 415 | "@babel/helper-plugin-utils" "^7.14.5" 416 | 417 | "@babel/plugin-syntax-dynamic-import@^7.8.3": 418 | "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" 419 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" 420 | "version" "7.8.3" 421 | dependencies: 422 | "@babel/helper-plugin-utils" "^7.8.0" 423 | 424 | "@babel/plugin-syntax-export-namespace-from@^7.8.3": 425 | "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" 426 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" 427 | "version" "7.8.3" 428 | dependencies: 429 | "@babel/helper-plugin-utils" "^7.8.3" 430 | 431 | "@babel/plugin-syntax-json-strings@^7.8.3": 432 | "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" 433 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" 434 | "version" "7.8.3" 435 | dependencies: 436 | "@babel/helper-plugin-utils" "^7.8.0" 437 | 438 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 439 | "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" 440 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" 441 | "version" "7.10.4" 442 | dependencies: 443 | "@babel/helper-plugin-utils" "^7.10.4" 444 | 445 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 446 | "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" 447 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" 448 | "version" "7.8.3" 449 | dependencies: 450 | "@babel/helper-plugin-utils" "^7.8.0" 451 | 452 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 453 | "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" 454 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" 455 | "version" "7.10.4" 456 | dependencies: 457 | "@babel/helper-plugin-utils" "^7.10.4" 458 | 459 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 460 | "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" 461 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" 462 | "version" "7.8.3" 463 | dependencies: 464 | "@babel/helper-plugin-utils" "^7.8.0" 465 | 466 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 467 | "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" 468 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" 469 | "version" "7.8.3" 470 | dependencies: 471 | "@babel/helper-plugin-utils" "^7.8.0" 472 | 473 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 474 | "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" 475 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" 476 | "version" "7.8.3" 477 | dependencies: 478 | "@babel/helper-plugin-utils" "^7.8.0" 479 | 480 | "@babel/plugin-syntax-private-property-in-object@^7.14.5": 481 | "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" 482 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" 483 | "version" "7.14.5" 484 | dependencies: 485 | "@babel/helper-plugin-utils" "^7.14.5" 486 | 487 | "@babel/plugin-syntax-top-level-await@^7.14.5": 488 | "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" 489 | "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" 490 | "version" "7.14.5" 491 | dependencies: 492 | "@babel/helper-plugin-utils" "^7.14.5" 493 | 494 | "@babel/plugin-transform-arrow-functions@^7.14.5": 495 | "integrity" "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==" 496 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz" 497 | "version" "7.14.5" 498 | dependencies: 499 | "@babel/helper-plugin-utils" "^7.14.5" 500 | 501 | "@babel/plugin-transform-async-to-generator@^7.14.5": 502 | "integrity" "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==" 503 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz" 504 | "version" "7.14.5" 505 | dependencies: 506 | "@babel/helper-module-imports" "^7.14.5" 507 | "@babel/helper-plugin-utils" "^7.14.5" 508 | "@babel/helper-remap-async-to-generator" "^7.14.5" 509 | 510 | "@babel/plugin-transform-block-scoped-functions@^7.14.5": 511 | "integrity" "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==" 512 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz" 513 | "version" "7.14.5" 514 | dependencies: 515 | "@babel/helper-plugin-utils" "^7.14.5" 516 | 517 | "@babel/plugin-transform-block-scoping@^7.15.3": 518 | "integrity" "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==" 519 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz" 520 | "version" "7.15.3" 521 | dependencies: 522 | "@babel/helper-plugin-utils" "^7.14.5" 523 | 524 | "@babel/plugin-transform-classes@^7.15.4": 525 | "integrity" "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==" 526 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz" 527 | "version" "7.15.4" 528 | dependencies: 529 | "@babel/helper-annotate-as-pure" "^7.15.4" 530 | "@babel/helper-function-name" "^7.15.4" 531 | "@babel/helper-optimise-call-expression" "^7.15.4" 532 | "@babel/helper-plugin-utils" "^7.14.5" 533 | "@babel/helper-replace-supers" "^7.15.4" 534 | "@babel/helper-split-export-declaration" "^7.15.4" 535 | "globals" "^11.1.0" 536 | 537 | "@babel/plugin-transform-computed-properties@^7.14.5": 538 | "integrity" "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==" 539 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz" 540 | "version" "7.14.5" 541 | dependencies: 542 | "@babel/helper-plugin-utils" "^7.14.5" 543 | 544 | "@babel/plugin-transform-destructuring@^7.14.7": 545 | "integrity" "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==" 546 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz" 547 | "version" "7.14.7" 548 | dependencies: 549 | "@babel/helper-plugin-utils" "^7.14.5" 550 | 551 | "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": 552 | "integrity" "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==" 553 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz" 554 | "version" "7.14.5" 555 | dependencies: 556 | "@babel/helper-create-regexp-features-plugin" "^7.14.5" 557 | "@babel/helper-plugin-utils" "^7.14.5" 558 | 559 | "@babel/plugin-transform-duplicate-keys@^7.14.5": 560 | "integrity" "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==" 561 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz" 562 | "version" "7.14.5" 563 | dependencies: 564 | "@babel/helper-plugin-utils" "^7.14.5" 565 | 566 | "@babel/plugin-transform-exponentiation-operator@^7.14.5": 567 | "integrity" "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==" 568 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz" 569 | "version" "7.14.5" 570 | dependencies: 571 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" 572 | "@babel/helper-plugin-utils" "^7.14.5" 573 | 574 | "@babel/plugin-transform-for-of@^7.15.4": 575 | "integrity" "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==" 576 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz" 577 | "version" "7.15.4" 578 | dependencies: 579 | "@babel/helper-plugin-utils" "^7.14.5" 580 | 581 | "@babel/plugin-transform-function-name@^7.14.5": 582 | "integrity" "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==" 583 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz" 584 | "version" "7.14.5" 585 | dependencies: 586 | "@babel/helper-function-name" "^7.14.5" 587 | "@babel/helper-plugin-utils" "^7.14.5" 588 | 589 | "@babel/plugin-transform-literals@^7.14.5": 590 | "integrity" "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==" 591 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz" 592 | "version" "7.14.5" 593 | dependencies: 594 | "@babel/helper-plugin-utils" "^7.14.5" 595 | 596 | "@babel/plugin-transform-member-expression-literals@^7.14.5": 597 | "integrity" "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==" 598 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz" 599 | "version" "7.14.5" 600 | dependencies: 601 | "@babel/helper-plugin-utils" "^7.14.5" 602 | 603 | "@babel/plugin-transform-modules-amd@^7.14.5": 604 | "integrity" "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==" 605 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz" 606 | "version" "7.14.5" 607 | dependencies: 608 | "@babel/helper-module-transforms" "^7.14.5" 609 | "@babel/helper-plugin-utils" "^7.14.5" 610 | "babel-plugin-dynamic-import-node" "^2.3.3" 611 | 612 | "@babel/plugin-transform-modules-commonjs@^7.15.4": 613 | "integrity" "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==" 614 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz" 615 | "version" "7.15.4" 616 | dependencies: 617 | "@babel/helper-module-transforms" "^7.15.4" 618 | "@babel/helper-plugin-utils" "^7.14.5" 619 | "@babel/helper-simple-access" "^7.15.4" 620 | "babel-plugin-dynamic-import-node" "^2.3.3" 621 | 622 | "@babel/plugin-transform-modules-systemjs@^7.15.4": 623 | "integrity" "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==" 624 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz" 625 | "version" "7.15.4" 626 | dependencies: 627 | "@babel/helper-hoist-variables" "^7.15.4" 628 | "@babel/helper-module-transforms" "^7.15.4" 629 | "@babel/helper-plugin-utils" "^7.14.5" 630 | "@babel/helper-validator-identifier" "^7.14.9" 631 | "babel-plugin-dynamic-import-node" "^2.3.3" 632 | 633 | "@babel/plugin-transform-modules-umd@^7.14.5": 634 | "integrity" "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==" 635 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz" 636 | "version" "7.14.5" 637 | dependencies: 638 | "@babel/helper-module-transforms" "^7.14.5" 639 | "@babel/helper-plugin-utils" "^7.14.5" 640 | 641 | "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": 642 | "integrity" "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==" 643 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz" 644 | "version" "7.14.9" 645 | dependencies: 646 | "@babel/helper-create-regexp-features-plugin" "^7.14.5" 647 | 648 | "@babel/plugin-transform-new-target@^7.14.5": 649 | "integrity" "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==" 650 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz" 651 | "version" "7.14.5" 652 | dependencies: 653 | "@babel/helper-plugin-utils" "^7.14.5" 654 | 655 | "@babel/plugin-transform-object-super@^7.14.5": 656 | "integrity" "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==" 657 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz" 658 | "version" "7.14.5" 659 | dependencies: 660 | "@babel/helper-plugin-utils" "^7.14.5" 661 | "@babel/helper-replace-supers" "^7.14.5" 662 | 663 | "@babel/plugin-transform-parameters@^7.15.4": 664 | "integrity" "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==" 665 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz" 666 | "version" "7.15.4" 667 | dependencies: 668 | "@babel/helper-plugin-utils" "^7.14.5" 669 | 670 | "@babel/plugin-transform-property-literals@^7.14.5": 671 | "integrity" "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==" 672 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz" 673 | "version" "7.14.5" 674 | dependencies: 675 | "@babel/helper-plugin-utils" "^7.14.5" 676 | 677 | "@babel/plugin-transform-regenerator@^7.14.5": 678 | "integrity" "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==" 679 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz" 680 | "version" "7.14.5" 681 | dependencies: 682 | "regenerator-transform" "^0.14.2" 683 | 684 | "@babel/plugin-transform-reserved-words@^7.14.5": 685 | "integrity" "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==" 686 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz" 687 | "version" "7.14.5" 688 | dependencies: 689 | "@babel/helper-plugin-utils" "^7.14.5" 690 | 691 | "@babel/plugin-transform-shorthand-properties@^7.14.5": 692 | "integrity" "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==" 693 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz" 694 | "version" "7.14.5" 695 | dependencies: 696 | "@babel/helper-plugin-utils" "^7.14.5" 697 | 698 | "@babel/plugin-transform-spread@^7.14.6": 699 | "integrity" "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==" 700 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz" 701 | "version" "7.14.6" 702 | dependencies: 703 | "@babel/helper-plugin-utils" "^7.14.5" 704 | "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" 705 | 706 | "@babel/plugin-transform-sticky-regex@^7.14.5": 707 | "integrity" "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==" 708 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz" 709 | "version" "7.14.5" 710 | dependencies: 711 | "@babel/helper-plugin-utils" "^7.14.5" 712 | 713 | "@babel/plugin-transform-template-literals@^7.14.5": 714 | "integrity" "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==" 715 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz" 716 | "version" "7.14.5" 717 | dependencies: 718 | "@babel/helper-plugin-utils" "^7.14.5" 719 | 720 | "@babel/plugin-transform-typeof-symbol@^7.14.5": 721 | "integrity" "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==" 722 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz" 723 | "version" "7.14.5" 724 | dependencies: 725 | "@babel/helper-plugin-utils" "^7.14.5" 726 | 727 | "@babel/plugin-transform-unicode-escapes@^7.14.5": 728 | "integrity" "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==" 729 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz" 730 | "version" "7.14.5" 731 | dependencies: 732 | "@babel/helper-plugin-utils" "^7.14.5" 733 | 734 | "@babel/plugin-transform-unicode-regex@^7.14.5": 735 | "integrity" "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==" 736 | "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz" 737 | "version" "7.14.5" 738 | dependencies: 739 | "@babel/helper-create-regexp-features-plugin" "^7.14.5" 740 | "@babel/helper-plugin-utils" "^7.14.5" 741 | 742 | "@babel/preset-env@^7.15.6": 743 | "integrity" "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==" 744 | "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz" 745 | "version" "7.15.6" 746 | dependencies: 747 | "@babel/compat-data" "^7.15.0" 748 | "@babel/helper-compilation-targets" "^7.15.4" 749 | "@babel/helper-plugin-utils" "^7.14.5" 750 | "@babel/helper-validator-option" "^7.14.5" 751 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" 752 | "@babel/plugin-proposal-async-generator-functions" "^7.15.4" 753 | "@babel/plugin-proposal-class-properties" "^7.14.5" 754 | "@babel/plugin-proposal-class-static-block" "^7.15.4" 755 | "@babel/plugin-proposal-dynamic-import" "^7.14.5" 756 | "@babel/plugin-proposal-export-namespace-from" "^7.14.5" 757 | "@babel/plugin-proposal-json-strings" "^7.14.5" 758 | "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" 759 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" 760 | "@babel/plugin-proposal-numeric-separator" "^7.14.5" 761 | "@babel/plugin-proposal-object-rest-spread" "^7.15.6" 762 | "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" 763 | "@babel/plugin-proposal-optional-chaining" "^7.14.5" 764 | "@babel/plugin-proposal-private-methods" "^7.14.5" 765 | "@babel/plugin-proposal-private-property-in-object" "^7.15.4" 766 | "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" 767 | "@babel/plugin-syntax-async-generators" "^7.8.4" 768 | "@babel/plugin-syntax-class-properties" "^7.12.13" 769 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 770 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 771 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 772 | "@babel/plugin-syntax-json-strings" "^7.8.3" 773 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 774 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 775 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 776 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 777 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 778 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 779 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 780 | "@babel/plugin-syntax-top-level-await" "^7.14.5" 781 | "@babel/plugin-transform-arrow-functions" "^7.14.5" 782 | "@babel/plugin-transform-async-to-generator" "^7.14.5" 783 | "@babel/plugin-transform-block-scoped-functions" "^7.14.5" 784 | "@babel/plugin-transform-block-scoping" "^7.15.3" 785 | "@babel/plugin-transform-classes" "^7.15.4" 786 | "@babel/plugin-transform-computed-properties" "^7.14.5" 787 | "@babel/plugin-transform-destructuring" "^7.14.7" 788 | "@babel/plugin-transform-dotall-regex" "^7.14.5" 789 | "@babel/plugin-transform-duplicate-keys" "^7.14.5" 790 | "@babel/plugin-transform-exponentiation-operator" "^7.14.5" 791 | "@babel/plugin-transform-for-of" "^7.15.4" 792 | "@babel/plugin-transform-function-name" "^7.14.5" 793 | "@babel/plugin-transform-literals" "^7.14.5" 794 | "@babel/plugin-transform-member-expression-literals" "^7.14.5" 795 | "@babel/plugin-transform-modules-amd" "^7.14.5" 796 | "@babel/plugin-transform-modules-commonjs" "^7.15.4" 797 | "@babel/plugin-transform-modules-systemjs" "^7.15.4" 798 | "@babel/plugin-transform-modules-umd" "^7.14.5" 799 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" 800 | "@babel/plugin-transform-new-target" "^7.14.5" 801 | "@babel/plugin-transform-object-super" "^7.14.5" 802 | "@babel/plugin-transform-parameters" "^7.15.4" 803 | "@babel/plugin-transform-property-literals" "^7.14.5" 804 | "@babel/plugin-transform-regenerator" "^7.14.5" 805 | "@babel/plugin-transform-reserved-words" "^7.14.5" 806 | "@babel/plugin-transform-shorthand-properties" "^7.14.5" 807 | "@babel/plugin-transform-spread" "^7.14.6" 808 | "@babel/plugin-transform-sticky-regex" "^7.14.5" 809 | "@babel/plugin-transform-template-literals" "^7.14.5" 810 | "@babel/plugin-transform-typeof-symbol" "^7.14.5" 811 | "@babel/plugin-transform-unicode-escapes" "^7.14.5" 812 | "@babel/plugin-transform-unicode-regex" "^7.14.5" 813 | "@babel/preset-modules" "^0.1.4" 814 | "@babel/types" "^7.15.6" 815 | "babel-plugin-polyfill-corejs2" "^0.2.2" 816 | "babel-plugin-polyfill-corejs3" "^0.2.2" 817 | "babel-plugin-polyfill-regenerator" "^0.2.2" 818 | "core-js-compat" "^3.16.0" 819 | "semver" "^6.3.0" 820 | 821 | "@babel/preset-modules@^0.1.4": 822 | "integrity" "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==" 823 | "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz" 824 | "version" "0.1.4" 825 | dependencies: 826 | "@babel/helper-plugin-utils" "^7.0.0" 827 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" 828 | "@babel/plugin-transform-dotall-regex" "^7.4.4" 829 | "@babel/types" "^7.4.4" 830 | "esutils" "^2.0.2" 831 | 832 | "@babel/runtime@^7.8.4": 833 | "integrity" "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==" 834 | "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz" 835 | "version" "7.15.4" 836 | dependencies: 837 | "regenerator-runtime" "^0.13.4" 838 | 839 | "@babel/template@^7.15.4": 840 | "integrity" "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==" 841 | "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz" 842 | "version" "7.15.4" 843 | dependencies: 844 | "@babel/code-frame" "^7.14.5" 845 | "@babel/parser" "^7.15.4" 846 | "@babel/types" "^7.15.4" 847 | 848 | "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4": 849 | "integrity" "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==" 850 | "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz" 851 | "version" "7.15.4" 852 | dependencies: 853 | "@babel/code-frame" "^7.14.5" 854 | "@babel/generator" "^7.15.4" 855 | "@babel/helper-function-name" "^7.15.4" 856 | "@babel/helper-hoist-variables" "^7.15.4" 857 | "@babel/helper-split-export-declaration" "^7.15.4" 858 | "@babel/parser" "^7.15.4" 859 | "@babel/types" "^7.15.4" 860 | "debug" "^4.1.0" 861 | "globals" "^11.1.0" 862 | 863 | "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4": 864 | "integrity" "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==" 865 | "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz" 866 | "version" "7.15.6" 867 | dependencies: 868 | "@babel/helper-validator-identifier" "^7.14.9" 869 | "to-fast-properties" "^2.0.0" 870 | 871 | "@dcloudio/types@^2.5.12": 872 | "integrity" "sha512-BIO2fZTW+L2MybVDsIIYuk3Z7EHB5bi7V4AQw8WzjkdDBzHZuiCCTrwPpVDhDWEKDvaWYMZNCJx9w7Z357x//w==" 873 | "resolved" "https://registry.npmjs.org/@dcloudio/types/-/types-2.5.12.tgz" 874 | "version" "2.5.12" 875 | 876 | "@rollup/pluginutils@^4.1.0": 877 | "integrity" "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==" 878 | "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz" 879 | "version" "4.1.1" 880 | dependencies: 881 | "estree-walker" "^2.0.1" 882 | "picomatch" "^2.2.2" 883 | 884 | "ansi-styles@^3.2.1": 885 | "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" 886 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 887 | "version" "3.2.1" 888 | dependencies: 889 | "color-convert" "^1.9.0" 890 | 891 | "babel-plugin-dynamic-import-node@^2.3.3": 892 | "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" 893 | "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" 894 | "version" "2.3.3" 895 | dependencies: 896 | "object.assign" "^4.1.0" 897 | 898 | "babel-plugin-polyfill-corejs2@^0.2.2": 899 | "integrity" "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==" 900 | "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz" 901 | "version" "0.2.2" 902 | dependencies: 903 | "@babel/compat-data" "^7.13.11" 904 | "@babel/helper-define-polyfill-provider" "^0.2.2" 905 | "semver" "^6.1.1" 906 | 907 | "babel-plugin-polyfill-corejs3@^0.2.2": 908 | "integrity" "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==" 909 | "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz" 910 | "version" "0.2.5" 911 | dependencies: 912 | "@babel/helper-define-polyfill-provider" "^0.2.2" 913 | "core-js-compat" "^3.16.2" 914 | 915 | "babel-plugin-polyfill-regenerator@^0.2.2": 916 | "integrity" "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==" 917 | "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz" 918 | "version" "0.2.2" 919 | dependencies: 920 | "@babel/helper-define-polyfill-provider" "^0.2.2" 921 | 922 | "browserslist@^4.16.6", "browserslist@^4.17.1": 923 | "integrity" "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==" 924 | "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz" 925 | "version" "4.17.1" 926 | dependencies: 927 | "caniuse-lite" "^1.0.30001259" 928 | "electron-to-chromium" "^1.3.846" 929 | "escalade" "^3.1.1" 930 | "nanocolors" "^0.1.5" 931 | "node-releases" "^1.1.76" 932 | 933 | "call-bind@^1.0.0": 934 | "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" 935 | "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 936 | "version" "1.0.2" 937 | dependencies: 938 | "function-bind" "^1.1.1" 939 | "get-intrinsic" "^1.0.2" 940 | 941 | "caniuse-lite@^1.0.30001259": 942 | "integrity" "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA==" 943 | "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz" 944 | "version" "1.0.30001261" 945 | 946 | "chalk@^2.0.0": 947 | "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" 948 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 949 | "version" "2.4.2" 950 | dependencies: 951 | "ansi-styles" "^3.2.1" 952 | "escape-string-regexp" "^1.0.5" 953 | "supports-color" "^5.3.0" 954 | 955 | "color-convert@^1.9.0": 956 | "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" 957 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 958 | "version" "1.9.3" 959 | dependencies: 960 | "color-name" "1.1.3" 961 | 962 | "color-name@1.1.3": 963 | "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 964 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 965 | "version" "1.1.3" 966 | 967 | "commondir@^1.0.1": 968 | "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" 969 | "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" 970 | "version" "1.0.1" 971 | 972 | "convert-source-map@^1.7.0": 973 | "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" 974 | "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" 975 | "version" "1.8.0" 976 | dependencies: 977 | "safe-buffer" "~5.1.1" 978 | 979 | "core-js-compat@^3.16.0", "core-js-compat@^3.16.2": 980 | "integrity" "sha512-XJMYx58zo4W0kLPmIingVZA10+7TuKrMLPt83+EzDmxFJQUMcTVVmQ+n5JP4r6Z14qSzhQBRi3NSWoeVyKKXUg==" 981 | "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.1.tgz" 982 | "version" "3.18.1" 983 | dependencies: 984 | "browserslist" "^4.17.1" 985 | "semver" "7.0.0" 986 | 987 | "core-util-is@~1.0.0": 988 | "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 989 | "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" 990 | "version" "1.0.3" 991 | 992 | "debug@^4.1.0", "debug@^4.1.1": 993 | "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" 994 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" 995 | "version" "4.3.2" 996 | dependencies: 997 | "ms" "2.1.2" 998 | 999 | "define-properties@^1.1.3": 1000 | "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" 1001 | "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" 1002 | "version" "1.1.3" 1003 | dependencies: 1004 | "object-keys" "^1.0.12" 1005 | 1006 | "electron-to-chromium@^1.3.846": 1007 | "integrity" "sha512-00/IIC1mFPkq32MhUJyLdcTp7+wsKK2G3Sb65GSas9FKJQGYkDcZ4GwJkkxf5YyM3ETvl6n+toV8OmtXl4IA/g==" 1008 | "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.854.tgz" 1009 | "version" "1.3.854" 1010 | 1011 | "escalade@^3.1.1": 1012 | "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1013 | "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 1014 | "version" "3.1.1" 1015 | 1016 | "escape-string-regexp@^1.0.5": 1017 | "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1018 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 1019 | "version" "1.0.5" 1020 | 1021 | "estree-walker@^0.6.1": 1022 | "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" 1023 | "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" 1024 | "version" "0.6.1" 1025 | 1026 | "estree-walker@^2.0.1": 1027 | "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1028 | "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" 1029 | "version" "2.0.2" 1030 | 1031 | "esutils@^2.0.2": 1032 | "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 1033 | "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 1034 | "version" "2.0.3" 1035 | 1036 | "find-cache-dir@^3.3.1": 1037 | "integrity" "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==" 1038 | "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" 1039 | "version" "3.3.2" 1040 | dependencies: 1041 | "commondir" "^1.0.1" 1042 | "make-dir" "^3.0.2" 1043 | "pkg-dir" "^4.1.0" 1044 | 1045 | "find-up@^4.0.0": 1046 | "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" 1047 | "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" 1048 | "version" "4.1.0" 1049 | dependencies: 1050 | "locate-path" "^5.0.0" 1051 | "path-exists" "^4.0.0" 1052 | 1053 | "fs-extra@8.1.0": 1054 | "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" 1055 | "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" 1056 | "version" "8.1.0" 1057 | dependencies: 1058 | "graceful-fs" "^4.2.0" 1059 | "jsonfile" "^4.0.0" 1060 | "universalify" "^0.1.0" 1061 | 1062 | "fsevents@~2.3.2": 1063 | "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" 1064 | "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" 1065 | "version" "2.3.2" 1066 | 1067 | "function-bind@^1.1.1": 1068 | "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1069 | "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 1070 | "version" "1.1.1" 1071 | 1072 | "gensync@^1.0.0-beta.2": 1073 | "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" 1074 | "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" 1075 | "version" "1.0.0-beta.2" 1076 | 1077 | "get-intrinsic@^1.0.2": 1078 | "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" 1079 | "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" 1080 | "version" "1.1.1" 1081 | dependencies: 1082 | "function-bind" "^1.1.1" 1083 | "has" "^1.0.3" 1084 | "has-symbols" "^1.0.1" 1085 | 1086 | "globals@^11.1.0": 1087 | "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" 1088 | "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" 1089 | "version" "11.12.0" 1090 | 1091 | "graceful-fs@^4.1.6", "graceful-fs@^4.2.0": 1092 | "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 1093 | "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" 1094 | "version" "4.2.8" 1095 | 1096 | "has-flag@^3.0.0": 1097 | "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1098 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 1099 | "version" "3.0.0" 1100 | 1101 | "has-symbols@^1.0.1": 1102 | "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 1103 | "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" 1104 | "version" "1.0.2" 1105 | 1106 | "has@^1.0.3": 1107 | "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" 1108 | "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1109 | "version" "1.0.3" 1110 | dependencies: 1111 | "function-bind" "^1.1.1" 1112 | 1113 | "inherits@~2.0.3": 1114 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1115 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1116 | "version" "2.0.4" 1117 | 1118 | "is-core-module@^2.2.0": 1119 | "integrity" "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==" 1120 | "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz" 1121 | "version" "2.7.0" 1122 | dependencies: 1123 | "has" "^1.0.3" 1124 | 1125 | "isarray@~1.0.0": 1126 | "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1127 | "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" 1128 | "version" "1.0.0" 1129 | 1130 | "jest-worker@^23.2.0": 1131 | "integrity" "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=" 1132 | "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz" 1133 | "version" "23.2.0" 1134 | dependencies: 1135 | "merge-stream" "^1.0.1" 1136 | 1137 | "js-tokens@^4.0.0": 1138 | "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1139 | "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1140 | "version" "4.0.0" 1141 | 1142 | "jsesc@^2.5.1": 1143 | "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" 1144 | "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" 1145 | "version" "2.5.2" 1146 | 1147 | "jsesc@~0.5.0": 1148 | "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" 1149 | "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" 1150 | "version" "0.5.0" 1151 | 1152 | "json5@^2.1.2": 1153 | "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" 1154 | "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" 1155 | "version" "2.2.0" 1156 | dependencies: 1157 | "minimist" "^1.2.5" 1158 | 1159 | "jsonfile@^4.0.0": 1160 | "integrity" "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=" 1161 | "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" 1162 | "version" "4.0.0" 1163 | dependencies: 1164 | "graceful-fs" "^4.1.6" 1165 | 1166 | "locate-path@^5.0.0": 1167 | "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" 1168 | "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" 1169 | "version" "5.0.0" 1170 | dependencies: 1171 | "p-locate" "^4.1.0" 1172 | 1173 | "lodash.debounce@^4.0.8": 1174 | "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" 1175 | "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" 1176 | "version" "4.0.8" 1177 | 1178 | "make-dir@^3.0.2": 1179 | "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" 1180 | "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" 1181 | "version" "3.1.0" 1182 | dependencies: 1183 | "semver" "^6.0.0" 1184 | 1185 | "merge-stream@^1.0.1": 1186 | "integrity" "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=" 1187 | "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz" 1188 | "version" "1.0.1" 1189 | dependencies: 1190 | "readable-stream" "^2.0.1" 1191 | 1192 | "minimist@^1.2.5": 1193 | "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1194 | "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" 1195 | "version" "1.2.5" 1196 | 1197 | "ms@2.1.2": 1198 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1199 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1200 | "version" "2.1.2" 1201 | 1202 | "nanocolors@^0.1.5": 1203 | "integrity" "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==" 1204 | "resolved" "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz" 1205 | "version" "0.1.12" 1206 | 1207 | "node-releases@^1.1.76": 1208 | "integrity" "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==" 1209 | "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz" 1210 | "version" "1.1.76" 1211 | 1212 | "object-keys@^1.0.12", "object-keys@^1.1.1": 1213 | "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1214 | "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1215 | "version" "1.1.1" 1216 | 1217 | "object.assign@^4.1.0": 1218 | "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" 1219 | "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" 1220 | "version" "4.1.2" 1221 | dependencies: 1222 | "call-bind" "^1.0.0" 1223 | "define-properties" "^1.1.3" 1224 | "has-symbols" "^1.0.1" 1225 | "object-keys" "^1.1.1" 1226 | 1227 | "p-limit@^2.2.0": 1228 | "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" 1229 | "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" 1230 | "version" "2.3.0" 1231 | dependencies: 1232 | "p-try" "^2.0.0" 1233 | 1234 | "p-locate@^4.1.0": 1235 | "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" 1236 | "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" 1237 | "version" "4.1.0" 1238 | dependencies: 1239 | "p-limit" "^2.2.0" 1240 | 1241 | "p-try@^2.0.0": 1242 | "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1243 | "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" 1244 | "version" "2.2.0" 1245 | 1246 | "path-exists@^4.0.0": 1247 | "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1248 | "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1249 | "version" "4.0.0" 1250 | 1251 | "path-parse@^1.0.6": 1252 | "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1253 | "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1254 | "version" "1.0.7" 1255 | 1256 | "picomatch@^2.2.2": 1257 | "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" 1258 | "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" 1259 | "version" "2.3.0" 1260 | 1261 | "pkg-dir@^4.1.0": 1262 | "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" 1263 | "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" 1264 | "version" "4.2.0" 1265 | dependencies: 1266 | "find-up" "^4.0.0" 1267 | 1268 | "process-nextick-args@~2.0.0": 1269 | "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1270 | "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" 1271 | "version" "2.0.1" 1272 | 1273 | "readable-stream@^2.0.1": 1274 | "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" 1275 | "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" 1276 | "version" "2.3.7" 1277 | dependencies: 1278 | "core-util-is" "~1.0.0" 1279 | "inherits" "~2.0.3" 1280 | "isarray" "~1.0.0" 1281 | "process-nextick-args" "~2.0.0" 1282 | "safe-buffer" "~5.1.1" 1283 | "string_decoder" "~1.1.1" 1284 | "util-deprecate" "~1.0.1" 1285 | 1286 | "regenerate-unicode-properties@^9.0.0": 1287 | "integrity" "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==" 1288 | "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz" 1289 | "version" "9.0.0" 1290 | dependencies: 1291 | "regenerate" "^1.4.2" 1292 | 1293 | "regenerate@^1.4.2": 1294 | "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" 1295 | "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" 1296 | "version" "1.4.2" 1297 | 1298 | "regenerator-runtime@^0.13.4": 1299 | "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 1300 | "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" 1301 | "version" "0.13.9" 1302 | 1303 | "regenerator-transform@^0.14.2": 1304 | "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" 1305 | "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" 1306 | "version" "0.14.5" 1307 | dependencies: 1308 | "@babel/runtime" "^7.8.4" 1309 | 1310 | "regexpu-core@^4.7.1": 1311 | "integrity" "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==" 1312 | "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz" 1313 | "version" "4.8.0" 1314 | dependencies: 1315 | "regenerate" "^1.4.2" 1316 | "regenerate-unicode-properties" "^9.0.0" 1317 | "regjsgen" "^0.5.2" 1318 | "regjsparser" "^0.7.0" 1319 | "unicode-match-property-ecmascript" "^2.0.0" 1320 | "unicode-match-property-value-ecmascript" "^2.0.0" 1321 | 1322 | "regjsgen@^0.5.2": 1323 | "integrity" "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" 1324 | "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" 1325 | "version" "0.5.2" 1326 | 1327 | "regjsparser@^0.7.0": 1328 | "integrity" "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==" 1329 | "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz" 1330 | "version" "0.7.0" 1331 | dependencies: 1332 | "jsesc" "~0.5.0" 1333 | 1334 | "resolve@^1.14.2", "resolve@1.20.0": 1335 | "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" 1336 | "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" 1337 | "version" "1.20.0" 1338 | dependencies: 1339 | "is-core-module" "^2.2.0" 1340 | "path-parse" "^1.0.6" 1341 | 1342 | "rollup-plugin-babel@^4.4.0": 1343 | "integrity" "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==" 1344 | "resolved" "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz" 1345 | "version" "4.4.0" 1346 | dependencies: 1347 | "@babel/helper-module-imports" "^7.0.0" 1348 | "rollup-pluginutils" "^2.8.1" 1349 | 1350 | "rollup-plugin-typescript2@^0.30.0": 1351 | "integrity" "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==" 1352 | "resolved" "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz" 1353 | "version" "0.30.0" 1354 | dependencies: 1355 | "@rollup/pluginutils" "^4.1.0" 1356 | "find-cache-dir" "^3.3.1" 1357 | "fs-extra" "8.1.0" 1358 | "resolve" "1.20.0" 1359 | "tslib" "2.1.0" 1360 | 1361 | "rollup-plugin-uglify@^5.0.2": 1362 | "integrity" "sha512-CRRyMgKjTwTx1GXnn+v1VYV+6De5NyPB1UBStsQIQ+asrxvP7dK43cg2pf1vyFNr/NIHGvfYAR9Yo4j+5ZMQsw==" 1363 | "resolved" "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-5.0.2.tgz" 1364 | "version" "5.0.2" 1365 | dependencies: 1366 | "@babel/code-frame" "^7.0.0" 1367 | "jest-worker" "^23.2.0" 1368 | "uglify-js" "^3.4.8" 1369 | 1370 | "rollup-pluginutils@^2.8.1": 1371 | "integrity" "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==" 1372 | "resolved" "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" 1373 | "version" "2.8.2" 1374 | dependencies: 1375 | "estree-walker" "^0.6.1" 1376 | 1377 | "rollup@^2.57.0", "rollup@>=0.65.0 <1": 1378 | "integrity" "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==" 1379 | "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz" 1380 | "version" "2.57.0" 1381 | dependencies: 1382 | "fsevents" "~2.3.2" 1383 | optionalDependencies: 1384 | "fsevents" "~2.3.2" 1385 | 1386 | "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": 1387 | "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1388 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 1389 | "version" "5.1.2" 1390 | 1391 | "semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": 1392 | "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1393 | "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" 1394 | "version" "6.3.0" 1395 | 1396 | "semver@7.0.0": 1397 | "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" 1398 | "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" 1399 | "version" "7.0.0" 1400 | 1401 | "source-map@^0.5.0": 1402 | "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1403 | "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" 1404 | "version" "0.5.7" 1405 | 1406 | "string_decoder@~1.1.1": 1407 | "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" 1408 | "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" 1409 | "version" "1.1.1" 1410 | dependencies: 1411 | "safe-buffer" "~5.1.0" 1412 | 1413 | "supports-color@^5.3.0": 1414 | "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" 1415 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1416 | "version" "5.5.0" 1417 | dependencies: 1418 | "has-flag" "^3.0.0" 1419 | 1420 | "to-fast-properties@^2.0.0": 1421 | "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 1422 | "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" 1423 | "version" "2.0.0" 1424 | 1425 | "tslib@2.1.0": 1426 | "integrity" "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" 1427 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" 1428 | "version" "2.1.0" 1429 | 1430 | "typescript@^4.4.3": 1431 | "integrity" "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==" 1432 | "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz" 1433 | "version" "4.4.3" 1434 | 1435 | "uglify-js@^3.4.8": 1436 | "integrity" "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==" 1437 | "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz" 1438 | "version" "3.14.2" 1439 | 1440 | "unicode-canonical-property-names-ecmascript@^2.0.0": 1441 | "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" 1442 | "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" 1443 | "version" "2.0.0" 1444 | 1445 | "unicode-match-property-ecmascript@^2.0.0": 1446 | "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" 1447 | "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" 1448 | "version" "2.0.0" 1449 | dependencies: 1450 | "unicode-canonical-property-names-ecmascript" "^2.0.0" 1451 | "unicode-property-aliases-ecmascript" "^2.0.0" 1452 | 1453 | "unicode-match-property-value-ecmascript@^2.0.0": 1454 | "integrity" "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" 1455 | "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" 1456 | "version" "2.0.0" 1457 | 1458 | "unicode-property-aliases-ecmascript@^2.0.0": 1459 | "integrity" "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" 1460 | "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" 1461 | "version" "2.0.0" 1462 | 1463 | "universalify@^0.1.0": 1464 | "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 1465 | "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" 1466 | "version" "0.1.2" 1467 | 1468 | "util-deprecate@~1.0.1": 1469 | "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1470 | "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1471 | "version" "1.0.2" 1472 | --------------------------------------------------------------------------------