├── .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 |
--------------------------------------------------------------------------------