@weapp-vite/miniprogram-automator 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["sleep","sleep","sleep","LegacyQrCodeReader","pkg.version","sleep"],"sources":["../src/internal/compat/async.ts","../src/internal/compat/format.ts","../src/internal/compat/network.ts","../src/internal/compat/typeGuards.ts","../src/internal/compat/object.ts","../src/internal/compat/strings.ts","../src/Element.ts","../src/Transport.ts","../src/Connection.ts","../src/headless.ts","../package.json","../src/Native.ts","../src/Page.ts","../src/internal/qr/vendor/reader/core/result.ts","../src/internal/qr/vendor/reader/parse/datamask.ts","../src/internal/qr/vendor/reader/parse/errorlevel.ts","../src/internal/qr/vendor/reader/parse/formatinf.ts","../src/internal/qr/vendor/reader/parse/bitmat.ts","../src/internal/qr/vendor/reader/parse/version.ts","../src/internal/qr/vendor/reader/parse/bmparser.ts","../src/internal/qr/vendor/reader/parse/datablock.ts","../src/internal/qr/vendor/reader/parse/databr.ts","../src/internal/qr/vendor/reader/error-correction/gf256poly.ts","../src/internal/qr/vendor/reader/error-correction/gf256.ts","../src/internal/qr/vendor/reader/error-correction/rsdecoder.ts","../src/internal/qr/vendor/reader/parse/decoder.ts","../src/internal/qr/vendor/reader/detect/alignpat.ts","../src/internal/qr/vendor/reader/detect/findpat.ts","../src/internal/qr/vendor/reader/detect/grid.ts","../src/internal/qr/vendor/reader/detect/detector.ts","../src/internal/qr/vendor/reader/core/qrcode.ts","../src/internal/qr/vendor/reader/core/runtime.ts","../src/internal/qr/vendor/reader/core/decode.ts","../src/internal/qr/vendor/reader/decode.ts","../src/internal/qr/decode.ts","../src/internal/qr/vendor/terminal/QRCode/QRMode.ts","../src/internal/qr/vendor/terminal/QRCode/QR8bitByte.ts","../src/internal/qr/vendor/terminal/QRCode/QRBitBuffer.ts","../src/internal/qr/vendor/terminal/QRCode/QRMath.ts","../src/internal/qr/vendor/terminal/QRCode/QRPolynomial.ts","../src/internal/qr/vendor/terminal/QRCode/QRErrorCorrectLevel.ts","../src/internal/qr/vendor/terminal/QRCode/QRRSBlock.ts","../src/internal/qr/vendor/terminal/QRCode/QRMaskPattern.ts","../src/internal/qr/vendor/terminal/QRCode/QRUtil.ts","../src/internal/qr/vendor/terminal/QRCode/index.ts","../src/internal/qr/encode.ts","../src/internal/qr/render.ts","../src/util.ts","../src/MiniProgram.ts","../src/Launcher.ts","../src/Automator.ts","../src/index.ts"],"sourcesContent":["/**\n * @file 异步控制工具。\n */\n/** sleep 的方法封装。 */\nexport function sleep(timeout: number) {\n return new Promise<void>(resolve => setTimeout(resolve, timeout))\n}\n\n/** waitUntil 的方法封装。 */\nexport async function waitUntil(condition: () => unknown | Promise<unknown>, timeout = 0, interval = 250) {\n const startTime = Date.now()\n\n while (true) {\n const value = await condition()\n if (value) {\n return value\n }\n\n if (timeout && Date.now() - startTime >= timeout) {\n throw new Error(`Wait timed out after ${timeout} ms`)\n }\n\n await sleep(interval)\n }\n}\n","/**\n * @file 标识与格式化工具。\n */\nimport { randomUUID } from 'node:crypto'\n\nfunction padZero(value: number, width = 2) {\n return String(value).padStart(width, '0')\n}\n\n/** dateFormat 的方法封装。 */\nexport function dateFormat(mask: string, value = new Date()) {\n const date = value instanceof Date ? value : new Date(value)\n\n return mask\n .replace('yyyy', String(date.getFullYear()))\n .replace('mm', padZero(date.getMonth() + 1))\n .replace('dd', padZero(date.getDate()))\n .replace('HH', padZero(date.getHours()))\n .replace('MM', padZero(date.getMinutes()))\n .replace('ss', padZero(date.getSeconds()))\n .replace('l', padZero(date.getMilliseconds(), 3))\n}\n\n/** uuid 的方法封装。 */\nexport function uuid() {\n return randomUUID()\n}\n","/**\n * @file 网络与环境工具。\n */\nimport net from 'node:net'\nimport process from 'node:process'\n\nconst absolutePathPattern = /^(?:[a-z]+:)?[\\\\/]/i\n\n/** getPort 的方法封装。 */\nexport function getPort(ports: number | number[], host?: string) {\n const queue = Array.isArray(ports) ? [...ports] : [ports]\n queue.push(0)\n\n const checkPort = (port: number) => {\n return new Promise<number>((resolve, reject) => {\n const server = net.createServer()\n server.unref()\n server.on('error', reject)\n\n const options: net.ListenOptions = { port }\n if (host) {\n options.host = host\n }\n\n server.listen(options, () => {\n const address = server.address()\n const resolvedPort = typeof address === 'object' && address ? address.port : port\n server.close(() => {\n resolve(resolvedPort)\n })\n })\n })\n }\n\n return queue.reduce<Promise<number>>((sequence, port) => {\n return sequence.catch(() => checkPort(port))\n }, Promise.reject(new Error('No available port')))\n}\n\n/** isRelative 的方法封装。 */\nexport function isRelative(value: string) {\n return !absolutePathPattern.test(value)\n}\n\nexport const isWindows = process.platform === 'win32'\n","/**\n * @file 基础类型守卫工具。\n */\nconst objectToString = Object.prototype.toString\n\n/** isFn 的方法封装。 */\nexport function isFn(value: unknown): value is (...args: any[]) => any {\n const type = objectToString.call(value)\n return type === '[object Function]' || type === '[object AsyncFunction]' || type === '[object GeneratorFunction]'\n}\n\n/** isNum 的方法封装。 */\nexport function isNum(value: unknown): value is number {\n return objectToString.call(value) === '[object Number]'\n}\n\n/** isStr 的方法封装。 */\nexport function isStr(value: unknown): value is string {\n return objectToString.call(value) === '[object String]'\n}\n\n/** isUndef 的方法封装。 */\nexport function isUndef(value: unknown): value is undefined {\n return typeof value === 'undefined'\n}\n\n/** isPlainObject 的方法封装。 */\nexport function isPlainObject(value: unknown): value is Record<string, any> {\n if (objectToString.call(value) !== '[object Object]') {\n return false\n }\n\n const prototype = Object.getPrototypeOf(value)\n return prototype === null || prototype === Object.prototype\n}\n","/**\n * @file 对象与序列化工具。\n */\nimport { isPlainObject } from './typeGuards'\n\nfunction cloneDeep<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => cloneDeep(item)) as T\n }\n\n if (isPlainObject(value)) {\n const result: Record<string, any> = {}\n for (const [key, item] of Object.entries(value)) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue\n }\n\n result[key] = cloneDeep(item)\n }\n return result as T\n }\n\n return value\n}\n\nfunction stableSerialize(value: unknown) {\n const stack: unknown[] = []\n const keys: string[] = []\n\n return JSON.stringify(value, function serialize(key, currentValue) {\n if (stack.length > 0) {\n const currentIndex = stack.indexOf(this)\n if (currentIndex >= 0) {\n stack.splice(currentIndex + 1)\n keys.splice(currentIndex, Infinity, key)\n }\n else {\n stack.push(this)\n keys.push(key)\n }\n\n const valueIndex = stack.indexOf(currentValue)\n if (valueIndex >= 0) {\n if (valueIndex === 0) {\n return '[Circular ~]'\n }\n\n return `[Circular ~.${keys.slice(0, valueIndex).join('.')}]`\n }\n }\n else {\n stack.push(currentValue)\n }\n\n if (typeof currentValue === 'function') {\n return `[Function ${currentValue.toString()}]`\n }\n\n if (currentValue instanceof RegExp) {\n return `[RegExp ${currentValue.toString()}]`\n }\n\n if (typeof currentValue === 'undefined') {\n return null\n }\n\n return currentValue\n })\n}\n\n/** extendDeep 的方法封装。 */\nexport function extendDeep<T>(target: T, ...sources: unknown[]): T {\n let result = target\n\n for (const source of sources) {\n if (isPlainObject(result) && isPlainObject(source)) {\n for (const [key, value] of Object.entries(source)) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue\n }\n\n result[key as keyof T] = extendDeep((result as any)[key], value)\n }\n continue\n }\n\n result = cloneDeep(source) as T\n }\n\n return result\n}\n\n/** isEmpty 的方法封装。 */\nexport function isEmpty(value: unknown) {\n if (value == null) {\n return true\n }\n\n if (Array.isArray(value) || typeof value === 'string') {\n return value.length === 0\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0\n }\n\n return false\n}\n\n/** stringify 的方法封装。 */\nexport function stringify(value: unknown) {\n return stableSerialize(value)\n}\n","/**\n * @file 字符串与版本处理工具。\n */\nconst trimPatternCache = new Map<string, RegExp>()\n\nfunction getTrimPattern(chars: string) {\n const existing = trimPatternCache.get(chars)\n if (existing) {\n return existing\n }\n\n const escaped = chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const pattern = new RegExp(`^[${escaped}]+|[${escaped}]+$`, 'g')\n trimPatternCache.set(chars, pattern)\n return pattern\n}\n\n/** startWith 的方法封装。 */\nexport function startWith(value: string, prefix: string) {\n return value.startsWith(prefix)\n}\n\n/** endWith 的方法封装。 */\nexport function endWith(value: string, suffix: string) {\n return value.endsWith(suffix)\n}\n\n/** trim 的方法封装。 */\nexport function trim(value: string, chars?: string) {\n if (!chars) {\n return value.trim()\n }\n\n return value.replace(getTrimPattern(chars), '')\n}\n\n/** cmpVersion 的方法封装。 */\nexport function cmpVersion(versionA: string, versionB: string) {\n const left = versionA.split('.')\n const right = versionB.split('.')\n const length = Math.max(left.length, right.length)\n\n for (let index = 0; index < length; index += 1) {\n const currentLeft = Number.parseInt(left[index] || '0', 10)\n const currentRight = Number.parseInt(right[index] || '0', 10)\n if (currentLeft > currentRight) {\n return 1\n }\n if (currentLeft < currentRight) {\n return -1\n }\n }\n\n return 0\n}\n\n/** toStr 的方法封装。 */\nexport function toStr(value: unknown) {\n return value == null ? '' : String(value)\n}\n","/**\n * @file 页面元素能力封装。\n */\nimport type Connection from './Connection'\nimport { isStr, isUndef, sleep } from './internal/compat'\n/** IElementOptions 的类型定义。 */\nexport interface IElementOptions {\n elementId: string\n nodeId?: string\n videoId?: string\n pageId: number\n tagName: string\n}\n/** ITouch 的类型定义。 */\nexport interface ITouch {\n identifier?: number\n pageX?: number\n pageY?: number\n clientX?: number\n clientY?: number\n}\n/** ITouchEventOptions 的类型定义。 */\nexport interface ITouchEventOptions {\n touches?: ITouch[]\n changeTouches?: ITouch[]\n}\n/** IEventOptions 的类型定义。 */\nexport interface IEventOptions {\n eventName: string\n $?: string\n touches?: ITouch[]\n changeTouches?: ITouch[]\n detail?: Record<string, any>\n}\ntype ElementMap = Map<string, Element>\n/** Element 的实现。 */\nexport default class Element {\n tagName = ''\n protected nodeId: string | null\n private videoId: string | null\n private id: string\n private pageId: number\n private publicProps?: Record<string, any>\n constructor(private connection: Connection, options: IElementOptions, private elementMap: ElementMap) {\n this.id = options.elementId\n this.pageId = options.pageId\n this.nodeId = options.nodeId || null\n this.videoId = options.videoId || null\n this.tagName = options.tagName\n }\n\n async $(selector: string) {\n try {\n const element = await this.send('Element.getElement', { selector })\n return Element.create(this.connection, { ...element, pageId: this.pageId }, this.elementMap)\n }\n catch {\n return null\n }\n }\n\n async $$(selector: string) {\n const { elements } = await this.send('Element.getElements', { selector })\n return elements.map((element: IElementOptions) => {\n return Element.create(this.connection, { ...element, pageId: this.pageId }, this.elementMap)\n })\n }\n\n async size() {\n const [width, height] = await this.domProperty(['offsetWidth', 'offsetHeight'])\n return { width, height }\n }\n\n async offset() {\n return await this.send('Element.getOffset')\n }\n\n async text() {\n return await this.domProperty('innerText')\n }\n\n async attribute(name: string) {\n if (!isStr(name)) {\n throw new Error('name must be a string')\n }\n return await this.getter(name, 'getAttributes', 'attributes')\n }\n\n async value() {\n return await this.property('value')\n }\n\n async property(name: string) {\n if (!isStr(name)) {\n throw new Error('name must be a string')\n }\n let publicProps = this.publicProps\n if (!publicProps) {\n publicProps = await this._property('__propPublic')\n this.publicProps = publicProps\n }\n if (!publicProps?.[name]) {\n throw new Error(`${this.tagName}.${name} not exists`)\n }\n return await this._property(name)\n }\n\n async wxml() {\n return (await this.send('Element.getWXML', { type: 'inner' })).wxml\n }\n\n async outerWxml() {\n return (await this.send('Element.getWXML', { type: 'outer' })).wxml\n }\n\n async style(name: string) {\n if (!isStr(name)) {\n throw new Error('name must be a string')\n }\n return await this.getter(name, 'getStyles', 'styles')\n }\n\n async tap() {\n await this.send('Element.tap')\n }\n\n async longpress() {\n await this.touchstart()\n await sleep(350)\n await this.touchend()\n }\n\n async trigger(type: string, detail?: any) {\n const payload: Record<string, any> = { type }\n if (!isUndef(detail)) {\n payload.detail = detail\n }\n await this.send('Element.triggerEvent', payload)\n }\n\n async touchstart(options: ITouchEventOptions = {}) {\n await this.send('Element.touchstart', options)\n }\n\n async touchmove(options: ITouchEventOptions = {}) {\n await this.send('Element.touchmove', options)\n }\n\n async touchend(options: ITouchEventOptions = {}) {\n await this.send('Element.touchend', options)\n }\n\n async dispatchEvent(options: IEventOptions) {\n await this.send('Element.dispatchEvent', options)\n }\n\n protected async _property(name: string | string[]) {\n return await this.getter(name, 'getProperties', 'properties')\n }\n\n protected async send(method: string, params: Record<string, any> = {}) {\n params.elementId = this.id\n params.pageId = this.pageId\n if (this.nodeId) {\n params.nodeId = this.nodeId\n }\n if (this.videoId) {\n params.videoId = this.videoId\n }\n return await this.connection.send(method, params)\n }\n\n protected async callFunction(functionName: string, ...args: any[]) {\n const { result } = await this.send('Element.callFunction', { functionName, args })\n return result\n }\n\n private async domProperty(name: string | string[]) {\n return await this.getter(name, 'getDOMProperties', 'properties')\n }\n\n private async getter(name: string | string[], method: string, field: string) {\n const names = isStr(name) ? [name] : name\n const values = (await this.send(`Element.${method}`, { names }))[field]\n return isStr(name) ? values[0] : values\n }\n\n static create(connection: Connection, options: IElementOptions, elementMap: ElementMap): Element {\n const existing = elementMap.get(options.elementId)\n if (existing) {\n return existing\n }\n let ElementCtor: typeof Element = Element\n if (options.nodeId) {\n ElementCtor = CustomElement\n }\n else {\n switch (options.tagName) {\n case 'input':\n ElementCtor = InputElement\n break\n case 'textarea':\n ElementCtor = TextareaElement\n break\n case 'scroll-view':\n ElementCtor = ScrollViewElement\n break\n case 'swiper':\n ElementCtor = SwiperElement\n break\n case 'movable-view':\n ElementCtor = MovableViewElement\n break\n case 'switch':\n ElementCtor = SwitchElement\n break\n case 'slider':\n ElementCtor = SliderElement\n break\n case 'video':\n ElementCtor = ContextElement\n break\n default:\n ElementCtor = Element\n }\n }\n const element = new ElementCtor(connection, options, elementMap)\n elementMap.set(options.elementId, element)\n return element\n }\n}\n/** CustomElement 的实现。 */\nexport class CustomElement extends Element {\n async setData(data: any) {\n await this.send('Element.setData', { data })\n }\n\n async data(path?: string) {\n const payload: Record<string, any> = {}\n if (path) {\n payload.path = path\n }\n return (await this.send('Element.getData', payload)).data\n }\n\n async callMethod(method: string, ...args: any[]) {\n return (await this.send('Element.callMethod', { method, args })).result\n }\n}\n/** InputElement 的实现。 */\nexport class InputElement extends Element {\n async input(value: string) {\n await this.callFunction('input.input', value)\n }\n}\n/** TextareaElement 的实现。 */\nexport class TextareaElement extends Element {\n async input(value: string) {\n await this.callFunction('textarea.input', value)\n }\n}\n/** ScrollViewElement 的实现。 */\nexport class ScrollViewElement extends Element {\n async scrollTo(x: number, y: number) {\n await this.callFunction('scroll-view.scrollTo', x, y)\n }\n\n async property(name: string) {\n if (name === 'scrollTop') {\n return await this.callFunction('scroll-view.scrollTop')\n }\n if (name === 'scrollLeft') {\n return await this.callFunction('scroll-view.scrollLeft')\n }\n return await super.property(name)\n }\n\n async scrollWidth() {\n return await this.callFunction('scroll-view.scrollWidth')\n }\n\n async scrollHeight() {\n return await this.callFunction('scroll-view.scrollHeight')\n }\n}\n/** SwiperElement 的实现。 */\nexport class SwiperElement extends Element {\n async swipeTo(index: number) {\n await this.callFunction('swiper.swipeTo', index)\n }\n}\n/** MovableViewElement 的实现。 */\nexport class MovableViewElement extends Element {\n async moveTo(x: number, y: number) {\n await this.callFunction('movable-view.moveTo', x, y)\n }\n\n async property(name: string) {\n if (name === 'x') {\n return await this._property('_translateX')\n }\n if (name === 'y') {\n return await this._property('_translateY')\n }\n return await super.property(name)\n }\n}\n/** SwitchElement 的实现。 */\nexport class SwitchElement extends Element {\n async tap() {\n await this.callFunction('switch.tap')\n }\n}\n/** SliderElement 的实现。 */\nexport class SliderElement extends Element {\n async slideTo(value: number) {\n await this.callFunction('slider.slideTo', value)\n }\n}\n/** ContextElement 的实现。 */\nexport class ContextElement extends Element {\n async callContextMethod(method: string, ...args: any[]) {\n return (await this.send('Element.callContextMethod', { method, args })).result\n }\n}\n","import type { Buffer } from 'node:buffer'\n/**\n * @file WebSocket 传输层实现。\n */\nimport type WebSocket from 'ws'\nimport { EventEmitter } from 'node:events'\n/** Transport 的实现。 */\nexport default class Transport extends EventEmitter {\n constructor(private ws: WebSocket) {\n super()\n ws.on('message', (data: string | Buffer | ArrayBuffer | Buffer[]) => {\n this.emit('message', typeof data === 'string' ? data : data.toString())\n })\n ws.on('close', () => {\n this.emit('close')\n })\n }\n\n send(message: string) {\n this.ws.send(message)\n }\n\n close() {\n this.ws.close()\n }\n}\n","/**\n * @file 自动化协议连接实现。\n */\nimport { EventEmitter } from 'node:events'\nimport debug from 'debug'\nimport WebSocket from 'ws'\nimport { dateFormat, stringify, uuid } from './internal/compat'\nimport Transport from './Transport'\n\nconst debugProtocol = debug('automator:protocol')\nconst closeErrTip = 'Connection closed, check if wechat web devTools is still running'\ninterface PendingCallback {\n resolve: (value: any) => void\n reject: (error: Error) => void\n}\ninterface ProtocolResponse {\n id?: string\n method?: string\n error?: {\n message?: string\n }\n result?: any\n params?: any\n}\n/** Connection 的实现。 */\nexport default class Connection extends EventEmitter {\n private callbacks = new Map<string, PendingCallback>()\n constructor(private transport: Transport) {\n super()\n transport.on('message', this.onMessage)\n transport.on('close', this.onClose)\n }\n\n send(method: string, params: Record<string, any> = {}) {\n const id = uuid()\n const payload = stringify({ id, method, params })\n debugProtocol(`${dateFormat('yyyy-mm-dd HH:MM:ss:l')} SEND ► ${payload}`)\n return new Promise<any>((resolve, reject) => {\n this.callbacks.set(id, { resolve, reject })\n try {\n this.transport.send(payload)\n }\n catch {\n this.callbacks.delete(id)\n reject(new Error(closeErrTip))\n }\n })\n }\n\n dispose() {\n this.transport.close()\n }\n\n private onMessage = (message: string) => {\n debugProtocol(`${dateFormat('yyyy-mm-dd HH:MM:ss:l')} ◀ RECV ${message}`)\n const payload = JSON.parse(message) as ProtocolResponse\n const { id, method, error, result, params } = payload\n if (!id) {\n this.emit(method!, params)\n return\n }\n const callback = this.callbacks.get(id)\n if (!callback) {\n return\n }\n this.callbacks.delete(id)\n if (error) {\n callback.reject(new Error(error.message || closeErrTip))\n return\n }\n callback.resolve(result)\n }\n\n private onClose = () => {\n for (const callback of this.callbacks.values()) {\n callback.reject(new Error(closeErrTip))\n }\n this.callbacks.clear()\n }\n\n static create(url: string) {\n return new Promise<Connection>((resolve, reject) => {\n const ws = new WebSocket(url)\n ws.on('open', () => {\n resolve(new Connection(new Transport(ws)))\n })\n ws.on('error', reject)\n })\n }\n}\n","/**\n * @file 无头运行时适配。\n */\n/** HeadlessAutomatorLaunchOptions 的类型定义。 */\nexport interface HeadlessAutomatorLaunchOptions {\n projectPath: string\n}\nexport async function launchHeadlessAutomator(options: HeadlessAutomatorLaunchOptions) {\n const mod = await import('../../../mpcore/packages/simulator/src/testing/launch')\n return await mod.launch({\n projectPath: options.projectPath,\n })\n}\n","","/**\n * @file 原生能力桥接封装。\n */\nimport type Connection from './Connection'\nimport { EventEmitter } from 'node:events'\n/** ISwitchTabOptions 的类型定义。 */\nexport interface ISwitchTabOptions {\n url: string\n}\n/** Native 的实现。 */\nexport default class Native extends EventEmitter {\n constructor(private connection: Connection) {\n super()\n }\n\n async goHome() {\n return await this.sendNative('goHome')\n }\n\n async navigateLeft() {\n return await this.sendNative('navigateLeft')\n }\n\n async confirmModal() {\n return await this.sendNative('confirmModal')\n }\n\n async cancelModal() {\n return await this.sendNative('cancelModal')\n }\n\n async switchTab(params: ISwitchTabOptions) {\n return await this.sendNative('switchTab', params)\n }\n\n async authorizeCancel() {\n return await this.sendNative('authorizeCancel')\n }\n\n async authorizeAllow() {\n return await this.sendNative('authorizeAllow')\n }\n\n async closePaymentDialog() {\n return await this.sendNative('closePaymentDialog')\n }\n\n async shareCancel() {\n return await this.sendNative('shareCancel')\n }\n\n async shareConfirm() {\n return await this.sendNative('shareConfirm')\n }\n\n private async send(method: string, params: Record<string, any> = {}) {\n return await this.connection.send(method, params)\n }\n\n private async sendNative(method: string, data?: Record<string, any>) {\n return await this.send('Tool.native', { method, data })\n }\n}\n","/**\n * @file 页面对象能力封装。\n */\nimport type Connection from './Connection'\nimport Element from './Element'\nimport { isFn, isNum, isStr, sleep, waitUntil } from './internal/compat'\n/** IPageOptions 的类型定义。 */\nexport interface IPageOptions {\n id: number\n path: string\n query: any\n}\ntype PageMap = Map<number, Page>\ntype WaitCondition = string | number | (() => unknown | Promise<unknown>)\n/** Page 的实现。 */\nexport default class Page {\n path = ''\n query: any = {}\n private id: number\n private elementMap = new Map<string, Element>()\n constructor(private connection: Connection, options: IPageOptions) {\n this.id = options.id\n this.path = options.path\n this.query = options.query\n }\n\n async waitFor(condition: WaitCondition) {\n if (isNum(condition)) {\n await sleep(condition)\n return\n }\n if (isFn(condition)) {\n await waitUntil(condition)\n return\n }\n if (isStr(condition)) {\n await waitUntil(async () => (await this.$$(condition)).length > 0)\n }\n }\n\n async $(selector: string) {\n try {\n const element = await this.send('Page.getElement', { selector })\n return Element.create(this.connection, { ...element, pageId: this.id }, this.elementMap)\n }\n catch {\n return null\n }\n }\n\n async $$(selector: string) {\n const { elements } = await this.send('Page.getElements', { selector })\n return elements.map((element: any) => {\n return Element.create(this.connection, { ...element, pageId: this.id }, this.elementMap)\n })\n }\n\n async getElementByXpath(selector: string) {\n try {\n const element = await this.send('Page.getElementByXpath', { selector })\n return Element.create(this.connection, { ...element, pageId: this.id }, this.elementMap)\n }\n catch {\n return null\n }\n }\n\n async getElementsByXpath(selector: string) {\n const { elements } = await this.send('Page.getElementsByXpath', { selector })\n return elements.map((element: any) => {\n return Element.create(this.connection, { ...element, pageId: this.id }, this.elementMap)\n })\n }\n\n async xpath(selector: string) {\n return await this.getElementByXpath(selector)\n }\n\n async data(path?: string) {\n const payload: Record<string, any> = {}\n if (path) {\n payload.path = path\n }\n return (await this.send('Page.getData', payload)).data\n }\n\n async setData(data: any) {\n await this.send('Page.setData', { data })\n }\n\n async size() {\n const [width, height] = await this.windowProperty([\n 'document.documentElement.scrollWidth',\n 'document.documentElement.scrollHeight',\n ])\n return { width, height }\n }\n\n async callMethod(method: string, ...args: any[]) {\n return (await this.send('Page.callMethod', { method, args })).result\n }\n\n async scrollTop() {\n const bodyScrollTop = await this.windowProperty('document.body.scrollTop')\n const documentScrollTop = await this.windowProperty('document.documentElement.scrollTop')\n return bodyScrollTop || documentScrollTop\n }\n\n private async windowProperty(name: string | string[]) {\n const names = isStr(name) ? [name] : name\n const properties = (await this.send('Page.getWindowProperties', { names })).properties\n return isStr(name) ? properties[0] : properties\n }\n\n private async send(method: string, params: Record<string, any> = {}) {\n params.pageId = this.id\n return await this.connection.send(method, params)\n }\n\n static create(connection: Connection, options: IPageOptions, pageMap: PageMap) {\n const existing = pageMap.get(options.id)\n if (existing) {\n return existing\n }\n const page = new Page(connection, options)\n pageMap.set(options.id, page)\n return page\n }\n}\n","/**\n * @file 二维码核心 reader 结果归一化。\n */\nimport type { QRCodeReaderResult } from './types'\n\n/** normalizeQrCodeReaderResult 的方法封装。 */\nexport function normalizeQrCodeReaderResult(value: unknown): QRCodeReaderResult {\n if (\n value\n && typeof value === 'object'\n && 'result' in value\n && typeof (value as { result: unknown }).result === 'string'\n ) {\n return value as QRCodeReaderResult\n }\n\n throw new TypeError('Invalid QR code reader result')\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:datamask。\n */\nimport { URShift } from '../core/qrcode'\n\nconst DataMask = {}\nDataMask.forReference = function (reference) {\n if (reference < 0 || reference > 7) {\n throw 'System.ArgumentException'\n }\n return DataMask.DATA_MASKS[reference]\n}\nfunction DataMask000() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return ((i + j) & 0x01) == 0\n }\n}\nfunction DataMask001() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return (i & 0x01) == 0\n }\n}\nfunction DataMask010() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return j % 3 == 0\n }\n}\nfunction DataMask011() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return (i + j) % 3 == 0\n }\n}\nfunction DataMask100() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return (((URShift(i, 1)) + (j / 3)) & 0x01) == 0\n }\n}\nfunction DataMask101() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n const temp = i * j\n return (temp & 0x01) + (temp % 3) == 0\n }\n}\nfunction DataMask110() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n const temp = i * j\n return (((temp & 0x01) + (temp % 3)) & 0x01) == 0\n }\n}\nfunction DataMask111() {\n this.unmaskBitMatrix = function (bits, dimension) {\n for (let i = 0; i < dimension; i++) {\n for (let j = 0; j < dimension; j++) {\n if (this.isMasked(i, j)) {\n bits.flip(j, i)\n }\n }\n }\n }\n this.isMasked = function (i, j) {\n return ((((i + j) & 0x01) + ((i * j) % 3)) & 0x01) == 0\n }\n}\nDataMask.DATA_MASKS = [new DataMask000(), new DataMask001(), new DataMask010(), new DataMask011(), new DataMask100(), new DataMask101(), new DataMask110(), new DataMask111()]\nexport default DataMask\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:errorlevel。\n */\nexport default function ErrorCorrectionLevel(ordinal, bits, name) {\n this.ordinal_Renamed_Field = ordinal\n this.bits = bits\n this.name = name\n}\nErrorCorrectionLevel.prototype.ordinal = function () {\n return this.ordinal_Renamed_Field\n}\nErrorCorrectionLevel.forBits = function (bits) {\n if (bits < 0 || bits >= FOR_BITS.length) {\n throw 'ArgumentException'\n }\n return FOR_BITS[bits]\n}\nvar FOR_BITS = [\n new ErrorCorrectionLevel(1, 0x00, 'M'),\n new ErrorCorrectionLevel(0, 0x01, 'L'),\n new ErrorCorrectionLevel(3, 0x02, 'H'),\n new ErrorCorrectionLevel(2, 0x03, 'Q'),\n]\n","// @ts-nocheck\nimport ErrorCorrectionLevel from './errorlevel'\n/**\n * @file 二维码解析内部模块:formatinf。\n */\nimport { URShift } from '../core/qrcode'\n\nconst FORMAT_INFO_MASK_QR = 0x5412\nconst FORMAT_INFO_DECODE_LOOKUP = [\n [0x5412, 0x00],\n [0x5125, 0x01],\n [0x5E7C, 0x02],\n [0x5B4B, 0x03],\n [0x45F9, 0x04],\n [0x40CE, 0x05],\n [0x4F97, 0x06],\n [0x4AA0, 0x07],\n [0x77C4, 0x08],\n [0x72F3, 0x09],\n [0x7DAA, 0x0A],\n [0x789D, 0x0B],\n [0x662F, 0x0C],\n [0x6318, 0x0D],\n [0x6C41, 0x0E],\n [0x6976, 0x0F],\n [0x1689, 0x10],\n [0x13BE, 0x11],\n [0x1CE7, 0x12],\n [0x19D0, 0x13],\n [0x0762, 0x14],\n [0x0255, 0x15],\n [0x0D0C, 0x16],\n [0x083B, 0x17],\n [0x355F, 0x18],\n [0x3068, 0x19],\n [0x3F31, 0x1A],\n [0x3A06, 0x1B],\n [0x24B4, 0x1C],\n [0x2183, 0x1D],\n [0x2EDA, 0x1E],\n [0x2BED, 0x1F],\n]\nconst BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4]\nexport default function FormatInformation(formatInfo) {\n this.errorCorrectionLevel = ErrorCorrectionLevel.forBits((formatInfo >> 3) & 0x03)\n this.dataMask = (formatInfo & 0x07)\n}\nFormatInformation.prototype.GetHashCode = function () {\n return (this.errorCorrectionLevel.ordinal() << 3) | this.dataMask\n}\nFormatInformation.prototype.Equals = function (o) {\n const other = o\n return this.errorCorrectionLevel == other.errorCorrectionLevel && this.dataMask == other.dataMask\n}\nFormatInformation.numBitsDiffering = function (a, b) {\n a ^= b\n return BITS_SET_IN_HALF_BYTE[a & 0x0F] + BITS_SET_IN_HALF_BYTE[(URShift(a, 4) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 8) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 12) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 16) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 20) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 24) & 0x0F)] + BITS_SET_IN_HALF_BYTE[(URShift(a, 28) & 0x0F)]\n}\nFormatInformation.decodeFormatInformation = function (maskedFormatInfo) {\n const formatInfo = FormatInformation.doDecodeFormatInformation(maskedFormatInfo)\n if (formatInfo != null) {\n return formatInfo\n }\n return FormatInformation.doDecodeFormatInformation(maskedFormatInfo ^ FORMAT_INFO_MASK_QR)\n}\nFormatInformation.doDecodeFormatInformation = function (maskedFormatInfo) {\n let bestDifference = 0xFFFFFFFF\n let bestFormatInfo = 0\n for (let i = 0; i < FORMAT_INFO_DECODE_LOOKUP.length; i++) {\n const decodeInfo = FORMAT_INFO_DECODE_LOOKUP[i]\n const targetInfo = decodeInfo[0]\n if (targetInfo == maskedFormatInfo) {\n return new FormatInformation(decodeInfo[1])\n }\n const bitsDifference = this.numBitsDiffering(maskedFormatInfo, targetInfo)\n if (bitsDifference < bestDifference) {\n bestFormatInfo = decodeInfo[1]\n bestDifference = bitsDifference\n }\n }\n if (bestDifference <= 3) {\n return new FormatInformation(bestFormatInfo)\n }\n return null\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:bitmat。\n */\nimport { URShift } from '../core/qrcode'\n\nexport default function BitMatrix(width, height) {\n if (!height) { height = width }\n if (width < 1 || height < 1) {\n throw 'Both dimensions must be greater than 0'\n }\n this.width = width\n this.height = height\n let rowSize = width >> 5\n if ((width & 0x1F) != 0) {\n rowSize++\n }\n this.rowSize = rowSize\n this.bits = new Array(rowSize * height)\n for (let i = 0; i < this.bits.length; i++) { this.bits[i] = 0 }\n}\nObject.defineProperty(BitMatrix.prototype, 'Dimension', {\n get() {\n if (this.width != this.height) {\n throw 'Can\\'t call getDimension() on a non-square matrix'\n }\n return this.width\n },\n})\nBitMatrix.prototype.get_Renamed = function (x, y) {\n const offset = y * this.rowSize + (x >> 5)\n return ((URShift(this.bits[offset], (x & 0x1F))) & 1) != 0\n}\nBitMatrix.prototype.set_Renamed = function (x, y) {\n const offset = y * this.rowSize + (x >> 5)\n this.bits[offset] |= 1 << (x & 0x1F)\n}\nBitMatrix.prototype.flip = function (x, y) {\n const offset = y * this.rowSize + (x >> 5)\n this.bits[offset] ^= 1 << (x & 0x1F)\n}\nBitMatrix.prototype.clear = function () {\n const max = this.bits.length\n for (let i = 0; i < max; i++) {\n this.bits[i] = 0\n }\n}\nBitMatrix.prototype.setRegion = function (left, top, width, height) {\n if (top < 0 || left < 0) {\n throw 'Left and top must be nonnegative'\n }\n if (height < 1 || width < 1) {\n throw 'Height and width must be at least 1'\n }\n const right = left + width\n const bottom = top + height\n if (bottom > this.height || right > this.width) {\n throw 'The region must fit inside the matrix'\n }\n for (let y = top; y < bottom; y++) {\n const offset = y * this.rowSize\n for (let x = left; x < right; x++) {\n this.bits[offset + (x >> 5)] |= 1 << (x & 0x1F)\n }\n }\n}\n","// @ts-nocheck\nimport BitMatrix from './bitmat'\n/**\n * @file 二维码解析内部模块:version。\n */\nimport FormatInformation from './formatinf'\n\nfunction ECB(count, dataCodewords) {\n this.count = count\n this.dataCodewords = dataCodewords\n}\nfunction ECBlocks(ecCodewordsPerBlock, ecBlocks1, ecBlocks2) {\n this.ecCodewordsPerBlock = ecCodewordsPerBlock\n if (ecBlocks2) { this.ecBlocks = [ecBlocks1, ecBlocks2] }\n else { this.ecBlocks = [ecBlocks1] }\n}\nObject.defineProperty(ECBlocks.prototype, 'TotalECCodewords', {\n get() {\n return this.ecCodewordsPerBlock * this.NumBlocks\n },\n})\nObject.defineProperty(ECBlocks.prototype, 'NumBlocks', {\n get() {\n let total = 0\n for (let i = 0; i < this.ecBlocks.length; i++) {\n total += this.ecBlocks[i].length\n }\n return total\n },\n})\nECBlocks.prototype.getECBlocks = function () {\n return this.ecBlocks\n}\nexport default function Version(versionNumber, alignmentPatternCenters, ecBlocks1, ecBlocks2, ecBlocks3, ecBlocks4) {\n this.versionNumber = versionNumber\n this.alignmentPatternCenters = alignmentPatternCenters\n this.ecBlocks = [ecBlocks1, ecBlocks2, ecBlocks3, ecBlocks4]\n let total = 0\n const ecCodewords = ecBlocks1.ecCodewordsPerBlock\n const ecbArray = ecBlocks1.getECBlocks()\n for (let i = 0; i < ecbArray.length; i++) {\n const ecBlock = ecbArray[i]\n total += ecBlock.count * (ecBlock.dataCodewords + ecCodewords)\n }\n this.totalCodewords = total\n}\nObject.defineProperty(Version.prototype, 'DimensionForVersion', {\n get() {\n return 17 + 4 * this.versionNumber\n },\n})\nVersion.prototype.buildFunctionPattern = function () {\n const dimension = this.DimensionForVersion\n const bitMatrix = new BitMatrix(dimension)\n bitMatrix.setRegion(0, 0, 9, 9)\n bitMatrix.setRegion(dimension - 8, 0, 8, 9)\n bitMatrix.setRegion(0, dimension - 8, 9, 8)\n const max = this.alignmentPatternCenters.length\n for (let x = 0; x < max; x++) {\n const i = this.alignmentPatternCenters[x] - 2\n for (let y = 0; y < max; y++) {\n if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {\n continue\n }\n bitMatrix.setRegion(this.alignmentPatternCenters[y] - 2, i, 5, 5)\n }\n }\n bitMatrix.setRegion(6, 9, 1, dimension - 17)\n bitMatrix.setRegion(9, 6, dimension - 17, 1)\n if (this.versionNumber > 6) {\n bitMatrix.setRegion(dimension - 11, 0, 3, 6)\n bitMatrix.setRegion(0, dimension - 11, 6, 3)\n }\n return bitMatrix\n}\nVersion.prototype.getECBlocksForLevel = function (ecLevel) {\n return this.ecBlocks[ecLevel.ordinal()]\n}\nVersion.VERSION_DECODE_INFO = [\n 0x07C94,\n 0x085BC,\n 0x09A99,\n 0x0A4D3,\n 0x0BBF6,\n 0x0C762,\n 0x0D847,\n 0x0E60D,\n 0x0F928,\n 0x10B78,\n 0x1145D,\n 0x12A17,\n 0x13532,\n 0x149A6,\n 0x15683,\n 0x168C9,\n 0x177EC,\n 0x18EC4,\n 0x191E1,\n 0x1AFAB,\n 0x1B08E,\n 0x1CC1A,\n 0x1D33F,\n 0x1ED75,\n 0x1F250,\n 0x209D5,\n 0x216F0,\n 0x228BA,\n 0x2379F,\n 0x24B0B,\n 0x2542E,\n 0x26A64,\n 0x27541,\n 0x28C69,\n]\nVersion.VERSIONS = buildVersions()\nVersion.getVersionForNumber = function (versionNumber) {\n if (versionNumber < 1 || versionNumber > 40) {\n throw 'ArgumentException'\n }\n return Version.VERSIONS[versionNumber - 1]\n}\nVersion.getProvisionalVersionForDimension = function (dimension) {\n if (dimension % 4 != 1) {\n throw 'Error getProvisionalVersionForDimension'\n }\n try {\n return Version.getVersionForNumber((dimension - 17) >> 2)\n }\n catch (iae) {\n throw 'Error getVersionForNumber'\n }\n}\nVersion.decodeVersionInformation = function (versionBits) {\n let bestDifference = 0xFFFFFFFF\n let bestVersion = 0\n for (let i = 0; i < Version.VERSION_DECODE_INFO.length; i++) {\n const targetVersion = Version.VERSION_DECODE_INFO[i]\n if (targetVersion == versionBits) {\n return this.getVersionForNumber(i + 7)\n }\n const bitsDifference = FormatInformation.numBitsDiffering(versionBits, targetVersion)\n if (bitsDifference < bestDifference) {\n bestVersion = i + 7\n bestDifference = bitsDifference\n }\n }\n if (bestDifference <= 3) {\n return this.getVersionForNumber(bestVersion)\n }\n return null\n}\nfunction buildVersions() {\n return [\n new Version(1, [], new ECBlocks(7, new ECB(1, 19)), new ECBlocks(10, new ECB(1, 16)), new ECBlocks(13, new ECB(1, 13)), new ECBlocks(17, new ECB(1, 9))),\n new Version(2, [6, 18], new ECBlocks(10, new ECB(1, 34)), new ECBlocks(16, new ECB(1, 28)), new ECBlocks(22, new ECB(1, 22)), new ECBlocks(28, new ECB(1, 16))),\n new Version(3, [6, 22], new ECBlocks(15, new ECB(1, 55)), new ECBlocks(26, new ECB(1, 44)), new ECBlocks(18, new ECB(2, 17)), new ECBlocks(22, new ECB(2, 13))),\n new Version(4, [6, 26], new ECBlocks(20, new ECB(1, 80)), new ECBlocks(18, new ECB(2, 32)), new ECBlocks(26, new ECB(2, 24)), new ECBlocks(16, new ECB(4, 9))),\n new Version(5, [6, 30], new ECBlocks(26, new ECB(1, 108)), new ECBlocks(24, new ECB(2, 43)), new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)), new ECBlocks(22, new ECB(2, 11), new ECB(2, 12))),\n new Version(6, [6, 34], new ECBlocks(18, new ECB(2, 68)), new ECBlocks(16, new ECB(4, 27)), new ECBlocks(24, new ECB(4, 19)), new ECBlocks(28, new ECB(4, 15))),\n new Version(7, [6, 22, 38], new ECBlocks(20, new ECB(2, 78)), new ECBlocks(18, new ECB(4, 31)), new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)), new ECBlocks(26, new ECB(4, 13), new ECB(1, 14))),\n new Version(8, [6, 24, 42], new ECBlocks(24, new ECB(2, 97)), new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)), new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)), new ECBlocks(26, new ECB(4, 14), new ECB(2, 15))),\n new Version(9, [6, 26, 46], new ECBlocks(30, new ECB(2, 116)), new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)), new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)), new ECBlocks(24, new ECB(4, 12), new ECB(4, 13))),\n new Version(10, [6, 28, 50], new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)), new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)), new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)), new ECBlocks(28, new ECB(6, 15), new ECB(2, 16))),\n new Version(11, [6, 30, 54], new ECBlocks(20, new ECB(4, 81)), new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)), new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)), new ECBlocks(24, new ECB(3, 12), new ECB(8, 13))),\n new Version(12, [6, 32, 58], new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)), new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)), new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)), new ECBlocks(28, new ECB(7, 14), new ECB(4, 15))),\n new Version(13, [6, 34, 62], new ECBlocks(26, new ECB(4, 107)), new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)), new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)), new ECBlocks(22, new ECB(12, 11), new ECB(4, 12))),\n new Version(14, [6, 26, 46, 66], new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)), new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)), new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)), new ECBlocks(24, new ECB(11, 12), new ECB(5, 13))),\n new Version(15, [6, 26, 48, 70], new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)), new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)), new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)), new ECBlocks(24, new ECB(11, 12), new ECB(7, 13))),\n new Version(16, [6, 26, 50, 74], new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)), new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)), new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)), new ECBlocks(30, new ECB(3, 15), new ECB(13, 16))),\n new Version(17, [6, 30, 54, 78], new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)), new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)), new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(17, 15))),\n new Version(18, [6, 30, 56, 82], new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)), new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)), new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(19, 15))),\n new Version(19, [6, 30, 58, 86], new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)), new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)), new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)), new ECBlocks(26, new ECB(9, 13), new ECB(16, 14))),\n new Version(20, [6, 34, 62, 90], new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)), new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)), new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)), new ECBlocks(28, new ECB(15, 15), new ECB(10, 16))),\n new Version(21, [6, 28, 50, 72, 94], new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)), new ECBlocks(26, new ECB(17, 42)), new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(19, 16), new ECB(6, 17))),\n new Version(22, [6, 26, 50, 74, 98], new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)), new ECBlocks(28, new ECB(17, 46)), new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)), new ECBlocks(24, new ECB(34, 13))),\n new Version(23, [6, 30, 54, 74, 102], new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)), new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)), new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(16, 15), new ECB(14, 16))),\n new Version(24, [6, 28, 54, 80, 106], new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)), new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)), new ECBlocks(30, new ECB(30, 16), new ECB(2, 17))),\n new Version(25, [6, 32, 58, 84, 110], new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)), new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)), new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(13, 16))),\n new Version(26, [6, 30, 58, 86, 114], new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)), new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)), new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(33, 16), new ECB(4, 17))),\n new Version(27, [6, 34, 62, 90, 118], new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)), new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)), new ECBlocks(30, new ECB(12, 15), new ECB(28, 16))),\n new Version(28, [6, 26, 50, 74, 98, 122], new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)), new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)), new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(31, 16))),\n new Version(29, [6, 30, 54, 78, 102, 126], new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)), new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)), new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)), new ECBlocks(30, new ECB(19, 15), new ECB(26, 16))),\n new Version(30, [6, 26, 52, 78, 104, 130], new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)), new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)), new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(25, 16))),\n new Version(31, [6, 30, 56, 82, 108, 134], new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)), new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)), new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(28, 16))),\n new Version(32, [6, 34, 60, 86, 112, 138], new ECBlocks(30, new ECB(17, 115)), new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)), new ECBlocks(30, new ECB(19, 15), new ECB(35, 16))),\n new Version(33, [6, 30, 58, 86, 114, 142], new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)), new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(46, 16))),\n new Version(34, [6, 34, 62, 90, 118, 146], new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)), new ECBlocks(30, new ECB(59, 16), new ECB(1, 17))),\n new Version(35, [6, 30, 54, 78, 102, 126, 150], new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)), new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)), new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(41, 16))),\n new Version(36, [6, 24, 50, 76, 102, 128, 154], new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)), new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)), new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(2, 15), new ECB(64, 16))),\n new Version(37, [6, 28, 54, 80, 106, 132, 158], new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)), new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(24, 15), new ECB(46, 16))),\n new Version(38, [6, 32, 58, 84, 110, 136, 162], new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)), new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)), new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(42, 15), new ECB(32, 16))),\n new Version(39, [6, 26, 54, 82, 110, 138, 166], new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)), new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(10, 15), new ECB(67, 16))),\n new Version(40, [6, 30, 58, 86, 114, 142, 170], new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)), new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)), new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)), new ECBlocks(30, new ECB(20, 15), new ECB(61, 16))),\n ]\n}\n","// @ts-nocheck\nimport DataMask from './datamask'\n/**\n * @file 二维码解析内部模块:bmparser。\n */\nimport FormatInformation from './formatinf'\nimport Version from './version'\n\nexport default function BitMatrixParser(bitMatrix) {\n const dimension = bitMatrix.Dimension\n if (dimension < 21 || (dimension & 0x03) != 1) {\n throw 'Error BitMatrixParser'\n }\n this.bitMatrix = bitMatrix\n this.parsedVersion = null\n this.parsedFormatInfo = null\n}\nBitMatrixParser.prototype.copyBit = function (i, j, versionBits) {\n return this.bitMatrix.get_Renamed(i, j) ? (versionBits << 1) | 0x1 : versionBits << 1\n}\nBitMatrixParser.prototype.readFormatInformation = function () {\n if (this.parsedFormatInfo != null) {\n return this.parsedFormatInfo\n }\n let formatInfoBits = 0\n for (var i = 0; i < 6; i++) {\n formatInfoBits = this.copyBit(i, 8, formatInfoBits)\n }\n formatInfoBits = this.copyBit(7, 8, formatInfoBits)\n formatInfoBits = this.copyBit(8, 8, formatInfoBits)\n formatInfoBits = this.copyBit(8, 7, formatInfoBits)\n for (var j = 5; j >= 0; j--) {\n formatInfoBits = this.copyBit(8, j, formatInfoBits)\n }\n this.parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits)\n if (this.parsedFormatInfo != null) {\n return this.parsedFormatInfo\n }\n const dimension = this.bitMatrix.Dimension\n formatInfoBits = 0\n const iMin = dimension - 8\n for (var i = dimension - 1; i >= iMin; i--) {\n formatInfoBits = this.copyBit(i, 8, formatInfoBits)\n }\n for (var j = dimension - 7; j < dimension; j++) {\n formatInfoBits = this.copyBit(8, j, formatInfoBits)\n }\n this.parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits)\n if (this.parsedFormatInfo != null) {\n return this.parsedFormatInfo\n }\n throw 'Error readFormatInformation'\n}\nBitMatrixParser.prototype.readVersion = function () {\n if (this.parsedVersion != null) {\n return this.parsedVersion\n }\n const dimension = this.bitMatrix.Dimension\n const provisionalVersion = (dimension - 17) >> 2\n if (provisionalVersion <= 6) {\n return Version.getVersionForNumber(provisionalVersion)\n }\n let versionBits = 0\n const ijMin = dimension - 11\n for (var j = 5; j >= 0; j--) {\n for (var i = dimension - 9; i >= ijMin; i--) {\n versionBits = this.copyBit(i, j, versionBits)\n }\n }\n this.parsedVersion = Version.decodeVersionInformation(versionBits)\n if (this.parsedVersion != null && this.parsedVersion.DimensionForVersion == dimension) {\n return this.parsedVersion\n }\n versionBits = 0\n for (var i = 5; i >= 0; i--) {\n for (var j = dimension - 9; j >= ijMin; j--) {\n versionBits = this.copyBit(i, j, versionBits)\n }\n }\n this.parsedVersion = Version.decodeVersionInformation(versionBits)\n if (this.parsedVersion != null && this.parsedVersion.DimensionForVersion == dimension) {\n return this.parsedVersion\n }\n throw 'Error readVersion'\n}\nBitMatrixParser.prototype.readCodewords = function () {\n const formatInfo = this.readFormatInformation()\n const version = this.readVersion()\n const dataMask = DataMask.forReference(formatInfo.dataMask)\n const dimension = this.bitMatrix.Dimension\n dataMask.unmaskBitMatrix(this.bitMatrix, dimension)\n const functionPattern = version.buildFunctionPattern()\n let readingUp = true\n const result = new Array(version.totalCodewords)\n let resultOffset = 0\n let currentByte = 0\n let bitsRead = 0\n for (let j = dimension - 1; j > 0; j -= 2) {\n if (j == 6) {\n j--\n }\n for (let count = 0; count < dimension; count++) {\n const i = readingUp ? dimension - 1 - count : count\n for (let col = 0; col < 2; col++) {\n if (!functionPattern.get_Renamed(j - col, i)) {\n bitsRead++\n currentByte <<= 1\n if (this.bitMatrix.get_Renamed(j - col, i)) {\n currentByte |= 1\n }\n if (bitsRead == 8) {\n result[resultOffset++] = currentByte\n bitsRead = 0\n currentByte = 0\n }\n }\n }\n }\n readingUp ^= true\n }\n if (resultOffset != version.totalCodewords) {\n throw 'Error readCodewords'\n }\n return result\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:datablock。\n */\nexport default function DataBlock(numDataCodewords, codewords) {\n this.numDataCodewords = numDataCodewords\n this.codewords = codewords\n}\nDataBlock.getDataBlocks = function (rawCodewords, version, ecLevel) {\n if (rawCodewords.length != version.totalCodewords) {\n throw 'ArgumentException'\n }\n const ecBlocks = version.getECBlocksForLevel(ecLevel)\n let totalBlocks = 0\n const ecBlockArray = ecBlocks.getECBlocks()\n for (var i = 0; i < ecBlockArray.length; i++) {\n totalBlocks += ecBlockArray[i].count\n }\n const result = new Array(totalBlocks)\n let numResultBlocks = 0\n for (var j = 0; j < ecBlockArray.length; j++) {\n const ecBlock = ecBlockArray[j]\n for (var i = 0; i < ecBlock.count; i++) {\n const numDataCodewords = ecBlock.dataCodewords\n const numBlockCodewords = ecBlocks.ecCodewordsPerBlock + numDataCodewords\n result[numResultBlocks++] = new DataBlock(numDataCodewords, new Array(numBlockCodewords))\n }\n }\n const shorterBlocksTotalCodewords = result[0].codewords.length\n let longerBlocksStartAt = result.length - 1\n while (longerBlocksStartAt >= 0) {\n const numCodewords = result[longerBlocksStartAt].codewords.length\n if (numCodewords == shorterBlocksTotalCodewords) {\n break\n }\n longerBlocksStartAt--\n }\n longerBlocksStartAt++\n const shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks.ecCodewordsPerBlock\n let rawCodewordsOffset = 0\n for (var i = 0; i < shorterBlocksNumDataCodewords; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n result[j].codewords[i] = rawCodewords[rawCodewordsOffset++]\n }\n }\n for (var j = longerBlocksStartAt; j < numResultBlocks; j++) {\n result[j].codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++]\n }\n const max = result[0].codewords.length\n for (var i = shorterBlocksNumDataCodewords; i < max; i++) {\n for (var j = 0; j < numResultBlocks; j++) {\n const iOffset = j < longerBlocksStartAt ? i : i + 1\n result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++]\n }\n }\n return result\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:databr。\n */\nimport { qrcode } from '../core/qrcode'\n\nexport default function QRCodeDataBlockReader(blocks, version, numErrorCorrectionCode) {\n this.blockPointer = 0\n this.bitPointer = 7\n this.dataLength = 0\n this.blocks = blocks\n this.numErrorCorrectionCode = numErrorCorrectionCode\n if (version <= 9) { this.dataLengthMode = 0 }\n else if (version >= 10 && version <= 26) { this.dataLengthMode = 1 }\n else if (version >= 27 && version <= 40) { this.dataLengthMode = 2 }\n}\nQRCodeDataBlockReader.prototype.getNextBits = function (numBits) {\n let bits = 0\n if (numBits < this.bitPointer + 1) {\n let mask = 0\n for (var i = 0; i < numBits; i++) {\n mask += (1 << i)\n }\n mask <<= (this.bitPointer - numBits + 1)\n bits = (this.blocks[this.blockPointer] & mask) >> (this.bitPointer - numBits + 1)\n this.bitPointer -= numBits\n return bits\n }\n else if (numBits < this.bitPointer + 1 + 8) {\n var mask1 = 0\n for (var i = 0; i < this.bitPointer + 1; i++) {\n mask1 += (1 << i)\n }\n bits = (this.blocks[this.blockPointer] & mask1) << (numBits - (this.bitPointer + 1))\n this.blockPointer++\n bits += ((this.blocks[this.blockPointer]) >> (8 - (numBits - (this.bitPointer + 1))))\n this.bitPointer = this.bitPointer - numBits % 8\n if (this.bitPointer < 0) {\n this.bitPointer = 8 + this.bitPointer\n }\n return bits\n }\n else if (numBits < this.bitPointer + 1 + 16) {\n var mask1 = 0\n let mask3 = 0\n for (var i = 0; i < this.bitPointer + 1; i++) {\n mask1 += (1 << i)\n }\n const bitsFirstBlock = (this.blocks[this.blockPointer] & mask1) << (numBits - (this.bitPointer + 1))\n this.blockPointer++\n const bitsSecondBlock = this.blocks[this.blockPointer] << (numBits - (this.bitPointer + 1 + 8))\n this.blockPointer++\n for (var i = 0; i < numBits - (this.bitPointer + 1 + 8); i++) {\n mask3 += (1 << i)\n }\n mask3 <<= 8 - (numBits - (this.bitPointer + 1 + 8))\n const bitsThirdBlock = (this.blocks[this.blockPointer] & mask3) >> (8 - (numBits - (this.bitPointer + 1 + 8)))\n bits = bitsFirstBlock + bitsSecondBlock + bitsThirdBlock\n this.bitPointer = this.bitPointer - (numBits - 8) % 8\n if (this.bitPointer < 0) {\n this.bitPointer = 8 + this.bitPointer\n }\n return bits\n }\n else {\n return 0\n }\n}\nQRCodeDataBlockReader.prototype.NextMode = function () {\n if ((this.blockPointer > this.blocks.length - this.numErrorCorrectionCode - 2)) { return 0 }\n else { return this.getNextBits(4) }\n}\nQRCodeDataBlockReader.prototype.getDataLength = function (modeIndicator) {\n let index = 0\n while (true) {\n if ((modeIndicator >> index) == 1) { break }\n index++\n }\n return this.getNextBits(qrcode.sizeOfDataLengthInfo[this.dataLengthMode][index])\n}\nQRCodeDataBlockReader.prototype.getRomanAndFigureString = function (dataLength) {\n let length = dataLength\n let intData = 0\n let strData = ''\n const tableRomanAndFigure = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '$', '%', '*', '+', '-', '.', '/', ':']\n do {\n if (length > 1) {\n intData = this.getNextBits(11)\n const firstLetter = Math.floor(intData / 45)\n const secondLetter = intData % 45\n strData += tableRomanAndFigure[firstLetter]\n strData += tableRomanAndFigure[secondLetter]\n length -= 2\n }\n else if (length == 1) {\n intData = this.getNextBits(6)\n strData += tableRomanAndFigure[intData]\n length -= 1\n }\n } while (length > 0)\n return strData\n}\nQRCodeDataBlockReader.prototype.getFigureString = function (dataLength) {\n let length = dataLength\n let intData = 0\n let strData = ''\n do {\n if (length >= 3) {\n intData = this.getNextBits(10)\n if (intData < 100) { strData += '0' }\n if (intData < 10) { strData += '0' }\n length -= 3\n }\n else if (length == 2) {\n intData = this.getNextBits(7)\n if (intData < 10) { strData += '0' }\n length -= 2\n }\n else if (length == 1) {\n intData = this.getNextBits(4)\n length -= 1\n }\n strData += intData\n } while (length > 0)\n return strData\n}\nQRCodeDataBlockReader.prototype.get8bitByteArray = function (dataLength) {\n let length = dataLength\n let intData = 0\n const output = []\n do {\n intData = this.getNextBits(8)\n output.push(intData)\n length--\n } while (length > 0)\n return output\n}\nQRCodeDataBlockReader.prototype.getKanjiString = function (dataLength) {\n let length = dataLength\n let intData = 0\n let unicodeString = ''\n do {\n intData = this.getNextBits(13)\n const lowerByte = intData % 0xC0\n const higherByte = intData / 0xC0\n const tempWord = (higherByte << 8) + lowerByte\n let shiftjisWord = 0\n if (tempWord + 0x8140 <= 0x9FFC) {\n shiftjisWord = tempWord + 0x8140\n }\n else {\n shiftjisWord = tempWord + 0xC140\n }\n unicodeString += String.fromCharCode(shiftjisWord)\n length--\n } while (length > 0)\n return unicodeString\n}\nObject.defineProperty(QRCodeDataBlockReader.prototype, 'DataByte', {\n get() {\n const output = []\n const MODE_NUMBER = 1\n const MODE_ROMAN_AND_NUMBER = 2\n const MODE_8BIT_BYTE = 4\n const MODE_KANJI = 8\n do {\n const mode = this.NextMode()\n if (mode == 0) {\n if (output.length > 0) { break }\n else { throw 'Empty data block' }\n }\n if (mode != MODE_NUMBER && mode != MODE_ROMAN_AND_NUMBER && mode != MODE_8BIT_BYTE && mode != MODE_KANJI && mode != 7) {\n throw `Invalid mode: ${mode} in (block:${this.blockPointer} bit:${this.bitPointer})`\n }\n const dataLength = this.getDataLength(mode)\n if (dataLength < 1) { throw `Invalid data length: ${dataLength}` }\n switch (mode) {\n case MODE_NUMBER:\n var temp_str = this.getFigureString(dataLength)\n var ta = Array.from({ length: temp_str.length })\n for (var j = 0; j < temp_str.length; j++) { ta[j] = temp_str.charCodeAt(j) }\n output.push(ta)\n break\n case MODE_ROMAN_AND_NUMBER:\n var temp_str = this.getRomanAndFigureString(dataLength)\n var ta = Array.from({ length: temp_str.length })\n for (var j = 0; j < temp_str.length; j++) { ta[j] = temp_str.charCodeAt(j) }\n output.push(ta)\n break\n case MODE_8BIT_BYTE:\n var temp_sbyteArray3 = this.get8bitByteArray(dataLength)\n output.push(temp_sbyteArray3)\n break\n case MODE_KANJI:\n var temp_str = this.getKanjiString(dataLength)\n output.push(temp_str)\n break\n }\n } while (true)\n return output\n },\n})\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:gf256poly。\n */\nexport default function GF256Poly(field, coefficients) {\n if (coefficients == null || coefficients.length == 0) {\n throw 'System.ArgumentException'\n }\n this.field = field\n const coefficientsLength = coefficients.length\n if (coefficientsLength > 1 && coefficients[0] == 0) {\n let firstNonZero = 1\n while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0) {\n firstNonZero++\n }\n if (firstNonZero == coefficientsLength) {\n this.coefficients = field.Zero.coefficients\n }\n else {\n this.coefficients = new Array(coefficientsLength - firstNonZero)\n for (let i = 0; i < this.coefficients.length; i++) { this.coefficients[i] = 0 }\n for (let ci = 0; ci < this.coefficients.length; ci++) { this.coefficients[ci] = coefficients[firstNonZero + ci] }\n }\n }\n else {\n this.coefficients = coefficients\n }\n}\nObject.defineProperty(GF256Poly.prototype, 'Zero', {\n get() {\n return this.coefficients[0] == 0\n },\n})\nObject.defineProperty(GF256Poly.prototype, 'Degree', {\n get() {\n return this.coefficients.length - 1\n },\n})\nGF256Poly.prototype.getCoefficient = function (degree) {\n return this.coefficients[this.coefficients.length - 1 - degree]\n}\nGF256Poly.prototype.evaluateAt = function (a) {\n if (a == 0) {\n return this.getCoefficient(0)\n }\n const size = this.coefficients.length\n if (a == 1) {\n let result = 0\n for (var i = 0; i < size; i++) {\n result = this.field.addOrSubtract(result, this.coefficients[i])\n }\n return result\n }\n let result2 = this.coefficients[0]\n for (var i = 1; i < size; i++) {\n result2 = this.field.addOrSubtract(this.field.multiply(a, result2), this.coefficients[i])\n }\n return result2\n}\nGF256Poly.prototype.addOrSubtract = function (other) {\n if (this.field != other.field) {\n throw 'GF256Polys do not have same GF256 field'\n }\n if (this.Zero) {\n return other\n }\n if (other.Zero) {\n return this\n }\n let smallerCoefficients = this.coefficients\n let largerCoefficients = other.coefficients\n if (smallerCoefficients.length > largerCoefficients.length) {\n const temp = smallerCoefficients\n smallerCoefficients = largerCoefficients\n largerCoefficients = temp\n }\n const sumDiff = Array.from({ length: largerCoefficients.length })\n const lengthDiff = largerCoefficients.length - smallerCoefficients.length\n for (let ci = 0; ci < lengthDiff; ci++) { sumDiff[ci] = largerCoefficients[ci] }\n for (let i = lengthDiff; i < largerCoefficients.length; i++) {\n sumDiff[i] = this.field.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i])\n }\n return new GF256Poly(this.field, sumDiff)\n}\nGF256Poly.prototype.multiply1 = function (other) {\n if (this.field != other.field) {\n throw 'GF256Polys do not have same GF256 field'\n }\n if (this.Zero || other.Zero) {\n return this.field.Zero\n }\n const aCoefficients = this.coefficients\n const aLength = aCoefficients.length\n const bCoefficients = other.coefficients\n const bLength = bCoefficients.length\n const product = Array.from({ length: aLength + bLength - 1 })\n for (let i = 0; i < aLength; i++) {\n const aCoeff = aCoefficients[i]\n for (let j = 0; j < bLength; j++) {\n product[i + j] = this.field.addOrSubtract(product[i + j], this.field.multiply(aCoeff, bCoefficients[j]))\n }\n }\n return new GF256Poly(this.field, product)\n}\nGF256Poly.prototype.multiply2 = function (scalar) {\n if (scalar == 0) {\n return this.field.Zero\n }\n if (scalar == 1) {\n return this\n }\n const size = this.coefficients.length\n const product = new Array(size)\n for (let i = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], scalar)\n }\n return new GF256Poly(this.field, product)\n}\nGF256Poly.prototype.multiplyByMonomial = function (degree, coefficient) {\n if (degree < 0) {\n throw 'System.ArgumentException'\n }\n if (coefficient == 0) {\n return this.field.Zero\n }\n const size = this.coefficients.length\n const product = new Array(size + degree)\n for (var i = 0; i < product.length; i++) { product[i] = 0 }\n for (var i = 0; i < size; i++) {\n product[i] = this.field.multiply(this.coefficients[i], coefficient)\n }\n return new GF256Poly(this.field, product)\n}\nGF256Poly.prototype.divide = function (other) {\n if (this.field != other.field) {\n throw 'GF256Polys do not have same GF256 field'\n }\n if (other.Zero) {\n throw 'Divide by 0'\n }\n let quotient = this.field.Zero\n let remainder = this\n const denominatorLeadingTerm = other.getCoefficient(other.Degree)\n const inverseDenominatorLeadingTerm = this.field.inverse(denominatorLeadingTerm)\n while (remainder.Degree >= other.Degree && !remainder.Zero) {\n const degreeDifference = remainder.Degree - other.Degree\n const scale = this.field.multiply(remainder.getCoefficient(remainder.Degree), inverseDenominatorLeadingTerm)\n const term = other.multiplyByMonomial(degreeDifference, scale)\n const iterationQuotient = this.field.buildMonomial(degreeDifference, scale)\n quotient = quotient.addOrSubtract(iterationQuotient)\n remainder = remainder.addOrSubtract(term)\n }\n return [quotient, remainder]\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:gf256。\n */\nimport GF256Poly from './gf256poly'\n\nexport default function GF256(primitive) {\n this.expTable = Array.from({ length: 256 })\n this.logTable = Array.from({ length: 256 })\n let x = 1\n for (var i = 0; i < 256; i++) {\n this.expTable[i] = x\n x <<= 1\n if (x >= 0x100) {\n x ^= primitive\n }\n }\n for (var i = 0; i < 255; i++) {\n this.logTable[this.expTable[i]] = i\n }\n const at0 = Array.from({ length: 1 })\n at0[0] = 0\n this.zero = new GF256Poly(this, new Array(at0))\n const at1 = Array.from({ length: 1 })\n at1[0] = 1\n this.one = new GF256Poly(this, new Array(at1))\n}\nObject.defineProperty(GF256.prototype, 'Zero', {\n get() {\n return this.zero\n },\n})\nObject.defineProperty(GF256.prototype, 'One', {\n get() {\n return this.one\n },\n})\nGF256.prototype.buildMonomial = function (degree, coefficient) {\n if (degree < 0) {\n throw 'System.ArgumentException'\n }\n if (coefficient == 0) {\n return this.zero\n }\n const coefficients = new Array(degree + 1)\n for (let i = 0; i < coefficients.length; i++) { coefficients[i] = 0 }\n coefficients[0] = coefficient\n return new GF256Poly(this, coefficients)\n}\nGF256.prototype.exp = function (a) {\n return this.expTable[a]\n}\nGF256.prototype.log = function (a) {\n if (a == 0) {\n throw 'System.ArgumentException'\n }\n return this.logTable[a]\n}\nGF256.prototype.inverse = function (a) {\n if (a == 0) {\n throw 'System.ArithmeticException'\n }\n return this.expTable[255 - this.logTable[a]]\n}\nGF256.prototype.addOrSubtract = function (a, b) {\n return a ^ b\n}\nGF256.prototype.multiply = function (a, b) {\n if (a == 0 || b == 0) {\n return 0\n }\n if (a == 1) {\n return b\n }\n if (b == 1) {\n return a\n }\n return this.expTable[(this.logTable[a] + this.logTable[b]) % 255]\n}\nGF256.QR_CODE_FIELD = new GF256(0x011D)\nGF256.DATA_MATRIX_FIELD = new GF256(0x012D)\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:rsdecoder。\n */\nimport GF256 from './gf256'\nimport GF256Poly from './gf256poly'\n\nexport default function ReedSolomonDecoder(field) {\n this.field = field\n}\nReedSolomonDecoder.prototype.decode = function (received, twoS) {\n const poly = new GF256Poly(this.field, received)\n const syndromeCoefficients = new Array(twoS)\n for (var i = 0; i < syndromeCoefficients.length; i++) { syndromeCoefficients[i] = 0 }\n const dataMatrix = false\n let noError = true\n for (var i = 0; i < twoS; i++) {\n const _eval = poly.evaluateAt(this.field.exp(dataMatrix ? i + 1 : i))\n syndromeCoefficients[syndromeCoefficients.length - 1 - i] = _eval\n if (_eval != 0) {\n noError = false\n }\n }\n if (noError) {\n return\n }\n const syndrome = new GF256Poly(this.field, syndromeCoefficients)\n const sigmaOmega = this.runEuclideanAlgorithm(this.field.buildMonomial(twoS, 1), syndrome, twoS)\n const sigma = sigmaOmega[0]\n const omega = sigmaOmega[1]\n const errorLocations = this.findErrorLocations(sigma)\n const errorMagnitudes = this.findErrorMagnitudes(omega, errorLocations, dataMatrix)\n for (var i = 0; i < errorLocations.length; i++) {\n const position = received.length - 1 - this.field.log(errorLocations[i])\n if (position < 0) {\n throw 'ReedSolomonException Bad error location'\n }\n received[position] = GF256.prototype.addOrSubtract(received[position], errorMagnitudes[i])\n }\n}\nReedSolomonDecoder.prototype.runEuclideanAlgorithm = function (a, b, R) {\n if (a.Degree < b.Degree) {\n const temp = a\n a = b\n b = temp\n }\n let rLast = a\n let r = b\n let sLast = this.field.One\n let s = this.field.Zero\n let tLast = this.field.Zero\n let t = this.field.One\n while (r.Degree >= Math.floor(R / 2)) {\n const rLastLast = rLast\n const sLastLast = sLast\n const tLastLast = tLast\n rLast = r\n sLast = s\n tLast = t\n if (rLast.Zero) {\n throw 'r_{i-1} was zero'\n }\n r = rLastLast\n let q = this.field.Zero\n const denominatorLeadingTerm = rLast.getCoefficient(rLast.Degree)\n const dltInverse = this.field.inverse(denominatorLeadingTerm)\n while (r.Degree >= rLast.Degree && !r.Zero) {\n const degreeDiff = r.Degree - rLast.Degree\n const scale = this.field.multiply(r.getCoefficient(r.Degree), dltInverse)\n q = q.addOrSubtract(this.field.buildMonomial(degreeDiff, scale))\n r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale))\n }\n s = q.multiply1(sLast).addOrSubtract(sLastLast)\n t = q.multiply1(tLast).addOrSubtract(tLastLast)\n }\n const sigmaTildeAtZero = t.getCoefficient(0)\n if (sigmaTildeAtZero == 0) {\n throw 'ReedSolomonException sigmaTilde(0) was zero'\n }\n const inverse = this.field.inverse(sigmaTildeAtZero)\n const sigma = t.multiply2(inverse)\n const omega = r.multiply2(inverse)\n return [sigma, omega]\n}\nReedSolomonDecoder.prototype.findErrorLocations = function (errorLocator) {\n const numErrors = errorLocator.Degree\n if (numErrors == 1) {\n return new Array(errorLocator.getCoefficient(1))\n }\n const result = new Array(numErrors)\n let e = 0\n for (let i = 1; i < 256 && e < numErrors; i++) {\n if (errorLocator.evaluateAt(i) == 0) {\n result[e] = this.field.inverse(i)\n e++\n }\n }\n if (e != numErrors) {\n throw 'Error locator degree does not match number of roots'\n }\n return result\n}\nReedSolomonDecoder.prototype.findErrorMagnitudes = function (errorEvaluator, errorLocations, dataMatrix) {\n const s = errorLocations.length\n const result = new Array(s)\n for (let i = 0; i < s; i++) {\n const xiInverse = this.field.inverse(errorLocations[i])\n let denominator = 1\n for (let j = 0; j < s; j++) {\n if (i != j) {\n denominator = this.field.multiply(denominator, GF256.prototype.addOrSubtract(1, this.field.multiply(errorLocations[j], xiInverse)))\n }\n }\n result[i] = this.field.multiply(errorEvaluator.evaluateAt(xiInverse), this.field.inverse(denominator))\n if (dataMatrix) {\n result[i] = this.field.multiply(result[i], xiInverse)\n }\n }\n return result\n}\n","// @ts-nocheck\nimport BitMatrixParser from './bmparser'\nimport DataBlock from './datablock'\nimport QRCodeDataBlockReader from './databr'\nimport GF256 from '../error-correction/gf256'\n/**\n * @file 二维码解析内部模块:decoder。\n */\nimport ReedSolomonDecoder from '../error-correction/rsdecoder'\n\nconst Decoder = {}\nDecoder.rsDecoder = new ReedSolomonDecoder(GF256.QR_CODE_FIELD)\nDecoder.correctErrors = function (codewordBytes, numDataCodewords) {\n const numCodewords = codewordBytes.length\n const codewordsInts = new Array(numCodewords)\n for (var i = 0; i < numCodewords; i++) {\n codewordsInts[i] = codewordBytes[i] & 0xFF\n }\n const numECCodewords = codewordBytes.length - numDataCodewords\n try {\n Decoder.rsDecoder.decode(codewordsInts, numECCodewords)\n }\n catch (rse) {\n throw rse\n }\n for (var i = 0; i < numDataCodewords; i++) {\n codewordBytes[i] = codewordsInts[i]\n }\n}\nDecoder.decode = function (bits) {\n const parser = new BitMatrixParser(bits)\n const version = parser.readVersion()\n const ecLevel = parser.readFormatInformation().errorCorrectionLevel\n const codewords = parser.readCodewords()\n const dataBlocks = DataBlock.getDataBlocks(codewords, version, ecLevel)\n let totalBytes = 0\n for (var i = 0; i < dataBlocks.length; i++) {\n totalBytes += dataBlocks[i].numDataCodewords\n }\n const resultBytes = new Array(totalBytes)\n let resultOffset = 0\n for (let j = 0; j < dataBlocks.length; j++) {\n const dataBlock = dataBlocks[j]\n const codewordBytes = dataBlock.codewords\n const numDataCodewords = dataBlock.numDataCodewords\n Decoder.correctErrors(codewordBytes, numDataCodewords)\n for (var i = 0; i < numDataCodewords; i++) {\n resultBytes[resultOffset++] = codewordBytes[i]\n }\n }\n const reader = new QRCodeDataBlockReader(resultBytes, version.versionNumber, ecLevel.bits)\n return reader\n}\nexport default Decoder\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:alignpat。\n */\nexport default function AlignmentPattern(posX, posY, estimatedModuleSize) {\n this.x = posX\n this.y = posY\n this.count = 1\n this.estimatedModuleSize = estimatedModuleSize\n}\nObject.defineProperty(AlignmentPattern.prototype, 'X', {\n get() {\n return Math.floor(this.x)\n },\n})\nObject.defineProperty(AlignmentPattern.prototype, 'Y', {\n get() {\n return Math.floor(this.y)\n },\n})\nAlignmentPattern.prototype.incrementCount = function () {\n this.count++\n}\nAlignmentPattern.prototype.aboutEquals = function (moduleSize, i, j) {\n if (Math.abs(i - this.y) <= moduleSize && Math.abs(j - this.x) <= moduleSize) {\n const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize)\n return moduleSizeDiff <= 1.0 || moduleSizeDiff / this.estimatedModuleSize <= 1.0\n }\n return false\n}\nexport function AlignmentPatternFinder(image, startX, startY, width, height, moduleSize, resultPointCallback) {\n this.image = image\n this.possibleCenters = []\n this.startX = startX\n this.startY = startY\n this.width = width\n this.height = height\n this.moduleSize = moduleSize\n this.crossCheckStateCount = [0, 0, 0]\n this.resultPointCallback = resultPointCallback\n}\nAlignmentPatternFinder.prototype.centerFromEnd = function (stateCount, end) {\n return (end - stateCount[2]) - stateCount[1] / 2.0\n}\nAlignmentPatternFinder.prototype.foundPatternCross = function (stateCount) {\n const moduleSize = this.moduleSize\n const maxVariance = moduleSize / 2.0\n for (let i = 0; i < 3; i++) {\n if (Math.abs(moduleSize - stateCount[i]) >= maxVariance) {\n return false\n }\n }\n return true\n}\nAlignmentPatternFinder.prototype.crossCheckVertical = function (startI, centerJ, maxCount, originalStateCountTotal) {\n const image = this.image\n const maxI = image.height\n const stateCount = this.crossCheckStateCount\n stateCount[0] = 0\n stateCount[1] = 0\n stateCount[2] = 0\n let i = startI\n while (i >= 0 && image.data[centerJ + i * image.width] && stateCount[1] <= maxCount) {\n stateCount[1]++\n i--\n }\n if (i < 0 || stateCount[1] > maxCount) {\n return Number.NaN\n }\n while (i >= 0 && !image.data[centerJ + i * image.width] && stateCount[0] <= maxCount) {\n stateCount[0]++\n i--\n }\n if (stateCount[0] > maxCount) {\n return Number.NaN\n }\n i = startI + 1\n while (i < maxI && image.data[centerJ + i * image.width] && stateCount[1] <= maxCount) {\n stateCount[1]++\n i++\n }\n if (i == maxI || stateCount[1] > maxCount) {\n return Number.NaN\n }\n while (i < maxI && !image.data[centerJ + i * image.width] && stateCount[2] <= maxCount) {\n stateCount[2]++\n i++\n }\n if (stateCount[2] > maxCount) {\n return Number.NaN\n }\n const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2]\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n return Number.NaN\n }\n return this.foundPatternCross(stateCount) ? this.centerFromEnd(stateCount, i) : Number.NaN\n}\nAlignmentPatternFinder.prototype.handlePossibleCenter = function (stateCount, i, j) {\n const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2]\n const centerJ = this.centerFromEnd(stateCount, j)\n const centerI = this.crossCheckVertical(i, Math.floor(centerJ), 2 * stateCount[1], stateCountTotal)\n if (!isNaN(centerI)) {\n const estimatedModuleSize = (stateCount[0] + stateCount[1] + stateCount[2]) / 3.0\n const max = this.possibleCenters.length\n for (let index = 0; index < max; index++) {\n const center = this.possibleCenters[index]\n if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n return new AlignmentPattern(centerJ, centerI, estimatedModuleSize)\n }\n }\n const point = new AlignmentPattern(centerJ, centerI, estimatedModuleSize)\n this.possibleCenters.push(point)\n if (this.resultPointCallback != null) {\n this.resultPointCallback.foundPossibleResultPoint(point)\n }\n }\n return null\n}\nAlignmentPatternFinder.prototype.find = function () {\n const image = this.image\n const startX = this.startX\n const height = this.height\n const maxJ = startX + this.width\n const middleI = this.startY + (height >> 1)\n const stateCount = [0, 0, 0]\n for (let iGen = 0; iGen < height; iGen++) {\n const i = middleI + ((iGen & 0x01) == 0 ? ((iGen + 1) >> 1) : -((iGen + 1) >> 1))\n stateCount[0] = 0\n stateCount[1] = 0\n stateCount[2] = 0\n let j = startX\n while (j < maxJ && !image.data[j + image.width * i]) {\n j++\n }\n let currentState = 0\n while (j < maxJ) {\n if (image.data[j + i * image.width]) {\n if (currentState == 1) {\n stateCount[currentState]++\n }\n else {\n if (currentState == 2) {\n if (this.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, j)\n if (confirmed != null) {\n return confirmed\n }\n }\n stateCount[0] = stateCount[2]\n stateCount[1] = 1\n stateCount[2] = 0\n currentState = 1\n }\n else {\n stateCount[++currentState]++\n }\n }\n }\n else {\n if (currentState == 1) {\n currentState++\n }\n stateCount[currentState]++\n }\n j++\n }\n if (this.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, maxJ)\n if (confirmed != null) {\n return confirmed\n }\n }\n }\n if (!(this.possibleCenters.length == 0)) {\n return this.possibleCenters[0]\n }\n throw 'Couldn\\'t find enough alignment patterns'\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:findpat。\n */\nconst MIN_SKIP = 3\nconst MAX_MODULES = 57\nconst INTEGER_MATH_SHIFT = 8\nconst CENTER_QUORUM = 2\nfunction orderBestPatterns(patterns) {\n function distance(pattern1, pattern2) {\n const xDiff = pattern1.X - pattern2.X\n const yDiff = pattern1.Y - pattern2.Y\n return Math.sqrt((xDiff * xDiff + yDiff * yDiff))\n }\n function crossProductZ(pointA, pointB, pointC) {\n const bX = pointB.x\n const bY = pointB.y\n return ((pointC.x - bX) * (pointA.y - bY)) - ((pointC.y - bY) * (pointA.x - bX))\n }\n const zeroOneDistance = distance(patterns[0], patterns[1])\n const oneTwoDistance = distance(patterns[1], patterns[2])\n const zeroTwoDistance = distance(patterns[0], patterns[2])\n let pointA, pointB, pointC\n if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) {\n pointB = patterns[0]\n pointA = patterns[1]\n pointC = patterns[2]\n }\n else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) {\n pointB = patterns[1]\n pointA = patterns[0]\n pointC = patterns[2]\n }\n else {\n pointB = patterns[2]\n pointA = patterns[0]\n pointC = patterns[1]\n }\n if (crossProductZ(pointA, pointB, pointC) < 0.0) {\n const temp = pointA\n pointA = pointC\n pointC = temp\n }\n patterns[0] = pointA\n patterns[1] = pointB\n patterns[2] = pointC\n}\nfunction FinderPattern(posX, posY, estimatedModuleSize) {\n this.x = posX\n this.y = posY\n this.count = 1\n this.estimatedModuleSize = estimatedModuleSize\n}\nObject.defineProperty(FinderPattern.prototype, 'X', {\n get() {\n return this.x\n },\n})\nObject.defineProperty(FinderPattern.prototype, 'Y', {\n get() {\n return this.y\n },\n})\nFinderPattern.prototype.incrementCount = function () {\n this.count++\n}\nFinderPattern.prototype.aboutEquals = function (moduleSize, i, j) {\n if (Math.abs(i - this.y) <= moduleSize && Math.abs(j - this.x) <= moduleSize) {\n const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize)\n return moduleSizeDiff <= 1.0 || moduleSizeDiff / this.estimatedModuleSize <= 1.0\n }\n return false\n}\nfunction FinderPatternInfo(patternCenters) {\n this.bottomLeft = patternCenters[0]\n this.topLeft = patternCenters[1]\n this.topRight = patternCenters[2]\n}\nexport function FinderPatternFinder() {\n this.image = null\n this.possibleCenters = []\n this.hasSkipped = false\n this.crossCheckStateCount = [0, 0, 0, 0, 0]\n this.resultPointCallback = null\n}\nObject.defineProperty(FinderPatternFinder.prototype, 'CrossCheckStateCount', {\n get() {\n this.crossCheckStateCount[0] = 0\n this.crossCheckStateCount[1] = 0\n this.crossCheckStateCount[2] = 0\n this.crossCheckStateCount[3] = 0\n this.crossCheckStateCount[4] = 0\n return this.crossCheckStateCount\n },\n})\nFinderPatternFinder.prototype.foundPatternCross = function (stateCount) {\n let totalModuleSize = 0\n for (let i = 0; i < 5; i++) {\n const count = stateCount[i]\n if (count == 0) {\n return false\n }\n totalModuleSize += count\n }\n if (totalModuleSize < 7) {\n return false\n }\n const moduleSize = Math.floor((totalModuleSize << INTEGER_MATH_SHIFT) / 7)\n const maxVariance = Math.floor(moduleSize / 2)\n return Math.abs(moduleSize - (stateCount[0] << INTEGER_MATH_SHIFT)) < maxVariance && Math.abs(moduleSize - (stateCount[1] << INTEGER_MATH_SHIFT)) < maxVariance && Math.abs(3 * moduleSize - (stateCount[2] << INTEGER_MATH_SHIFT)) < 3 * maxVariance && Math.abs(moduleSize - (stateCount[3] << INTEGER_MATH_SHIFT)) < maxVariance && Math.abs(moduleSize - (stateCount[4] << INTEGER_MATH_SHIFT)) < maxVariance\n}\nFinderPatternFinder.prototype.centerFromEnd = function (stateCount, end) {\n return (end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0\n}\nFinderPatternFinder.prototype.crossCheckVertical = function (startI, centerJ, maxCount, originalStateCountTotal) {\n const image = this.image\n const maxI = image.height\n const stateCount = this.CrossCheckStateCount\n let i = startI\n while (i >= 0 && image.data[centerJ + i * image.width]) {\n stateCount[2]++\n i--\n }\n if (i < 0) {\n return Number.NaN\n }\n while (i >= 0 && !image.data[centerJ + i * image.width] && stateCount[1] <= maxCount) {\n stateCount[1]++\n i--\n }\n if (i < 0 || stateCount[1] > maxCount) {\n return Number.NaN\n }\n while (i >= 0 && image.data[centerJ + i * image.width] && stateCount[0] <= maxCount) {\n stateCount[0]++\n i--\n }\n if (stateCount[0] > maxCount) {\n return Number.NaN\n }\n i = startI + 1\n while (i < maxI && image.data[centerJ + i * image.width]) {\n stateCount[2]++\n i++\n }\n if (i == maxI) {\n return Number.NaN\n }\n while (i < maxI && !image.data[centerJ + i * image.width] && stateCount[3] < maxCount) {\n stateCount[3]++\n i++\n }\n if (i == maxI || stateCount[3] >= maxCount) {\n return Number.NaN\n }\n while (i < maxI && image.data[centerJ + i * image.width] && stateCount[4] < maxCount) {\n stateCount[4]++\n i++\n }\n if (stateCount[4] >= maxCount) {\n return Number.NaN\n }\n const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4]\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n return Number.NaN\n }\n return this.foundPatternCross(stateCount) ? this.centerFromEnd(stateCount, i) : Number.NaN\n}\nFinderPatternFinder.prototype.crossCheckHorizontal = function (startJ, centerI, maxCount, originalStateCountTotal) {\n const image = this.image\n const maxJ = image.width\n const stateCount = this.CrossCheckStateCount\n let j = startJ\n while (j >= 0 && image.data[j + centerI * image.width]) {\n stateCount[2]++\n j--\n }\n if (j < 0) {\n return Number.NaN\n }\n while (j >= 0 && !image.data[j + centerI * image.width] && stateCount[1] <= maxCount) {\n stateCount[1]++\n j--\n }\n if (j < 0 || stateCount[1] > maxCount) {\n return Number.NaN\n }\n while (j >= 0 && image.data[j + centerI * image.width] && stateCount[0] <= maxCount) {\n stateCount[0]++\n j--\n }\n if (stateCount[0] > maxCount) {\n return Number.NaN\n }\n j = startJ + 1\n while (j < maxJ && image.data[j + centerI * image.width]) {\n stateCount[2]++\n j++\n }\n if (j == maxJ) {\n return Number.NaN\n }\n while (j < maxJ && !image.data[j + centerI * image.width] && stateCount[3] < maxCount) {\n stateCount[3]++\n j++\n }\n if (j == maxJ || stateCount[3] >= maxCount) {\n return Number.NaN\n }\n while (j < maxJ && image.data[j + centerI * image.width] && stateCount[4] < maxCount) {\n stateCount[4]++\n j++\n }\n if (stateCount[4] >= maxCount) {\n return Number.NaN\n }\n const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4]\n if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= originalStateCountTotal) {\n return Number.NaN\n }\n return this.foundPatternCross(stateCount) ? this.centerFromEnd(stateCount, j) : Number.NaN\n}\nFinderPatternFinder.prototype.handlePossibleCenter = function (stateCount, i, j) {\n const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4]\n let centerJ = this.centerFromEnd(stateCount, j)\n const centerI = this.crossCheckVertical(i, Math.floor(centerJ), stateCount[2], stateCountTotal)\n if (!isNaN(centerI)) {\n centerJ = this.crossCheckHorizontal(Math.floor(centerJ), Math.floor(centerI), stateCount[2], stateCountTotal)\n if (!isNaN(centerJ)) {\n const estimatedModuleSize = stateCountTotal / 7.0\n let found = false\n const max = this.possibleCenters.length\n for (let index = 0; index < max; index++) {\n const center = this.possibleCenters[index]\n if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n center.incrementCount()\n found = true\n break\n }\n }\n if (!found) {\n const point = new FinderPattern(centerJ, centerI, estimatedModuleSize)\n this.possibleCenters.push(point)\n if (this.resultPointCallback != null) {\n this.resultPointCallback.foundPossibleResultPoint(point)\n }\n }\n return true\n }\n }\n return false\n}\nFinderPatternFinder.prototype.selectBestPatterns = function () {\n const startSize = this.possibleCenters.length\n if (startSize < 3) {\n throw `Couldn't find enough finder patterns:${startSize} patterns found`\n }\n if (startSize > 3) {\n let totalModuleSize = 0.0\n let square = 0.0\n for (var i = 0; i < startSize; i++) {\n const centerValue = this.possibleCenters[i].estimatedModuleSize\n totalModuleSize += centerValue\n square += (centerValue * centerValue)\n }\n const average = totalModuleSize / startSize\n this.possibleCenters.sort((center1, center2) => {\n const dA = Math.abs(center2.estimatedModuleSize - average)\n const dB = Math.abs(center1.estimatedModuleSize - average)\n if (dA < dB) {\n return (-1)\n }\n else if (dA == dB) {\n return 0\n }\n else {\n return 1\n }\n })\n const stdDev = Math.sqrt(square / startSize - average * average)\n const limit = Math.max(0.2 * average, stdDev)\n for (var i = this.possibleCenters - 1; i >= 0; i--) {\n const pattern = this.possibleCenters[i]\n if (Math.abs(pattern.estimatedModuleSize - average) > limit) {\n this.possibleCenters.splice(i, 1)\n }\n }\n }\n if (this.possibleCenters.length > 3) {\n this.possibleCenters.sort((a, b) => {\n if (a.count > b.count) { return -1 }\n if (a.count < b.count) { return 1 }\n return 0\n })\n }\n return [this.possibleCenters[0], this.possibleCenters[1], this.possibleCenters[2]]\n}\nFinderPatternFinder.prototype.findRowSkip = function () {\n const max = this.possibleCenters.length\n if (max <= 1) {\n return 0\n }\n let firstConfirmedCenter = null\n for (let i = 0; i < max; i++) {\n const center = this.possibleCenters[i]\n if (center.count >= CENTER_QUORUM) {\n if (firstConfirmedCenter == null) {\n firstConfirmedCenter = center\n }\n else {\n this.hasSkipped = true\n return Math.floor((Math.abs(firstConfirmedCenter.X - center.X) - Math.abs(firstConfirmedCenter.Y - center.Y)) / 2)\n }\n }\n }\n return 0\n}\nFinderPatternFinder.prototype.haveMultiplyConfirmedCenters = function () {\n let confirmedCount = 0\n let totalModuleSize = 0.0\n const max = this.possibleCenters.length\n for (var i = 0; i < max; i++) {\n var pattern = this.possibleCenters[i]\n if (pattern.count >= CENTER_QUORUM) {\n confirmedCount++\n totalModuleSize += pattern.estimatedModuleSize\n }\n }\n if (confirmedCount < 3) {\n return false\n }\n const average = totalModuleSize / max\n let totalDeviation = 0.0\n for (var i = 0; i < max; i++) {\n pattern = this.possibleCenters[i]\n totalDeviation += Math.abs(pattern.estimatedModuleSize - average)\n }\n return totalDeviation <= 0.05 * totalModuleSize\n}\nFinderPatternFinder.prototype.findFinderPattern = function (image) {\n const tryHarder = false\n this.image = image\n const maxI = image.height\n const maxJ = image.width\n let iSkip = Math.floor((3 * maxI) / (4 * MAX_MODULES))\n if (iSkip < MIN_SKIP || tryHarder) {\n iSkip = MIN_SKIP\n }\n let done = false\n const stateCount = Array.from({ length: 5 })\n for (let i = iSkip - 1; i < maxI && !done; i += iSkip) {\n stateCount[0] = 0\n stateCount[1] = 0\n stateCount[2] = 0\n stateCount[3] = 0\n stateCount[4] = 0\n let currentState = 0\n for (let j = 0; j < maxJ; j++) {\n if (image.data[j + i * image.width]) {\n if ((currentState & 1) == 1) {\n currentState++\n }\n stateCount[currentState]++\n }\n else {\n if ((currentState & 1) == 0) {\n if (currentState == 4) {\n if (this.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, j)\n if (confirmed) {\n iSkip = 2\n if (this.hasSkipped) {\n done = this.haveMultiplyConfirmedCenters()\n }\n else {\n const rowSkip = this.findRowSkip()\n if (rowSkip > stateCount[2]) {\n i += rowSkip - stateCount[2] - iSkip\n j = maxJ - 1\n }\n }\n }\n else {\n do {\n j++\n } while (j < maxJ && !image.data[j + i * image.width])\n j--\n }\n currentState = 0\n stateCount[0] = 0\n stateCount[1] = 0\n stateCount[2] = 0\n stateCount[3] = 0\n stateCount[4] = 0\n }\n else {\n stateCount[0] = stateCount[2]\n stateCount[1] = stateCount[3]\n stateCount[2] = stateCount[4]\n stateCount[3] = 1\n stateCount[4] = 0\n currentState = 3\n }\n }\n else {\n stateCount[++currentState]++\n }\n }\n else {\n stateCount[currentState]++\n }\n }\n }\n if (this.foundPatternCross(stateCount)) {\n var confirmed = this.handlePossibleCenter(stateCount, i, maxJ)\n if (confirmed) {\n iSkip = stateCount[0]\n if (this.hasSkipped) {\n done = this.haveMultiplyConfirmedCenters()\n }\n }\n }\n }\n const patternInfo = this.selectBestPatterns()\n orderBestPatterns(patternInfo)\n return new FinderPatternInfo(patternInfo)\n}\n","// @ts-nocheck\n/**\n * @file 二维码解析内部模块:grid。\n */\nimport BitMatrix from '../parse/bitmat'\n\nconst GridSampler = {}\nGridSampler.checkAndNudgePoints = function (image, points) {\n const width = image.width\n const height = image.height\n let nudged = true\n for (var offset = 0; offset < points.length && nudged; offset += 2) {\n var x = Math.floor(points[offset])\n var y = Math.floor(points[offset + 1])\n if (x < -1 || x > width || y < -1 || y > height) {\n throw 'Error.checkAndNudgePoints '\n }\n nudged = false\n if (x == -1) {\n points[offset] = 0.0\n nudged = true\n }\n else if (x == width) {\n points[offset] = width - 1\n nudged = true\n }\n if (y == -1) {\n points[offset + 1] = 0.0\n nudged = true\n }\n else if (y == height) {\n points[offset + 1] = height - 1\n nudged = true\n }\n }\n nudged = true\n for (var offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {\n var x = Math.floor(points[offset])\n var y = Math.floor(points[offset + 1])\n if (x < -1 || x > width || y < -1 || y > height) {\n throw 'Error.checkAndNudgePoints '\n }\n nudged = false\n if (x == -1) {\n points[offset] = 0.0\n nudged = true\n }\n else if (x == width) {\n points[offset] = width - 1\n nudged = true\n }\n if (y == -1) {\n points[offset + 1] = 0.0\n nudged = true\n }\n else if (y == height) {\n points[offset + 1] = height - 1\n nudged = true\n }\n }\n}\nGridSampler.sampleGrid3 = function (image, dimension, transform) {\n const bits = new BitMatrix(dimension)\n const points = Array.from({ length: dimension << 1 })\n for (let y = 0; y < dimension; y++) {\n const max = points.length\n const iValue = y + 0.5\n for (var x = 0; x < max; x += 2) {\n points[x] = (x >> 1) + 0.5\n points[x + 1] = iValue\n }\n transform.transformPoints1(points)\n GridSampler.checkAndNudgePoints(image, points)\n try {\n for (var x = 0; x < max; x += 2) {\n const bit = image.data[Math.floor(points[x]) + image.width * Math.floor(points[x + 1])]\n if (bit) { bits.set_Renamed(x >> 1, y) }\n }\n }\n catch (aioobe) {\n throw 'Error.checkAndNudgePoints'\n }\n }\n return bits\n}\nexport default GridSampler\n","// @ts-nocheck\nimport { AlignmentPatternFinder } from './alignpat'\nimport { FinderPatternFinder } from './findpat'\nimport GridSampler from './grid'\n/**\n * @file 二维码解析内部模块:detector。\n */\nimport Version from '../parse/version'\n\nfunction PerspectiveTransform(a11, a21, a31, a12, a22, a32, a13, a23, a33) {\n this.a11 = a11\n this.a12 = a12\n this.a13 = a13\n this.a21 = a21\n this.a22 = a22\n this.a23 = a23\n this.a31 = a31\n this.a32 = a32\n this.a33 = a33\n}\nPerspectiveTransform.prototype.transformPoints1 = function (points) {\n const max = points.length\n const a11 = this.a11\n const a12 = this.a12\n const a13 = this.a13\n const a21 = this.a21\n const a22 = this.a22\n const a23 = this.a23\n const a31 = this.a31\n const a32 = this.a32\n const a33 = this.a33\n for (let i = 0; i < max; i += 2) {\n const x = points[i]\n const y = points[i + 1]\n const denominator = a13 * x + a23 * y + a33\n points[i] = (a11 * x + a21 * y + a31) / denominator\n points[i + 1] = (a12 * x + a22 * y + a32) / denominator\n }\n}\nPerspectiveTransform.prototype.transformPoints2 = function (xValues, yValues) {\n const n = xValues.length\n for (let i = 0; i < n; i++) {\n const x = xValues[i]\n const y = yValues[i]\n const denominator = this.a13 * x + this.a23 * y + this.a33\n xValues[i] = (this.a11 * x + this.a21 * y + this.a31) / denominator\n yValues[i] = (this.a12 * x + this.a22 * y + this.a32) / denominator\n }\n}\nPerspectiveTransform.prototype.buildAdjoint = function () {\n return new PerspectiveTransform(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21)\n}\nPerspectiveTransform.prototype.times = function (other) {\n return new PerspectiveTransform(this.a11 * other.a11 + this.a21 * other.a12 + this.a31 * other.a13, this.a11 * other.a21 + this.a21 * other.a22 + this.a31 * other.a23, this.a11 * other.a31 + this.a21 * other.a32 + this.a31 * other.a33, this.a12 * other.a11 + this.a22 * other.a12 + this.a32 * other.a13, this.a12 * other.a21 + this.a22 * other.a22 + this.a32 * other.a23, this.a12 * other.a31 + this.a22 * other.a32 + this.a32 * other.a33, this.a13 * other.a11 + this.a23 * other.a12 + this.a33 * other.a13, this.a13 * other.a21 + this.a23 * other.a22 + this.a33 * other.a23, this.a13 * other.a31 + this.a23 * other.a32 + this.a33 * other.a33)\n}\nPerspectiveTransform.quadrilateralToQuadrilateral = function (x0, y0, x1, y1, x2, y2, x3, y3, x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p) {\n const qToS = this.quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3)\n const sToQ = this.squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p)\n return sToQ.times(qToS)\n}\nPerspectiveTransform.squareToQuadrilateral = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n const dy2 = y3 - y2\n const dy3 = y0 - y1 + y2 - y3\n if (dy2 == 0.0 && dy3 == 0.0) {\n return new PerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0, y2 - y1, y0, 0.0, 0.0, 1.0)\n }\n else {\n const dx1 = x1 - x2\n const dx2 = x3 - x2\n const dx3 = x0 - x1 + x2 - x3\n const dy1 = y1 - y2\n const denominator = dx1 * dy2 - dx2 * dy1\n const a13 = (dx3 * dy2 - dx2 * dy3) / denominator\n const a23 = (dx1 * dy3 - dx3 * dy1) / denominator\n return new PerspectiveTransform(x1 - x0 + a13 * x1, x3 - x0 + a23 * x3, x0, y1 - y0 + a13 * y1, y3 - y0 + a23 * y3, y0, a13, a23, 1.0)\n }\n}\nPerspectiveTransform.quadrilateralToSquare = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n return this.squareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3).buildAdjoint()\n}\nfunction DetectorResult(bits, points) {\n this.bits = bits\n this.points = points\n}\nexport default function Detector(image) {\n this.image = image\n this.resultPointCallback = null\n}\nDetector.prototype.sizeOfBlackWhiteBlackRun = function (fromX, fromY, toX, toY) {\n const steep = Math.abs(toY - fromY) > Math.abs(toX - fromX)\n if (steep) {\n let temp = fromX\n fromX = fromY\n fromY = temp\n temp = toX\n toX = toY\n toY = temp\n }\n const dx = Math.abs(toX - fromX)\n const dy = Math.abs(toY - fromY)\n let error = -dx >> 1\n const ystep = fromY < toY ? 1 : -1\n const xstep = fromX < toX ? 1 : -1\n let state = 0\n for (let x = fromX, y = fromY; x != toX; x += xstep) {\n const realX = steep ? y : x\n const realY = steep ? x : y\n if (state == 1) {\n if (this.image.data[realX + realY * this.image.width]) {\n state++\n }\n }\n else {\n if (!this.image.data[realX + realY * this.image.width]) {\n state++\n }\n }\n if (state == 3) {\n const diffX = x - fromX\n const diffY = y - fromY\n return Math.sqrt((diffX * diffX + diffY * diffY))\n }\n error += dy\n if (error > 0) {\n if (y == toY) {\n break\n }\n y += ystep\n error -= dx\n }\n }\n const diffX2 = toX - fromX\n const diffY2 = toY - fromY\n return Math.sqrt((diffX2 * diffX2 + diffY2 * diffY2))\n}\nDetector.prototype.sizeOfBlackWhiteBlackRunBothWays = function (fromX, fromY, toX, toY) {\n let result = this.sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY)\n let scale = 1.0\n let otherToX = fromX - (toX - fromX)\n if (otherToX < 0) {\n scale = fromX / (fromX - otherToX)\n otherToX = 0\n }\n else if (otherToX >= this.image.width) {\n scale = (this.image.width - 1 - fromX) / (otherToX - fromX)\n otherToX = this.image.width - 1\n }\n let otherToY = Math.floor(fromY - (toY - fromY) * scale)\n scale = 1.0\n if (otherToY < 0) {\n scale = fromY / (fromY - otherToY)\n otherToY = 0\n }\n else if (otherToY >= this.image.height) {\n scale = (this.image.height - 1 - fromY) / (otherToY - fromY)\n otherToY = this.image.height - 1\n }\n otherToX = Math.floor(fromX + (otherToX - fromX) * scale)\n result += this.sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY)\n return result - 1.0\n}\nDetector.prototype.calculateModuleSizeOneWay = function (pattern, otherPattern) {\n const moduleSizeEst1 = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(pattern.X), Math.floor(pattern.Y), Math.floor(otherPattern.X), Math.floor(otherPattern.Y))\n const moduleSizeEst2 = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(otherPattern.X), Math.floor(otherPattern.Y), Math.floor(pattern.X), Math.floor(pattern.Y))\n if (isNaN(moduleSizeEst1)) {\n return moduleSizeEst2 / 7.0\n }\n if (isNaN(moduleSizeEst2)) {\n return moduleSizeEst1 / 7.0\n }\n return (moduleSizeEst1 + moduleSizeEst2) / 14.0\n}\nDetector.prototype.calculateModuleSize = function (topLeft, topRight, bottomLeft) {\n return (this.calculateModuleSizeOneWay(topLeft, topRight) + this.calculateModuleSizeOneWay(topLeft, bottomLeft)) / 2.0\n}\nDetector.prototype.distance = function (pattern1, pattern2) {\n const xDiff = pattern1.X - pattern2.X\n const yDiff = pattern1.Y - pattern2.Y\n return Math.sqrt((xDiff * xDiff + yDiff * yDiff))\n}\nDetector.prototype.computeDimension = function (topLeft, topRight, bottomLeft, moduleSize) {\n const tltrCentersDimension = Math.round(this.distance(topLeft, topRight) / moduleSize)\n const tlblCentersDimension = Math.round(this.distance(topLeft, bottomLeft) / moduleSize)\n let dimension = ((tltrCentersDimension + tlblCentersDimension) >> 1) + 7\n switch (dimension & 0x03) {\n case 0:\n dimension++\n break\n case 2:\n dimension--\n break\n case 3:\n throw 'Error'\n }\n return dimension\n}\nDetector.prototype.findAlignmentInRegion = function (overallEstModuleSize, estAlignmentX, estAlignmentY, allowanceFactor) {\n const allowance = Math.floor(allowanceFactor * overallEstModuleSize)\n const alignmentAreaLeftX = Math.max(0, estAlignmentX - allowance)\n const alignmentAreaRightX = Math.min(this.image.width - 1, estAlignmentX + allowance)\n if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) {\n throw 'Error'\n }\n const alignmentAreaTopY = Math.max(0, estAlignmentY - allowance)\n const alignmentAreaBottomY = Math.min(this.image.height - 1, estAlignmentY + allowance)\n const alignmentFinder = new AlignmentPatternFinder(this.image, alignmentAreaLeftX, alignmentAreaTopY, alignmentAreaRightX - alignmentAreaLeftX, alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, this.resultPointCallback)\n return alignmentFinder.find()\n}\nDetector.prototype.createTransform = function (topLeft, topRight, bottomLeft, alignmentPattern, dimension) {\n const dimMinusThree = dimension - 3.5\n let bottomRightX\n let bottomRightY\n let sourceBottomRightX\n let sourceBottomRightY\n if (alignmentPattern != null) {\n bottomRightX = alignmentPattern.X\n bottomRightY = alignmentPattern.Y\n sourceBottomRightX = sourceBottomRightY = dimMinusThree - 3.0\n }\n else {\n bottomRightX = (topRight.X - topLeft.X) + bottomLeft.X\n bottomRightY = (topRight.Y - topLeft.Y) + bottomLeft.Y\n sourceBottomRightX = sourceBottomRightY = dimMinusThree\n }\n const transform = PerspectiveTransform.quadrilateralToQuadrilateral(3.5, 3.5, dimMinusThree, 3.5, sourceBottomRightX, sourceBottomRightY, 3.5, dimMinusThree, topLeft.X, topLeft.Y, topRight.X, topRight.Y, bottomRightX, bottomRightY, bottomLeft.X, bottomLeft.Y)\n return transform\n}\nDetector.prototype.sampleGrid = function (image, transform, dimension) {\n const sampler = GridSampler\n return sampler.sampleGrid3(image, dimension, transform)\n}\nDetector.prototype.processFinderPatternInfo = function (info) {\n const topLeft = info.topLeft\n const topRight = info.topRight\n const bottomLeft = info.bottomLeft\n const moduleSize = this.calculateModuleSize(topLeft, topRight, bottomLeft)\n if (moduleSize < 1.0) {\n throw 'Error'\n }\n const dimension = this.computeDimension(topLeft, topRight, bottomLeft, moduleSize)\n const provisionalVersion = Version.getProvisionalVersionForDimension(dimension)\n const modulesBetweenFPCenters = provisionalVersion.DimensionForVersion - 7\n let alignmentPattern = null\n if (provisionalVersion.alignmentPatternCenters.length > 0) {\n const bottomRightX = topRight.X - topLeft.X + bottomLeft.X\n const bottomRightY = topRight.Y - topLeft.Y + bottomLeft.Y\n const correctionToTopLeft = 1.0 - 3.0 / modulesBetweenFPCenters\n const estAlignmentX = Math.floor(topLeft.X + correctionToTopLeft * (bottomRightX - topLeft.X))\n const estAlignmentY = Math.floor(topLeft.Y + correctionToTopLeft * (bottomRightY - topLeft.Y))\n for (let i = 4; i <= 16; i <<= 1) {\n alignmentPattern = this.findAlignmentInRegion(moduleSize, estAlignmentX, estAlignmentY, i)\n break\n }\n }\n const transform = this.createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension)\n const bits = this.sampleGrid(this.image, transform, dimension)\n let points\n if (alignmentPattern == null) {\n points = [bottomLeft, topLeft, topRight]\n }\n else {\n points = [bottomLeft, topLeft, topRight, alignmentPattern]\n }\n return new DetectorResult(bits, points)\n}\nDetector.prototype.detect = function () {\n const info = new FinderPatternFinder().findFinderPattern(this.image)\n return this.processFinderPatternInfo(info)\n}\n","// @ts-nocheck\nimport Decoder from '../parse/decoder'\n/**\n * @file 二维码解析内部模块:qrcode。\n */\nimport Detector from '../detect/detector'\n\nexport var qrcode = {}\nqrcode.sizeOfDataLengthInfo = [[10, 9, 8, 8], [12, 11, 16, 10], [14, 13, 16, 12]]\nexport default function QrCode() {\n this.imagedata = null\n this.width = 0\n this.height = 0\n this.qrCodeSymbol = null\n this.debug = false\n this.callback = null\n}\nQrCode.prototype.decode = function (src, data) {\n const decode = function () {\n try {\n this.error = undefined\n this.result = this.process(this.imagedata)\n }\n catch (e) {\n this.error = e\n this.result = undefined\n }\n if (this.callback != null) {\n this.callback(this.error, this.result)\n }\n return this.result\n }.bind(this)\n if (src != undefined && src.width != undefined) {\n this.width = src.width\n this.height = src.height\n this.imagedata = { data: data || src.data }\n this.imagedata.width = src.width\n this.imagedata.height = src.height\n decode()\n }\n else {\n if (typeof Image === 'undefined') {\n throw new TypeError('This source format is not supported in your environment, you need to pass an image buffer with width and height (see https://github.com/edi9999/jsqrcode/blob/master/test/qrcode.js)')\n }\n const image = new Image()\n image.crossOrigin = 'Anonymous'\n image.onload = function () {\n const canvas_qr = document.createElement('canvas')\n const context = canvas_qr.getContext('2d')\n const canvas_out = document.getElementById('out-canvas')\n if (canvas_out != null) {\n const outctx = canvas_out.getContext('2d')\n outctx.clearRect(0, 0, 320, 240)\n outctx.drawImage(image, 0, 0, 320, 240)\n }\n canvas_qr.width = image.width\n canvas_qr.height = image.height\n context.drawImage(image, 0, 0)\n this.width = image.width\n this.height = image.height\n try {\n this.imagedata = context.getImageData(0, 0, image.width, image.height)\n }\n catch (e) {\n this.result = 'Cross domain image reading not supported in your browser! Save it to your computer then drag and drop the file!'\n if (this.callback != null) { return this.callback(null, this.result) }\n }\n decode()\n }.bind(this)\n image.src = src\n }\n}\nQrCode.prototype.decode_utf8 = function (s) {\n return decodeURIComponent(escape(s))\n}\nQrCode.prototype.process = function (imageData) {\n const start = Date.now()\n const image = this.grayScaleToBitmap(this.grayscale(imageData))\n const detector = new Detector(image)\n const qRCodeMatrix = detector.detect()\n const reader = Decoder.decode(qRCodeMatrix.bits)\n const data = reader.DataByte\n let str = ''\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) { str += String.fromCharCode(data[i][j]) }\n }\n const end = Date.now()\n const time = end - start\n if (this.debug) {\n console.log(`QR Code processing time (ms): ${time}`)\n }\n return { result: this.decode_utf8(str), points: qRCodeMatrix.points }\n}\nQrCode.prototype.getPixel = function (imageData, x, y) {\n if (imageData.width < x) {\n throw 'point error'\n }\n if (imageData.height < y) {\n throw 'point error'\n }\n const point = (x * 4) + (y * imageData.width * 4)\n return (imageData.data[point] * 33 + imageData.data[point + 1] * 34 + imageData.data[point + 2] * 33) / 100\n}\nQrCode.prototype.binarize = function (th) {\n const ret = new Array(this.width * this.height)\n for (let y = 0; y < this.height; y++) {\n for (let x = 0; x < this.width; x++) {\n const gray = this.getPixel(x, y)\n ret[x + y * this.width] = gray <= th\n }\n }\n return ret\n}\nQrCode.prototype.getMiddleBrightnessPerArea = function (imageData) {\n const numSqrtArea = 4\n const areaWidth = Math.floor(imageData.width / numSqrtArea)\n const areaHeight = Math.floor(imageData.height / numSqrtArea)\n const minmax = Array.from({ length: numSqrtArea })\n for (let i = 0; i < numSqrtArea; i++) {\n minmax[i] = Array.from({ length: numSqrtArea })\n for (let i2 = 0; i2 < numSqrtArea; i2++) {\n minmax[i][i2] = [0, 0]\n }\n }\n for (var ay = 0; ay < numSqrtArea; ay++) {\n for (var ax = 0; ax < numSqrtArea; ax++) {\n minmax[ax][ay][0] = 0xFF\n for (let dy = 0; dy < areaHeight; dy++) {\n for (let dx = 0; dx < areaWidth; dx++) {\n const target = imageData.data[areaWidth * ax + dx + (areaHeight * ay + dy) * imageData.width]\n if (target < minmax[ax][ay][0]) { minmax[ax][ay][0] = target }\n if (target > minmax[ax][ay][1]) { minmax[ax][ay][1] = target }\n }\n }\n }\n }\n const middle = Array.from({ length: numSqrtArea })\n for (let i3 = 0; i3 < numSqrtArea; i3++) {\n middle[i3] = Array.from({ length: numSqrtArea })\n }\n for (var ay = 0; ay < numSqrtArea; ay++) {\n for (var ax = 0; ax < numSqrtArea; ax++) {\n middle[ax][ay] = Math.floor((minmax[ax][ay][0] + minmax[ax][ay][1]) / 2)\n }\n }\n return middle\n}\nQrCode.prototype.grayScaleToBitmap = function (grayScaleImageData) {\n const middle = this.getMiddleBrightnessPerArea(grayScaleImageData)\n const sqrtNumArea = middle.length\n const areaWidth = Math.floor(grayScaleImageData.width / sqrtNumArea)\n const areaHeight = Math.floor(grayScaleImageData.height / sqrtNumArea)\n for (let ay = 0; ay < sqrtNumArea; ay++) {\n for (let ax = 0; ax < sqrtNumArea; ax++) {\n for (let dy = 0; dy < areaHeight; dy++) {\n for (let dx = 0; dx < areaWidth; dx++) {\n grayScaleImageData.data[areaWidth * ax + dx + (areaHeight * ay + dy) * grayScaleImageData.width] = (grayScaleImageData.data[areaWidth * ax + dx + (areaHeight * ay + dy) * grayScaleImageData.width] < middle[ax][ay])\n }\n }\n }\n }\n return grayScaleImageData\n}\nQrCode.prototype.grayscale = function (imageData) {\n const ret = new Array(imageData.width * imageData.height)\n for (let y = 0; y < imageData.height; y++) {\n for (let x = 0; x < imageData.width; x++) {\n const gray = this.getPixel(imageData, x, y)\n ret[x + y * imageData.width] = gray\n }\n }\n return {\n height: imageData.height,\n width: imageData.width,\n data: ret,\n }\n}\nexport function URShift(number, bits) {\n if (number >= 0) { return number >> bits }\n else { return (number >> bits) + (2 << ~bits) }\n}\n","/**\n * @file 二维码核心 reader 运行时适配。\n */\nimport LegacyQrCodeReader from './qrcode'\nimport type { QRCodeReaderConstructor, QRCodeReaderInstance } from './types'\n\n/** createLegacyQrCodeReader 的方法封装。 */\nexport function createLegacyQrCodeReader(): QRCodeReaderInstance {\n const Reader = LegacyQrCodeReader as unknown as QRCodeReaderConstructor\n return new Reader()\n}\n","/**\n * @file 二维码核心 reader 纯函数解码入口。\n */\nimport type { QRCodeReaderConstructor, QRCodeReaderInput, QRCodeReaderResult } from './types'\nimport { normalizeQrCodeReaderResult } from './result'\nimport { createLegacyQrCodeReader } from './runtime'\n\n/** decodeWithLegacyQrCodeCore 的方法封装。 */\nexport async function decodeWithLegacyQrCodeCore(input: QRCodeReaderInput) {\n return await new Promise<QRCodeReaderResult>((resolve, reject) => {\n const reader = createLegacyQrCodeReader()\n reader.callback = (error, value) => {\n if (error) {\n reject(error)\n return\n }\n\n resolve(normalizeQrCodeReaderResult(value))\n }\n\n reader.decode(input)\n })\n}\n","/**\n * @file 二维码 reader vendor 纯函数解码入口。\n */\nimport { decodeWithLegacyQrCodeCore } from './core/decode'\nimport type { QRCodeReaderInput } from './types'\n\n/** decodeWithVendorQrReader 的方法封装。 */\nexport async function decodeWithVendorQrReader(input: QRCodeReaderInput) {\n return await decodeWithLegacyQrCodeCore(input)\n}\n","/**\n * @file 基于 sharp 的二维码解码封装。\n */\nimport { Buffer } from 'node:buffer'\nimport sharp from 'sharp'\nimport { decodeWithVendorQrReader } from './vendor/reader/decode'\n\nasync function decodeQrCodeBuffer(buffer: Buffer) {\n const { data, info } = await sharp(buffer).ensureAlpha().raw().toBuffer({ resolveWithObject: true })\n const result = await decodeWithVendorQrReader({\n width: info.width,\n height: info.height,\n data,\n })\n\n return result.result\n}\n\n/** decodeQrCodeFromBase64 的方法封装。 */\nexport async function decodeQrCodeFromBase64(content: string) {\n return await decodeQrCodeBuffer(Buffer.from(content, 'base64'))\n}\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRMode。\n */\nconst QRMode = {\n MODE_NUMBER: 1 << 0,\n MODE_ALPHA_NUM: 1 << 1,\n MODE_8BIT_BYTE: 1 << 2,\n MODE_KANJI: 1 << 3,\n}\nexport default QRMode\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QR8bitByte。\n */\nimport QRMode from './QRMode'\n\nfunction QR8bitByte(data) {\n this.mode = QRMode.MODE_8BIT_BYTE\n this.data = data\n}\nQR8bitByte.prototype = {\n getLength() {\n return this.data.length\n },\n write(buffer) {\n for (let i = 0; i < this.data.length; i++) {\n buffer.put(this.data.charCodeAt(i), 8)\n }\n },\n}\nexport default QR8bitByte\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRBitBuffer。\n */\nfunction QRBitBuffer() {\n this.buffer = []\n this.length = 0\n}\nQRBitBuffer.prototype = {\n get(index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1\n },\n put(num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1)\n }\n },\n getLengthInBits() {\n return this.length\n },\n putBit(bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n this.length++\n },\n}\nexport default QRBitBuffer\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRMath。\n */\nvar QRMath = {\n glog(n) {\n if (n < 1) {\n throw new Error(`glog(${n})`)\n }\n return QRMath.LOG_TABLE[n]\n },\n gexp(n) {\n while (n < 0) {\n n += 255\n }\n while (n >= 256) {\n n -= 255\n }\n return QRMath.EXP_TABLE[n]\n },\n EXP_TABLE: Array.from({ length: 256 }),\n LOG_TABLE: Array.from({ length: 256 }),\n}\nfor (var i = 0; i < 8; i++) {\n QRMath.EXP_TABLE[i] = 1 << i\n}\nfor (var i = 8; i < 256; i++) {\n QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n ^ QRMath.EXP_TABLE[i - 5]\n ^ QRMath.EXP_TABLE[i - 6]\n ^ QRMath.EXP_TABLE[i - 8]\n}\nfor (var i = 0; i < 255; i++) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i\n}\nexport default QRMath\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRPolynomial。\n */\nimport QRMath from './QRMath'\n\nfunction QRPolynomial(num, shift) {\n if (num.length === undefined) {\n throw new Error(`${num.length}/${shift}`)\n }\n let offset = 0\n while (offset < num.length && num[offset] === 0) {\n offset++\n }\n this.num = new Array(num.length - offset + shift)\n for (let i = 0; i < num.length - offset; i++) {\n this.num[i] = num[i + offset]\n }\n}\nQRPolynomial.prototype = {\n get(index) {\n return this.num[index]\n },\n getLength() {\n return this.num.length\n },\n multiply(e) {\n const num = Array.from({ length: this.getLength() + e.getLength() - 1 })\n for (let i = 0; i < this.getLength(); i++) {\n for (let j = 0; j < e.getLength(); j++) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)))\n }\n }\n return new QRPolynomial(num, 0)\n },\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this\n }\n const ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0))\n const num = new Array(this.getLength())\n for (let i = 0; i < this.getLength(); i++) {\n num[i] = this.get(i)\n }\n for (let x = 0; x < e.getLength(); x++) {\n num[x] ^= QRMath.gexp(QRMath.glog(e.get(x)) + ratio)\n }\n return new QRPolynomial(num, 0).mod(e)\n },\n}\nexport default QRPolynomial\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRErrorCorrectLevel。\n */\nconst QRErrorCorrectLevel = {\n L: 1,\n M: 0,\n Q: 3,\n H: 2,\n}\nexport default QRErrorCorrectLevel\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRRSBlock。\n */\nimport QRErrorCorrectLevel from './QRErrorCorrectLevel'\n\nfunction QRRSBlock(totalCount, dataCount) {\n this.totalCount = totalCount\n this.dataCount = dataCount\n}\nQRRSBlock.RS_BLOCK_TABLE = [\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12],\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16],\n]\nQRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {\n const rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel)\n if (rsBlock === undefined) {\n throw new Error(`bad rs block @ typeNumber:${typeNumber}/errorCorrectLevel:${errorCorrectLevel}`)\n }\n const length = rsBlock.length / 3\n const list = []\n for (let i = 0; i < length; i++) {\n const count = rsBlock[i * 3 + 0]\n const totalCount = rsBlock[i * 3 + 1]\n const dataCount = rsBlock[i * 3 + 2]\n for (let j = 0; j < count; j++) {\n list.push(new QRRSBlock(totalCount, dataCount))\n }\n }\n return list\n}\nQRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case QRErrorCorrectLevel.L:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]\n case QRErrorCorrectLevel.M:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]\n case QRErrorCorrectLevel.Q:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]\n case QRErrorCorrectLevel.H:\n return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]\n default:\n return undefined\n }\n}\nexport default QRRSBlock\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:QRMaskPattern。\n */\nconst QRMaskPattern = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7,\n}\nexport default QRMaskPattern\n","// @ts-nocheck\nimport QRMaskPattern from './QRMaskPattern'\nimport QRMath from './QRMath'\n/**\n * @file 终端二维码编码内部模块:QRUtil。\n */\nimport QRMode from './QRMode'\nimport QRPolynomial from './QRPolynomial'\n\nvar QRUtil = {\n PATTERN_POSITION_TABLE: [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170],\n ],\n G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),\n getBCHTypeInfo(data) {\n let d = data << 10\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)))\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK\n },\n getBCHTypeNumber(data) {\n let d = data << 12\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)))\n }\n return (data << 12) | d\n },\n getBCHDigit(data) {\n let digit = 0\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n return digit\n },\n getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]\n },\n getMask(maskPattern, i, j) {\n switch (maskPattern) {\n case QRMaskPattern.PATTERN000: return (i + j) % 2 === 0\n case QRMaskPattern.PATTERN001: return i % 2 === 0\n case QRMaskPattern.PATTERN010: return j % 3 === 0\n case QRMaskPattern.PATTERN011: return (i + j) % 3 === 0\n case QRMaskPattern.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case QRMaskPattern.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case QRMaskPattern.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case QRMaskPattern.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n default:\n throw new Error(`bad maskPattern:${maskPattern}`)\n }\n },\n getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new QRPolynomial([1], 0)\n for (let i = 0; i < errorCorrectLength; i++) {\n a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0))\n }\n return a\n },\n getLengthInBits(mode, type) {\n if (type >= 1 && type < 10) {\n switch (mode) {\n case QRMode.MODE_NUMBER: return 10\n case QRMode.MODE_ALPHA_NUM: return 9\n case QRMode.MODE_8BIT_BYTE: return 8\n case QRMode.MODE_KANJI: return 8\n default:\n throw new Error(`mode:${mode}`)\n }\n }\n else if (type < 27) {\n switch (mode) {\n case QRMode.MODE_NUMBER: return 12\n case QRMode.MODE_ALPHA_NUM: return 11\n case QRMode.MODE_8BIT_BYTE: return 16\n case QRMode.MODE_KANJI: return 10\n default:\n throw new Error(`mode:${mode}`)\n }\n }\n else if (type < 41) {\n switch (mode) {\n case QRMode.MODE_NUMBER: return 14\n case QRMode.MODE_ALPHA_NUM: return 13\n case QRMode.MODE_8BIT_BYTE: return 16\n case QRMode.MODE_KANJI: return 12\n default:\n throw new Error(`mode:${mode}`)\n }\n }\n else {\n throw new Error(`type:${type}`)\n }\n },\n getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount()\n let lostPoint = 0\n let row = 0\n let col = 0\n for (row = 0; row < moduleCount; row++) {\n for (col = 0; col < moduleCount; col++) {\n let sameCount = 0\n const dark = qrCode.isDark(row, col)\n for (let r = -1; r <= 1; r++) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue\n }\n for (let c = -1; c <= 1; c++) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue\n }\n if (r === 0 && c === 0) {\n continue\n }\n if (dark === qrCode.isDark(row + r, col + c)) {\n sameCount++\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5)\n }\n }\n }\n for (row = 0; row < moduleCount - 1; row++) {\n for (col = 0; col < moduleCount - 1; col++) {\n let count = 0\n if (qrCode.isDark(row, col)) { count++ }\n if (qrCode.isDark(row + 1, col)) { count++ }\n if (qrCode.isDark(row, col + 1)) { count++ }\n if (qrCode.isDark(row + 1, col + 1)) { count++ }\n if (count === 0 || count === 4) {\n lostPoint += 3\n }\n }\n }\n for (row = 0; row < moduleCount; row++) {\n for (col = 0; col < moduleCount - 6; col++) {\n if (qrCode.isDark(row, col)\n && !qrCode.isDark(row, col + 1)\n && qrCode.isDark(row, col + 2)\n && qrCode.isDark(row, col + 3)\n && qrCode.isDark(row, col + 4)\n && !qrCode.isDark(row, col + 5)\n && qrCode.isDark(row, col + 6)) {\n lostPoint += 40\n }\n }\n }\n for (col = 0; col < moduleCount; col++) {\n for (row = 0; row < moduleCount - 6; row++) {\n if (qrCode.isDark(row, col)\n && !qrCode.isDark(row + 1, col)\n && qrCode.isDark(row + 2, col)\n && qrCode.isDark(row + 3, col)\n && qrCode.isDark(row + 4, col)\n && !qrCode.isDark(row + 5, col)\n && qrCode.isDark(row + 6, col)) {\n lostPoint += 40\n }\n }\n }\n let darkCount = 0\n for (col = 0; col < moduleCount; col++) {\n for (row = 0; row < moduleCount; row++) {\n if (qrCode.isDark(row, col)) {\n darkCount++\n }\n }\n }\n const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5\n lostPoint += ratio * 10\n return lostPoint\n },\n}\nexport default QRUtil\n","// @ts-nocheck\n/**\n * @file 终端二维码编码内部模块:index。\n */\nimport QR8bitByte from './QR8bitByte'\nimport QRBitBuffer from './QRBitBuffer'\nimport QRPolynomial from './QRPolynomial'\nimport QRRSBlock from './QRRSBlock'\nimport QRUtil from './QRUtil'\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n this.typeNumber = typeNumber\n this.errorCorrectLevel = errorCorrectLevel\n this.modules = null\n this.moduleCount = 0\n this.dataCache = null\n this.dataList = []\n}\nQRCode.prototype = {\n addData(data) {\n const newData = new QR8bitByte(data)\n this.dataList.push(newData)\n this.dataCache = null\n },\n isDark(row, col) {\n if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n throw new Error(`${row},${col}`)\n }\n return this.modules[row][col]\n },\n getModuleCount() {\n return this.moduleCount\n },\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1\n for (typeNumber = 1; typeNumber < 40; typeNumber++) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel)\n const buffer = new QRBitBuffer()\n let totalDataCount = 0\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount\n }\n for (let x = 0; x < this.dataList.length; x++) {\n const data = this.dataList[x]\n buffer.put(data.mode, 4)\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber))\n data.write(buffer)\n }\n if (buffer.getLengthInBits() <= totalDataCount * 8) { break }\n }\n this.typeNumber = typeNumber\n }\n this.makeImpl(false, this.getBestMaskPattern())\n },\n makeImpl(test, maskPattern) {\n this.moduleCount = this.typeNumber * 4 + 17\n this.modules = new Array(this.moduleCount)\n for (let row = 0; row < this.moduleCount; row++) {\n this.modules[row] = new Array(this.moduleCount)\n for (let col = 0; col < this.moduleCount; col++) {\n this.modules[row][col] = null\n }\n }\n this.setupPositionProbePattern(0, 0)\n this.setupPositionProbePattern(this.moduleCount - 7, 0)\n this.setupPositionProbePattern(0, this.moduleCount - 7)\n this.setupPositionAdjustPattern()\n this.setupTimingPattern()\n this.setupTypeInfo(test, maskPattern)\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test)\n }\n if (this.dataCache === null) {\n this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)\n }\n this.mapData(this.dataCache, maskPattern)\n },\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || this.moduleCount <= row + r) { continue }\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || this.moduleCount <= col + c) { continue }\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6))\n || (c >= 0 && c <= 6 && (r === 0 || r === 6))\n || (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n this.modules[row + r][col + c] = true\n }\n else {\n this.modules[row + r][col + c] = false\n }\n }\n }\n },\n getBestMaskPattern() {\n let minLostPoint = 0\n let pattern = 0\n for (let i = 0; i < 8; i++) {\n this.makeImpl(true, i)\n const lostPoint = QRUtil.getLostPoint(this)\n if (i === 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint\n pattern = i\n }\n }\n return pattern\n },\n createMovieClip(target_mc, instance_name, depth) {\n const qr_mc = target_mc.createEmptyMovieClip(instance_name, depth)\n const cs = 1\n this.make()\n for (let row = 0; row < this.modules.length; row++) {\n const y = row * cs\n for (let col = 0; col < this.modules[row].length; col++) {\n const x = col * cs\n const dark = this.modules[row][col]\n if (dark) {\n qr_mc.beginFill(0, 100)\n qr_mc.moveTo(x, y)\n qr_mc.lineTo(x + cs, y)\n qr_mc.lineTo(x + cs, y + cs)\n qr_mc.lineTo(x, y + cs)\n qr_mc.endFill()\n }\n }\n }\n return qr_mc\n },\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r++) {\n if (this.modules[r][6] !== null) {\n continue\n }\n this.modules[r][6] = (r % 2 === 0)\n }\n for (let c = 8; c < this.moduleCount - 8; c++) {\n if (this.modules[6][c] !== null) {\n continue\n }\n this.modules[6][c] = (c % 2 === 0)\n }\n },\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber)\n for (let i = 0; i < pos.length; i++) {\n for (let j = 0; j < pos.length; j++) {\n const row = pos[i]\n const col = pos[j]\n if (this.modules[row][col] !== null) {\n continue\n }\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (Math.abs(r) === 2\n || Math.abs(c) === 2\n || (r === 0 && c === 0)) {\n this.modules[row + r][col + c] = true\n }\n else {\n this.modules[row + r][col + c] = false\n }\n }\n }\n }\n }\n },\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber)\n let mod\n for (let i = 0; i < 18; i++) {\n mod = (!test && ((bits >> i) & 1) === 1)\n this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod\n }\n for (let x = 0; x < 18; x++) {\n mod = (!test && ((bits >> x) & 1) === 1)\n this.modules[x % 3 + this.moduleCount - 8 - 3][Math.floor(x / 3)] = mod\n }\n },\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern\n const bits = QRUtil.getBCHTypeInfo(data)\n let mod\n for (let v = 0; v < 15; v++) {\n mod = (!test && ((bits >> v) & 1) === 1)\n if (v < 6) {\n this.modules[v][8] = mod\n }\n else if (v < 8) {\n this.modules[v + 1][8] = mod\n }\n else {\n this.modules[this.moduleCount - 15 + v][8] = mod\n }\n }\n for (let h = 0; h < 15; h++) {\n mod = (!test && ((bits >> h) & 1) === 1)\n if (h < 8) {\n this.modules[8][this.moduleCount - h - 1] = mod\n }\n else if (h < 9) {\n this.modules[8][15 - h - 1 + 1] = mod\n }\n else {\n this.modules[8][15 - h - 1] = mod\n }\n }\n this.modules[this.moduleCount - 8][8] = (!test)\n },\n mapData(data, maskPattern) {\n let inc = -1\n let row = this.moduleCount - 1\n let bitIndex = 7\n let byteIndex = 0\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col === 6) { col-- }\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (this.modules[row][col - c] === null) {\n let dark = false\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n const mask = QRUtil.getMask(maskPattern, row, col - c)\n if (mask) {\n dark = !dark\n }\n this.modules[row][col - c] = dark\n bitIndex--\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n row += inc\n if (row < 0 || this.moduleCount <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n },\n}\nQRCode.PAD0 = 0xEC\nQRCode.PAD1 = 0x11\nQRCode.createData = function (typeNumber, errorCorrectLevel, dataList) {\n const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel)\n const buffer = new QRBitBuffer()\n for (let i = 0; i < dataList.length; i++) {\n const data = dataList[i]\n buffer.put(data.mode, 4)\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber))\n data.write(buffer)\n }\n let totalDataCount = 0\n for (let x = 0; x < rsBlocks.length; x++) {\n totalDataCount += rsBlocks[x].dataCount\n }\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw new Error(`code length overflow. (${\n buffer.getLengthInBits()\n }>${\n totalDataCount * 8\n })`)\n }\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4)\n }\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(false)\n }\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break\n }\n buffer.put(QRCode.PAD0, 8)\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break\n }\n buffer.put(QRCode.PAD1, 8)\n }\n return QRCode.createBytes(buffer, rsBlocks)\n}\nQRCode.createBytes = function (buffer, rsBlocks) {\n let offset = 0\n let maxDcCount = 0\n let maxEcCount = 0\n const dcdata = Array.from({ length: rsBlocks.length })\n const ecdata = Array.from({ length: rsBlocks.length })\n for (let r = 0; r < rsBlocks.length; r++) {\n const dcCount = rsBlocks[r].dataCount\n const ecCount = rsBlocks[r].totalCount - dcCount\n maxDcCount = Math.max(maxDcCount, dcCount)\n maxEcCount = Math.max(maxEcCount, ecCount)\n dcdata[r] = new Array(dcCount)\n for (let i = 0; i < dcdata[r].length; i++) {\n dcdata[r][i] = 0xFF & buffer.buffer[i + offset]\n }\n offset += dcCount\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount)\n const rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1)\n const modPoly = rawPoly.mod(rsPoly)\n ecdata[r] = Array.from({ length: rsPoly.getLength() - 1 })\n for (let x = 0; x < ecdata[r].length; x++) {\n const modIndex = x + modPoly.getLength() - ecdata[r].length\n ecdata[r][x] = (modIndex >= 0) ? modPoly.get(modIndex) : 0\n }\n }\n let totalCodeCount = 0\n for (let y = 0; y < rsBlocks.length; y++) {\n totalCodeCount += rsBlocks[y].totalCount\n }\n const data = new Array(totalCodeCount)\n let index = 0\n for (let z = 0; z < maxDcCount; z++) {\n for (let s = 0; s < rsBlocks.length; s++) {\n if (z < dcdata[s].length) {\n data[index++] = dcdata[s][z]\n }\n }\n }\n for (let xx = 0; xx < maxEcCount; xx++) {\n for (let t = 0; t < rsBlocks.length; t++) {\n if (xx < ecdata[t].length) {\n data[index++] = ecdata[t][xx]\n }\n }\n }\n return data\n}\nexport default QRCode\n","/**\n * @file 二维码矩阵编码封装。\n */\nimport type { QRCodeMatrix } from './types'\nimport QRCode from './vendor/terminal/QRCode/index'\nimport QRErrorCorrectLevel from './vendor/terminal/QRCode/QRErrorCorrectLevel'\n\ninterface QRCodeEncoderInstance {\n modules: QRCodeMatrix\n addData: (input: string) => void\n make: () => void\n}\n\ntype QRCodeEncoderConstructor = new (typeNumber: number, errorCorrectLevel: number) => QRCodeEncoderInstance\n\nconst LOW_ERROR_CORRECTION_LEVEL = (QRErrorCorrectLevel as Record<string, number>).L\n\n/** createQrCodeMatrix 的方法封装。 */\nexport function createQrCodeMatrix(input: string): QRCodeMatrix {\n const QRCodeCtor = QRCode as unknown as QRCodeEncoderConstructor\n const qrcode = new QRCodeCtor(-1, LOW_ERROR_CORRECTION_LEVEL)\n qrcode.addData(input)\n qrcode.make()\n return qrcode.modules\n}\n","/**\n * @file 终端二维码渲染封装。\n */\nimport type { QRCodeMatrix, QRCodeRenderOptions } from './types'\nimport { createQrCodeMatrix } from './encode'\n\nconst WHITE_ALL = '\\u2588'\nconst WHITE_BLACK = '\\u2580'\nconst BLACK_WHITE = '\\u2584'\nconst BLACK_ALL = ' '\n\nfunction fill<T>(length: number, value: T) {\n return Array.from({ length }).fill(value) as T[]\n}\n\nfunction renderCompactQrCode(matrix: QRCodeMatrix) {\n const moduleCount = matrix.length\n const moduleData = [...matrix]\n const oddRow = moduleCount % 2 === 1\n\n if (oddRow) {\n moduleData.push(fill<boolean>(moduleCount, false))\n }\n\n const borderTop = Array.from({ length: moduleCount + 2 }).fill(BLACK_WHITE).join('')\n const borderBottom = Array.from({ length: moduleCount + 2 }).fill(WHITE_BLACK).join('')\n let output = `${borderTop}\\n`\n\n for (let row = 0; row < moduleCount; row += 2) {\n output += WHITE_ALL\n for (let col = 0; col < moduleCount; col += 1) {\n const top = moduleData[row][col]\n const bottom = moduleData[row + 1][col]\n if (!top && !bottom) {\n output += WHITE_ALL\n }\n else if (!top && bottom) {\n output += WHITE_BLACK\n }\n else if (top && !bottom) {\n output += BLACK_WHITE\n }\n else {\n output += BLACK_ALL\n }\n }\n output += `${WHITE_ALL}\\n`\n }\n\n if (!oddRow) {\n output += borderBottom\n }\n\n return output\n}\n\nfunction renderFullQrCode(matrix: QRCodeMatrix) {\n const black = '\\u001B[40m \\u001B[0m'\n const white = '\\u001B[47m \\u001B[0m'\n const border = Array.from({ length: matrix.length + 2 }).fill(white).join('')\n let output = `${border}\\n`\n\n matrix.forEach((row) => {\n output += white\n output += row.map(cell => cell ? black : white).join('')\n output += `${white}\\n`\n })\n\n output += border\n return output\n}\n\n/** renderTerminalQrCode 的方法封装。 */\nexport function renderTerminalQrCode(input: string, options: QRCodeRenderOptions = {}) {\n const matrix = createQrCodeMatrix(input)\n return options.small ? renderCompactQrCode(matrix) : renderFullQrCode(matrix)\n}\n","/**\n * @file 二维码与插件路径工具。\n */\nimport process from 'node:process'\nimport { startWith } from './internal/compat'\nimport { decodeQrCodeFromBase64 } from './internal/qr/decode'\nimport { renderTerminalQrCode } from './internal/qr/render'\n\nconst regPluginId = /^plugin-private:\\/\\/([0-9a-zA-Z]+)\\//\n/** decodeQrCode 的方法封装。 */\nexport function decodeQrCode(qrCode: string) {\n return decodeQrCodeFromBase64(qrCode)\n}\n/** printQrCode 的方法封装。 */\nexport function printQrCode(content: string) {\n return new Promise<void>((resolve) => {\n process.stdout.write(renderTerminalQrCode(content, { small: true }))\n resolve()\n })\n}\n/** isPluginPath 的方法封装。 */\nexport function isPluginPath(p: string) {\n return startWith(p, 'plugin-private://')\n}\n/** extractPluginId 的方法封装。 */\nexport function extractPluginId(p: string) {\n const match = p.match(regPluginId)\n return match ? match[1] : ''\n}\n","/**\n * @file 小程序实例控制能力。\n */\nimport type Connection from './Connection'\nimport { EventEmitter } from 'node:events'\nimport fs from 'node:fs/promises'\nimport pkg from '../package.json'\nimport { cmpVersion, isFn, isStr, startWith, trim } from './internal/compat'\nimport Native from './Native'\nimport Page from './Page'\nimport { decodeQrCode, extractPluginId, isPluginPath, printQrCode } from './util'\n\ninterface IScreenshotOptions {\n path?: string\n}\ninterface IAuditsOptions {\n path?: string\n}\ntype AutomatorCallable = (...args: any[]) => any\nfunction sleep(ms: number) {\n return new Promise<void>(resolve => setTimeout(resolve, ms))\n}\nfunction isFnStr(value: unknown) {\n if (!isStr(value)) {\n return false\n }\n const trimmed = trim(value)\n return startWith(trimmed, 'function') || startWith(trimmed, '() =>')\n}\n/** MiniProgram 的实现。 */\nexport default class MiniProgram extends EventEmitter {\n private appBindings = new Map<string, AutomatorCallable>()\n private pageMap = new Map<number, Page>()\n private nativeIns?: Native\n constructor(private connection: Connection) {\n super()\n connection.on('App.logAdded', this.onLogAdded)\n connection.on('App.bindingCalled', this.onBindingCalled)\n connection.on('App.exceptionThrown', this.onExceptionThrown)\n }\n\n async pageStack() {\n const { pageStack } = await this.send('App.getPageStack')\n return pageStack.map((page: {\n pageId: number\n path: string\n query: any\n }) => {\n return Page.create(this.connection, {\n id: page.pageId,\n path: page.path,\n query: page.query,\n }, this.pageMap)\n })\n }\n\n async navigateTo(url: string) {\n return await this.changeRoute('navigateTo', url)\n }\n\n async redirectTo(url: string) {\n return await this.changeRoute('redirectTo', url)\n }\n\n async navigateBack() {\n return await this.changeRoute('navigateBack')\n }\n\n async reLaunch(url: string) {\n return await this.changeRoute('reLaunch', url)\n }\n\n async switchTab(url: string) {\n return await this.changeRoute('switchTab', url)\n }\n\n async currentPage() {\n const { pageId, path, query } = await this.send('App.getCurrentPage')\n return Page.create(this.connection, { id: pageId, path, query }, this.pageMap)\n }\n\n async systemInfo() {\n return await this.callWxMethod('getSystemInfoSync')\n }\n\n async callWxMethod(method: string, ...args: any[]) {\n return (await this.send('App.callWxMethod', { method, args })).result\n }\n\n async mockWxMethod(method: string, result: any, ...args: any[]) {\n if (isFn(result) || isFnStr(result)) {\n await this.send('App.mockWxMethod', {\n method,\n functionDeclaration: result.toString(),\n args,\n })\n return\n }\n await this.send('App.mockWxMethod', { method, result })\n }\n\n async restoreWxMethod(method: string) {\n await this.send('App.mockWxMethod', { method })\n }\n\n async callPluginWxMethod(pluginId: string, method: string, ...args: any[]) {\n return (await this.send('App.callWxMethod', { method, pluginId, args })).result\n }\n\n async mockPluginWxMethod(pluginId: string, method: string, result: any, ...args: any[]) {\n if (isFn(result) || isFnStr(result)) {\n await this.send('App.mockWxMethod', {\n method,\n pluginId,\n functionDeclaration: result.toString(),\n args,\n })\n return\n }\n await this.send('App.mockWxMethod', { method, pluginId, result })\n }\n\n async restorePluginWxMethod(pluginId: string, method: string) {\n await this.send('App.mockWxMethod', { method, pluginId })\n }\n\n async evaluate(appFunction: AutomatorCallable | string, ...args: any[]) {\n const { result } = await this.send('App.callFunction', {\n functionDeclaration: appFunction.toString(),\n args,\n })\n return result\n }\n\n async pageScrollTo(scrollTop: number) {\n await this.callWxMethod('pageScrollTo', {\n scrollTop,\n duration: 0,\n })\n }\n\n async close() {\n try {\n await this.send('App.exit')\n }\n catch {\n }\n await sleep(1000)\n await this.send('Tool.close')\n this.disconnect()\n }\n\n async remote(auto = false) {\n const { qrCode } = await this.send('Tool.enableRemoteDebug', { auto })\n if (qrCode) {\n await printQrCode(await decodeQrCode(qrCode))\n }\n return new Promise<void>((resolve) => {\n this.connection.once('Tool.onRemoteDebugConnected', async () => {\n await sleep(1000)\n resolve()\n })\n })\n }\n\n disconnect() {\n this.connection.dispose()\n }\n\n override on(event: string | symbol, listener: (...args: any[]) => void): this {\n if (event === 'console') {\n void this.send('App.enableLog')\n }\n super.on(event, listener)\n return this\n }\n\n async exposeFunction(name: string, bindingFunction: AutomatorCallable) {\n if (this.appBindings.has(name)) {\n throw new Error(`Failed to expose function with name ${name}: already exists!`)\n }\n this.appBindings.set(name, bindingFunction)\n await this.send('App.addBinding', { name })\n }\n\n async checkVersion() {\n const sdkVersion = (await this.send('Tool.getInfo')).SDKVersion\n if (sdkVersion !== 'dev' && cmpVersion(sdkVersion, '2.7.3') < 0) {\n throw new Error(`SDKVersion is currently ${sdkVersion}, while automator(${pkg.version}) requires at least version 2.7.3`)\n }\n }\n\n async screenshot(options: IScreenshotOptions = {}) {\n const { data } = await this.send('App.captureScreenshot')\n if (!options.path) {\n return data\n }\n await fs.writeFile(options.path, data, 'base64')\n }\n\n async testAccounts() {\n return (await this.send('Tool.getTestAccounts')).accounts\n }\n\n async stopAudits(options: IAuditsOptions = {}) {\n const result = await this.send('Tool.stopAudits')\n if (options.path) {\n await fs.writeFile(options.path, result.report, 'utf8')\n }\n return JSON.parse(result.data)\n }\n\n async getTicket() {\n return await this.send('Tool.getTicket')\n }\n\n async setTicket(ticket: string) {\n await this.send('Tool.setTicket', { ticket })\n }\n\n async refreshTicket() {\n await this.send('Tool.refreshTicket')\n }\n\n native() {\n if (!this.nativeIns) {\n this.nativeIns = new Native(this.connection)\n }\n return this.nativeIns\n }\n\n private async changeRoute(method: string, url?: string) {\n const currentPage = await this.currentPage()\n if (currentPage && isPluginPath(currentPage.path)) {\n const pluginId = extractPluginId(currentPage.path)\n await this.callPluginWxMethod(pluginId, method, { url })\n }\n else {\n await this.callWxMethod(method, { url })\n }\n await sleep(3000)\n return await this.currentPage()\n }\n\n private async send(method: string, params: Record<string, any> = {}) {\n return await this.connection.send(method, params)\n }\n\n private onLogAdded = (payload: any) => {\n this.emit('console', payload)\n }\n\n private onBindingCalled = (payload: {\n name: string\n args: any[]\n }) => {\n const binding = this.appBindings.get(payload.name)\n if (!binding) {\n return\n }\n try {\n binding(...payload.args)\n }\n catch {\n }\n }\n\n private onExceptionThrown = (payload: any) => {\n this.emit('exception', payload)\n }\n}\n","/**\n * @file 开发者工具启动与连接流程。\n */\nimport { spawn } from 'node:child_process'\nimport net from 'node:net'\nimport path from 'node:path'\nimport process from 'node:process'\nimport Connection from './Connection'\nimport { launchHeadlessAutomator } from './headless'\nimport { endWith, extendDeep, getPort, isEmpty, isRelative, isWindows, sleep, toStr, waitUntil } from './internal/compat'\nimport MiniProgram from './MiniProgram'\n\nconst DEFAULT_PORT = 9420\nconst DEFAULT_TIMEOUT = 30000\nconst DEFAULT_RUNTIME_PROVIDER_ENV = 'WEAPP_VITE_AUTOMATOR_RUNTIME_PROVIDER'\nconst LEGACY_RUNTIME_PROVIDER_ENV = 'WEAPP_VITE_E2E_RUNTIME_PROVIDER'\nlet localhostListenPatched = false\nfunction patchNetListenToLoopback() {\n if (localhostListenPatched) {\n return\n }\n localhostListenPatched = true\n const rawListen = net.Server.prototype.listen\n net.Server.prototype.listen = function patchedListen(this: net.Server, ...args: any[]) {\n const firstArg = args[0]\n if (firstArg && typeof firstArg === 'object' && !Array.isArray(firstArg)) {\n if (!('host' in firstArg) || !firstArg.host) {\n args[0] = {\n ...firstArg,\n host: '127.0.0.1',\n }\n }\n return rawListen.apply(this, args as any)\n }\n if ((typeof firstArg === 'number' || typeof firstArg === 'string') && typeof args[1] !== 'string') {\n args.splice(1, 0, '127.0.0.1')\n }\n return rawListen.apply(this, args as any)\n } as typeof net.Server.prototype.listen\n}\n/** IConnectOptions 的类型定义。 */\nexport interface IConnectOptions {\n wsEndpoint: string\n}\n/** ILaunchOptions 的类型定义。 */\nexport interface ILaunchOptions {\n cliPath?: string\n timeout?: number\n port?: number\n account?: string\n ticket?: string\n projectConfig?: any\n projectPath: string\n trustProject?: boolean\n args?: string[]\n cwd?: string\n runtimeProvider?: 'devtools' | 'headless'\n}\nfunction resolveRuntimeProvider(options: ILaunchOptions) {\n return options.runtimeProvider\n || process.env[DEFAULT_RUNTIME_PROVIDER_ENV]\n || process.env[LEGACY_RUNTIME_PROVIDER_ENV]\n || 'devtools'\n}\n/** Launcher 的实现。 */\nexport default class Launcher {\n async launch(options: ILaunchOptions): Promise<any> {\n const provider = resolveRuntimeProvider(options)\n if (provider === 'headless') {\n return await launchHeadlessAutomator({\n projectPath: options.projectPath,\n })\n }\n patchNetListenToLoopback()\n const { cliPath = await this.resolveCliPath(), timeout = DEFAULT_TIMEOUT, projectConfig = {}, ticket = '', cwd = '', account = '', trustProject = false } = options\n let { args = [], projectPath } = options\n const port = await getPort(options.port || DEFAULT_PORT)\n if (options.port && options.port !== port) {\n throw new Error(`Port ${options.port} is in use, please specify another port`)\n }\n if (!cliPath) {\n throw new Error('Wechat web devTools not found, please specify cliPath option')\n }\n if (isWindows && endWith(cliPath, '.exe')) {\n throw new Error('cliPath is not correct, it\\'s usually named as \\'cli\\' or \\'cli.bat\\'')\n }\n if (!projectPath) {\n throw new Error('projectPath is not provided')\n }\n if (isRelative(projectPath)) {\n projectPath = path.resolve(projectPath)\n }\n const projectExists = await import('node:fs/promises').then(fs => fs.access(projectPath).then(() => true).catch(() => false))\n if (!projectExists) {\n throw new Error(`Project path ${projectPath} doesn't exist`)\n }\n if (!isEmpty(projectConfig)) {\n await this.extendProjectConfig(projectConfig, projectPath)\n }\n let processError: unknown = null\n let exited = false\n args = [\n ...args,\n 'auto',\n '--project',\n projectPath,\n '--auto-port',\n toStr(port),\n ]\n if (account) {\n args.push('--auto-account', account)\n }\n else if (ticket) {\n args.push('--ticket', ticket)\n }\n if (trustProject) {\n args.push('--trust-project')\n }\n try {\n const child = spawn(cliPath, args, {\n stdio: 'ignore',\n cwd: cwd || undefined,\n })\n child.on('error', (error) => {\n processError = error\n })\n child.on('exit', () => {\n setTimeout(() => {\n exited = true\n }, 15000)\n })\n child.unref()\n }\n catch (error) {\n processError = error\n }\n let miniProgram: MiniProgram | null = null\n await waitUntil(async () => {\n try {\n if (processError || exited) {\n return true\n }\n miniProgram = await this.connectTool({\n wsEndpoint: `ws://127.0.0.1:${port}`,\n })\n return true\n }\n catch {\n return false\n }\n }, timeout, 1000)\n if (!miniProgram) {\n if (processError) {\n throw new Error('Failed to launch wechat web devTools, please make sure cliPath is correctly specified')\n }\n if (exited) {\n throw new Error('Failed to launch wechat web devTools, please make sure http port is open')\n }\n throw new Error('Failed connecting to devtools websocket endpoint')\n }\n const resolvedMiniProgram = miniProgram as MiniProgram\n await resolvedMiniProgram.checkVersion()\n await sleep(5000)\n return resolvedMiniProgram\n }\n\n async connect(options: IConnectOptions) {\n const miniProgram = await this.connectTool(options)\n await miniProgram.checkVersion()\n return miniProgram\n }\n\n private async extendProjectConfig(projectConfig: any, projectPath: string) {\n const projectConfigPath = path.resolve(projectPath, 'project.config.json')\n const fs = await import('node:fs/promises')\n const raw = await fs.readFile(projectConfigPath, 'utf8')\n const current = JSON.parse(raw)\n extendDeep(current, projectConfig)\n await fs.writeFile(projectConfigPath, JSON.stringify(current, null, 2), 'utf8')\n }\n\n private async connectTool(options: IConnectOptions) {\n try {\n const connection = await Connection.create(options.wsEndpoint)\n return new MiniProgram(connection)\n }\n catch {\n throw new Error(`Failed connecting to ${options.wsEndpoint}, check if target project window is opened with automation enabled`)\n }\n }\n\n private async resolveCliPath() {\n const fs = await import('node:fs/promises')\n const cliPath = isWindows\n ? 'C:/Program Files (x86)/Tencent/微信web开发者工具/cli.bat'\n : '/Applications/wechatwebdevtools.app/Contents/MacOS/cli'\n try {\n await fs.access(cliPath)\n return cliPath\n }\n catch {\n return ''\n }\n }\n}\n","/**\n * @file 小程序自动化入口封装。\n */\nimport type { IConnectOptions, ILaunchOptions } from './Launcher'\nimport Element, { ContextElement, CustomElement, InputElement, MovableViewElement, ScrollViewElement, SliderElement, SwiperElement, SwitchElement } from './Element'\nimport Launcher from './Launcher'\n/** Automator 的实现。 */\nexport default class Automator {\n Element = Element\n CustomElement = CustomElement\n InputElement = InputElement\n ScrollViewElement = ScrollViewElement\n SwiperElement = SwiperElement\n MovableViewElement = MovableViewElement\n SwitchElement = SwitchElement\n SliderElement = SliderElement\n ContextElement = ContextElement\n private launcher = new Launcher()\n async connect(options: IConnectOptions) {\n return await this.launcher.connect(options)\n }\n\n async launch(options: ILaunchOptions) {\n return await this.launcher.launch(options)\n }\n}\n","/**\n * @file miniprogram-automator 对外导出入口。\n */\nimport Automator from './Automator'\nimport Connection from './Connection'\nimport Element, { ContextElement, CustomElement, InputElement, MovableViewElement, ScrollViewElement, SliderElement, SwiperElement, SwitchElement, TextareaElement } from './Element'\nimport Launcher from './Launcher'\nimport MiniProgram from './MiniProgram'\nimport Native from './Native'\nimport Page from './Page'\nimport Transport from './Transport'\n\nexport { Automator, Connection, ContextElement, CustomElement, Element, InputElement, Launcher, MiniProgram, MovableViewElement, Native, Page, ScrollViewElement, SliderElement, SwiperElement, SwitchElement, TextareaElement, Transport }\nexport * from './Launcher'\nexport * from './util'\n"],"mappings":"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C1B;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAG;EAAI;EAAG;CACtB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAI;EAAI;EAAG;CACZ;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAI;EAAI;EAAG;CACZ;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAG;CACZ;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAI;EAAK;EAAI;CAC3B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAG;EAAK;EAAI;CAC1B;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAI;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAI;CACd;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAI;EAAK;EAAI;CAC3B;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;EAAG;CACvB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAG;EAAK;EAAK;EAAI;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;CACxB;EAAC;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;CAC3B;EAAC;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;CACvB;EAAC;EAAI;E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"}