@hxa-rn/rn-qr-generator 2.0.0-beta.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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +215 -0
  3. package/dist/commonjs/index.js +81 -0
  4. package/dist/commonjs/index.js.map +1 -0
  5. package/dist/commonjs/specs/v1/NativeRNQrGenerator.js +9 -0
  6. package/dist/commonjs/specs/v1/NativeRNQrGenerator.js.map +1 -0
  7. package/dist/module/index.js +75 -0
  8. package/dist/module/index.js.map +1 -0
  9. package/dist/module/specs/v1/NativeRNQrGenerator.js +3 -0
  10. package/dist/module/specs/v1/NativeRNQrGenerator.js.map +1 -0
  11. package/dist/typescript/index.d.ts +39 -0
  12. package/dist/typescript/specs/v1/NativeRNQrGenerator.d.ts +40 -0
  13. package/harmony/qr_generator/LICENSE +21 -0
  14. package/harmony/qr_generator/NOTICE +33 -0
  15. package/harmony/qr_generator/OAT.xml +38 -0
  16. package/harmony/qr_generator/build-profile.json5 +16 -0
  17. package/harmony/qr_generator/hvigorfile.ts +2 -0
  18. package/harmony/qr_generator/index.ets +1 -0
  19. package/harmony/qr_generator/oh-package.json5 +15 -0
  20. package/harmony/qr_generator/src/main/cpp/CMakeLists.txt +15 -0
  21. package/harmony/qr_generator/src/main/cpp/QrGeneratorPackage.h +13 -0
  22. package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/BaseQrGeneratorPackage.h +72 -0
  23. package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/dummy.cpp +2 -0
  24. package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/turbo_modules/RNQrGenerator.cpp +17 -0
  25. package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/turbo_modules/RNQrGenerator.h +16 -0
  26. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ComponentDescriptors.h +24 -0
  27. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/EventEmitters.cpp +16 -0
  28. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/EventEmitters.h +17 -0
  29. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/Props.cpp +19 -0
  30. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/Props.h +18 -0
  31. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ShadowNodes.cpp +17 -0
  32. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ShadowNodes.h +23 -0
  33. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/States.cpp +16 -0
  34. package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/States.h +19 -0
  35. package/harmony/qr_generator/src/main/ets/DetectScanWorker.ets +6 -0
  36. package/harmony/qr_generator/src/main/ets/QrGeneratorTurboModulesFactory.ets +18 -0
  37. package/harmony/qr_generator/src/main/ets/RNQrGeneratorTurboModule.ets +75 -0
  38. package/harmony/qr_generator/src/main/ets/ZxingImageHelper.ets +1449 -0
  39. package/harmony/qr_generator/src/main/ets/generated/index.ets +5 -0
  40. package/harmony/qr_generator/src/main/ets/generated/ts.ts +5 -0
  41. package/harmony/qr_generator/src/main/ets/generated/turboModules/RNQrGenerator.ts +26 -0
  42. package/harmony/qr_generator/src/main/ets/generated/turboModules/ts.ts +5 -0
  43. package/harmony/qr_generator/src/main/module.json5 +13 -0
  44. package/harmony/qr_generator/src/main/resources/base/element/string.json +8 -0
  45. package/harmony/qr_generator/src/main/resources/en_US/element/string.json +8 -0
  46. package/harmony/qr_generator/src/main/resources/zh_CN/element/string.json +8 -0
  47. package/harmony/qr_generator.har +0 -0
  48. package/package.json +72 -0
  49. package/src/index.ts +151 -0
  50. package/src/specs/v1/.gitkeep +1 -0
  51. package/src/specs/v1/NativeRNQrGenerator.ts +55 -0
  52. package/src/specs/v2/.gitkeep +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 hxa-rn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,215 @@
1
+ # rn-qr-generator
2
+
3
+ 本项目基于 [rn-qr-generator](https://github.com/gevgasparyan/rn-qr-generator) 开发。如果在使用过程中有任何问题,欢迎在 AtomGit 提交 Issue,会及时跟进。
4
+
5
+ ## 项目介绍
6
+
7
+ **rn-qr-generator**(鸿蒙适配包 `@hxa-rn/rn-qr-generator` **2.0.0-beta.1**)是 React Native 二维码生成与识别工具库,基于 TurboModule **`RNQrGenerator`** 提供:
8
+
9
+ - **`generate`**:将文本编码为二维码 PNG,支持宽高、前/背景色、纠错等级、内边距、base64 输出与自定义文件名;
10
+ - **`detect`**:从本地图片 `uri` 或 `base64` 数据识别二维码及多种一维/二维条码,返回内容与 `type` 字段。
11
+
12
+ 本库含鸿蒙原生 HAR(`harmony/qr_generator/`),编解码引擎为 `@ohos/zxing`。
13
+
14
+ ## 集成指南
15
+
16
+ ### 安装
17
+
18
+ ```bash
19
+ npm install @hxa-rn/rn-qr-generator
20
+ ```
21
+
22
+ 业务代码通过 `harmony.alias` 仍使用原包名导入:
23
+
24
+ ```tsx
25
+ import RNQRGenerator from 'rn-qr-generator';
26
+ ```
27
+
28
+ ### 依赖要求
29
+
30
+ | 项 | 要求 |
31
+ |----|------|
32
+ | `react-native` | `>=0.72`(peerDependencies) |
33
+ | `react` | `*`(peerDependencies) |
34
+ | Node.js | `>=18`(engines) |
35
+
36
+ ### Autolinking
37
+
38
+ 本模块支持 RNOH Autolinking(`harmony.autolinking` 配置 `QrGeneratorPackage` / CMake 目标 `qr_generator`)。工程已启用 Autolinking 时,**无需**手动注册。
39
+
40
+ **Autolink 未生效时的备选**(手动注册):
41
+
42
+ 1. 在 `entry/oh-package.json5` 添加 HAR 依赖:
43
+
44
+ ```json
45
+ "dependencies": {
46
+ "@hxa-rn/rn-qr-generator": "file:../../node_modules/@hxa-rn/rn-qr-generator/harmony/qr_generator.har"
47
+ }
48
+ ```
49
+
50
+ 2. 在 `entry/src/main/cpp/CMakeLists.txt` 添加:
51
+
52
+ ```cmake
53
+ add_subdirectory("${OH_MODULES_DIR}/@hxa-rn/rn-qr-generator/src/main/cpp" ./qr_generator)
54
+ target_link_libraries(rnoh_app PUBLIC qr_generator)
55
+ ```
56
+
57
+ 3. C++ 侧 `PackageProvider.cpp` 注册 `QrGeneratorPackage`;ETS 侧 `RNPackagesFactory.ets` 注册 `QrGeneratorPackage`(自 `@hxa-rn/rn-qr-generator` 导入)。
58
+ 执行 `ohpm install --all` 后重新编译 HAP。
59
+
60
+ ## 使用说明
61
+
62
+ ### 生成二维码
63
+
64
+ ```tsx
65
+ import RNQRGenerator from 'rn-qr-generator';
66
+
67
+ try {
68
+ const result = await RNQRGenerator.generate({
69
+ value: 'https://example.com/测试',
70
+ width: 240,
71
+ height: 240,
72
+ backgroundColor: 'white',
73
+ color: 'black',
74
+ correctionLevel: 'M',
75
+ base64: true,
76
+ padding: { top: 10, left: 10, bottom: 10, right: 10 },
77
+ fileName: 'my_qr',
78
+ });
79
+ // result: { uri: 'file://...', width, height, base64? }
80
+ } catch (e) {
81
+ // value 缺失时 reject: Property "value" is missing
82
+ console.error(String(e));
83
+ }
84
+ ```
85
+
86
+ ### 识别二维码 / 条码
87
+
88
+ `uri` 与 `base64` **至少传一项**;同时传入时以 **`uri` 为准**。
89
+
90
+ ```tsx
91
+ import RNQRGenerator from 'rn-qr-generator';
92
+
93
+ try {
94
+ // 方式 A:本地图片路径
95
+ const scan = await RNQRGenerator.detect({ uri: 'file:///data/storage/.../qr.png' });
96
+ // 方式 B:base64 图像数据(与 uri 同时传入时以 uri 为准)
97
+ // const scan = await RNQRGenerator.detect({ base64: '<PNG base64 字符串>' });
98
+ // 无识别结果:成功返回空数组,不 reject
99
+ // scan: { values: [], type: '' }
100
+ } catch (e) {
101
+ // uri 与 base64 都缺失时 reject: Property "uri" or "base64" are missing
102
+ // 图片不存在或读取失败:reject,如 IMAGE_NOT_FOUND
103
+ console.error(String(e));
104
+ }
105
+ ```
106
+
107
+ 从相册选图后识别时,需自行接入 `@react-native-ohos/react-native-image-picker`(或等价能力)获取本地 `uri`,再调用 `detect({ uri })`。
108
+
109
+ ## 接口文档
110
+
111
+ ### `RNQRGenerator.generate(options)`
112
+
113
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
114
+ |------|------|------|--------|------|
115
+ | `value` | `string` | 是 | - | 待编码文本 |
116
+ | `width` | `number` | 否 | `100` | 图片宽(px);须为 10-2000 的整数,否则 JS 层 reject |
117
+ | `height` | `number` | 否 | `100` | 图片高(px);须为 10-2000 的整数,否则 JS 层 reject |
118
+ | `backgroundColor` | `string` | 否 | `'white'` | 背景色 |
119
+ | `color` | `string` | 否 | `'black'` | 前景色 |
120
+ | `base64` | `boolean` | 否 | `false` | 是否返回 PNG base64 |
121
+ | `padding` | `{top?,left?,bottom?,right?}` | 否 | 各边 `0` | 内边距(px) |
122
+ | `fileName` | `string` | 否 | UUID | 输出文件名(无扩展名,库追加 `.png`) |
123
+ | `correctionLevel` | `'L'\|'M'\|'Q'\|'H'` | 否 | `'H'` | 纠错等级 |
124
+
125
+ **返回** `Promise<{ uri: string; width: number; height: number; base64?: string }>`
126
+
127
+ ### `RNQRGenerator.detect(options)`
128
+
129
+ | 参数 | 类型 | 必填 | 说明 |
130
+ |------|------|------|------|
131
+ | `uri` | `string` | 条件必填 | 本地图片路径;与 `base64` 同时存在时优先使用 |
132
+ | `base64` | `string` | 条件必填 | PNG 等图像数据的 base64 |
133
+
134
+ **返回** `Promise<{ values: string[]; type: string }>`
135
+
136
+ `type` 覆盖 QRCode、Code128、Ean13、DataMatrix、PDF417 等 17 种格式;无结果时 `values=[]`、`type=''`;未知格式时 `type` 为空字符串。
137
+
138
+ ## 快速验证(运行 Example)
139
+
140
+ ### 前置条件
141
+
142
+ | 依赖 | 版本要求 |
143
+ |------|----------|
144
+ | Node.js | >= 18(运行 Example 建议 >= 20,见 `example/package.json`) |
145
+ | DevEco Studio | 5.0+ / 6.0+ |
146
+ | HarmonyOS SDK | API 13+(`example/harmony` 的 `compatibleSdkVersion` 为 `5.0.1(13)`) |
147
+
148
+ ### 运行步骤
149
+
150
+ **1. 克隆仓库**
151
+
152
+ ```bash
153
+ git clone https://gitcode.com/hxa-rn/rn-qr-generator.git
154
+ cd rn-qr-generator
155
+ git checkout br_rnoh0.72
156
+ ```
157
+
158
+ **2. 进入 example 目录,安装依赖**
159
+
160
+ ```bash
161
+ cd example
162
+ npm install --legacy-peer-deps
163
+ ```
164
+
165
+ Example 已改为从 npm 公仓安装 `@hxa-rn/rn-qr-generator@2.0.0-beta.1`,不再使用本地 `file:../xxx.tgz`,运行 Example 不必再执行 `npm pack`。
166
+
167
+ **3. 生成 JS Bundle**
168
+
169
+ ```bash
170
+ npm run dev
171
+ ```
172
+
173
+ 产物:`harmony/entry/src/main/resources/rawfile/bundle.harmony.js`
174
+
175
+ **4. 安装鸿蒙依赖**
176
+
177
+ ```bash
178
+ cd harmony
179
+ ohpm install
180
+ ```
181
+
182
+ **5. 用 DevEco Studio 打开鸿蒙工程**
183
+
184
+ - 打开 DevEco Studio
185
+ - 选择 `example/harmony` 目录
186
+ - 首次构建请在 **File -> Project Structure -> Signing Configs** 勾选 **Automatically generate signature**,Apply 后 Sync
187
+ - 等待 Sync 完成
188
+
189
+ **6. 编译并运行 HAP**
190
+
191
+ 在 DevEco Studio 中点击运行按钮,将 HAP 安装到设备/模拟器。
192
+
193
+ > **注意**:Example 已预置 Autolinking Package 注册、Metro alias 与 HAR 依赖,无需手动 Link。编 HAP 前必须先执行 `npm run dev`。
194
+
195
+ ## 约束与限制
196
+
197
+ | 项目 | 说明 |
198
+ | --- | --- |
199
+ | React Native / RNOH | 对等依赖 `react-native >= 0.72`。Example 使用 `react-native@0.72.5` 与 `@react-native-oh/react-native-harmony@0.72.139`(TurboModule 新架构) |
200
+ | HarmonyOS SDK | `example/harmony` 的 `compatibleSdkVersion` 为 `5.0.1(13)`;`example_auto` 为 `6.0.1(21)` |
201
+ | Node.js | 根目录 `engines.node` 为 `>=18`;运行 Example 建议 `>=20` |
202
+ | 权限 | 库 HAR `requestPermissions` 为空;生成文件写入应用沙箱 `cacheDir`。从相册识别需业务侧自行申请媒体访问权限 |
203
+ | 架构 | TurboModule 新架构,支持 RNOH Autolinking;业务侧按 `harmony.alias` 以 `rn-qr-generator` 导入 |
204
+ | 多码识别 | 鸿蒙端当前仅返回单码结果(`values` 长度通常为 1),与 Android `decodeMultiple` 多码语义存在差异 |
205
+ | 大图识别 | 原生层对解码图片降采样(最长边 1280px),避免 OOM |
206
+ | fileName | 鸿蒙端避免重复追加 `.png` 扩展名,与 Android 行为略有差异 |
207
+
208
+ ## 开源license
209
+
210
+ 本项目基于 MIT 协议,详见 [LICENSE](LICENSE) 文件。
211
+
212
+ ## 问题反馈渠道
213
+
214
+ - GitCode 仓库:https://gitcode.com/hxa-rn/rn-qr-generator
215
+ - Issue:https://gitcode.com/hxa-rn/rn-qr-generator/issues
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ const LINKING_ERROR = `The package 'rn-qr-generator' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
9
+ ios: "- You have run 'pod install'\n",
10
+ default: ""
11
+ }) + "- You rebuilt the app after installing the package\n" + "- You are not using Expo Go\n";
12
+
13
+ // Try to get TurboModule first, then fall back to legacy
14
+ const isTurboModuleEnabled = globalThis.__turboModuleProxy != null;
15
+ const RNQrGeneratorModule = isTurboModuleEnabled ? require("./specs/v1/NativeRNQrGenerator").default : _reactNative.NativeModules.RNQrGenerator;
16
+ const RNQrGenerator = RNQrGeneratorModule ? RNQrGeneratorModule : new Proxy({}, {
17
+ get() {
18
+ throw new Error(LINKING_ERROR);
19
+ }
20
+ });
21
+ const MIN_QR_DIMENSION = 10;
22
+ const MAX_QR_DIMENSION = 2000;
23
+ function assertDimension(value, name) {
24
+ if (value === undefined) {
25
+ return undefined;
26
+ }
27
+ if (!Number.isFinite(value) || !Number.isInteger(value)) {
28
+ throw new Error(`Property "${name}" must be a positive integer`);
29
+ }
30
+ if (value < MIN_QR_DIMENSION || value > MAX_QR_DIMENSION) {
31
+ throw new Error(`Property "${name}" must be between ${MIN_QR_DIMENSION} and ${MAX_QR_DIMENSION}`);
32
+ }
33
+ return value;
34
+ }
35
+ var _default = exports.default = {
36
+ generate: options => {
37
+ const {
38
+ value,
39
+ backgroundColor,
40
+ color
41
+ } = options;
42
+ if (!value) {
43
+ return Promise.reject('Property "value" is missing');
44
+ }
45
+ let width;
46
+ let height;
47
+ try {
48
+ width = assertDimension(options.width, "width");
49
+ height = assertDimension(options.height, "height");
50
+ } catch (e) {
51
+ return Promise.reject(e.message);
52
+ }
53
+ const qrOptions = {
54
+ correctionLevel: "H",
55
+ ...options,
56
+ width,
57
+ height,
58
+ backgroundColor: (0, _reactNative.processColor)(backgroundColor || "white"),
59
+ color: (0, _reactNative.processColor)(color || "black")
60
+ };
61
+ return new Promise((resolve, reject) => {
62
+ RNQrGenerator.generate(qrOptions, error => reject(error), data => resolve(data));
63
+ });
64
+ },
65
+ detect: options => {
66
+ const {
67
+ uri,
68
+ base64
69
+ } = options;
70
+ if (!uri && !base64) {
71
+ return Promise.reject('Property "uri" or "base64" are missing');
72
+ }
73
+ const qrOptions = {
74
+ ...options
75
+ };
76
+ return new Promise((resolve, reject) => {
77
+ RNQrGenerator.detect(qrOptions, error => reject(error), data => resolve(data));
78
+ });
79
+ }
80
+ };
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","isTurboModuleEnabled","globalThis","__turboModuleProxy","RNQrGeneratorModule","NativeModules","RNQrGenerator","Proxy","get","Error","MIN_QR_DIMENSION","MAX_QR_DIMENSION","assertDimension","value","name","undefined","Number","isFinite","isInteger","_default","exports","generate","options","backgroundColor","color","Promise","reject","width","height","e","message","qrOptions","correctionLevel","processColor","resolve","error","data","detect","uri","base64"],"sources":["index.ts"],"sourcesContent":["import { NativeModules, Platform, processColor } from \"react-native\";\r\n\r\nconst LINKING_ERROR =\r\n `The package 'rn-qr-generator' doesn't seem to be linked. Make sure: \\n\\n` +\r\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: \"\" }) +\r\n \"- You rebuilt the app after installing the package\\n\" +\r\n \"- You are not using Expo Go\\n\";\r\n\r\n// Try to get TurboModule first, then fall back to legacy\r\nconst isTurboModuleEnabled = (globalThis as any).__turboModuleProxy != null;\r\n\r\nconst RNQrGeneratorModule = isTurboModuleEnabled\r\n ? require(\"./specs/v1/NativeRNQrGenerator\").default\r\n : NativeModules.RNQrGenerator;\r\n\r\nconst RNQrGenerator = RNQrGeneratorModule\r\n ? RNQrGeneratorModule\r\n : new Proxy(\r\n {},\r\n {\r\n get() {\r\n throw new Error(LINKING_ERROR);\r\n },\r\n },\r\n );\r\n\r\nexport type Padding = {\r\n top?: number;\r\n left?: number;\r\n bottom?: number;\r\n right?: number;\r\n};\r\n\r\nexport type QRCodeGenerateOptions = {\r\n value: string;\r\n backgroundColor?: string;\r\n color?: string;\r\n width?: number;\r\n height?: number;\r\n base64?: boolean;\r\n padding?: Padding;\r\n fileName?: string;\r\n correctionLevel?: \"L\" | \"M\" | \"Q\" | \"H\";\r\n};\r\n\r\nexport type QRCodeGenerateResult = {\r\n uri: string;\r\n width: number;\r\n height: number;\r\n base64?: string;\r\n};\r\n\r\nexport type QRCodeDetectOptions = {\r\n uri?: string;\r\n base64?: string;\r\n};\r\n\r\nexport type CodeType =\r\n | \"Aztec\"\r\n | \"Codabar\"\r\n | \"Code39\"\r\n | \"Code93\"\r\n | \"Code128\"\r\n | \"DataMatrix\"\r\n | \"Ean8\"\r\n | \"Ean13\"\r\n | \"ITF\"\r\n | \"MaxiCode\"\r\n | \"PDF417\"\r\n | \"QRCode\"\r\n | \"RSS14\"\r\n | \"RSSExpanded\"\r\n | \"UPCA\"\r\n | \"UPCE\"\r\n | \"UPCEANExtension\";\r\n\r\nexport type QRCodeScanResult = {\r\n values: string[];\r\n type: CodeType;\r\n types?: CodeType[];\r\n correctionLevel?: string;\r\n};\r\n\r\nconst MIN_QR_DIMENSION = 10;\r\nconst MAX_QR_DIMENSION = 2000;\r\n\r\nfunction assertDimension(\r\n value: number | undefined,\r\n name: \"width\" | \"height\",\r\n): number | undefined {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\r\n throw new Error(`Property \"${name}\" must be a positive integer`);\r\n }\r\n if (value < MIN_QR_DIMENSION || value > MAX_QR_DIMENSION) {\r\n throw new Error(\r\n `Property \"${name}\" must be between ${MIN_QR_DIMENSION} and ${MAX_QR_DIMENSION}`,\r\n );\r\n }\r\n return value;\r\n}\r\n\r\nexport default {\r\n generate: (options: QRCodeGenerateOptions): Promise<QRCodeGenerateResult> => {\r\n const { value, backgroundColor, color } = options;\r\n if (!value) {\r\n return Promise.reject('Property \"value\" is missing');\r\n }\r\n let width: number | undefined;\r\n let height: number | undefined;\r\n try {\r\n width = assertDimension(options.width, \"width\");\r\n height = assertDimension(options.height, \"height\");\r\n } catch (e) {\r\n return Promise.reject((e as Error).message);\r\n }\r\n const qrOptions = {\r\n correctionLevel: \"H\",\r\n ...options,\r\n width,\r\n height,\r\n backgroundColor: processColor(backgroundColor || \"white\") as number,\r\n color: processColor(color || \"black\") as number,\r\n };\r\n return new Promise((resolve, reject) => {\r\n RNQrGenerator.generate(\r\n qrOptions,\r\n (error: string) => reject(error),\r\n (data: QRCodeGenerateResult) => resolve(data),\r\n );\r\n });\r\n },\r\n detect: (options: QRCodeDetectOptions): Promise<QRCodeScanResult> => {\r\n const { uri, base64 } = options;\r\n if (!uri && !base64) {\r\n return Promise.reject('Property \"uri\" or \"base64\" are missing');\r\n }\r\n const qrOptions = {\r\n ...options,\r\n };\r\n return new Promise((resolve, reject) => {\r\n RNQrGenerator.detect(\r\n qrOptions,\r\n (error: string) => reject(error),\r\n (data: QRCodeScanResult) => resolve(data),\r\n );\r\n });\r\n },\r\n};\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing("RNQrGenerator");
9
+ //# sourceMappingURL=NativeRNQrGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sources":["NativeRNQrGenerator.ts"],"sourcesContent":["import type { TurboModule } from \"react-native\";\r\nimport { TurboModuleRegistry } from \"react-native\";\r\n\r\nexport interface Padding {\r\n top?: number;\r\n left?: number;\r\n bottom?: number;\r\n right?: number;\r\n}\r\n\r\nexport interface GenerateOptions {\r\n value: string;\r\n backgroundColor?: number;\r\n color?: number;\r\n width?: number;\r\n height?: number;\r\n base64?: boolean;\r\n padding?: Padding;\r\n fileName?: string;\r\n correctionLevel?: string;\r\n}\r\n\r\nexport interface GenerateResult {\r\n uri: string;\r\n width: number;\r\n height: number;\r\n base64?: string;\r\n}\r\n\r\nexport interface DetectOptions {\r\n uri?: string;\r\n base64?: string;\r\n}\r\n\r\nexport interface DetectResult {\r\n values: string[];\r\n type: string;\r\n types?: string[];\r\n correctionLevel?: string;\r\n}\r\n\r\nexport interface Spec extends TurboModule {\r\n generate(\r\n options: GenerateOptions,\r\n errorCallback: (error: string) => void,\r\n successCallback: (result: GenerateResult) => void,\r\n ): void;\r\n detect(\r\n options: DetectOptions,\r\n errorCallback: (error: string) => void,\r\n successCallback: (result: DetectResult) => void,\r\n ): void;\r\n}\r\n\r\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"RNQrGenerator\");\r\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAqDpCC,gCAAmB,CAACC,YAAY,CAAO,eAAe,CAAC","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ import { NativeModules, Platform, processColor } from "react-native";
2
+ const LINKING_ERROR = `The package 'rn-qr-generator' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
3
+ ios: "- You have run 'pod install'\n",
4
+ default: ""
5
+ }) + "- You rebuilt the app after installing the package\n" + "- You are not using Expo Go\n";
6
+
7
+ // Try to get TurboModule first, then fall back to legacy
8
+ const isTurboModuleEnabled = globalThis.__turboModuleProxy != null;
9
+ const RNQrGeneratorModule = isTurboModuleEnabled ? require("./specs/v1/NativeRNQrGenerator").default : NativeModules.RNQrGenerator;
10
+ const RNQrGenerator = RNQrGeneratorModule ? RNQrGeneratorModule : new Proxy({}, {
11
+ get() {
12
+ throw new Error(LINKING_ERROR);
13
+ }
14
+ });
15
+ const MIN_QR_DIMENSION = 10;
16
+ const MAX_QR_DIMENSION = 2000;
17
+ function assertDimension(value, name) {
18
+ if (value === undefined) {
19
+ return undefined;
20
+ }
21
+ if (!Number.isFinite(value) || !Number.isInteger(value)) {
22
+ throw new Error(`Property "${name}" must be a positive integer`);
23
+ }
24
+ if (value < MIN_QR_DIMENSION || value > MAX_QR_DIMENSION) {
25
+ throw new Error(`Property "${name}" must be between ${MIN_QR_DIMENSION} and ${MAX_QR_DIMENSION}`);
26
+ }
27
+ return value;
28
+ }
29
+ export default {
30
+ generate: options => {
31
+ const {
32
+ value,
33
+ backgroundColor,
34
+ color
35
+ } = options;
36
+ if (!value) {
37
+ return Promise.reject('Property "value" is missing');
38
+ }
39
+ let width;
40
+ let height;
41
+ try {
42
+ width = assertDimension(options.width, "width");
43
+ height = assertDimension(options.height, "height");
44
+ } catch (e) {
45
+ return Promise.reject(e.message);
46
+ }
47
+ const qrOptions = {
48
+ correctionLevel: "H",
49
+ ...options,
50
+ width,
51
+ height,
52
+ backgroundColor: processColor(backgroundColor || "white"),
53
+ color: processColor(color || "black")
54
+ };
55
+ return new Promise((resolve, reject) => {
56
+ RNQrGenerator.generate(qrOptions, error => reject(error), data => resolve(data));
57
+ });
58
+ },
59
+ detect: options => {
60
+ const {
61
+ uri,
62
+ base64
63
+ } = options;
64
+ if (!uri && !base64) {
65
+ return Promise.reject('Property "uri" or "base64" are missing');
66
+ }
67
+ const qrOptions = {
68
+ ...options
69
+ };
70
+ return new Promise((resolve, reject) => {
71
+ RNQrGenerator.detect(qrOptions, error => reject(error), data => resolve(data));
72
+ });
73
+ }
74
+ };
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeModules","Platform","processColor","LINKING_ERROR","select","ios","default","isTurboModuleEnabled","globalThis","__turboModuleProxy","RNQrGeneratorModule","require","RNQrGenerator","Proxy","get","Error","MIN_QR_DIMENSION","MAX_QR_DIMENSION","assertDimension","value","name","undefined","Number","isFinite","isInteger","generate","options","backgroundColor","color","Promise","reject","width","height","e","message","qrOptions","correctionLevel","resolve","error","data","detect","uri","base64"],"sources":["index.ts"],"sourcesContent":["import { NativeModules, Platform, processColor } from \"react-native\";\r\n\r\nconst LINKING_ERROR =\r\n `The package 'rn-qr-generator' doesn't seem to be linked. Make sure: \\n\\n` +\r\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: \"\" }) +\r\n \"- You rebuilt the app after installing the package\\n\" +\r\n \"- You are not using Expo Go\\n\";\r\n\r\n// Try to get TurboModule first, then fall back to legacy\r\nconst isTurboModuleEnabled = (globalThis as any).__turboModuleProxy != null;\r\n\r\nconst RNQrGeneratorModule = isTurboModuleEnabled\r\n ? require(\"./specs/v1/NativeRNQrGenerator\").default\r\n : NativeModules.RNQrGenerator;\r\n\r\nconst RNQrGenerator = RNQrGeneratorModule\r\n ? RNQrGeneratorModule\r\n : new Proxy(\r\n {},\r\n {\r\n get() {\r\n throw new Error(LINKING_ERROR);\r\n },\r\n },\r\n );\r\n\r\nexport type Padding = {\r\n top?: number;\r\n left?: number;\r\n bottom?: number;\r\n right?: number;\r\n};\r\n\r\nexport type QRCodeGenerateOptions = {\r\n value: string;\r\n backgroundColor?: string;\r\n color?: string;\r\n width?: number;\r\n height?: number;\r\n base64?: boolean;\r\n padding?: Padding;\r\n fileName?: string;\r\n correctionLevel?: \"L\" | \"M\" | \"Q\" | \"H\";\r\n};\r\n\r\nexport type QRCodeGenerateResult = {\r\n uri: string;\r\n width: number;\r\n height: number;\r\n base64?: string;\r\n};\r\n\r\nexport type QRCodeDetectOptions = {\r\n uri?: string;\r\n base64?: string;\r\n};\r\n\r\nexport type CodeType =\r\n | \"Aztec\"\r\n | \"Codabar\"\r\n | \"Code39\"\r\n | \"Code93\"\r\n | \"Code128\"\r\n | \"DataMatrix\"\r\n | \"Ean8\"\r\n | \"Ean13\"\r\n | \"ITF\"\r\n | \"MaxiCode\"\r\n | \"PDF417\"\r\n | \"QRCode\"\r\n | \"RSS14\"\r\n | \"RSSExpanded\"\r\n | \"UPCA\"\r\n | \"UPCE\"\r\n | \"UPCEANExtension\";\r\n\r\nexport type QRCodeScanResult = {\r\n values: string[];\r\n type: CodeType;\r\n types?: CodeType[];\r\n correctionLevel?: string;\r\n};\r\n\r\nconst MIN_QR_DIMENSION = 10;\r\nconst MAX_QR_DIMENSION = 2000;\r\n\r\nfunction assertDimension(\r\n value: number | undefined,\r\n name: \"width\" | \"height\",\r\n): number | undefined {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\r\n throw new Error(`Property \"${name}\" must be a positive integer`);\r\n }\r\n if (value < MIN_QR_DIMENSION || value > MAX_QR_DIMENSION) {\r\n throw new Error(\r\n `Property \"${name}\" must be between ${MIN_QR_DIMENSION} and ${MAX_QR_DIMENSION}`,\r\n );\r\n }\r\n return value;\r\n}\r\n\r\nexport default {\r\n generate: (options: QRCodeGenerateOptions): Promise<QRCodeGenerateResult> => {\r\n const { value, backgroundColor, color } = options;\r\n if (!value) {\r\n return Promise.reject('Property \"value\" is missing');\r\n }\r\n let width: number | undefined;\r\n let height: number | undefined;\r\n try {\r\n width = assertDimension(options.width, \"width\");\r\n height = assertDimension(options.height, \"height\");\r\n } catch (e) {\r\n return Promise.reject((e as Error).message);\r\n }\r\n const qrOptions = {\r\n correctionLevel: \"H\",\r\n ...options,\r\n width,\r\n height,\r\n backgroundColor: processColor(backgroundColor || \"white\") as number,\r\n color: processColor(color || \"black\") as number,\r\n };\r\n return new Promise((resolve, reject) => {\r\n RNQrGenerator.generate(\r\n qrOptions,\r\n (error: string) => reject(error),\r\n (data: QRCodeGenerateResult) => resolve(data),\r\n );\r\n });\r\n },\r\n detect: (options: QRCodeDetectOptions): Promise<QRCodeScanResult> => {\r\n const { uri, base64 } = options;\r\n if (!uri && !base64) {\r\n return Promise.reject('Property \"uri\" or \"base64\" are missing');\r\n }\r\n const qrOptions = {\r\n ...options,\r\n };\r\n return new Promise((resolve, reject) => {\r\n RNQrGenerator.detect(\r\n qrOptions,\r\n (error: string) => reject(error),\r\n (data: QRCodeScanResult) => resolve(data),\r\n );\r\n });\r\n },\r\n};\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { TurboModuleRegistry } from "react-native";
2
+ export default TurboModuleRegistry.getEnforcing("RNQrGenerator");
3
+ //# sourceMappingURL=NativeRNQrGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sources":["NativeRNQrGenerator.ts"],"sourcesContent":["import type { TurboModule } from \"react-native\";\r\nimport { TurboModuleRegistry } from \"react-native\";\r\n\r\nexport interface Padding {\r\n top?: number;\r\n left?: number;\r\n bottom?: number;\r\n right?: number;\r\n}\r\n\r\nexport interface GenerateOptions {\r\n value: string;\r\n backgroundColor?: number;\r\n color?: number;\r\n width?: number;\r\n height?: number;\r\n base64?: boolean;\r\n padding?: Padding;\r\n fileName?: string;\r\n correctionLevel?: string;\r\n}\r\n\r\nexport interface GenerateResult {\r\n uri: string;\r\n width: number;\r\n height: number;\r\n base64?: string;\r\n}\r\n\r\nexport interface DetectOptions {\r\n uri?: string;\r\n base64?: string;\r\n}\r\n\r\nexport interface DetectResult {\r\n values: string[];\r\n type: string;\r\n types?: string[];\r\n correctionLevel?: string;\r\n}\r\n\r\nexport interface Spec extends TurboModule {\r\n generate(\r\n options: GenerateOptions,\r\n errorCallback: (error: string) => void,\r\n successCallback: (result: GenerateResult) => void,\r\n ): void;\r\n detect(\r\n options: DetectOptions,\r\n errorCallback: (error: string) => void,\r\n successCallback: (result: DetectResult) => void,\r\n ): void;\r\n}\r\n\r\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"RNQrGenerator\");\r\n"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAqDlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,eAAe,CAAC","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ export type Padding = {
2
+ top?: number;
3
+ left?: number;
4
+ bottom?: number;
5
+ right?: number;
6
+ };
7
+ export type QRCodeGenerateOptions = {
8
+ value: string;
9
+ backgroundColor?: string;
10
+ color?: string;
11
+ width?: number;
12
+ height?: number;
13
+ base64?: boolean;
14
+ padding?: Padding;
15
+ fileName?: string;
16
+ correctionLevel?: "L" | "M" | "Q" | "H";
17
+ };
18
+ export type QRCodeGenerateResult = {
19
+ uri: string;
20
+ width: number;
21
+ height: number;
22
+ base64?: string;
23
+ };
24
+ export type QRCodeDetectOptions = {
25
+ uri?: string;
26
+ base64?: string;
27
+ };
28
+ export type CodeType = "Aztec" | "Codabar" | "Code39" | "Code93" | "Code128" | "DataMatrix" | "Ean8" | "Ean13" | "ITF" | "MaxiCode" | "PDF417" | "QRCode" | "RSS14" | "RSSExpanded" | "UPCA" | "UPCE" | "UPCEANExtension";
29
+ export type QRCodeScanResult = {
30
+ values: string[];
31
+ type: CodeType;
32
+ types?: CodeType[];
33
+ correctionLevel?: string;
34
+ };
35
+ declare const _default: {
36
+ generate: (options: QRCodeGenerateOptions) => Promise<QRCodeGenerateResult>;
37
+ detect: (options: QRCodeDetectOptions) => Promise<QRCodeScanResult>;
38
+ };
39
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import type { TurboModule } from "react-native";
2
+ export interface Padding {
3
+ top?: number;
4
+ left?: number;
5
+ bottom?: number;
6
+ right?: number;
7
+ }
8
+ export interface GenerateOptions {
9
+ value: string;
10
+ backgroundColor?: number;
11
+ color?: number;
12
+ width?: number;
13
+ height?: number;
14
+ base64?: boolean;
15
+ padding?: Padding;
16
+ fileName?: string;
17
+ correctionLevel?: string;
18
+ }
19
+ export interface GenerateResult {
20
+ uri: string;
21
+ width: number;
22
+ height: number;
23
+ base64?: string;
24
+ }
25
+ export interface DetectOptions {
26
+ uri?: string;
27
+ base64?: string;
28
+ }
29
+ export interface DetectResult {
30
+ values: string[];
31
+ type: string;
32
+ types?: string[];
33
+ correctionLevel?: string;
34
+ }
35
+ export interface Spec extends TurboModule {
36
+ generate(options: GenerateOptions, errorCallback: (error: string) => void, successCallback: (result: GenerateResult) => void): void;
37
+ detect(options: DetectOptions, errorCallback: (error: string) => void, successCallback: (result: DetectResult) => void): void;
38
+ }
39
+ declare const _default: Spec;
40
+ export default _default;
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 hxa-rn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,33 @@
1
+ OPEN SOURCE SOFTWARE NOTICE
2
+
3
+ Please note we provide an open source software notice for the third party open source software along with this software and/or this software component (in the following just “this SOFTWARE”). The open source software licenses are granted by the respective right holders.
4
+
5
+ Warranty Disclaimer
6
+ THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
7
+
8
+ Copyright Notice and License Texts
9
+
10
+ ----------------------------------------------------------------------
11
+ Software: react-native-netinfo V11.1.0
12
+
13
+ MIT License
14
+
15
+ Copyright (c) 2015-present, Facebook, Inc.
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in all
25
+ copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ SOFTWARE.
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <configuration>
3
+ <oatconfig>
4
+ <licensefile>LICENSE</licensefile>
5
+ <filefilterlist>
6
+ <filefilter name="copyrightPolicyFilter" desc="Filters for compatibility,license header policies">
7
+ <filteritem type="filename" name="hvigorfile.ts" desc="hvigor构建脚本,DevEco Studio自动生成,不需要添加版权头"/>
8
+ <filteritem type="filename" name="*.json5" desc="hvigor工程配置文件,DevEco Studio自动生成,不需要添加版权头"/>
9
+ <filteritem type="filename" name="*.proto" desc="资源文件,不需要添加版权头"/>
10
+ <filteritem type="filename" name="*.json" desc="资源文件,不需要添加版权头"/>
11
+ <filteritem type="filepath" name="hvigorw" desc="工程模板,不修改版权头,以防有修改版权风险"/>
12
+ <filteritem type="filepath" name="hvigorw.bat" desc="工程模板,不修改版权头,以防有修改版权风险"/>
13
+ <filteritem type="filepath" name="hvigor/hvigor-wrapper.js" desc="工程模板,不修改版权头,以防有修改版权风险"/>
14
+ <filteritem type="filename" name="LICENSE" desc="工程文件,不修改版权头"/>
15
+ </filefilter>
16
+ <filefilter name="defaultPolicyFilter" desc="Filters for compatibility,license header policies">
17
+ <filteritem type="filename" name="hvigorfile.ts" desc="hvigor构建脚本,DevEco Studio自动生成,不需要添加许可证头"/>
18
+ <filteritem type="filename" name="*.json5" desc="hvigor工程配置文件,DevEco Studio自动生成,不需要添加许可证头"/>
19
+ <filteritem type="filename" name="LICENSE" desc="原三方库证书文件无需更改,因此添加过滤"/>
20
+ <filteritem type="filename" name="*.proto" desc="资源文件,不需要添加许可证头"/>
21
+ <filteritem type="filename" name="*.json" desc="资源文件,不需要添加许可证头"/>
22
+ <filteritem type="filepath" name="hvigorw" desc="工程模板,不修改版权头,以防有修改版权风险"/>
23
+ <filteritem type="filepath" name="hvigorw.bat" desc="工程模板,不修改版权头,以防有修改版权风险"/>
24
+ <filteritem type="filepath" name="hvigor/hvigor-wrapper.js" desc="工程模板,不修改版权头,以防有修改版权风险"/>
25
+ </filefilter>
26
+ <filefilter name="binaryFileTypePolicyFilter" desc="Filters for resources files policies">
27
+ <filteritem type="filename" name="icon.png" desc="应用图标"/>
28
+ <filteritem type="filename" name="app_icon.png" desc="应用图标"/>
29
+ <filteritem type="filename" name="warn.png" desc="页面展示图标"/>
30
+ </filefilter>
31
+ </filefilterlist>
32
+ <policylist>
33
+ <policy name="projectPolicy" desc="">
34
+ <policyitem type="license" name="MIT" path="*.*" desc="license under the MIT"/>
35
+ </policy>
36
+ </policylist>
37
+ </oatconfig>
38
+ </configuration>
@@ -0,0 +1,16 @@
1
+ {
2
+ "apiType": "stageMode",
3
+ // "buildOption": {
4
+ // "externalNativeOptions": {
5
+ // "path": "./src/main/cpp/CMakeLists.txt",
6
+ // "arguments": "",
7
+ // "cppFlags": ""
8
+ // },
9
+ // },
10
+ "targets": [
11
+ {
12
+ "name": "default",
13
+ "runtimeOS": "HarmonyOS"
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,2 @@
1
+ // Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently.
2
+ export { harTasks } from '@ohos/hvigor-ohos-plugin';
@@ -0,0 +1 @@
1
+ export { QrGeneratorPackage as default } from './src/main/ets/QrGeneratorTurboModulesFactory';