@veaba/qrcode-js 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,259 @@
1
+ # @veaba/qrcode-js
2
+
3
+ 浏览器兼容的 QRCode 库 - 纯 JavaScript 实现。
4
+
5
+ ## 简介
6
+
7
+ 这是一个浏览器友好的 QRCode 生成库,不依赖 Node.js 特有的 API,可直接在浏览器中使用。
8
+
9
+ 与 `@veaba/qrcode-wasm` 提供**完全一致的 API**,方便在两个包之间无缝切换。
10
+
11
+ ## 安装
12
+
13
+ ```bash
14
+ npm install @veaba/qrcode-js
15
+ # 或
16
+ pnpm add @veaba/qrcode-js
17
+ # 或
18
+ yarn add @veaba/qrcode-js
19
+ ```
20
+
21
+ ## 特性
22
+
23
+ - 🌐 **浏览器优先** - 纯 JavaScript,无 Node.js 依赖
24
+ - 🚀 **高性能** - 优化的 QRCode 生成算法
25
+ - 💾 **可选缓存** - LRU 缓存支持,重复文本性能提升 10 倍+
26
+ - 🎨 **丰富样式** - 支持 10+ 种个性样式
27
+ - 📦 **批量生成** - 支持批量异步生成
28
+ - 🖼️ **SVG 输出** - 生成矢量图形,清晰锐利
29
+ - 🔧 **TypeScript 支持** - 包含类型定义文件
30
+ - 🔄 **API 统一** - 与 `@veaba/qrcode-wasm` 完全一致的 API
31
+
32
+ ## 使用方法
33
+
34
+ ### 基础用法
35
+
36
+ ```javascript
37
+ import { QRCodeCore, QRErrorCorrectLevel } from '@veaba/qrcode-js';
38
+
39
+ // 创建 QRCode 实例
40
+ const qr = new QRCodeCore('Hello World', QRErrorCorrectLevel.H);
41
+
42
+ // 获取 SVG
43
+ const svg = qr.toSVG(256);
44
+
45
+ // 插入到页面
46
+ document.getElementById('qrcode').innerHTML = svg;
47
+ ```
48
+
49
+ ### 使用缓存(推荐)
50
+
51
+ 对于重复文本,使用缓存版本可大幅提升性能:
52
+
53
+ ```javascript
54
+ import {
55
+ generateRoundedQRCodeCached,
56
+ clearQRCodeCache,
57
+ getCacheStats
58
+ } from '@veaba/qrcode-js';
59
+
60
+ // 第一次生成会缓存
61
+ const svg1 = generateRoundedQRCodeCached('https://example.com', 256, 8);
62
+
63
+ // 第二次生成直接从缓存读取,速度提升 10 倍+
64
+ const svg2 = generateRoundedQRCodeCached('https://example.com', 256, 8);
65
+
66
+ // 查看缓存状态
67
+ console.log(getCacheStats()); // { size: 1, maxSize: 100, keys: [...] }
68
+
69
+ // 清空缓存
70
+ clearQRCodeCache();
71
+ ```
72
+
73
+ ### 不使用缓存(纯计算)
74
+
75
+ ```javascript
76
+ import { generateRoundedQRCode } from '@veaba/qrcode-js';
77
+
78
+ // 每次都会重新计算
79
+ const svg = generateRoundedQRCode('https://example.com', 256, 8);
80
+ ```
81
+
82
+ ### 样式化二维码
83
+
84
+ ```javascript
85
+ import {
86
+ generateWechatStyleQRCode,
87
+ generateDouyinStyleQRCode,
88
+ generateCyberpunkStyleQRCode
89
+ } from '@veaba/qrcode-js';
90
+
91
+ // 微信风格
92
+ const wechatQR = generateWechatStyleQRCode('https://weixin.qq.com', 256);
93
+
94
+ // 抖音风格
95
+ const douyinQR = generateDouyinStyleQRCode('https://douyin.com', 256);
96
+
97
+ // 赛博朋克风格
98
+ const cyberQR = generateCyberpunkStyleQRCode('https://example.com', 256);
99
+ ```
100
+
101
+ ### 批量生成
102
+
103
+ ```javascript
104
+ import { generateBatchQRCodes, generateBatchQRCodesCached } from '@veaba/qrcode-js';
105
+
106
+ const texts = [
107
+ 'https://example.com/1',
108
+ 'https://example.com/2',
109
+ // ... 更多
110
+ ];
111
+
112
+ // 非缓存版本
113
+ const svgs = generateBatchQRCodes(texts, { size: 256 });
114
+
115
+ // 缓存版本
116
+ const svgsCached = generateBatchQRCodesCached(texts, { size: 256 });
117
+ ```
118
+
119
+ ### 异步生成
120
+
121
+ ```javascript
122
+ import { generateQRCodeAsync, generateBatchAsync } from '@veaba/qrcode-js';
123
+
124
+ // 单个异步生成
125
+ const result = await generateQRCodeAsync('https://example.com', {
126
+ size: 256,
127
+ cache: true // 启用缓存
128
+ });
129
+ console.log(result.svg);
130
+
131
+ // 批量异步生成
132
+ const results = await generateBatchAsync(texts, {
133
+ size: 256,
134
+ cache: true
135
+ });
136
+ ```
137
+
138
+ ## API
139
+
140
+ ### QRCodeCore 类
141
+
142
+ #### 构造函数
143
+
144
+ ```javascript
145
+ new QRCodeCore(text: string, correctLevel?: QRErrorCorrectLevel)
146
+ ```
147
+
148
+ #### 方法
149
+
150
+ | 方法 | 返回值 | 说明 |
151
+ |------|--------|------|
152
+ | `toSVG(size?: number)` | `string` | 生成 SVG 字符串 |
153
+ | `toStyledSVG(options?: StyledSVGOptions)` | `string` | 生成带样式的 SVG |
154
+ | `isDark(row: number, col: number)` | `boolean` | 判断指定位置是否为深色 |
155
+ | `getModuleCount()` | `number` | 获取模块数量 |
156
+
157
+ ### 缓存管理
158
+
159
+ | 函数 | 说明 |
160
+ |------|------|
161
+ | `getCachedQRCode(text, correctLevel)` | 获取缓存的 QRCode |
162
+ | `clearQRCodeCache()` | 清空缓存 |
163
+ | `getCacheStats()` | 获取缓存统计信息 |
164
+ | `configureCache(options)` | 配置缓存选项 |
165
+
166
+ ### 样式生成函数
167
+
168
+ 所有样式函数都有缓存和非缓存两个版本:
169
+
170
+ | 非缓存版本 | 缓存版本 | 说明 |
171
+ |-----------|---------|------|
172
+ | `generateRoundedQRCode` | `generateRoundedQRCodeCached` | 圆角二维码 |
173
+ | `generateQRCodeWithLogoArea` | `generateQRCodeWithLogoAreaCached` | 带 Logo 区域 |
174
+ | `generateGradientQRCode` | `generateGradientQRCodeCached` | 渐变二维码 |
175
+ | `generateWechatStyleQRCode` | `generateWechatStyleQRCodeCached` | 微信风格 |
176
+ | `generateDouyinStyleQRCode` | `generateDouyinStyleQRCodeCached` | 抖音风格 |
177
+ | `generateAlipayStyleQRCode` | `generateAlipayStyleQRCodeCached` | 支付宝风格 |
178
+ | `generateXiaohongshuStyleQRCode` | `generateXiaohongshuStyleQRCodeCached` | 小红书风格 |
179
+ | `generateCyberpunkStyleQRCode` | `generateCyberpunkStyleQRCodeCached` | 赛博朋克风格 |
180
+ | `generateRetroStyleQRCode` | `generateRetroStyleQRCodeCached` | 复古风格 |
181
+ | `generateMinimalStyleQRCode` | `generateMinimalStyleQRCodeCached` | 极简风格 |
182
+
183
+ ### 批量/异步函数
184
+
185
+ | 函数 | 说明 |
186
+ |------|------|
187
+ | `generateBatchQRCodes(texts, options?)` | 批量生成 |
188
+ | `generateBatchQRCodesCached(texts, options?)` | 批量生成(缓存) |
189
+ | `generateQRCodeAsync(text, options?)` | 异步生成 |
190
+ | `generateBatchAsync(texts, options?)` | 批量异步生成 |
191
+
192
+ ### 错误纠正级别
193
+
194
+ ```javascript
195
+ const QRErrorCorrectLevel = {
196
+ L: 1, // 低 (~7%)
197
+ M: 0, // 中 (~15%)
198
+ Q: 3, // 较高 (~25%)
199
+ H: 2 // 高 (~30%)
200
+ };
201
+ ```
202
+
203
+ ## 与 @veaba/qrcode-wasm 的对比
204
+
205
+ | 特性 | @veaba/qrcode-js | @veaba/qrcode-wasm |
206
+ |------|------------------|-------------------|
207
+ | 性能 | 快 | 更快 |
208
+ | 包大小 | ~15KB | ~45KB |
209
+ | 初始化 | 即时 | 需要异步初始化 |
210
+ | 兼容性 | IE11+ | 现代浏览器 |
211
+ | API | 统一 ✅ | 统一 ✅ |
212
+
213
+ 选择 `@veaba/qrcode-js`:
214
+ - ✅ 需要支持 IE11 等旧浏览器
215
+ - ✅ 对包大小敏感
216
+ - ✅ 不想处理 WASM 的异步初始化
217
+ - ✅ 生成频率不高,性能不是瓶颈
218
+
219
+ 选择 `@veaba/qrcode-wasm`:
220
+ - ✅ 追求极致性能
221
+ - ✅ 高频批量生成
222
+ - ✅ 现代浏览器环境
223
+
224
+ ## 性能对比
225
+
226
+ | 场景 | 非缓存 | 缓存 | 提升 |
227
+ |------|--------|------|------|
228
+ | 单条生成 | ~35,000 ops/s | ~150,000 ops/s | **4.3x** |
229
+ | 批量 100 条 | ~3,500 ops/s | ~15,000 ops/s | **4.3x** |
230
+ | 重复文本 | ~35,000 ops/s | ~500,000+ ops/s | **14x+** |
231
+
232
+ *测试环境:Chrome 120, Intel i7-1165G7*
233
+
234
+ ## 开发
235
+
236
+ ```bash
237
+ # 安装依赖
238
+ npm install
239
+
240
+ # 开发模式
241
+ npm run dev
242
+
243
+ # 构建
244
+ npm run build
245
+
246
+ # 监听模式
247
+ npm run watch
248
+ ```
249
+
250
+ ## 相关包
251
+
252
+ - `@veaba/qrcode-wasm` - Rust WASM 版本(性能最佳,API 一致)
253
+ - `@veaba/qrcode-node` - Node.js 版本
254
+ - `@veaba/qrcode-bun` - Bun 运行时版本
255
+ - `@veaba/qrcode-shared` - 共享核心库
256
+
257
+ ## License
258
+
259
+ MIT
@@ -0,0 +1,2 @@
1
+ import { BitBuffer, PATTERN_POSITION_TABLE, Polynomial, QRCode, QRCodeCore, QRCodeCore as qrcode_shared_default, QRCodeLimitLength, QRErrorCorrectLevel, QRMath, QRMode, RS_BLOCK_TABLE, VERSION, clearQRCodeCache, configureCache, generateAlipayStyleQRCode, generateAlipayStyleQRCodeCached, generateBatchAsyncAdvanced as generateBatchAsync, generateBatchQRCodes, generateBatchQRCodesCached, generateCyberpunkStyleQRCode, generateCyberpunkStyleQRCodeCached, generateDouyinStyleQRCode, generateDouyinStyleQRCodeCached, generateGradientQRCode, generateGradientQRCodeCached, generateMinimalStyleQRCode, generateMinimalStyleQRCodeCached, generateQRCodeAsyncAdvanced as generateQRCodeAsync, generateQRCodeWithLogoArea, generateQRCodeWithLogoAreaCached, generateRetroStyleQRCode, generateRetroStyleQRCodeCached, generateRoundedQRCode, generateRoundedQRCodeCached, generateWechatStyleQRCode, generateWechatStyleQRCodeCached, generateXiaohongshuStyleQRCode, generateXiaohongshuStyleQRCodeCached, generate_alipay_style_qrcode, generate_cyberpunk_style_qrcode, generate_douyin_style_qrcode, generate_gradient_qrcode, generate_minimal_style_qrcode, generate_qrcode_with_logo_area, generate_retro_style_qrcode, generate_rounded_qrcode, generate_wechat_style_qrcode, generate_xiaohongshu_style_qrcode, getCacheStats, getCachedQRCode, getErrorCorrectPolynomial, getRSBlocks, getTypeNumber, getVersionInfo } from "@veaba/qrcode-shared";
2
+ export { BitBuffer, PATTERN_POSITION_TABLE, Polynomial, QRCode, QRCodeCore, QRCodeLimitLength, QRErrorCorrectLevel, QRMath, QRMode, RS_BLOCK_TABLE, VERSION, clearQRCodeCache, configureCache, qrcode_shared_default as default, generateAlipayStyleQRCode, generateAlipayStyleQRCodeCached, generateBatchAsync, generateBatchQRCodes, generateBatchQRCodesCached, generateCyberpunkStyleQRCode, generateCyberpunkStyleQRCodeCached, generateDouyinStyleQRCode, generateDouyinStyleQRCodeCached, generateGradientQRCode, generateGradientQRCodeCached, generateMinimalStyleQRCode, generateMinimalStyleQRCodeCached, generateQRCodeAsync, generateQRCodeWithLogoArea, generateQRCodeWithLogoAreaCached, generateRetroStyleQRCode, generateRetroStyleQRCodeCached, generateRoundedQRCode, generateRoundedQRCodeCached, generateWechatStyleQRCode, generateWechatStyleQRCodeCached, generateXiaohongshuStyleQRCode, generateXiaohongshuStyleQRCodeCached, generate_alipay_style_qrcode, generate_cyberpunk_style_qrcode, generate_douyin_style_qrcode, generate_gradient_qrcode, generate_minimal_style_qrcode, generate_qrcode_with_logo_area, generate_retro_style_qrcode, generate_rounded_qrcode, generate_wechat_style_qrcode, generate_xiaohongshu_style_qrcode, getCacheStats, getCachedQRCode, getErrorCorrectPolynomial, getRSBlocks, getTypeNumber, getVersionInfo };
@@ -0,0 +1,2 @@
1
+ var QRCodeJS=function(exports){"use strict";Object.defineProperty(exports,`__esModule`,{value:!0});var t;(function(e){e[e.L=1]=`L`,e[e.M=0]=`M`,e[e.Q=3]=`Q`,e[e.H=2]=`H`})(t||={});var n=class{static EXP_TABLE=new Uint8Array(256);static LOG_TABLE=new Uint8Array(256);static{for(let e=0;e<8;e++)this.EXP_TABLE[e]=1<<e;for(let e=8;e<256;e++)this.EXP_TABLE[e]=this.EXP_TABLE[e-4]^this.EXP_TABLE[e-5]^this.EXP_TABLE[e-6]^this.EXP_TABLE[e-8];for(let e=0;e<255;e++)this.LOG_TABLE[this.EXP_TABLE[e]]=e}static glog(e){if(e<1)throw Error(`glog(${e})`);return this.LOG_TABLE[e]}static gexp(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return this.EXP_TABLE[e]}},r=class e{coeffs;constructor(e){let t=0,n=Array.isArray(e)?e:Array.from(e);for(;t<n.length-1&&n[t]===0;)t++;this.coeffs=new Uint8Array(n.slice(t))}get length(){return this.coeffs.length}get(e){return this.coeffs[e]}multiply(t){let r=new Uint8Array(this.length+t.length-1);for(let e=0;e<this.length;e++)for(let i=0;i<t.length;i++)r[e+i]^=n.gexp(n.glog(this.get(e))+n.glog(t.get(i)));return new e(r)}mod(t){if(this.length-t.length<0)return this;let r=n.glog(this.get(0))-n.glog(t.get(0)),i=new Uint8Array(this.coeffs);for(let e=0;e<t.length;e++)i[e]^=n.gexp(n.glog(t.get(e))+r);return new e(i).mod(t)}};let i=new Map;function a(e){if(i.has(e))return i.get(e);let t=new r([1]);for(let i=0;i<e;i++)t=t.multiply(new r([1,n.gexp(i)]));return i.set(e,t),t}let o={MODE_8BIT_BYTE:4};var s;(function(e){e[e.L=1]=`L`,e[e.M=0]=`M`,e[e.Q=3]=`Q`,e[e.H=2]=`H`})(s||={});let c=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,28,50,72,98],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],u=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];function d(e,t){let n={1:0,0:1,3:2,2:3},r=(e-1)*4+n[t],i=u[r]||u[0],a=[],o=Math.floor(i.length/3);for(let e=0;e<o;e++){let t=i[e*3],n=i[e*3+1],r=i[e*3+2];for(let e=0;e<t;e++)a.push({totalCount:n,dataCount:r})}return a}function f(e,t){let n={1:0,0:1,3:2,2:3};for(let r=1;r<=40;r++){let i=l[r-1][n[t]];if(i>=e+2)return r}throw Error(`Text too long`)}var p=class{buffer=[];length=0;put(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)}putBit(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},m=class{text;correctLevel;typeNumber;moduleCount;modules;constructor(e,t=s.H){this.text=e,this.correctLevel=t;let n=new TextEncoder().encode(e).length;this.typeNumber=f(n,t),this.moduleCount=this.typeNumber*4+17,this.modules=new Uint8Array(this.moduleCount*this.moduleCount),this.make()}_idx(e,t){return e*this.moduleCount+t}isDark(e,t){return this.modules[this._idx(e,t)]===2}setDark(e,t,n){this.modules[this._idx(e,t)]=n?2:1}getModuleCount(){return this.moduleCount}make(){this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(),this.typeNumber>=7&&this.setupTypeNumber(),this.mapData()}setupPositionProbePattern(e,t){for(let n=-1;n<8;n++){let r=e+n;if(!(r<0||r>=this.moduleCount))for(let e=-1;e<8;e++){let i=t+e;if(i<0||i>=this.moduleCount)continue;let a=n>=0&&n<7&&e>=0&&e<7;if(!a)this.setDark(r,i,!1);else{let t=n===0||n===6||e===0||e===6||n>=2&&n<=4&&e>=2&&e<=4;this.setDark(r,i,t)}}}}setupPositionAdjustPattern(){let e=c[this.typeNumber-1];for(let t=0;t<e.length;t++)for(let n=0;n<e.length;n++){let r=e[t],i=e[n];if(this.modules[this._idx(r,i)]===0)for(let e=-2;e<=2;e++)for(let t=-2;t<=2;t++)this.setDark(r+e,i+t,e===-2||e===2||t===-2||t===2||e===0&&t===0)}}setupTimingPattern(){for(let e=8;e<this.moduleCount-8;e++)this.modules[this._idx(e,6)]===0&&this.setDark(e,6,e%2==0);for(let e=8;e<this.moduleCount-8;e++)this.modules[this._idx(6,e)]===0&&this.setDark(6,e,e%2==0)}setupTypeInfo(){let e=1335,t=21522,n=0,r=this.correctLevel<<3|n,i=r<<10;for(;this.getBCHDigit(i)-this.getBCHDigit(e)>=0;)i^=e<<this.getBCHDigit(i)-this.getBCHDigit(e);r=(r<<10|i)^t;for(let e=0;e<15;e++){let t=r>>e&1,n=t===1;e<6?this.setDark(e,8,n):e<8?this.setDark(e+1,8,n):this.setDark(this.moduleCount-15+e,8,n)}for(let e=0;e<15;e++){let t=r>>e&1,n=t===1;e<8?this.setDark(8,this.moduleCount-e-1,n):e<9?this.setDark(8,15-e-1+1,n):this.setDark(8,15-e-1,n)}this.setDark(this.moduleCount-8,8,!0)}getBCHDigit(e){let t=0;for(;e!==0;)t++,e>>=1;return t}setupTypeNumber(){}mapData(){let e=this.createData(),t=-1,n=this.moduleCount-1,r=7,i=0;for(let a=this.moduleCount-1;a>0;a-=2)for(a===6&&a--;;){for(let t=0;t<2;t++)if(this.modules[this._idx(n,a-t)]===0){let o=!1;i<e.length&&(o=(e[i]>>>r&1)==1),(n+a-t)%2==0&&(o=!o),this.setDark(n,a-t,o),r--,r===-1&&(i++,r=7)}if(n+=t,n<0||this.moduleCount<=n){n-=t,t=-t;break}}}getLengthInBits(){return this.typeNumber>=1&&this.typeNumber<10?8:16}createData(){let e=d(this.typeNumber,this.correctLevel),t=new p;t.put(o.MODE_8BIT_BYTE,4);let n=new TextEncoder().encode(this.text);t.put(n.length,this.getLengthInBits());for(let e of n)t.put(e,8);let i=0;for(let t of e)i+=t.dataCount;for(t.length+4<=i*8&&t.put(0,4);t.length%8!=0;)t.putBit(!1);for(;t.length<i*8&&(t.put(236,8),!(t.length>=i*8));)t.put(17,8);let s=t.buffer.slice(0,Math.ceil(t.length/8)),c=0,l=Math.max(...e.map(e=>e.dataCount)),u=Math.max(...e.map(e=>e.totalCount-e.dataCount)),f=[],m=[];for(let t of e){let e=t.dataCount,n=t.totalCount-e;f.push(s.slice(c,c+e)),c+=e;let i=a(n),o=new r([...f[f.length-1],...Array(n).fill(0)]),l=o.mod(i),u=[];for(let e=0;e<n;e++){let t=e+l.length-n;u.push(t>=0?l.get(t):0)}m.push(u)}let h=[];for(let t=0;t<l;t++)for(let n=0;n<e.length;n++)t<f[n].length&&h.push(f[n][t]);for(let t=0;t<u;t++)for(let n=0;n<e.length;n++)t<m[n].length&&h.push(m[n][t]);return h}toSVG(e=256){let t=Math.floor(e/this.moduleCount),n=t*this.moduleCount,r=``;for(let e=0;e<this.moduleCount;e++)for(let n=0;n<this.moduleCount;n++)if(this.isDark(e,n)){let i=n*t,a=e*t;r+=`M${i},${a}h${t}v${t}h-${t}z`}return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${n} ${n}" width="${n}" height="${n}"><rect width="${n}" height="${n}" fill="white"/><path d="${r}" fill="black"/></svg>`}toStyledSVG(e={}){let{size:t=256,colorDark:n=`#000000`,colorLight:r=`#ffffff`,borderRadius:i=0,gradient:a=null,quietZone:o=0,logoRegions:s=[]}=e,c=this.moduleCount,l=c+o*2,u=Math.floor(t/l),d=u*l,f=(t-d)/2,p=a?`qrGradient_${Math.random().toString(36).substr(2,9)}`:``,m=``;a&&(m=`<defs><linearGradient id="${p}" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:${a.color1}"/><stop offset="100%" style="stop-color:${a.color2}"/></linearGradient></defs>`);let h=Math.min(i,t/8),g=a?`url(#${p})`:n,_=Math.min(i,Math.floor(u/4)),v=``;for(let e=0;e<c;e++)for(let t=0;t<c;t++){let n=!1;for(let r of s)if(e>=r.row&&e<r.row+r.size&&t>=r.col&&t<r.col+r.size){n=!0;break}if(!n&&this.isDark(e,t)){let n=(t+o)*u+f,r=(e+o)*u+f;if(_>0){let e=_;v+=`M${n+e},${r}h${u-2*e}q${e},0 ${e},${e}v${u-2*e}q0,${e} -${e},${e}h-${u-2*e}q-${e},0 -${e},-${e}v-${u-2*e}q0,-${e} ${e},-${e}z`}else v+=`M${n},${r}h${u}v${u}h-${u}z`}}let y=``;for(let e of s){let t=(e.col+o)*u+f,n=(e.row+o)*u+f,i=e.size*u;y+=`<rect x="${t}" y="${n}" width="${i}" height="${i}" fill="${r}" stroke="#e0e0e0" stroke-width="2"/>`}return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" width="${t}" height="${t}">${m}<rect width="${t}" height="${t}" fill="${r}" rx="${h}" ry="${h}"/><path d="${v}" fill="${g}"/>${y}</svg>`}};function h(e,t=256,n=8){let r=new m(e,s.H);return r.toStyledSVG({size:t,borderRadius:n,quietZone:2})}function g(e,t=256,n=.2){let r=new m(e,s.H),i=r.getModuleCount(),a=Math.floor(i*n),o=Math.floor((i-a)/2);return r.toStyledSVG({size:t,quietZone:2,logoRegions:[{row:o,col:o,size:a}]})}function _(e,t=256,n=`#667eea`,r=`#764ba2`){let i=new m(e,s.H);return i.toStyledSVG({size:t,gradient:{color1:n,color2:r},quietZone:2})}function v(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#07C160`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function y(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#00F2EA`,colorLight:`#000000`,gradient:{color1:`#00F2EA`,color2:`#FF0050`},borderRadius:6,quietZone:2})}function b(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#1677FF`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function x(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#FF2442`,colorLight:`#ffffff`,borderRadius:12,quietZone:2})}function S(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#FF00FF`,colorLight:`#0a0a0a`,gradient:{color1:`#FF00FF`,color2:`#00FFFF`},borderRadius:2,quietZone:2})}function C(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#8B4513`,colorLight:`#F5F5DC`,borderRadius:0,quietZone:2})}function w(e,t=256){let n=new m(e,s.H);return n.toStyledSVG({size:t,colorDark:`#333333`,colorLight:`#fafafa`,borderRadius:16,quietZone:2})}function T(e,t={}){return e.map(e=>{let n=new m(e,t.correctLevel||s.H);return n.toSVG(t.size||256)})}var E=class{cache=new Map;maxSize;enabled;constructor(e={}){this.maxSize=e.maxSize||100,this.enabled=e.enabled!==!1}get(e){if(!this.enabled)return;let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.enabled){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){let e=this.cache.keys().next().value;e!==void 0&&this.cache.delete(e)}this.cache.set(e,t)}}clear(){this.cache.clear()}get size(){return this.cache.size}get keys(){return Array.from(this.cache.keys())}};let D=new E;function O(e,t){return`${e}:${t}`}function k(e,t=s.H){let n=O(e,t),r=D.get(n);return r||(r=new m(e,t),D.set(n,r)),r}function ee(){D.clear()}function A(){return{size:D.size,maxSize:100,keys:D.keys}}function j(e){Object.assign(D,new E(e))}function M(e,t=256,n=8){let r=k(e,s.H);return r.toStyledSVG({size:t,borderRadius:n,quietZone:2})}function N(e,t=256,n=.2){let r=k(e,s.H),i=r.getModuleCount(),a=Math.floor(i*n),o=Math.floor((i-a)/2);return r.toStyledSVG({size:t,quietZone:2,logoRegions:[{row:o,col:o,size:a}]})}function P(e,t=256,n=`#667eea`,r=`#764ba2`){let i=k(e,s.H);return i.toStyledSVG({size:t,gradient:{color1:n,color2:r},quietZone:2})}function F(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#07C160`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function I(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#00F2EA`,colorLight:`#000000`,gradient:{color1:`#00F2EA`,color2:`#FF0050`},borderRadius:6,quietZone:2})}function L(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#1677FF`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function R(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#FF2442`,colorLight:`#ffffff`,borderRadius:12,quietZone:2})}function z(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#FF00FF`,colorLight:`#0a0a0a`,gradient:{color1:`#FF00FF`,color2:`#00FFFF`},borderRadius:2,quietZone:2})}function B(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#8B4513`,colorLight:`#F5F5DC`,borderRadius:0,quietZone:2})}function V(e,t=256){let n=k(e,s.H);return n.toStyledSVG({size:t,colorDark:`#333333`,colorLight:`#fafafa`,borderRadius:16,quietZone:2})}function H(e,t={}){return e.map(e=>{let n=k(e,t.correctLevel||s.H);return t.styled?n.toStyledSVG({size:t.size||256,...t.style}):n.toSVG(t.size||256)})}function U(e,t={}){return new Promise((n,r)=>{if(typeof WorkerGlobalScope<`u`&&typeof self<`u`&&self instanceof self.constructor)try{let r=t.cache!==!1,i=r?k(e,t.correctLevel||s.H):new m(e,t.correctLevel||s.H),a=t.styled?i.toStyledSVG({size:t.size||256,...t.style}):i.toSVG(t.size||256);n({text:e,svg:a,moduleCount:i.getModuleCount()})}catch(e){r(e)}else setTimeout(()=>{try{let r=t.cache!==!1,i=r?k(e,t.correctLevel||s.H):new m(e,t.correctLevel||s.H),a=t.styled?i.toStyledSVG({size:t.size||256,...t.style}):i.toSVG(t.size||256);n({text:e,svg:a,moduleCount:i.getModuleCount()})}catch(e){r(e)}},0)})}function W(e,t={}){return Promise.all(e.map(e=>U(e,t)))}let G=h,K=g,q=_,J=v,Y=y,X=b,Z=x,Q=S,te=C,ne=w;m.prototype.get_module_count=m.prototype.getModuleCount,m.prototype.get_svg=m.prototype.toSVG,m.prototype.get_styled_svg=m.prototype.toStyledSVG;let $=`1.0.0`;function re(){return JSON.stringify({version:$,name:`@veaba/qrcode-shared`,features:[`basic_qrcode`,`styled_svg`,`batch_generation`,`async_generation`,`lru_cache`]})}return exports.BitBuffer=p,exports.PATTERN_POSITION_TABLE=c,exports.Polynomial=r,exports.QRCode=m,exports.QRCodeCore=m,exports.QRCodeLimitLength=l,Object.defineProperty(exports,`QRErrorCorrectLevel`,{enumerable:!0,get:function(){return s}}),exports.QRMath=n,exports.QRMode=o,exports.RS_BLOCK_TABLE=u,exports.VERSION=$,exports.clearQRCodeCache=ee,exports.configureCache=j,exports.default=m,exports.generateAlipayStyleQRCode=b,exports.generateAlipayStyleQRCodeCached=L,exports.generateBatchAsync=W,exports.generateBatchQRCodes=T,exports.generateBatchQRCodesCached=H,exports.generateCyberpunkStyleQRCode=S,exports.generateCyberpunkStyleQRCodeCached=z,exports.generateDouyinStyleQRCode=y,exports.generateDouyinStyleQRCodeCached=I,exports.generateGradientQRCode=_,exports.generateGradientQRCodeCached=P,exports.generateMinimalStyleQRCode=w,exports.generateMinimalStyleQRCodeCached=V,exports.generateQRCodeAsync=U,exports.generateQRCodeWithLogoArea=g,exports.generateQRCodeWithLogoAreaCached=N,exports.generateRetroStyleQRCode=C,exports.generateRetroStyleQRCodeCached=B,exports.generateRoundedQRCode=h,exports.generateRoundedQRCodeCached=M,exports.generateWechatStyleQRCode=v,exports.generateWechatStyleQRCodeCached=F,exports.generateXiaohongshuStyleQRCode=x,exports.generateXiaohongshuStyleQRCodeCached=R,exports.generate_alipay_style_qrcode=X,exports.generate_cyberpunk_style_qrcode=Q,exports.generate_douyin_style_qrcode=Y,exports.generate_gradient_qrcode=q,exports.generate_minimal_style_qrcode=ne,exports.generate_qrcode_with_logo_area=K,exports.generate_retro_style_qrcode=te,exports.generate_rounded_qrcode=G,exports.generate_wechat_style_qrcode=J,exports.generate_xiaohongshu_style_qrcode=Z,exports.getCacheStats=A,exports.getCachedQRCode=k,exports.getErrorCorrectPolynomial=a,exports.getRSBlocks=d,exports.getTypeNumber=f,exports.getVersionInfo=re,exports}({});
2
+ //# sourceMappingURL=index.iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.iife.js","names":["QRErrorCorrectLevel","QRErrorCorrectLevel"],"sources":["../../qrcode-shared/dist/types.js","../../qrcode-shared/dist/index.js"],"sourcesContent":["/**\n * 统一的 QRCode 类型定义\n * 确保后端三个子包(qrcode-node, qrcode-rust, qrcode-bun)API 一致\n */\n// ============ 基础常量 ============\nexport var QRErrorCorrectLevel;\n(function (QRErrorCorrectLevel) {\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"L\"] = 1] = \"L\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"M\"] = 0] = \"M\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"H\"] = 2] = \"H\"; // 高 (~30%)\n})(QRErrorCorrectLevel || (QRErrorCorrectLevel = {}));\nexport const QRMode = {\n MODE_8BIT_BYTE: 4\n};\n","/**\n * Shared Core Library for QRCode Generation\n *\n * This package contains the shared core functionality used by:\n * - qrcode-js-cache\n * - qrcode-js-perf\n * - qrcode-node\n */\n// 导出统一类型定义\nexport * from './types.js';\n// ============ Galois Field 数学运算 ============\nexport class QRMath {\n static EXP_TABLE = new Uint8Array(256);\n static LOG_TABLE = new Uint8Array(256);\n static {\n // 初始化 Galois Field 表\n for (let i = 0; i < 8; i++)\n this.EXP_TABLE[i] = 1 << i;\n for (let i = 8; i < 256; i++) {\n this.EXP_TABLE[i] = this.EXP_TABLE[i - 4] ^ this.EXP_TABLE[i - 5] ^\n this.EXP_TABLE[i - 6] ^ this.EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i++)\n this.LOG_TABLE[this.EXP_TABLE[i]] = i;\n }\n static glog(n) {\n if (n < 1)\n throw new Error(`glog(${n})`);\n return this.LOG_TABLE[n];\n }\n static gexp(n) {\n while (n < 0)\n n += 255;\n while (n >= 256)\n n -= 255;\n return this.EXP_TABLE[n];\n }\n}\n// ============ 多项式类 ============\nexport class Polynomial {\n coeffs;\n constructor(coeffs) {\n // 去除前导零\n let start = 0;\n const arr = Array.isArray(coeffs) ? coeffs : Array.from(coeffs);\n while (start < arr.length - 1 && arr[start] === 0)\n start++;\n this.coeffs = new Uint8Array(arr.slice(start));\n }\n get length() { return this.coeffs.length; }\n get(i) { return this.coeffs[i]; }\n multiply(other) {\n const result = new Uint8Array(this.length + other.length - 1);\n for (let i = 0; i < this.length; i++) {\n for (let j = 0; j < other.length; j++) {\n result[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(other.get(j)));\n }\n }\n return new Polynomial(result);\n }\n mod(e) {\n if (this.length - e.length < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));\n const num = new Uint8Array(this.coeffs);\n for (let i = 0; i < e.length; i++) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);\n }\n return new Polynomial(num).mod(e);\n }\n}\n// ============ 错误纠正多项式缓存 ============\nconst ecPolyCache = new Map();\nexport function getErrorCorrectPolynomial(ecCount) {\n if (ecPolyCache.has(ecCount)) {\n return ecPolyCache.get(ecCount);\n }\n let poly = new Polynomial([1]);\n for (let i = 0; i < ecCount; i++) {\n poly = poly.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n ecPolyCache.set(ecCount, poly);\n return poly;\n}\n// ============ 常量 ============\nexport const QRMode = { MODE_8BIT_BYTE: 4 };\nexport var QRErrorCorrectLevel;\n(function (QRErrorCorrectLevel) {\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"L\"] = 1] = \"L\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"M\"] = 0] = \"M\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(QRErrorCorrectLevel || (QRErrorCorrectLevel = {}));\n// 位置调整图案位置表\nexport const 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, 28, 50, 72, 98],\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// 容量表\nexport const QRCodeLimitLength = [\n [17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24],\n [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58],\n [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98],\n [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155],\n [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220],\n [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310],\n [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403],\n [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511],\n [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625],\n [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742],\n [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898],\n [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051],\n [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219],\n [2953, 2331, 1663, 1273]\n];\n// RS 块表\nexport const RS_BLOCK_TABLE = [\n [1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9],\n [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16],\n [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13],\n [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9],\n [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12],\n [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15],\n [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14],\n [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15],\n [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13],\n [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16],\n [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13],\n [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15],\n [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12],\n [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13],\n [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12],\n [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16],\n [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15],\n [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15],\n [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14],\n [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16],\n [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17],\n [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13],\n [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16],\n [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17],\n [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16],\n [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17],\n [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16],\n [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16],\n [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16],\n [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16],\n [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16],\n [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16],\n [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16],\n [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17],\n [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16],\n [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16],\n [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16],\n [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16],\n [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16],\n [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]\n];\n// ============ 获取 RS Blocks ============\nexport function getRSBlocks(typeNumber, errorCorrectLevel) {\n const levelMap = { 1: 0, 0: 1, 3: 2, 2: 3 };\n const index = (typeNumber - 1) * 4 + levelMap[errorCorrectLevel];\n const rsBlock = RS_BLOCK_TABLE[index] || RS_BLOCK_TABLE[0];\n const list = [];\n const length = Math.floor(rsBlock.length / 3);\n for (let i = 0; i < length; i++) {\n const count = rsBlock[i * 3];\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({ totalCount, dataCount });\n }\n }\n return list;\n}\n// ============ 获取 Type Number ============\nexport function getTypeNumber(textLength, errorCorrectLevel) {\n const levelMap = { 1: 0, 0: 1, 3: 2, 2: 3 };\n for (let typeNumber = 1; typeNumber <= 40; typeNumber++) {\n const limit = QRCodeLimitLength[typeNumber - 1][levelMap[errorCorrectLevel]];\n if (limit >= textLength + 2) {\n return typeNumber;\n }\n }\n throw new Error('Text too long');\n}\n// ============ BitBuffer 类 ============\nexport class BitBuffer {\n buffer = [];\n length = 0;\n put(num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1);\n }\n }\n putBit(bit) {\n const bufIndex = Math.floor(this.length / 8);\n if (this.buffer.length <= bufIndex)\n this.buffer.push(0);\n if (bit)\n this.buffer[bufIndex] |= 0x80 >>> (this.length % 8);\n this.length++;\n }\n}\n// ============ QRCode 核心类 ============\nexport class QRCodeCore {\n text;\n correctLevel;\n typeNumber;\n moduleCount;\n modules;\n constructor(text, correctLevel = QRErrorCorrectLevel.H) {\n this.text = text;\n this.correctLevel = correctLevel;\n // 计算文本长度(UTF-8 字节数)\n const textLength = new TextEncoder().encode(text).length;\n this.typeNumber = getTypeNumber(textLength, correctLevel);\n this.moduleCount = this.typeNumber * 4 + 17;\n // 使用 Uint8Array 代替二维数组,内存更高效\n // 0 = 未设置, 1 = 白色, 2 = 黑色\n this.modules = new Uint8Array(this.moduleCount * this.moduleCount);\n this.make();\n }\n // 一维索引访问\n _idx(row, col) {\n return row * this.moduleCount + col;\n }\n isDark(row, col) {\n return this.modules[this._idx(row, col)] === 2;\n }\n setDark(row, col, dark) {\n this.modules[this._idx(row, col)] = dark ? 2 : 1;\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\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();\n if (this.typeNumber >= 7)\n this.setupTypeNumber();\n this.mapData();\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r < 8; r++) {\n const absR = row + r;\n if (absR < 0 || absR >= this.moduleCount)\n continue;\n for (let c = -1; c < 8; c++) {\n const absC = col + c;\n if (absC < 0 || absC >= this.moduleCount)\n continue;\n const inPattern = (r >= 0 && r < 7 && c >= 0 && c < 7);\n if (!inPattern) {\n this.setDark(absR, absC, false);\n }\n else {\n const isDark = (r === 0 || r === 6 || c === 0 || c === 6) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4);\n this.setDark(absR, absC, isDark);\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = PATTERN_POSITION_TABLE[this.typeNumber - 1];\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[this._idx(row, col)] !== 0)\n continue;\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n this.setDark(row + r, col + c, r === -2 || r === 2 || c === -2 || c === 2 || (r === 0 && c === 0));\n }\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r++) {\n if (this.modules[this._idx(r, 6)] === 0) {\n this.setDark(r, 6, r % 2 === 0);\n }\n }\n for (let c = 8; c < this.moduleCount - 8; c++) {\n if (this.modules[this._idx(6, c)] === 0) {\n this.setDark(6, c, c % 2 === 0);\n }\n }\n }\n setupTypeInfo() {\n const g15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const g15Mask = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n const maskPattern = 0;\n let data = (this.correctLevel << 3) | maskPattern;\n let d = data << 10;\n while (this.getBCHDigit(d) - this.getBCHDigit(g15) >= 0) {\n d ^= g15 << (this.getBCHDigit(d) - this.getBCHDigit(g15));\n }\n data = ((data << 10) | d) ^ g15Mask;\n for (let i = 0; i < 15; i++) {\n const bit = (data >> i) & 1;\n const dark = bit === 1;\n if (i < 6) {\n this.setDark(i, 8, dark);\n }\n else if (i < 8) {\n this.setDark(i + 1, 8, dark);\n }\n else {\n this.setDark(this.moduleCount - 15 + i, 8, dark);\n }\n }\n for (let i = 0; i < 15; i++) {\n const bit = (data >> i) & 1;\n const dark = bit === 1;\n if (i < 8) {\n this.setDark(8, this.moduleCount - i - 1, dark);\n }\n else if (i < 9) {\n this.setDark(8, 15 - i - 1 + 1, dark);\n }\n else {\n this.setDark(8, 15 - i - 1, dark);\n }\n }\n this.setDark(this.moduleCount - 8, 8, true);\n }\n getBCHDigit(data) {\n let digit = 0;\n while (data !== 0) {\n digit++;\n data >>= 1;\n }\n return digit;\n }\n setupTypeNumber() {\n // 简化版本\n }\n mapData() {\n const data = this.createData();\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)\n col--;\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (this.modules[this._idx(row, col - c)] === 0) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) === 1;\n }\n if ((row + col - c) % 2 === 0)\n dark = !dark;\n this.setDark(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 getLengthInBits() {\n if (this.typeNumber >= 1 && this.typeNumber < 10)\n return 8;\n return 16;\n }\n createData() {\n const rsBlocks = getRSBlocks(this.typeNumber, this.correctLevel);\n const buffer = new BitBuffer();\n buffer.put(QRMode.MODE_8BIT_BYTE, 4);\n const textBytes = new TextEncoder().encode(this.text);\n buffer.put(textBytes.length, this.getLengthInBits());\n for (const byte of textBytes)\n buffer.put(byte, 8);\n let totalDataCount = 0;\n for (const block of rsBlocks)\n totalDataCount += block.dataCount;\n if (buffer.length + 4 <= totalDataCount * 8)\n buffer.put(0, 4);\n while (buffer.length % 8 !== 0)\n buffer.putBit(false);\n while (buffer.length < totalDataCount * 8) {\n buffer.put(0xEC, 8);\n if (buffer.length >= totalDataCount * 8)\n break;\n buffer.put(0x11, 8);\n }\n const data = buffer.buffer.slice(0, Math.ceil(buffer.length / 8));\n let offset = 0;\n const maxDcCount = Math.max(...rsBlocks.map(b => b.dataCount));\n const maxEcCount = Math.max(...rsBlocks.map(b => b.totalCount - b.dataCount));\n const dcdata = [];\n const ecdata = [];\n for (const block of rsBlocks) {\n const dcCount = block.dataCount;\n const ecCount = block.totalCount - dcCount;\n dcdata.push(data.slice(offset, offset + dcCount));\n offset += dcCount;\n const rsPoly = getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial([...dcdata[dcdata.length - 1], ...new Array(ecCount).fill(0)]);\n const modPoly = rawPoly.mod(rsPoly);\n const ec = [];\n for (let i = 0; i < ecCount; i++) {\n const modIndex = i + modPoly.length - ecCount;\n ec.push(modIndex >= 0 ? modPoly.get(modIndex) : 0);\n }\n ecdata.push(ec);\n }\n const result = [];\n for (let i = 0; i < maxDcCount; i++) {\n for (let r = 0; r < rsBlocks.length; r++) {\n if (i < dcdata[r].length)\n result.push(dcdata[r][i]);\n }\n }\n for (let i = 0; i < maxEcCount; i++) {\n for (let r = 0; r < rsBlocks.length; r++) {\n if (i < ecdata[r].length)\n result.push(ecdata[r][i]);\n }\n }\n return result;\n }\n // ============ SVG 生成(使用 Path 合并优化)============\n toSVG(size = 256) {\n const cellSize = Math.floor(size / this.moduleCount);\n const actualSize = cellSize * this.moduleCount;\n let path = '';\n for (let row = 0; row < this.moduleCount; row++) {\n for (let col = 0; col < this.moduleCount; col++) {\n if (this.isDark(row, col)) {\n const x = col * cellSize;\n const y = row * cellSize;\n path += `M${x},${y}h${cellSize}v${cellSize}h-${cellSize}z`;\n }\n }\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${actualSize} ${actualSize}\" width=\"${actualSize}\" height=\"${actualSize}\"><rect width=\"${actualSize}\" height=\"${actualSize}\" fill=\"white\"/><path d=\"${path}\" fill=\"black\"/></svg>`;\n }\n // ============ 样式化 SVG(Path 合并)============\n toStyledSVG(options = {}) {\n const { size = 256, colorDark = '#000000', colorLight = '#ffffff', borderRadius = 0, gradient = null, quietZone = 0, logoRegions = [] } = options;\n const count = this.moduleCount;\n const totalCount = count + quietZone * 2;\n const cellSize = Math.floor(size / totalCount);\n const actualSize = cellSize * totalCount;\n const offset = (size - actualSize) / 2;\n // 生成唯一的渐变 ID,避免多个 SVG 之间的冲突\n const gradientId = gradient ? `qrGradient_${Math.random().toString(36).substr(2, 9)}` : '';\n let defs = '';\n if (gradient) {\n defs = `<defs><linearGradient id=\"${gradientId}\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" style=\"stop-color:${gradient.color1}\"/><stop offset=\"100%\" style=\"stop-color:${gradient.color2}\"/></linearGradient></defs>`;\n }\n const bgRadius = Math.min(borderRadius, size / 8);\n const fillColor = gradient ? `url(#${gradientId})` : colorDark;\n const radius = Math.min(borderRadius, Math.floor(cellSize / 4));\n let path = '';\n for (let row = 0; row < count; row++) {\n for (let col = 0; col < count; col++) {\n let inLogo = false;\n for (const region of logoRegions) {\n if (row >= region.row && row < region.row + region.size &&\n col >= region.col && col < region.col + region.size) {\n inLogo = true;\n break;\n }\n }\n if (inLogo)\n continue;\n if (this.isDark(row, col)) {\n const x = (col + quietZone) * cellSize + offset;\n const y = (row + quietZone) * cellSize + offset;\n if (radius > 0) {\n const r = radius;\n path += `M${x + r},${y}h${cellSize - 2 * r}q${r},0 ${r},${r}v${cellSize - 2 * r}q0,${r} -${r},${r}h-${cellSize - 2 * r}q-${r},0 -${r},-${r}v-${cellSize - 2 * r}q0,-${r} ${r},-${r}z`;\n }\n else {\n path += `M${x},${y}h${cellSize}v${cellSize}h-${cellSize}z`;\n }\n }\n }\n }\n let logoPath = '';\n for (const region of logoRegions) {\n const x = (region.col + quietZone) * cellSize + offset;\n const y = (region.row + quietZone) * cellSize + offset;\n const s = region.size * cellSize;\n logoPath += `<rect x=\"${x}\" y=\"${y}\" width=\"${s}\" height=\"${s}\" fill=\"${colorLight}\" stroke=\"#e0e0e0\" stroke-width=\"2\"/>`;\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${size} ${size}\" width=\"${size}\" height=\"${size}\">${defs}<rect width=\"${size}\" height=\"${size}\" fill=\"${colorLight}\" rx=\"${bgRadius}\" ry=\"${bgRadius}\"/><path d=\"${path}\" fill=\"${fillColor}\"/>${logoPath}</svg>`;\n }\n}\n// ============ 样式化 QRCode 生成函数 ============\nexport function generateRoundedQRCode(text, size = 256, radius = 8) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n borderRadius: radius,\n quietZone: 2\n });\n}\nexport function generateQRCodeWithLogoArea(text, size = 256, logoRatio = 0.2) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n const count = qr.getModuleCount();\n const logoCells = Math.floor(count * logoRatio);\n const logoStart = Math.floor((count - logoCells) / 2);\n return qr.toStyledSVG({\n size,\n quietZone: 2,\n logoRegions: [{ row: logoStart, col: logoStart, size: logoCells }]\n });\n}\nexport function generateGradientQRCode(text, size = 256, color1 = '#667eea', color2 = '#764ba2') {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n gradient: { color1, color2 },\n quietZone: 2\n });\n}\nexport function generateWechatStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#07C160',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateDouyinStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#00F2EA',\n colorLight: '#000000',\n gradient: { color1: '#00F2EA', color2: '#FF0050' },\n borderRadius: 6,\n quietZone: 2\n });\n}\nexport function generateAlipayStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#1677FF',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateXiaohongshuStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF2442',\n colorLight: '#ffffff',\n borderRadius: 12,\n quietZone: 2\n });\n}\nexport function generateCyberpunkStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF00FF',\n colorLight: '#0a0a0a',\n gradient: { color1: '#FF00FF', color2: '#00FFFF' },\n borderRadius: 2,\n quietZone: 2\n });\n}\nexport function generateRetroStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#8B4513',\n colorLight: '#F5F5DC',\n borderRadius: 0,\n quietZone: 2\n });\n}\nexport function generateMinimalStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#333333',\n colorLight: '#fafafa',\n borderRadius: 16,\n quietZone: 2\n });\n}\n// ============ 批量生成 ============\nexport function generateBatchQRCodes(texts, options = {}) {\n return texts.map(text => {\n const qr = new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n return qr.toSVG(options.size || 256);\n });\n}\n// ============ 异步生成(简单版本)============\nexport function generateQRCodeAsync(text, options = {}) {\n return new Promise((resolve) => {\n const qr = new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n resolve(qr.toSVG(options.size || 256));\n });\n}\nexport function generateBatchAsync(texts, options = {}) {\n return Promise.all(texts.map(text => generateQRCodeAsync(text, options)));\n}\nclass LRUCache {\n cache = new Map();\n maxSize;\n enabled;\n constructor(options = {}) {\n this.maxSize = options.maxSize || 100;\n this.enabled = options.enabled !== false;\n }\n get(key) {\n if (!this.enabled)\n return undefined;\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n set(key, value) {\n if (!this.enabled)\n return;\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n clear() {\n this.cache.clear();\n }\n get size() {\n return this.cache.size;\n }\n get keys() {\n return Array.from(this.cache.keys());\n }\n}\n// QRCode 缓存\nconst qrCodeCache = new LRUCache();\nfunction getCacheKey(text, correctLevel) {\n return `${text}:${correctLevel}`;\n}\n/**\n * 获取缓存的 QRCode(如果不存在则创建并缓存)\n * @param text - QRCode 文本\n * @param correctLevel - 错误纠正级别\n * @returns QRCodeCore 实例\n */\nexport function getCachedQRCode(text, correctLevel = QRErrorCorrectLevel.H) {\n const key = getCacheKey(text, correctLevel);\n let qr = qrCodeCache.get(key);\n if (!qr) {\n qr = new QRCodeCore(text, correctLevel);\n qrCodeCache.set(key, qr);\n }\n return qr;\n}\n/**\n * 清除 QRCode 缓存\n */\nexport function clearQRCodeCache() {\n qrCodeCache.clear();\n}\n/**\n * 获取缓存统计信息\n */\nexport function getCacheStats() {\n return {\n size: qrCodeCache.size,\n maxSize: 100,\n keys: qrCodeCache.keys\n };\n}\n/**\n * 配置缓存选项\n */\nexport function configureCache(options) {\n // 重新创建缓存以应用新选项\n Object.assign(qrCodeCache, new LRUCache(options));\n}\n// ============ 带缓存的样式生成函数 ============\nexport function generateRoundedQRCodeCached(text, size = 256, radius = 8) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n borderRadius: radius,\n quietZone: 2\n });\n}\nexport function generateQRCodeWithLogoAreaCached(text, size = 256, logoRatio = 0.2) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n const count = qr.getModuleCount();\n const logoCells = Math.floor(count * logoRatio);\n const logoStart = Math.floor((count - logoCells) / 2);\n return qr.toStyledSVG({\n size,\n quietZone: 2,\n logoRegions: [{ row: logoStart, col: logoStart, size: logoCells }]\n });\n}\nexport function generateGradientQRCodeCached(text, size = 256, color1 = '#667eea', color2 = '#764ba2') {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n gradient: { color1, color2 },\n quietZone: 2\n });\n}\nexport function generateWechatStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#07C160',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateDouyinStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#00F2EA',\n colorLight: '#000000',\n gradient: { color1: '#00F2EA', color2: '#FF0050' },\n borderRadius: 6,\n quietZone: 2\n });\n}\nexport function generateAlipayStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#1677FF',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateXiaohongshuStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF2442',\n colorLight: '#ffffff',\n borderRadius: 12,\n quietZone: 2\n });\n}\nexport function generateCyberpunkStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF00FF',\n colorLight: '#0a0a0a',\n gradient: { color1: '#FF00FF', color2: '#00FFFF' },\n borderRadius: 2,\n quietZone: 2\n });\n}\nexport function generateRetroStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#8B4513',\n colorLight: '#F5F5DC',\n borderRadius: 0,\n quietZone: 2\n });\n}\nexport function generateMinimalStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#333333',\n colorLight: '#fafafa',\n borderRadius: 16,\n quietZone: 2\n });\n}\n// ============ 批量生成(带缓存) ============\nexport function generateBatchQRCodesCached(texts, options = {}) {\n return texts.map(text => {\n const qr = getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H);\n return options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n });\n}\nexport function generateQRCodeAsyncAdvanced(text, options = {}) {\n return new Promise((resolve, reject) => {\n // 检查是否在 Worker 中\n // @ts-ignore - WorkerGlobalScope is not in standard lib\n if (typeof WorkerGlobalScope !== 'undefined' && typeof self !== 'undefined' && self instanceof self.constructor) {\n try {\n const useCache = options.cache !== false;\n const qr = useCache\n ? getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H)\n : new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n const svg = options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n resolve({ text, svg, moduleCount: qr.getModuleCount() });\n }\n catch (e) {\n reject(e);\n }\n }\n else {\n // 在主线程中,使用 setTimeout 避免阻塞\n // @ts-ignore - using setTimeout for async operation\n setTimeout(() => {\n try {\n const useCache = options.cache !== false;\n const qr = useCache\n ? getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H)\n : new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n const svg = options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n resolve({ text, svg, moduleCount: qr.getModuleCount() });\n }\n catch (e) {\n reject(e);\n }\n }, 0);\n }\n });\n}\nexport function generateBatchAsyncAdvanced(texts, options = {}) {\n return Promise.all(texts.map(text => generateQRCodeAsyncAdvanced(text, options)));\n}\n// ============ 向后兼容的 snake_case 别名 ============\nexport const generate_rounded_qrcode = generateRoundedQRCode;\nexport const generate_qrcode_with_logo_area = generateQRCodeWithLogoArea;\nexport const generate_gradient_qrcode = generateGradientQRCode;\nexport const generate_wechat_style_qrcode = generateWechatStyleQRCode;\nexport const generate_douyin_style_qrcode = generateDouyinStyleQRCode;\nexport const generate_alipay_style_qrcode = generateAlipayStyleQRCode;\nexport const generate_xiaohongshu_style_qrcode = generateXiaohongshuStyleQRCode;\nexport const generate_cyberpunk_style_qrcode = generateCyberpunkStyleQRCode;\nexport const generate_retro_style_qrcode = generateRetroStyleQRCode;\nexport const generate_minimal_style_qrcode = generateMinimalStyleQRCode;\n// QRCodeCore 的 snake_case 方法别名\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_module_count = QRCodeCore.prototype.getModuleCount;\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_svg = QRCodeCore.prototype.toSVG;\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_styled_svg = QRCodeCore.prototype.toStyledSVG;\n// ============ QRCode 别名 ============\nexport { QRCodeCore as QRCode };\n// ============ 版本信息 ============\nexport const VERSION = '1.0.0';\nexport function getVersionInfo() {\n return JSON.stringify({\n version: VERSION,\n name: '@veaba/qrcode-shared',\n features: [\n 'basic_qrcode',\n 'styled_svg',\n 'batch_generation',\n 'async_generation',\n 'lru_cache'\n ]\n });\n}\n// 默认导出\nexport default QRCodeCore;\n"],"mappings":"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,EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvG,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvG,CAAC,GAAI,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAC5F,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,E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"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ var e;(function(e){e[e.L=1]=`L`,e[e.M=0]=`M`,e[e.Q=3]=`Q`,e[e.H=2]=`H`})(e||={});var t=class{static EXP_TABLE=new Uint8Array(256);static LOG_TABLE=new Uint8Array(256);static{for(let e=0;e<8;e++)this.EXP_TABLE[e]=1<<e;for(let e=8;e<256;e++)this.EXP_TABLE[e]=this.EXP_TABLE[e-4]^this.EXP_TABLE[e-5]^this.EXP_TABLE[e-6]^this.EXP_TABLE[e-8];for(let e=0;e<255;e++)this.LOG_TABLE[this.EXP_TABLE[e]]=e}static glog(e){if(e<1)throw Error(`glog(${e})`);return this.LOG_TABLE[e]}static gexp(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return this.EXP_TABLE[e]}},n=class e{coeffs;constructor(e){let t=0,n=Array.isArray(e)?e:Array.from(e);for(;t<n.length-1&&n[t]===0;)t++;this.coeffs=new Uint8Array(n.slice(t))}get length(){return this.coeffs.length}get(e){return this.coeffs[e]}multiply(n){let r=new Uint8Array(this.length+n.length-1);for(let e=0;e<this.length;e++)for(let i=0;i<n.length;i++)r[e+i]^=t.gexp(t.glog(this.get(e))+t.glog(n.get(i)));return new e(r)}mod(n){if(this.length-n.length<0)return this;let r=t.glog(this.get(0))-t.glog(n.get(0)),i=new Uint8Array(this.coeffs);for(let e=0;e<n.length;e++)i[e]^=t.gexp(t.glog(n.get(e))+r);return new e(i).mod(n)}};const r=new Map;function i(e){if(r.has(e))return r.get(e);let i=new n([1]);for(let r=0;r<e;r++)i=i.multiply(new n([1,t.gexp(r)]));return r.set(e,i),i}const a={MODE_8BIT_BYTE:4};var o;(function(e){e[e.L=1]=`L`,e[e.M=0]=`M`,e[e.Q=3]=`Q`,e[e.H=2]=`H`})(o||={});const s=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,28,50,72,98],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],c=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],l=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];function u(e,t){let n={1:0,0:1,3:2,2:3},r=(e-1)*4+n[t],i=l[r]||l[0],a=[],o=Math.floor(i.length/3);for(let e=0;e<o;e++){let t=i[e*3],n=i[e*3+1],r=i[e*3+2];for(let e=0;e<t;e++)a.push({totalCount:n,dataCount:r})}return a}function d(e,t){let n={1:0,0:1,3:2,2:3};for(let r=1;r<=40;r++){let i=c[r-1][n[t]];if(i>=e+2)return r}throw Error(`Text too long`)}var f=class{buffer=[];length=0;put(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)}putBit(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},p=class{text;correctLevel;typeNumber;moduleCount;modules;constructor(e,t=o.H){this.text=e,this.correctLevel=t;let n=new TextEncoder().encode(e).length;this.typeNumber=d(n,t),this.moduleCount=this.typeNumber*4+17,this.modules=new Uint8Array(this.moduleCount*this.moduleCount),this.make()}_idx(e,t){return e*this.moduleCount+t}isDark(e,t){return this.modules[this._idx(e,t)]===2}setDark(e,t,n){this.modules[this._idx(e,t)]=n?2:1}getModuleCount(){return this.moduleCount}make(){this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(),this.typeNumber>=7&&this.setupTypeNumber(),this.mapData()}setupPositionProbePattern(e,t){for(let n=-1;n<8;n++){let r=e+n;if(!(r<0||r>=this.moduleCount))for(let e=-1;e<8;e++){let i=t+e;if(i<0||i>=this.moduleCount)continue;let a=n>=0&&n<7&&e>=0&&e<7;if(!a)this.setDark(r,i,!1);else{let t=n===0||n===6||e===0||e===6||n>=2&&n<=4&&e>=2&&e<=4;this.setDark(r,i,t)}}}}setupPositionAdjustPattern(){let e=s[this.typeNumber-1];for(let t=0;t<e.length;t++)for(let n=0;n<e.length;n++){let r=e[t],i=e[n];if(this.modules[this._idx(r,i)]===0)for(let e=-2;e<=2;e++)for(let t=-2;t<=2;t++)this.setDark(r+e,i+t,e===-2||e===2||t===-2||t===2||e===0&&t===0)}}setupTimingPattern(){for(let e=8;e<this.moduleCount-8;e++)this.modules[this._idx(e,6)]===0&&this.setDark(e,6,e%2==0);for(let e=8;e<this.moduleCount-8;e++)this.modules[this._idx(6,e)]===0&&this.setDark(6,e,e%2==0)}setupTypeInfo(){let e=1335,t=21522,n=0,r=this.correctLevel<<3|n,i=r<<10;for(;this.getBCHDigit(i)-this.getBCHDigit(e)>=0;)i^=e<<this.getBCHDigit(i)-this.getBCHDigit(e);r=(r<<10|i)^t;for(let e=0;e<15;e++){let t=r>>e&1,n=t===1;e<6?this.setDark(e,8,n):e<8?this.setDark(e+1,8,n):this.setDark(this.moduleCount-15+e,8,n)}for(let e=0;e<15;e++){let t=r>>e&1,n=t===1;e<8?this.setDark(8,this.moduleCount-e-1,n):e<9?this.setDark(8,15-e-1+1,n):this.setDark(8,15-e-1,n)}this.setDark(this.moduleCount-8,8,!0)}getBCHDigit(e){let t=0;for(;e!==0;)t++,e>>=1;return t}setupTypeNumber(){}mapData(){let e=this.createData(),t=-1,n=this.moduleCount-1,r=7,i=0;for(let a=this.moduleCount-1;a>0;a-=2)for(a===6&&a--;;){for(let t=0;t<2;t++)if(this.modules[this._idx(n,a-t)]===0){let o=!1;i<e.length&&(o=(e[i]>>>r&1)==1),(n+a-t)%2==0&&(o=!o),this.setDark(n,a-t,o),r--,r===-1&&(i++,r=7)}if(n+=t,n<0||this.moduleCount<=n){n-=t,t=-t;break}}}getLengthInBits(){return this.typeNumber>=1&&this.typeNumber<10?8:16}createData(){let e=u(this.typeNumber,this.correctLevel),t=new f;t.put(a.MODE_8BIT_BYTE,4);let r=new TextEncoder().encode(this.text);t.put(r.length,this.getLengthInBits());for(let e of r)t.put(e,8);let o=0;for(let t of e)o+=t.dataCount;for(t.length+4<=o*8&&t.put(0,4);t.length%8!=0;)t.putBit(!1);for(;t.length<o*8&&(t.put(236,8),!(t.length>=o*8));)t.put(17,8);let s=t.buffer.slice(0,Math.ceil(t.length/8)),c=0,l=Math.max(...e.map(e=>e.dataCount)),d=Math.max(...e.map(e=>e.totalCount-e.dataCount)),p=[],m=[];for(let t of e){let e=t.dataCount,r=t.totalCount-e;p.push(s.slice(c,c+e)),c+=e;let a=i(r),o=new n([...p[p.length-1],...Array(r).fill(0)]),l=o.mod(a),u=[];for(let e=0;e<r;e++){let t=e+l.length-r;u.push(t>=0?l.get(t):0)}m.push(u)}let h=[];for(let t=0;t<l;t++)for(let n=0;n<e.length;n++)t<p[n].length&&h.push(p[n][t]);for(let t=0;t<d;t++)for(let n=0;n<e.length;n++)t<m[n].length&&h.push(m[n][t]);return h}toSVG(e=256){let t=Math.floor(e/this.moduleCount),n=t*this.moduleCount,r=``;for(let e=0;e<this.moduleCount;e++)for(let n=0;n<this.moduleCount;n++)if(this.isDark(e,n)){let i=n*t,a=e*t;r+=`M${i},${a}h${t}v${t}h-${t}z`}return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${n} ${n}" width="${n}" height="${n}"><rect width="${n}" height="${n}" fill="white"/><path d="${r}" fill="black"/></svg>`}toStyledSVG(e={}){let{size:t=256,colorDark:n=`#000000`,colorLight:r=`#ffffff`,borderRadius:i=0,gradient:a=null,quietZone:o=0,logoRegions:s=[]}=e,c=this.moduleCount,l=c+o*2,u=Math.floor(t/l),d=u*l,f=(t-d)/2,p=a?`qrGradient_${Math.random().toString(36).substr(2,9)}`:``,m=``;a&&(m=`<defs><linearGradient id="${p}" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:${a.color1}"/><stop offset="100%" style="stop-color:${a.color2}"/></linearGradient></defs>`);let h=Math.min(i,t/8),g=a?`url(#${p})`:n,_=Math.min(i,Math.floor(u/4)),v=``;for(let e=0;e<c;e++)for(let t=0;t<c;t++){let n=!1;for(let r of s)if(e>=r.row&&e<r.row+r.size&&t>=r.col&&t<r.col+r.size){n=!0;break}if(!n&&this.isDark(e,t)){let n=(t+o)*u+f,r=(e+o)*u+f;if(_>0){let e=_;v+=`M${n+e},${r}h${u-2*e}q${e},0 ${e},${e}v${u-2*e}q0,${e} -${e},${e}h-${u-2*e}q-${e},0 -${e},-${e}v-${u-2*e}q0,-${e} ${e},-${e}z`}else v+=`M${n},${r}h${u}v${u}h-${u}z`}}let y=``;for(let e of s){let t=(e.col+o)*u+f,n=(e.row+o)*u+f,i=e.size*u;y+=`<rect x="${t}" y="${n}" width="${i}" height="${i}" fill="${r}" stroke="#e0e0e0" stroke-width="2"/>`}return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" width="${t}" height="${t}">${m}<rect width="${t}" height="${t}" fill="${r}" rx="${h}" ry="${h}"/><path d="${v}" fill="${g}"/>${y}</svg>`}};function m(e,t=256,n=8){let r=new p(e,o.H);return r.toStyledSVG({size:t,borderRadius:n,quietZone:2})}function h(e,t=256,n=.2){let r=new p(e,o.H),i=r.getModuleCount(),a=Math.floor(i*n),s=Math.floor((i-a)/2);return r.toStyledSVG({size:t,quietZone:2,logoRegions:[{row:s,col:s,size:a}]})}function g(e,t=256,n=`#667eea`,r=`#764ba2`){let i=new p(e,o.H);return i.toStyledSVG({size:t,gradient:{color1:n,color2:r},quietZone:2})}function _(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#07C160`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function v(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#00F2EA`,colorLight:`#000000`,gradient:{color1:`#00F2EA`,color2:`#FF0050`},borderRadius:6,quietZone:2})}function y(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#1677FF`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function b(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#FF2442`,colorLight:`#ffffff`,borderRadius:12,quietZone:2})}function x(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#FF00FF`,colorLight:`#0a0a0a`,gradient:{color1:`#FF00FF`,color2:`#00FFFF`},borderRadius:2,quietZone:2})}function S(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#8B4513`,colorLight:`#F5F5DC`,borderRadius:0,quietZone:2})}function C(e,t=256){let n=new p(e,o.H);return n.toStyledSVG({size:t,colorDark:`#333333`,colorLight:`#fafafa`,borderRadius:16,quietZone:2})}function w(e,t={}){return e.map(e=>{let n=new p(e,t.correctLevel||o.H);return n.toSVG(t.size||256)})}var T=class{cache=new Map;maxSize;enabled;constructor(e={}){this.maxSize=e.maxSize||100,this.enabled=e.enabled!==!1}get(e){if(!this.enabled)return;let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.enabled){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){let e=this.cache.keys().next().value;e!==void 0&&this.cache.delete(e)}this.cache.set(e,t)}}clear(){this.cache.clear()}get size(){return this.cache.size}get keys(){return Array.from(this.cache.keys())}};const E=new T;function D(e,t){return`${e}:${t}`}function O(e,t=o.H){let n=D(e,t),r=E.get(n);return r||(r=new p(e,t),E.set(n,r)),r}function ee(){E.clear()}function k(){return{size:E.size,maxSize:100,keys:E.keys}}function A(e){Object.assign(E,new T(e))}function j(e,t=256,n=8){let r=O(e,o.H);return r.toStyledSVG({size:t,borderRadius:n,quietZone:2})}function M(e,t=256,n=.2){let r=O(e,o.H),i=r.getModuleCount(),a=Math.floor(i*n),s=Math.floor((i-a)/2);return r.toStyledSVG({size:t,quietZone:2,logoRegions:[{row:s,col:s,size:a}]})}function N(e,t=256,n=`#667eea`,r=`#764ba2`){let i=O(e,o.H);return i.toStyledSVG({size:t,gradient:{color1:n,color2:r},quietZone:2})}function P(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#07C160`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function F(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#00F2EA`,colorLight:`#000000`,gradient:{color1:`#00F2EA`,color2:`#FF0050`},borderRadius:6,quietZone:2})}function I(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#1677FF`,colorLight:`#ffffff`,borderRadius:4,quietZone:2})}function L(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#FF2442`,colorLight:`#ffffff`,borderRadius:12,quietZone:2})}function R(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#FF00FF`,colorLight:`#0a0a0a`,gradient:{color1:`#FF00FF`,color2:`#00FFFF`},borderRadius:2,quietZone:2})}function z(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#8B4513`,colorLight:`#F5F5DC`,borderRadius:0,quietZone:2})}function B(e,t=256){let n=O(e,o.H);return n.toStyledSVG({size:t,colorDark:`#333333`,colorLight:`#fafafa`,borderRadius:16,quietZone:2})}function V(e,t={}){return e.map(e=>{let n=O(e,t.correctLevel||o.H);return t.styled?n.toStyledSVG({size:t.size||256,...t.style}):n.toSVG(t.size||256)})}function H(e,t={}){return new Promise((n,r)=>{if(typeof WorkerGlobalScope<`u`&&typeof self<`u`&&self instanceof self.constructor)try{let r=t.cache!==!1,i=r?O(e,t.correctLevel||o.H):new p(e,t.correctLevel||o.H),a=t.styled?i.toStyledSVG({size:t.size||256,...t.style}):i.toSVG(t.size||256);n({text:e,svg:a,moduleCount:i.getModuleCount()})}catch(e){r(e)}else setTimeout(()=>{try{let r=t.cache!==!1,i=r?O(e,t.correctLevel||o.H):new p(e,t.correctLevel||o.H),a=t.styled?i.toStyledSVG({size:t.size||256,...t.style}):i.toSVG(t.size||256);n({text:e,svg:a,moduleCount:i.getModuleCount()})}catch(e){r(e)}},0)})}function U(e,t={}){return Promise.all(e.map(e=>H(e,t)))}const W=m,G=h,K=g,q=_,J=v,Y=y,X=b,Z=x,Q=S,te=C;p.prototype.get_module_count=p.prototype.getModuleCount,p.prototype.get_svg=p.prototype.toSVG,p.prototype.get_styled_svg=p.prototype.toStyledSVG;const $=`1.0.0`;function ne(){return JSON.stringify({version:$,name:`@veaba/qrcode-shared`,features:[`basic_qrcode`,`styled_svg`,`batch_generation`,`async_generation`,`lru_cache`]})}export{f as BitBuffer,s as PATTERN_POSITION_TABLE,n as Polynomial,p as QRCode,p as QRCodeCore,c as QRCodeLimitLength,o as QRErrorCorrectLevel,t as QRMath,a as QRMode,l as RS_BLOCK_TABLE,$ as VERSION,ee as clearQRCodeCache,A as configureCache,p as default,y as generateAlipayStyleQRCode,I as generateAlipayStyleQRCodeCached,U as generateBatchAsync,w as generateBatchQRCodes,V as generateBatchQRCodesCached,x as generateCyberpunkStyleQRCode,R as generateCyberpunkStyleQRCodeCached,v as generateDouyinStyleQRCode,F as generateDouyinStyleQRCodeCached,g as generateGradientQRCode,N as generateGradientQRCodeCached,C as generateMinimalStyleQRCode,B as generateMinimalStyleQRCodeCached,H as generateQRCodeAsync,h as generateQRCodeWithLogoArea,M as generateQRCodeWithLogoAreaCached,S as generateRetroStyleQRCode,z as generateRetroStyleQRCodeCached,m as generateRoundedQRCode,j as generateRoundedQRCodeCached,_ as generateWechatStyleQRCode,P as generateWechatStyleQRCodeCached,b as generateXiaohongshuStyleQRCode,L as generateXiaohongshuStyleQRCodeCached,Y as generate_alipay_style_qrcode,Z as generate_cyberpunk_style_qrcode,J as generate_douyin_style_qrcode,K as generate_gradient_qrcode,te as generate_minimal_style_qrcode,G as generate_qrcode_with_logo_area,Q as generate_retro_style_qrcode,W as generate_rounded_qrcode,q as generate_wechat_style_qrcode,X as generate_xiaohongshu_style_qrcode,k as getCacheStats,O as getCachedQRCode,i as getErrorCorrectPolynomial,u as getRSBlocks,d as getTypeNumber,ne as getVersionInfo};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["QRErrorCorrectLevel","QRErrorCorrectLevel"],"sources":["../../qrcode-shared/dist/types.js","../../qrcode-shared/dist/index.js"],"sourcesContent":["/**\n * 统一的 QRCode 类型定义\n * 确保后端三个子包(qrcode-node, qrcode-rust, qrcode-bun)API 一致\n */\n// ============ 基础常量 ============\nexport var QRErrorCorrectLevel;\n(function (QRErrorCorrectLevel) {\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"L\"] = 1] = \"L\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"M\"] = 0] = \"M\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"H\"] = 2] = \"H\"; // 高 (~30%)\n})(QRErrorCorrectLevel || (QRErrorCorrectLevel = {}));\nexport const QRMode = {\n MODE_8BIT_BYTE: 4\n};\n","/**\n * Shared Core Library for QRCode Generation\n *\n * This package contains the shared core functionality used by:\n * - qrcode-js-cache\n * - qrcode-js-perf\n * - qrcode-node\n */\n// 导出统一类型定义\nexport * from './types.js';\n// ============ Galois Field 数学运算 ============\nexport class QRMath {\n static EXP_TABLE = new Uint8Array(256);\n static LOG_TABLE = new Uint8Array(256);\n static {\n // 初始化 Galois Field 表\n for (let i = 0; i < 8; i++)\n this.EXP_TABLE[i] = 1 << i;\n for (let i = 8; i < 256; i++) {\n this.EXP_TABLE[i] = this.EXP_TABLE[i - 4] ^ this.EXP_TABLE[i - 5] ^\n this.EXP_TABLE[i - 6] ^ this.EXP_TABLE[i - 8];\n }\n for (let i = 0; i < 255; i++)\n this.LOG_TABLE[this.EXP_TABLE[i]] = i;\n }\n static glog(n) {\n if (n < 1)\n throw new Error(`glog(${n})`);\n return this.LOG_TABLE[n];\n }\n static gexp(n) {\n while (n < 0)\n n += 255;\n while (n >= 256)\n n -= 255;\n return this.EXP_TABLE[n];\n }\n}\n// ============ 多项式类 ============\nexport class Polynomial {\n coeffs;\n constructor(coeffs) {\n // 去除前导零\n let start = 0;\n const arr = Array.isArray(coeffs) ? coeffs : Array.from(coeffs);\n while (start < arr.length - 1 && arr[start] === 0)\n start++;\n this.coeffs = new Uint8Array(arr.slice(start));\n }\n get length() { return this.coeffs.length; }\n get(i) { return this.coeffs[i]; }\n multiply(other) {\n const result = new Uint8Array(this.length + other.length - 1);\n for (let i = 0; i < this.length; i++) {\n for (let j = 0; j < other.length; j++) {\n result[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(other.get(j)));\n }\n }\n return new Polynomial(result);\n }\n mod(e) {\n if (this.length - e.length < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));\n const num = new Uint8Array(this.coeffs);\n for (let i = 0; i < e.length; i++) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);\n }\n return new Polynomial(num).mod(e);\n }\n}\n// ============ 错误纠正多项式缓存 ============\nconst ecPolyCache = new Map();\nexport function getErrorCorrectPolynomial(ecCount) {\n if (ecPolyCache.has(ecCount)) {\n return ecPolyCache.get(ecCount);\n }\n let poly = new Polynomial([1]);\n for (let i = 0; i < ecCount; i++) {\n poly = poly.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n ecPolyCache.set(ecCount, poly);\n return poly;\n}\n// ============ 常量 ============\nexport const QRMode = { MODE_8BIT_BYTE: 4 };\nexport var QRErrorCorrectLevel;\n(function (QRErrorCorrectLevel) {\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"L\"] = 1] = \"L\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"M\"] = 0] = \"M\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n QRErrorCorrectLevel[QRErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(QRErrorCorrectLevel || (QRErrorCorrectLevel = {}));\n// 位置调整图案位置表\nexport const 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, 28, 50, 72, 98],\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// 容量表\nexport const QRCodeLimitLength = [\n [17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24],\n [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58],\n [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98],\n [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155],\n [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220],\n [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310],\n [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403],\n [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511],\n [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625],\n [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742],\n [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898],\n [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051],\n [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219],\n [2953, 2331, 1663, 1273]\n];\n// RS 块表\nexport const RS_BLOCK_TABLE = [\n [1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9],\n [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16],\n [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13],\n [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9],\n [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12],\n [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15],\n [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14],\n [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15],\n [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13],\n [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16],\n [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13],\n [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15],\n [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12],\n [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13],\n [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12],\n [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16],\n [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15],\n [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15],\n [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14],\n [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16],\n [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17],\n [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13],\n [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16],\n [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17],\n [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16],\n [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17],\n [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16],\n [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16],\n [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16],\n [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16],\n [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16],\n [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16],\n [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16],\n [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17],\n [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16],\n [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16],\n [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16],\n [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16],\n [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16],\n [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]\n];\n// ============ 获取 RS Blocks ============\nexport function getRSBlocks(typeNumber, errorCorrectLevel) {\n const levelMap = { 1: 0, 0: 1, 3: 2, 2: 3 };\n const index = (typeNumber - 1) * 4 + levelMap[errorCorrectLevel];\n const rsBlock = RS_BLOCK_TABLE[index] || RS_BLOCK_TABLE[0];\n const list = [];\n const length = Math.floor(rsBlock.length / 3);\n for (let i = 0; i < length; i++) {\n const count = rsBlock[i * 3];\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({ totalCount, dataCount });\n }\n }\n return list;\n}\n// ============ 获取 Type Number ============\nexport function getTypeNumber(textLength, errorCorrectLevel) {\n const levelMap = { 1: 0, 0: 1, 3: 2, 2: 3 };\n for (let typeNumber = 1; typeNumber <= 40; typeNumber++) {\n const limit = QRCodeLimitLength[typeNumber - 1][levelMap[errorCorrectLevel]];\n if (limit >= textLength + 2) {\n return typeNumber;\n }\n }\n throw new Error('Text too long');\n}\n// ============ BitBuffer 类 ============\nexport class BitBuffer {\n buffer = [];\n length = 0;\n put(num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1);\n }\n }\n putBit(bit) {\n const bufIndex = Math.floor(this.length / 8);\n if (this.buffer.length <= bufIndex)\n this.buffer.push(0);\n if (bit)\n this.buffer[bufIndex] |= 0x80 >>> (this.length % 8);\n this.length++;\n }\n}\n// ============ QRCode 核心类 ============\nexport class QRCodeCore {\n text;\n correctLevel;\n typeNumber;\n moduleCount;\n modules;\n constructor(text, correctLevel = QRErrorCorrectLevel.H) {\n this.text = text;\n this.correctLevel = correctLevel;\n // 计算文本长度(UTF-8 字节数)\n const textLength = new TextEncoder().encode(text).length;\n this.typeNumber = getTypeNumber(textLength, correctLevel);\n this.moduleCount = this.typeNumber * 4 + 17;\n // 使用 Uint8Array 代替二维数组,内存更高效\n // 0 = 未设置, 1 = 白色, 2 = 黑色\n this.modules = new Uint8Array(this.moduleCount * this.moduleCount);\n this.make();\n }\n // 一维索引访问\n _idx(row, col) {\n return row * this.moduleCount + col;\n }\n isDark(row, col) {\n return this.modules[this._idx(row, col)] === 2;\n }\n setDark(row, col, dark) {\n this.modules[this._idx(row, col)] = dark ? 2 : 1;\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\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();\n if (this.typeNumber >= 7)\n this.setupTypeNumber();\n this.mapData();\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r < 8; r++) {\n const absR = row + r;\n if (absR < 0 || absR >= this.moduleCount)\n continue;\n for (let c = -1; c < 8; c++) {\n const absC = col + c;\n if (absC < 0 || absC >= this.moduleCount)\n continue;\n const inPattern = (r >= 0 && r < 7 && c >= 0 && c < 7);\n if (!inPattern) {\n this.setDark(absR, absC, false);\n }\n else {\n const isDark = (r === 0 || r === 6 || c === 0 || c === 6) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4);\n this.setDark(absR, absC, isDark);\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = PATTERN_POSITION_TABLE[this.typeNumber - 1];\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[this._idx(row, col)] !== 0)\n continue;\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n this.setDark(row + r, col + c, r === -2 || r === 2 || c === -2 || c === 2 || (r === 0 && c === 0));\n }\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r++) {\n if (this.modules[this._idx(r, 6)] === 0) {\n this.setDark(r, 6, r % 2 === 0);\n }\n }\n for (let c = 8; c < this.moduleCount - 8; c++) {\n if (this.modules[this._idx(6, c)] === 0) {\n this.setDark(6, c, c % 2 === 0);\n }\n }\n }\n setupTypeInfo() {\n const g15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n const g15Mask = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n const maskPattern = 0;\n let data = (this.correctLevel << 3) | maskPattern;\n let d = data << 10;\n while (this.getBCHDigit(d) - this.getBCHDigit(g15) >= 0) {\n d ^= g15 << (this.getBCHDigit(d) - this.getBCHDigit(g15));\n }\n data = ((data << 10) | d) ^ g15Mask;\n for (let i = 0; i < 15; i++) {\n const bit = (data >> i) & 1;\n const dark = bit === 1;\n if (i < 6) {\n this.setDark(i, 8, dark);\n }\n else if (i < 8) {\n this.setDark(i + 1, 8, dark);\n }\n else {\n this.setDark(this.moduleCount - 15 + i, 8, dark);\n }\n }\n for (let i = 0; i < 15; i++) {\n const bit = (data >> i) & 1;\n const dark = bit === 1;\n if (i < 8) {\n this.setDark(8, this.moduleCount - i - 1, dark);\n }\n else if (i < 9) {\n this.setDark(8, 15 - i - 1 + 1, dark);\n }\n else {\n this.setDark(8, 15 - i - 1, dark);\n }\n }\n this.setDark(this.moduleCount - 8, 8, true);\n }\n getBCHDigit(data) {\n let digit = 0;\n while (data !== 0) {\n digit++;\n data >>= 1;\n }\n return digit;\n }\n setupTypeNumber() {\n // 简化版本\n }\n mapData() {\n const data = this.createData();\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)\n col--;\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (this.modules[this._idx(row, col - c)] === 0) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) === 1;\n }\n if ((row + col - c) % 2 === 0)\n dark = !dark;\n this.setDark(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 getLengthInBits() {\n if (this.typeNumber >= 1 && this.typeNumber < 10)\n return 8;\n return 16;\n }\n createData() {\n const rsBlocks = getRSBlocks(this.typeNumber, this.correctLevel);\n const buffer = new BitBuffer();\n buffer.put(QRMode.MODE_8BIT_BYTE, 4);\n const textBytes = new TextEncoder().encode(this.text);\n buffer.put(textBytes.length, this.getLengthInBits());\n for (const byte of textBytes)\n buffer.put(byte, 8);\n let totalDataCount = 0;\n for (const block of rsBlocks)\n totalDataCount += block.dataCount;\n if (buffer.length + 4 <= totalDataCount * 8)\n buffer.put(0, 4);\n while (buffer.length % 8 !== 0)\n buffer.putBit(false);\n while (buffer.length < totalDataCount * 8) {\n buffer.put(0xEC, 8);\n if (buffer.length >= totalDataCount * 8)\n break;\n buffer.put(0x11, 8);\n }\n const data = buffer.buffer.slice(0, Math.ceil(buffer.length / 8));\n let offset = 0;\n const maxDcCount = Math.max(...rsBlocks.map(b => b.dataCount));\n const maxEcCount = Math.max(...rsBlocks.map(b => b.totalCount - b.dataCount));\n const dcdata = [];\n const ecdata = [];\n for (const block of rsBlocks) {\n const dcCount = block.dataCount;\n const ecCount = block.totalCount - dcCount;\n dcdata.push(data.slice(offset, offset + dcCount));\n offset += dcCount;\n const rsPoly = getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial([...dcdata[dcdata.length - 1], ...new Array(ecCount).fill(0)]);\n const modPoly = rawPoly.mod(rsPoly);\n const ec = [];\n for (let i = 0; i < ecCount; i++) {\n const modIndex = i + modPoly.length - ecCount;\n ec.push(modIndex >= 0 ? modPoly.get(modIndex) : 0);\n }\n ecdata.push(ec);\n }\n const result = [];\n for (let i = 0; i < maxDcCount; i++) {\n for (let r = 0; r < rsBlocks.length; r++) {\n if (i < dcdata[r].length)\n result.push(dcdata[r][i]);\n }\n }\n for (let i = 0; i < maxEcCount; i++) {\n for (let r = 0; r < rsBlocks.length; r++) {\n if (i < ecdata[r].length)\n result.push(ecdata[r][i]);\n }\n }\n return result;\n }\n // ============ SVG 生成(使用 Path 合并优化)============\n toSVG(size = 256) {\n const cellSize = Math.floor(size / this.moduleCount);\n const actualSize = cellSize * this.moduleCount;\n let path = '';\n for (let row = 0; row < this.moduleCount; row++) {\n for (let col = 0; col < this.moduleCount; col++) {\n if (this.isDark(row, col)) {\n const x = col * cellSize;\n const y = row * cellSize;\n path += `M${x},${y}h${cellSize}v${cellSize}h-${cellSize}z`;\n }\n }\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${actualSize} ${actualSize}\" width=\"${actualSize}\" height=\"${actualSize}\"><rect width=\"${actualSize}\" height=\"${actualSize}\" fill=\"white\"/><path d=\"${path}\" fill=\"black\"/></svg>`;\n }\n // ============ 样式化 SVG(Path 合并)============\n toStyledSVG(options = {}) {\n const { size = 256, colorDark = '#000000', colorLight = '#ffffff', borderRadius = 0, gradient = null, quietZone = 0, logoRegions = [] } = options;\n const count = this.moduleCount;\n const totalCount = count + quietZone * 2;\n const cellSize = Math.floor(size / totalCount);\n const actualSize = cellSize * totalCount;\n const offset = (size - actualSize) / 2;\n // 生成唯一的渐变 ID,避免多个 SVG 之间的冲突\n const gradientId = gradient ? `qrGradient_${Math.random().toString(36).substr(2, 9)}` : '';\n let defs = '';\n if (gradient) {\n defs = `<defs><linearGradient id=\"${gradientId}\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"><stop offset=\"0%\" style=\"stop-color:${gradient.color1}\"/><stop offset=\"100%\" style=\"stop-color:${gradient.color2}\"/></linearGradient></defs>`;\n }\n const bgRadius = Math.min(borderRadius, size / 8);\n const fillColor = gradient ? `url(#${gradientId})` : colorDark;\n const radius = Math.min(borderRadius, Math.floor(cellSize / 4));\n let path = '';\n for (let row = 0; row < count; row++) {\n for (let col = 0; col < count; col++) {\n let inLogo = false;\n for (const region of logoRegions) {\n if (row >= region.row && row < region.row + region.size &&\n col >= region.col && col < region.col + region.size) {\n inLogo = true;\n break;\n }\n }\n if (inLogo)\n continue;\n if (this.isDark(row, col)) {\n const x = (col + quietZone) * cellSize + offset;\n const y = (row + quietZone) * cellSize + offset;\n if (radius > 0) {\n const r = radius;\n path += `M${x + r},${y}h${cellSize - 2 * r}q${r},0 ${r},${r}v${cellSize - 2 * r}q0,${r} -${r},${r}h-${cellSize - 2 * r}q-${r},0 -${r},-${r}v-${cellSize - 2 * r}q0,-${r} ${r},-${r}z`;\n }\n else {\n path += `M${x},${y}h${cellSize}v${cellSize}h-${cellSize}z`;\n }\n }\n }\n }\n let logoPath = '';\n for (const region of logoRegions) {\n const x = (region.col + quietZone) * cellSize + offset;\n const y = (region.row + quietZone) * cellSize + offset;\n const s = region.size * cellSize;\n logoPath += `<rect x=\"${x}\" y=\"${y}\" width=\"${s}\" height=\"${s}\" fill=\"${colorLight}\" stroke=\"#e0e0e0\" stroke-width=\"2\"/>`;\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${size} ${size}\" width=\"${size}\" height=\"${size}\">${defs}<rect width=\"${size}\" height=\"${size}\" fill=\"${colorLight}\" rx=\"${bgRadius}\" ry=\"${bgRadius}\"/><path d=\"${path}\" fill=\"${fillColor}\"/>${logoPath}</svg>`;\n }\n}\n// ============ 样式化 QRCode 生成函数 ============\nexport function generateRoundedQRCode(text, size = 256, radius = 8) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n borderRadius: radius,\n quietZone: 2\n });\n}\nexport function generateQRCodeWithLogoArea(text, size = 256, logoRatio = 0.2) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n const count = qr.getModuleCount();\n const logoCells = Math.floor(count * logoRatio);\n const logoStart = Math.floor((count - logoCells) / 2);\n return qr.toStyledSVG({\n size,\n quietZone: 2,\n logoRegions: [{ row: logoStart, col: logoStart, size: logoCells }]\n });\n}\nexport function generateGradientQRCode(text, size = 256, color1 = '#667eea', color2 = '#764ba2') {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n gradient: { color1, color2 },\n quietZone: 2\n });\n}\nexport function generateWechatStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#07C160',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateDouyinStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#00F2EA',\n colorLight: '#000000',\n gradient: { color1: '#00F2EA', color2: '#FF0050' },\n borderRadius: 6,\n quietZone: 2\n });\n}\nexport function generateAlipayStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#1677FF',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateXiaohongshuStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF2442',\n colorLight: '#ffffff',\n borderRadius: 12,\n quietZone: 2\n });\n}\nexport function generateCyberpunkStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF00FF',\n colorLight: '#0a0a0a',\n gradient: { color1: '#FF00FF', color2: '#00FFFF' },\n borderRadius: 2,\n quietZone: 2\n });\n}\nexport function generateRetroStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#8B4513',\n colorLight: '#F5F5DC',\n borderRadius: 0,\n quietZone: 2\n });\n}\nexport function generateMinimalStyleQRCode(text, size = 256) {\n const qr = new QRCodeCore(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#333333',\n colorLight: '#fafafa',\n borderRadius: 16,\n quietZone: 2\n });\n}\n// ============ 批量生成 ============\nexport function generateBatchQRCodes(texts, options = {}) {\n return texts.map(text => {\n const qr = new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n return qr.toSVG(options.size || 256);\n });\n}\n// ============ 异步生成(简单版本)============\nexport function generateQRCodeAsync(text, options = {}) {\n return new Promise((resolve) => {\n const qr = new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n resolve(qr.toSVG(options.size || 256));\n });\n}\nexport function generateBatchAsync(texts, options = {}) {\n return Promise.all(texts.map(text => generateQRCodeAsync(text, options)));\n}\nclass LRUCache {\n cache = new Map();\n maxSize;\n enabled;\n constructor(options = {}) {\n this.maxSize = options.maxSize || 100;\n this.enabled = options.enabled !== false;\n }\n get(key) {\n if (!this.enabled)\n return undefined;\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n set(key, value) {\n if (!this.enabled)\n return;\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n clear() {\n this.cache.clear();\n }\n get size() {\n return this.cache.size;\n }\n get keys() {\n return Array.from(this.cache.keys());\n }\n}\n// QRCode 缓存\nconst qrCodeCache = new LRUCache();\nfunction getCacheKey(text, correctLevel) {\n return `${text}:${correctLevel}`;\n}\n/**\n * 获取缓存的 QRCode(如果不存在则创建并缓存)\n * @param text - QRCode 文本\n * @param correctLevel - 错误纠正级别\n * @returns QRCodeCore 实例\n */\nexport function getCachedQRCode(text, correctLevel = QRErrorCorrectLevel.H) {\n const key = getCacheKey(text, correctLevel);\n let qr = qrCodeCache.get(key);\n if (!qr) {\n qr = new QRCodeCore(text, correctLevel);\n qrCodeCache.set(key, qr);\n }\n return qr;\n}\n/**\n * 清除 QRCode 缓存\n */\nexport function clearQRCodeCache() {\n qrCodeCache.clear();\n}\n/**\n * 获取缓存统计信息\n */\nexport function getCacheStats() {\n return {\n size: qrCodeCache.size,\n maxSize: 100,\n keys: qrCodeCache.keys\n };\n}\n/**\n * 配置缓存选项\n */\nexport function configureCache(options) {\n // 重新创建缓存以应用新选项\n Object.assign(qrCodeCache, new LRUCache(options));\n}\n// ============ 带缓存的样式生成函数 ============\nexport function generateRoundedQRCodeCached(text, size = 256, radius = 8) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n borderRadius: radius,\n quietZone: 2\n });\n}\nexport function generateQRCodeWithLogoAreaCached(text, size = 256, logoRatio = 0.2) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n const count = qr.getModuleCount();\n const logoCells = Math.floor(count * logoRatio);\n const logoStart = Math.floor((count - logoCells) / 2);\n return qr.toStyledSVG({\n size,\n quietZone: 2,\n logoRegions: [{ row: logoStart, col: logoStart, size: logoCells }]\n });\n}\nexport function generateGradientQRCodeCached(text, size = 256, color1 = '#667eea', color2 = '#764ba2') {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n gradient: { color1, color2 },\n quietZone: 2\n });\n}\nexport function generateWechatStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#07C160',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateDouyinStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#00F2EA',\n colorLight: '#000000',\n gradient: { color1: '#00F2EA', color2: '#FF0050' },\n borderRadius: 6,\n quietZone: 2\n });\n}\nexport function generateAlipayStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#1677FF',\n colorLight: '#ffffff',\n borderRadius: 4,\n quietZone: 2\n });\n}\nexport function generateXiaohongshuStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF2442',\n colorLight: '#ffffff',\n borderRadius: 12,\n quietZone: 2\n });\n}\nexport function generateCyberpunkStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#FF00FF',\n colorLight: '#0a0a0a',\n gradient: { color1: '#FF00FF', color2: '#00FFFF' },\n borderRadius: 2,\n quietZone: 2\n });\n}\nexport function generateRetroStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#8B4513',\n colorLight: '#F5F5DC',\n borderRadius: 0,\n quietZone: 2\n });\n}\nexport function generateMinimalStyleQRCodeCached(text, size = 256) {\n const qr = getCachedQRCode(text, QRErrorCorrectLevel.H);\n return qr.toStyledSVG({\n size,\n colorDark: '#333333',\n colorLight: '#fafafa',\n borderRadius: 16,\n quietZone: 2\n });\n}\n// ============ 批量生成(带缓存) ============\nexport function generateBatchQRCodesCached(texts, options = {}) {\n return texts.map(text => {\n const qr = getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H);\n return options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n });\n}\nexport function generateQRCodeAsyncAdvanced(text, options = {}) {\n return new Promise((resolve, reject) => {\n // 检查是否在 Worker 中\n // @ts-ignore - WorkerGlobalScope is not in standard lib\n if (typeof WorkerGlobalScope !== 'undefined' && typeof self !== 'undefined' && self instanceof self.constructor) {\n try {\n const useCache = options.cache !== false;\n const qr = useCache\n ? getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H)\n : new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n const svg = options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n resolve({ text, svg, moduleCount: qr.getModuleCount() });\n }\n catch (e) {\n reject(e);\n }\n }\n else {\n // 在主线程中,使用 setTimeout 避免阻塞\n // @ts-ignore - using setTimeout for async operation\n setTimeout(() => {\n try {\n const useCache = options.cache !== false;\n const qr = useCache\n ? getCachedQRCode(text, options.correctLevel || QRErrorCorrectLevel.H)\n : new QRCodeCore(text, options.correctLevel || QRErrorCorrectLevel.H);\n const svg = options.styled\n ? qr.toStyledSVG({ size: options.size || 256, ...options.style })\n : qr.toSVG(options.size || 256);\n resolve({ text, svg, moduleCount: qr.getModuleCount() });\n }\n catch (e) {\n reject(e);\n }\n }, 0);\n }\n });\n}\nexport function generateBatchAsyncAdvanced(texts, options = {}) {\n return Promise.all(texts.map(text => generateQRCodeAsyncAdvanced(text, options)));\n}\n// ============ 向后兼容的 snake_case 别名 ============\nexport const generate_rounded_qrcode = generateRoundedQRCode;\nexport const generate_qrcode_with_logo_area = generateQRCodeWithLogoArea;\nexport const generate_gradient_qrcode = generateGradientQRCode;\nexport const generate_wechat_style_qrcode = generateWechatStyleQRCode;\nexport const generate_douyin_style_qrcode = generateDouyinStyleQRCode;\nexport const generate_alipay_style_qrcode = generateAlipayStyleQRCode;\nexport const generate_xiaohongshu_style_qrcode = generateXiaohongshuStyleQRCode;\nexport const generate_cyberpunk_style_qrcode = generateCyberpunkStyleQRCode;\nexport const generate_retro_style_qrcode = generateRetroStyleQRCode;\nexport const generate_minimal_style_qrcode = generateMinimalStyleQRCode;\n// QRCodeCore 的 snake_case 方法别名\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_module_count = QRCodeCore.prototype.getModuleCount;\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_svg = QRCodeCore.prototype.toSVG;\n// @ts-expect-error - Adding methods to prototype intentionally\nQRCodeCore.prototype.get_styled_svg = QRCodeCore.prototype.toStyledSVG;\n// ============ QRCode 别名 ============\nexport { QRCodeCore as QRCode };\n// ============ 版本信息 ============\nexport const VERSION = '1.0.0';\nexport function getVersionInfo() {\n return JSON.stringify({\n version: VERSION,\n name: '@veaba/qrcode-shared',\n features: [\n 'basic_qrcode',\n 'styled_svg',\n 'batch_generation',\n 'async_generation',\n 'lru_cache'\n ]\n });\n}\n// 默认导出\nexport default QRCodeCore;\n"],"mappings":"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EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvG,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACtG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvG,CAAC,GAAI,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAC5F,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EACvG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EACvG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACzG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACxG,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAI,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAE,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,CAC5G,EAED,SAAgB,EAAY,EAAY,EAAmB,CAKvD,IAJM,EAAW,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAG,EACrC,GAAS,EAAa,GAAK,EAAI,EAAS,GACxC,EAAU,EAAe,IAAU,EAAe,GAClD,EAAO,CAAE,EACT,EAAS,KAAK,MAAM,EAAQ,OAAS,EAAE,CAC7C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAAK,CAG7B,IAFM,EAAQ,EAAQ,EAAI,GACpB,EAAa,EAAQ,EAAI,EAAI,GAC7B,EAAY,EAAQ,EAAI,EAAI,GAClC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,IACvB,EAAK,KAAK,CAAE,aAAY,WAAW,EAAC,AAE3C,CACD,OAAO,CACV,CAED,SAAgB,EAAc,EAAY,EAAmB,CACzD,IAAM,EAAW,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAG,EAC3C,IAAK,IAAI,EAAa,EAAG,GAAc,GAAI,IAAc,CACrD,IAAM,EAAQ,EAAkB,EAAa,GAAG,EAAS,IACzD,GAAI,GAAS,EAAa,EACtB,OAAO,CAEd,CACD,KAAM,CAAI,MAAM,gBAAA,AACnB,CAoBD,IAlBa,EAAb,KAAuB,CACnB,OAAS,CAAE,EACX,OAAS,EACT,IAAI,EAAK,EAAQ,CACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IACxB,KAAK,QAAS,IAAS,EAAS,EAAI,EAAM,IAAO,EAAE,AAE1D,CACD,OAAO,EAAK,CACR,IAAM,EAAW,KAAK,MAAM,KAAK,OAAS,EAAE,CAK5C,AAJI,KAAK,OAAO,QAAU,GACtB,KAAK,OAAO,KAAK,EAAE,CACnB,IACA,KAAK,OAAO,IAAa,MAAU,KAAK,OAAS,GACrD,KAAK,QACR,CACJ,EAEY,EAAb,KAAwB,CACpB,KACA,aACA,WACA,YACA,QACA,YAAY,EAAM,EAAe,EAAoB,EAAG,CAEpD,AADA,KAAK,KAAO,EACZ,KAAK,aAAe,EAEpB,IAAM,EAAa,IAAI,cAAc,OAAO,EAAK,CAAC,OAMlD,AALA,KAAK,WAAa,EAAc,EAAY,EAAa,CACzD,KAAK,YAAc,KAAK,WAAa,EAAI,GAGzC,KAAK,QAAU,IAAI,WAAW,KAAK,YAAc,KAAK,aACtD,KAAK,MAAM,AACd,CAED,KAAK,EAAK,EAAK,CACX,OAAO,EAAM,KAAK,YAAc,CACnC,CACD,OAAO,EAAK,EAAK,CACb,OAAO,KAAK,QAAQ,KAAK,KAAK,EAAK,EAAI,IAAM,CAChD,CACD,QAAQ,EAAK,EAAK,EAAM,CACpB,KAAK,QAAQ,KAAK,KAAK,EAAK,EAAI,EAAI,EAAO,EAAI,CAClD,CACD,gBAAiB,CACb,OAAO,KAAK,WACf,CACD,MAAO,CASH,AARA,KAAK,0BAA0B,EAAG,EAAE,CACpC,KAAK,0BAA0B,KAAK,YAAc,EAAG,EAAE,CACvD,KAAK,0BAA0B,EAAG,KAAK,YAAc,EAAE,CACvD,KAAK,4BAA4B,CACjC,KAAK,oBAAoB,CACzB,KAAK,eAAe,CAChB,KAAK,YAAc,GACnB,KAAK,iBAAiB,CAC1B,KAAK,SAAS,AACjB,CACD,0BAA0B,EAAK,EAAK,CAChC,IAAK,IAAI,EAAI,GAAI,EAAI,EAAG,IAAK,CACzB,IAAM,EAAO,EAAM,EACf,OAAO,GAAK,GAAQ,KAAK,aAE7B,IAAK,IAAI,EAAI,GAAI,EAAI,EAAG,IAAK,CACzB,IAAM,EAAO,EAAM,EACnB,GAAI,EAAO,GAAK,GAAQ,KAAK,YACzB,SACJ,IAAM,EAAa,GAAK,GAAK,EAAI,GAAK,GAAK,GAAK,EAAI,EACpD,IAAK,EACD,KAAK,QAAQ,EAAM,GAAM,EAAM,KAE9B,CACD,IAAM,EAAU,IAAM,GAAK,IAAM,GAAK,IAAM,GAAK,IAAM,GAClD,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACxC,KAAK,QAAQ,EAAM,EAAM,EAAO,AACnC,CACJ,CACJ,CACJ,CACD,4BAA6B,CACzB,IAAM,EAAM,EAAuB,KAAK,WAAa,GACrD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CAEjC,IADM,EAAM,EAAI,GACV,EAAM,EAAI,GACZ,QAAK,QAAQ,KAAK,KAAK,EAAK,EAAI,IAAM,EAE1C,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACrB,IAAK,IAAI,EAAI,GAAI,GAAK,EAAG,IACrB,KAAK,QAAQ,EAAM,EAAG,EAAM,EAAG,IAAM,IAAM,IAAM,GAAK,IAAM,IAAM,IAAM,GAAM,IAAM,GAAK,IAAM,EAAG,AAG7G,CAER,CACD,oBAAqB,CACjB,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,YAAc,EAAG,IACtC,AAAI,KAAK,QAAQ,KAAK,KAAK,EAAG,EAAE,IAAM,GAClC,KAAK,QAAQ,EAAG,EAAG,EAAI,GAAM,EAAE,CAGvC,IAAK,IAAI,EAAI,EAAG,EAAI,KAAK,YAAc,EAAG,IACtC,AAAI,KAAK,QAAQ,KAAK,KAAK,EAAG,EAAE,IAAM,GAClC,KAAK,QAAQ,EAAG,EAAG,EAAI,GAAM,EAAE,AAG1C,CACD,eAAgB,CAKZ,IAJM,EAAM,KACN,EAAU,MACV,EAAc,EAChB,EAAQ,KAAK,cAAgB,EAAK,EAClC,EAAI,GAAQ,GAChB,KAAO,KAAK,YAAY,EAAE,CAAG,KAAK,YAAY,EAAI,EAAI,GAClD,GAAK,GAAQ,KAAK,YAAY,EAAE,CAAG,KAAK,YAAY,EAAI,CAE5D,GAAS,GAAQ,GAAM,GAAK,EAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,IAAK,CAEzB,IADM,EAAO,GAAQ,EAAK,EACpB,EAAO,IAAQ,EACrB,AAAI,EAAI,EACJ,KAAK,QAAQ,EAAG,EAAG,EAAK,CAEnB,EAAI,EACT,KAAK,QAAQ,EAAI,EAAG,EAAG,EAAK,CAG5B,KAAK,QAAQ,KAAK,YAAc,GAAK,EAAG,EAAG,EAAK,AAEvD,CACD,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,IAAK,CAEzB,IADM,EAAO,GAAQ,EAAK,EACpB,EAAO,IAAQ,EACrB,AAAI,EAAI,EACJ,KAAK,QAAQ,EAAG,KAAK,YAAc,EAAI,EAAG,EAAK,CAE1C,EAAI,EACT,KAAK,QAAQ,EAAG,GAAK,EAAI,EAAI,EAAG,EAAK,CAGrC,KAAK,QAAQ,EAAG,GAAK,EAAI,EAAG,EAAK,AAExC,CACD,KAAK,QAAQ,KAAK,YAAc,EAAG,GAAG,EAAK,AAC9C,CACD,YAAY,EAAM,CACd,IAAI,EAAQ,EACZ,KAAO,IAAS,GAEZ,AADA,IACA,IAAS,EAEb,OAAO,CACV,CACD,iBAAkB,CAEjB,CACD,SAAU,CAKN,IAJM,EAAO,KAAK,YAAY,CAC1B,EAAM,GACN,EAAM,KAAK,YAAc,EACzB,EAAW,EACX,EAAY,EAChB,IAAK,IAAI,EAAM,KAAK,YAAc,EAAG,EAAM,EAAG,GAAO,EAGjD,IAFI,IAAQ,GACR,MACS,CACT,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACnB,GAAI,KAAK,QAAQ,KAAK,KAAK,EAAK,EAAM,EAAE,IAAM,EAAG,CAC7C,IAAI,GAAO,EAQX,AAPI,EAAY,EAAK,SACjB,GAAS,EAAK,KAAe,EAAY,IAAO,IAE/C,EAAM,EAAM,GAAK,GAAM,IACxB,GAAQ,GACZ,KAAK,QAAQ,EAAK,EAAM,EAAG,EAAK,CAChC,IACI,IAAa,KACb,IACA,EAAW,EAElB,CAGL,GADA,GAAO,EACH,EAAM,GAAK,KAAK,aAAe,EAAK,CAEpC,AADA,GAAO,EACP,GAAO,EACP,KACH,CACJ,CAER,CACD,iBAAkB,CAGd,OAFI,KAAK,YAAc,GAAK,KAAK,WAAa,GACnC,EACJ,EACV,CACD,YAAa,CAET,IADM,EAAW,EAAY,KAAK,WAAY,KAAK,aAAa,CAC1D,EAAS,IAAI,EACnB,EAAO,IAAI,EAAO,eAAgB,EAAE,CACpC,IAAM,EAAY,IAAI,cAAc,OAAO,KAAK,KAAK,CACrD,EAAO,IAAI,EAAU,OAAQ,KAAK,iBAAiB,CAAC,CACpD,IAAK,IAAM,KAAQ,EACf,EAAO,IAAI,EAAM,EAAE,CACvB,IAAI,EAAiB,EACrB,IAAK,IAAM,KAAS,EAChB,GAAkB,EAAM,UAG5B,IAFI,EAAO,OAAS,GAAK,EAAiB,GACtC,EAAO,IAAI,EAAG,EAAE,CACb,EAAO,OAAS,GAAM,GACzB,EAAO,QAAO,EAAM,CACxB,KAAO,EAAO,OAAS,EAAiB,IACpC,EAAO,IAAI,IAAM,EAAE,GACf,EAAO,QAAU,EAAiB,KAEtC,EAAO,IAAI,GAAM,EAAE,CAOvB,IALM,EAAO,EAAO,OAAO,MAAM,EAAG,KAAK,KAAK,EAAO,OAAS,EAAE,CAAC,CAC7D,EAAS,EACP,EAAa,KAAK,IAAI,GAAG,EAAS,IAAI,GAAK,EAAE,UAAU,CAAC,CACxD,EAAa,KAAK,IAAI,GAAG,EAAS,IAAI,GAAK,EAAE,WAAa,EAAE,UAAU,CAAC,CACvE,EAAS,CAAE,EACX,EAAS,CAAE,EACjB,IAAK,IAAM,KAAS,EAAU,CAE1B,IADM,EAAU,EAAM,UAChB,EAAU,EAAM,WAAa,EAEnC,AADA,EAAO,KAAK,EAAK,MAAM,EAAQ,EAAS,EAAQ,CAAC,CACjD,GAAU,EAIV,IAHM,EAAS,EAA0B,EAAQ,CAC3C,EAAU,IAAI,EAAW,CAAC,GAAG,EAAO,EAAO,OAAS,GAAI,GAAG,MAAU,EAAA,CAAS,KAAK,EAAE,AAAC,GACtF,EAAU,EAAQ,IAAI,EAAO,CAC7B,EAAK,CAAE,EACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,IAAK,CAC9B,IAAM,EAAW,EAAI,EAAQ,OAAS,EACtC,EAAG,KAAK,GAAY,EAAI,EAAQ,IAAI,EAAS,CAAG,EAAE,AACrD,CACD,EAAO,KAAK,EAAG,AAClB,CACD,IAAM,EAAS,CAAE,EACjB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,IAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,AAAI,EAAI,EAAO,GAAG,QACd,EAAO,KAAK,EAAO,GAAG,GAAG,CAGrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,IAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IACjC,AAAI,EAAI,EAAO,GAAG,QACd,EAAO,KAAK,EAAO,GAAG,GAAG,CAGrC,OAAO,CACV,CAED,MAAM,EAAO,IAAK,CAGd,IAFM,EAAW,KAAK,MAAM,EAAO,KAAK,YAAY,CAC9C,EAAa,EAAW,KAAK,YAC/B,EAAO,GACX,IAAK,IAAI,EAAM,EAAG,EAAM,KAAK,YAAa,IACtC,IAAK,IAAI,EAAM,EAAG,EAAM,KAAK,YAAa,IACtC,GAAI,KAAK,OAAO,EAAK,EAAI,CAAE,CAEvB,IADM,EAAI,EAAM,EACV,EAAI,EAAM,EAChB,IAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAS,GAAG,EAAS,IAAI,EAAS,EAC3D,CAGT,OAAQ,uDAAuD,EAAW,GAAG,EAAW,WAAW,EAAW,YAAY,EAAW,iBAAiB,EAAW,YAAY,EAAW,2BAA2B,EAAK,uBAC3N,CAED,YAAY,EAAU,CAAE,EAAE,CAStB,GARM,CAAE,OAAO,IAAK,YAAY,UAAW,aAAa,UAAW,eAAe,EAAG,WAAW,KAAM,YAAY,EAAG,cAAc,CAAE,EAAE,CAAG,EACpI,EAAQ,KAAK,YACb,EAAa,EAAQ,EAAY,EACjC,EAAW,KAAK,MAAM,EAAO,EAAW,CACxC,EAAa,EAAW,EACxB,GAAU,EAAO,GAAc,EAE/B,EAAa,GAAY,aAAa,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,OAAO,EAAG,EAAE,CAAC,EAAI,GACpF,EAAO,GACX,AAAI,IACA,GAAQ,4BAA4B,EAAW,4EAA4E,EAAS,OAAO,2CAA2C,EAAS,OAAO,8BAK1M,IAHM,EAAW,KAAK,IAAI,EAAc,EAAO,EAAE,CAC3C,EAAY,GAAY,OAAO,EAAW,GAAK,EAC/C,EAAS,KAAK,IAAI,EAAc,KAAK,MAAM,EAAW,EAAE,CAAC,CAC3D,EAAO,GACX,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,IAC3B,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,IAAO,CAClC,IAAI,GAAS,EACb,IAAK,IAAM,KAAU,EACjB,GAAI,GAAO,EAAO,KAAO,EAAM,EAAO,IAAM,EAAO,MAC/C,GAAO,EAAO,KAAO,EAAM,EAAO,IAAM,EAAO,KAAM,CACrD,GAAS,EACT,KACH,CAED,OAEA,KAAK,OAAO,EAAK,EAAI,CAAE,CAEvB,IADM,GAAK,EAAM,GAAa,EAAW,EACnC,GAAK,EAAM,GAAa,EAAW,EACzC,GAAI,EAAS,EAAG,CACZ,IAAM,EAAI,EACV,IAAS,GAAG,EAAI,EAAE,GAAG,EAAE,GAAG,EAAW,EAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAW,EAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAW,EAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAW,EAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EACtL,MAEG,IAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAS,GAAG,EAAS,IAAI,EAAS,EAE/D,CACJ,CAEL,IAAI,EAAW,GACf,IAAK,IAAM,KAAU,EAAa,CAG9B,IAFM,GAAK,EAAO,IAAM,GAAa,EAAW,EAC1C,GAAK,EAAO,IAAM,GAAa,EAAW,EAC1C,EAAI,EAAO,KAAO,EACxB,IAAa,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAW,sCACtF,CACD,OAAQ,uDAAuD,EAAK,GAAG,EAAK,WAAW,EAAK,YAAY,EAAK,IAAI,EAAK,eAAe,EAAK,YAAY,EAAK,UAAU,EAAW,QAAQ,EAAS,QAAQ,EAAS,cAAc,EAAK,UAAU,EAAU,KAAK,EAAS,OAC1Q,CACJ,EAED,SAAgB,EAAsB,EAAM,EAAO,IAAK,EAAS,EAAG,CAChE,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA2B,EAAM,EAAO,IAAK,EAAY,GAAK,CAI1E,IAHM,EAAK,IAAI,EAAW,EAAM,EAAoB,GAC9C,EAAQ,EAAG,gBAAgB,CAC3B,EAAY,KAAK,MAAM,EAAQ,EAAU,CACzC,EAAY,KAAK,OAAO,EAAQ,GAAa,EAAE,CACrD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,EACX,YAAa,CAAC,CAAE,IAAK,EAAW,IAAK,EAAW,KAAM,CAAY,CAAA,CACrE,EAAC,AACL,CACD,SAAgB,EAAuB,EAAM,EAAO,IAAK,EAAS,UAAW,EAAS,UAAW,CAC7F,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,SAAU,CAAE,SAAQ,QAAQ,EAC5B,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA0B,EAAM,EAAO,IAAK,CACxD,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA0B,EAAM,EAAO,IAAK,CACxD,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,SAAU,CAAE,OAAQ,UAAW,OAAQ,SAAW,EAClD,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA0B,EAAM,EAAO,IAAK,CACxD,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA+B,EAAM,EAAO,IAAK,CAC7D,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,GACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA6B,EAAM,EAAO,IAAK,CAC3D,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,SAAU,CAAE,OAAQ,UAAW,OAAQ,SAAW,EAClD,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAyB,EAAM,EAAO,IAAK,CACvD,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA2B,EAAM,EAAO,IAAK,CACzD,IAAM,EAAK,IAAI,EAAW,EAAM,EAAoB,GACpD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,GACd,UAAW,CACd,EAAC,AACL,CAED,SAAgB,EAAqB,EAAO,EAAU,CAAE,EAAE,CACtD,MAAO,GAAM,IAAI,GAAQ,CACrB,IAAM,EAAK,IAAI,EAAW,EAAM,EAAQ,cAAgB,EAAoB,GAC5E,MAAO,GAAG,MAAM,EAAQ,MAAQ,IAAI,AACvC,EAAC,AACL,CAWD,IAAM,EAAN,KAAe,CACX,MAAQ,IAAI,IACZ,QACA,QACA,YAAY,EAAU,CAAE,EAAE,CAEtB,AADA,KAAK,QAAU,EAAQ,SAAW,IAClC,KAAK,QAAU,EAAQ,WAAY,CACtC,CACD,IAAI,EAAK,CACL,IAAK,KAAK,QACN,OACJ,IAAM,EAAQ,KAAK,MAAM,IAAI,EAAI,CAMjC,OALI,QAAA,KAEA,KAAK,MAAM,OAAO,EAAI,CACtB,KAAK,MAAM,IAAI,EAAK,EAAM,EAEvB,CACV,CACD,IAAI,EAAK,EAAO,CACP,QAAK,QAEV,IAAI,KAAK,MAAM,IAAI,EAAI,CACnB,KAAK,MAAM,OAAO,EAAI,SAEjB,KAAK,MAAM,MAAQ,KAAK,QAAS,CAEtC,IAAM,EAAW,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC,MAC1C,AAAI,QAAA,IACA,KAAK,MAAM,OAAO,EAAS,AAElC,CACD,KAAK,MAAM,IAAI,EAAK,EAAM,AADzB,CAEJ,CACD,OAAQ,CACJ,KAAK,MAAM,OAAO,AACrB,CACD,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACrB,CACD,IAAI,MAAO,CACP,MAAO,OAAM,KAAK,KAAK,MAAM,MAAM,CAAC,AACvC,CACJ,EAED,MAAM,EAAc,IAAI,EACxB,SAAS,EAAY,EAAM,EAAc,CACrC,OAAQ,EAAE,EAAK,GAAG,EAAa,CAClC,CAOD,SAAgB,EAAgB,EAAM,EAAe,EAAoB,EAAG,CAExE,IADM,EAAM,EAAY,EAAM,EAAa,CACvC,EAAK,EAAY,IAAI,EAAI,CAK7B,OAJK,IACD,EAAK,IAAI,EAAW,EAAM,GAC1B,EAAY,IAAI,EAAK,EAAG,EAErB,CACV,CAID,SAAgB,IAAmB,CAC/B,EAAY,OAAO,AACtB,CAID,SAAgB,GAAgB,CAC5B,MAAO,CACH,KAAM,EAAY,KAClB,QAAS,IACT,KAAM,EAAY,IACrB,CACJ,CAID,SAAgB,EAAe,EAAS,CAEpC,OAAO,OAAO,EAAa,IAAI,EAAS,GAAS,AACpD,CAED,SAAgB,EAA4B,EAAM,EAAO,IAAK,EAAS,EAAG,CACtE,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAiC,EAAM,EAAO,IAAK,EAAY,GAAK,CAIhF,IAHM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACjD,EAAQ,EAAG,gBAAgB,CAC3B,EAAY,KAAK,MAAM,EAAQ,EAAU,CACzC,EAAY,KAAK,OAAO,EAAQ,GAAa,EAAE,CACrD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,EACX,YAAa,CAAC,CAAE,IAAK,EAAW,IAAK,EAAW,KAAM,CAAY,CAAA,CACrE,EAAC,AACL,CACD,SAAgB,EAA6B,EAAM,EAAO,IAAK,EAAS,UAAW,EAAS,UAAW,CACnG,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,SAAU,CAAE,SAAQ,QAAQ,EAC5B,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAgC,EAAM,EAAO,IAAK,CAC9D,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAgC,EAAM,EAAO,IAAK,CAC9D,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,SAAU,CAAE,OAAQ,UAAW,OAAQ,SAAW,EAClD,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAgC,EAAM,EAAO,IAAK,CAC9D,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAqC,EAAM,EAAO,IAAK,CACnE,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,GACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAmC,EAAM,EAAO,IAAK,CACjE,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,SAAU,CAAE,OAAQ,UAAW,OAAQ,SAAW,EAClD,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAA+B,EAAM,EAAO,IAAK,CAC7D,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,EACd,UAAW,CACd,EAAC,AACL,CACD,SAAgB,EAAiC,EAAM,EAAO,IAAK,CAC/D,IAAM,EAAK,EAAgB,EAAM,EAAoB,EAAE,CACvD,MAAO,GAAG,YAAY,CAClB,OACA,UAAW,UACX,WAAY,UACZ,aAAc,GACd,UAAW,CACd,EAAC,AACL,CAED,SAAgB,EAA2B,EAAO,EAAU,CAAE,EAAE,CAC5D,MAAO,GAAM,IAAI,GAAQ,CACrB,IAAM,EAAK,EAAgB,EAAM,EAAQ,cAAgB,EAAoB,EAAE,CAC/E,OAAO,EAAQ,OACT,EAAG,YAAY,CAAE,KAAM,EAAQ,MAAQ,IAAK,GAAG,EAAQ,KAAO,EAAC,CAC/D,EAAG,MAAM,EAAQ,MAAQ,IAAI,AACtC,EAAC,AACL,CACD,SAAgB,EAA4B,EAAM,EAAU,CAAE,EAAE,CAC5D,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CAGpC,UAAW,kBAAsB,YAAsB,KAAS,KAAe,gBAAgB,KAAK,YAChG,GAAI,CAKA,IAJM,EAAW,EAAQ,SAAU,EAC7B,EAAK,EACL,EAAgB,EAAM,EAAQ,cAAgB,EAAoB,EAAE,CACpE,IAAI,EAAW,EAAM,EAAQ,cAAgB,EAAoB,GACjE,EAAM,EAAQ,OACd,EAAG,YAAY,CAAE,KAAM,EAAQ,MAAQ,IAAK,GAAG,EAAQ,KAAO,EAAC,CAC/D,EAAG,MAAM,EAAQ,MAAQ,IAAI,CACnC,EAAQ,CAAE,OAAM,MAAK,YAAa,EAAG,gBAAgB,AAAE,EAAC,AAC3D,OACM,EAAG,CACN,EAAO,EAAE,AACZ,MAKD,WAAW,IAAM,CACb,GAAI,CAKA,IAJM,EAAW,EAAQ,SAAU,EAC7B,EAAK,EACL,EAAgB,EAAM,EAAQ,cAAgB,EAAoB,EAAE,CACpE,IAAI,EAAW,EAAM,EAAQ,cAAgB,EAAoB,GACjE,EAAM,EAAQ,OACd,EAAG,YAAY,CAAE,KAAM,EAAQ,MAAQ,IAAK,GAAG,EAAQ,KAAO,EAAC,CAC/D,EAAG,MAAM,EAAQ,MAAQ,IAAI,CACnC,EAAQ,CAAE,OAAM,MAAK,YAAa,EAAG,gBAAgB,AAAE,EAAC,AAC3D,OACM,EAAG,CACN,EAAO,EAAE,AACZ,CACJ,EAAE,EAAE,AAEZ,EACJ,CACD,SAAgB,EAA2B,EAAO,EAAU,CAAE,EAAE,CAC5D,MAAO,SAAQ,IAAI,EAAM,IAAI,GAAQ,EAA4B,EAAM,EAAQ,CAAC,CAAC,AACpF,CAWD,MATa,EAA0B,EAC1B,EAAiC,EACjC,EAA2B,EAC3B,EAA+B,EAC/B,EAA+B,EAC/B,EAA+B,EAC/B,EAAoC,EACpC,EAAkC,EAClC,EAA8B,EAC9B,GAAgC,EAO7C,AAJA,EAAW,UAAU,iBAAmB,EAAW,UAAU,eAE7D,EAAW,UAAU,QAAU,EAAW,UAAU,MAEpD,EAAW,UAAU,eAAiB,EAAW,UAAU,YAI3D,MAAa,EAAU,QACvB,SAAgB,IAAiB,CAC7B,MAAO,MAAK,UAAU,CAClB,QAAS,EACT,KAAM,uBACN,SAAU,CACN,eACA,aACA,mBACA,mBACA,WACH,CACJ,EAAC,AACL"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@veaba/qrcode-js",
3
+ "version": "0.0.1",
4
+ "author": "veaba",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/veaba/qrcodes"
9
+ },
10
+ "description": "A browser-compatible QRCode library with caching - extends @veaba/qrcode-shared",
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "module": "dist/index.js",
14
+ "unpkg": "dist/index.iife.js",
15
+ "jsdelivr": "dist/index.iife.js",
16
+ "types": "dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "import": "./dist/index.js",
20
+ "types": "./dist/index.d.ts"
21
+ },
22
+ "./browser": {
23
+ "import": "./dist/index.iife.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "src"
29
+ ],
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "dev": "vite",
35
+ "build": "tsdown",
36
+ "watch": "tsdown --watch"
37
+ },
38
+ "keywords": [
39
+ "qrcode",
40
+ "javascript",
41
+ "browser",
42
+ "qr",
43
+ "barcode",
44
+ "cache"
45
+ ],
46
+ "dependencies": {
47
+ "@veaba/qrcode-shared": "workspace:*"
48
+ },
49
+ "devDependencies": {
50
+ "tsdown": "^0.10.0",
51
+ "typescript": "^5.0.0",
52
+ "vite": "^5.0.0",
53
+ "vitest": "^2.1.0"
54
+ }
55
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @veaba/qrcode-js - Browser-compatible QRCode library with caching
3
+ *
4
+ * This package re-exports everything from @veaba/qrcode-shared.
5
+ * All functionality is now unified in @veaba/qrcode-shared.
6
+ *
7
+ * @deprecated This package is now a thin wrapper around @veaba/qrcode-shared.
8
+ * Please use @veaba/qrcode-shared directly or @veaba/qrcode-js-cache for caching features.
9
+ */
10
+ export { QRCodeCore, QRCode, QRMath, Polynomial, BitBuffer, QRErrorCorrectLevel, QRMode, PATTERN_POSITION_TABLE, QRCodeLimitLength, RS_BLOCK_TABLE, getErrorCorrectPolynomial, getRSBlocks, getTypeNumber, generateRoundedQRCode, generateQRCodeWithLogoArea, generateGradientQRCode, generateWechatStyleQRCode, generateDouyinStyleQRCode, generateAlipayStyleQRCode, generateXiaohongshuStyleQRCode, generateCyberpunkStyleQRCode, generateRetroStyleQRCode, generateMinimalStyleQRCode, generateRoundedQRCodeCached, generateQRCodeWithLogoAreaCached, generateGradientQRCodeCached, generateWechatStyleQRCodeCached, generateDouyinStyleQRCodeCached, generateAlipayStyleQRCodeCached, generateXiaohongshuStyleQRCodeCached, generateCyberpunkStyleQRCodeCached, generateRetroStyleQRCodeCached, generateMinimalStyleQRCodeCached, generateBatchQRCodes, generateBatchQRCodesCached, generateQRCodeAsync, generateBatchAsync, getCachedQRCode, clearQRCodeCache, getCacheStats, configureCache, generate_rounded_qrcode, generate_qrcode_with_logo_area, generate_gradient_qrcode, generate_wechat_style_qrcode, generate_douyin_style_qrcode, generate_alipay_style_qrcode, generate_xiaohongshu_style_qrcode, generate_cyberpunk_style_qrcode, generate_retro_style_qrcode, generate_minimal_style_qrcode, VERSION, getVersionInfo, } from '@veaba/qrcode-shared';
11
+ export { QRCodeCore as default } from '@veaba/qrcode-shared';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAEL,UAAU,EACV,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EAGT,mBAAmB,EACnB,MAAM,EACN,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EAGd,yBAAyB,EACzB,WAAW,EACX,aAAa,EAGb,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAG1B,2BAA2B,EAC3B,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,oCAAoC,EACpC,kCAAkC,EAClC,8BAA8B,EAC9B,gCAAgC,EAGhC,oBAAoB,EACpB,0BAA0B,EAG1B,mBAAmB,EACnB,kBAAkB,EAGlB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EAGd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,EAC/B,2BAA2B,EAC3B,6BAA6B,EAG7B,OAAO,EACP,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
package/src/index.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @veaba/qrcode-js - Browser-compatible QRCode library with caching
3
+ *
4
+ * This package re-exports everything from @veaba/qrcode-shared.
5
+ * All functionality is now unified in @veaba/qrcode-shared.
6
+ *
7
+ * @deprecated This package is now a thin wrapper around @veaba/qrcode-shared.
8
+ * Please use @veaba/qrcode-shared directly or @veaba/qrcode-js-cache for caching features.
9
+ */
10
+ // Re-export everything from shared
11
+ export {
12
+ // Core classes
13
+ QRCodeCore, QRCode, QRMath, Polynomial, BitBuffer,
14
+ // Enums and constants
15
+ QRErrorCorrectLevel, QRMode, PATTERN_POSITION_TABLE, QRCodeLimitLength, RS_BLOCK_TABLE,
16
+ // Utility functions
17
+ getErrorCorrectPolynomial, getRSBlocks, getTypeNumber,
18
+ // Style generators (non-cached)
19
+ generateRoundedQRCode, generateQRCodeWithLogoArea, generateGradientQRCode, generateWechatStyleQRCode, generateDouyinStyleQRCode, generateAlipayStyleQRCode, generateXiaohongshuStyleQRCode, generateCyberpunkStyleQRCode, generateRetroStyleQRCode, generateMinimalStyleQRCode,
20
+ // Style generators (cached)
21
+ generateRoundedQRCodeCached, generateQRCodeWithLogoAreaCached, generateGradientQRCodeCached, generateWechatStyleQRCodeCached, generateDouyinStyleQRCodeCached, generateAlipayStyleQRCodeCached, generateXiaohongshuStyleQRCodeCached, generateCyberpunkStyleQRCodeCached, generateRetroStyleQRCodeCached, generateMinimalStyleQRCodeCached,
22
+ // Batch generation
23
+ generateBatchQRCodes, generateBatchQRCodesCached,
24
+ // Async generation
25
+ generateQRCodeAsync, generateBatchAsync,
26
+ // Cache management
27
+ getCachedQRCode, clearQRCodeCache, getCacheStats, configureCache,
28
+ // Snake_case aliases
29
+ generate_rounded_qrcode, generate_qrcode_with_logo_area, generate_gradient_qrcode, generate_wechat_style_qrcode, generate_douyin_style_qrcode, generate_alipay_style_qrcode, generate_xiaohongshu_style_qrcode, generate_cyberpunk_style_qrcode, generate_retro_style_qrcode, generate_minimal_style_qrcode,
30
+ // Version info
31
+ VERSION, getVersionInfo, } from '@veaba/qrcode-shared';
32
+ // Default export
33
+ export { QRCodeCore as default } from '@veaba/qrcode-shared';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mCAAmC;AACnC,OAAO;AACL,eAAe;AACf,UAAU,EACV,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS;AAET,sBAAsB;AACtB,mBAAmB,EACnB,MAAM,EACN,sBAAsB,EACtB,iBAAiB,EACjB,cAAc;AAEd,oBAAoB;AACpB,yBAAyB,EACzB,WAAW,EACX,aAAa;AAEb,gCAAgC;AAChC,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B;AAE1B,4BAA4B;AAC5B,2BAA2B,EAC3B,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,oCAAoC,EACpC,kCAAkC,EAClC,8BAA8B,EAC9B,gCAAgC;AAEhC,mBAAmB;AACnB,oBAAoB,EACpB,0BAA0B;AAE1B,mBAAmB;AACnB,mBAAmB,EACnB,kBAAkB;AAElB,mBAAmB;AACnB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc;AAEd,qBAAqB;AACrB,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,EAC/B,2BAA2B,EAC3B,6BAA6B;AAE7B,eAAe;AACf,OAAO,EACP,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,iBAAiB;AACjB,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
package/src/index.ts ADDED
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @veaba/qrcode-js - Browser-compatible QRCode library with caching
3
+ *
4
+ * This package re-exports everything from @veaba/qrcode-shared.
5
+ * All functionality is now unified in @veaba/qrcode-shared.
6
+ *
7
+ * @deprecated This package is now a thin wrapper around @veaba/qrcode-shared.
8
+ * Please use @veaba/qrcode-shared directly or @veaba/qrcode-js-cache for caching features.
9
+ */
10
+
11
+ // Re-export everything from shared
12
+ export {
13
+ // Core classes
14
+ QRCodeCore,
15
+ QRCode,
16
+ QRMath,
17
+ Polynomial,
18
+ BitBuffer,
19
+
20
+ // Enums and constants
21
+ QRErrorCorrectLevel,
22
+ QRMode,
23
+ PATTERN_POSITION_TABLE,
24
+ QRCodeLimitLength,
25
+ RS_BLOCK_TABLE,
26
+
27
+ // Utility functions
28
+ getErrorCorrectPolynomial,
29
+ getRSBlocks,
30
+ getTypeNumber,
31
+
32
+ // Style generators (non-cached)
33
+ generateRoundedQRCode,
34
+ generateQRCodeWithLogoArea,
35
+ generateGradientQRCode,
36
+ generateWechatStyleQRCode,
37
+ generateDouyinStyleQRCode,
38
+ generateAlipayStyleQRCode,
39
+ generateXiaohongshuStyleQRCode,
40
+ generateCyberpunkStyleQRCode,
41
+ generateRetroStyleQRCode,
42
+ generateMinimalStyleQRCode,
43
+
44
+ // Style generators (cached)
45
+ generateRoundedQRCodeCached,
46
+ generateQRCodeWithLogoAreaCached,
47
+ generateGradientQRCodeCached,
48
+ generateWechatStyleQRCodeCached,
49
+ generateDouyinStyleQRCodeCached,
50
+ generateAlipayStyleQRCodeCached,
51
+ generateXiaohongshuStyleQRCodeCached,
52
+ generateCyberpunkStyleQRCodeCached,
53
+ generateRetroStyleQRCodeCached,
54
+ generateMinimalStyleQRCodeCached,
55
+
56
+ // Batch generation
57
+ generateBatchQRCodes,
58
+ generateBatchQRCodesCached,
59
+
60
+ // Async generation (using Advanced versions for QRCodeResult return type)
61
+ generateQRCodeAsyncAdvanced as generateQRCodeAsync,
62
+ generateBatchAsyncAdvanced as generateBatchAsync,
63
+
64
+ // Cache management
65
+ getCachedQRCode,
66
+ clearQRCodeCache,
67
+ getCacheStats,
68
+ configureCache,
69
+
70
+ // Snake_case aliases
71
+ generate_rounded_qrcode,
72
+ generate_qrcode_with_logo_area,
73
+ generate_gradient_qrcode,
74
+ generate_wechat_style_qrcode,
75
+ generate_douyin_style_qrcode,
76
+ generate_alipay_style_qrcode,
77
+ generate_xiaohongshu_style_qrcode,
78
+ generate_cyberpunk_style_qrcode,
79
+ generate_retro_style_qrcode,
80
+ generate_minimal_style_qrcode,
81
+
82
+ // Version info
83
+ VERSION,
84
+ getVersionInfo,
85
+ } from '@veaba/qrcode-shared';
86
+
87
+ // Default export
88
+ export { QRCodeCore as default } from '@veaba/qrcode-shared';
package/src/types.ts ADDED
@@ -0,0 +1,110 @@
1
+ // @veaba/qrcode-js 类型定义
2
+ // Re-exports from @veaba/qrcode-shared with additional cached versions
3
+
4
+ export {
5
+ // Core classes
6
+ QRCodeCore,
7
+ QRMath,
8
+ Polynomial,
9
+ BitBuffer,
10
+
11
+ // Enums and constants
12
+ QRErrorCorrectLevel,
13
+ QRMode,
14
+ PATTERN_POSITION_TABLE,
15
+ QRCodeLimitLength,
16
+ RS_BLOCK_TABLE,
17
+
18
+ // Utility functions
19
+ getErrorCorrectPolynomial,
20
+ getRSBlocks,
21
+ getTypeNumber,
22
+
23
+ // Style generators (non-cached versions from shared)
24
+ generateRoundedQRCode,
25
+ generateQRCodeWithLogoArea,
26
+ generateGradientQRCode,
27
+ generateWechatStyleQRCode,
28
+ generateDouyinStyleQRCode,
29
+ generateAlipayStyleQRCode,
30
+ generateXiaohongshuStyleQRCode,
31
+ generateCyberpunkStyleQRCode,
32
+ generateRetroStyleQRCode,
33
+ generateMinimalStyleQRCode,
34
+ generateBatchQRCodes,
35
+
36
+ } from '@veaba/qrcode-shared';
37
+
38
+ export type {
39
+ QRCodeOptions,
40
+ StyledSVGOptions,
41
+ RSBlock,
42
+ } from '@veaba/qrcode-shared';
43
+
44
+ import type { QRCodeCore, QRErrorCorrectLevel, QRCodeOptions, StyledSVGOptions } from '@veaba/qrcode-shared';
45
+
46
+ // QRCode is an alias for QRCodeCore
47
+ export type QRCode = QRCodeCore;
48
+
49
+ // Cache management
50
+ export declare function getCachedQRCode(text: string, correctLevel: QRErrorCorrectLevel): QRCodeCore;
51
+ export declare function clearQRCodeCache(): void;
52
+ export declare function getCacheStats(): { size: number; maxSize: number; keys: string[] };
53
+
54
+ // Cached style generators (with caching)
55
+ export declare function generateRoundedQRCodeCached(text: string, size?: number, radius?: number): string;
56
+ export declare function generateQRCodeWithLogoAreaCached(text: string, size?: number, logoRatio?: number): string;
57
+ export declare function generateGradientQRCodeCached(text: string, size?: number, color1?: string, color2?: string): string;
58
+ export declare function generateWechatStyleQRCodeCached(text: string, size?: number): string;
59
+ export declare function generateDouyinStyleQRCodeCached(text: string, size?: number): string;
60
+ export declare function generateAlipayStyleQRCodeCached(text: string, size?: number): string;
61
+ export declare function generateXiaohongshuStyleQRCodeCached(text: string, size?: number): string;
62
+ export declare function generateCyberpunkStyleQRCodeCached(text: string, size?: number): string;
63
+ export declare function generateRetroStyleQRCodeCached(text: string, size?: number): string;
64
+ export declare function generateMinimalStyleQRCodeCached(text: string, size?: number): string;
65
+
66
+ // Cached batch generation
67
+ export declare function generateBatchQRCodesCached(
68
+ texts: string[],
69
+ options?: Partial<QRCodeOptions> & { styled?: boolean; style?: StyledSVGOptions }
70
+ ): string[];
71
+
72
+ // Async generation with optional caching (using Advanced versions from shared)
73
+ export interface QRCodeResult {
74
+ text: string;
75
+ svg: string;
76
+ moduleCount: number;
77
+ }
78
+
79
+ export declare function generateQRCodeAsync(
80
+ text: string,
81
+ options?: Partial<QRCodeOptions> & {
82
+ styled?: boolean;
83
+ style?: StyledSVGOptions;
84
+ cache?: boolean;
85
+ }
86
+ ): Promise<QRCodeResult>;
87
+
88
+ export declare function generateBatchAsync(
89
+ texts: string[],
90
+ options?: Partial<QRCodeOptions> & {
91
+ styled?: boolean;
92
+ style?: StyledSVGOptions;
93
+ cache?: boolean;
94
+ }
95
+ ): Promise<QRCodeResult[]>;
96
+
97
+ // Backward compatibility aliases (snake_case)
98
+ export declare const generate_rounded_qrcode: typeof generateRoundedQRCodeCached;
99
+ export declare const generate_qrcode_with_logo_area: typeof generateQRCodeWithLogoAreaCached;
100
+ export declare const generate_gradient_qrcode: typeof generateGradientQRCodeCached;
101
+ export declare const generate_wechat_style_qrcode: typeof generateWechatStyleQRCodeCached;
102
+ export declare const generate_douyin_style_qrcode: typeof generateDouyinStyleQRCodeCached;
103
+ export declare const generate_alipay_style_qrcode: typeof generateAlipayStyleQRCodeCached;
104
+ export declare const generate_xiaohongshu_style_qrcode: typeof generateXiaohongshuStyleQRCodeCached;
105
+ export declare const generate_cyberpunk_style_qrcode: typeof generateCyberpunkStyleQRCodeCached;
106
+ export declare const generate_retro_style_qrcode: typeof generateRetroStyleQRCodeCached;
107
+ export declare const generate_minimal_style_qrcode: typeof generateMinimalStyleQRCodeCached;
108
+
109
+ // Default export
110
+ export default QRCodeCore;