@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.
- package/LICENSE +21 -0
- package/README.md +215 -0
- package/dist/commonjs/index.js +81 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/specs/v1/NativeRNQrGenerator.js +9 -0
- package/dist/commonjs/specs/v1/NativeRNQrGenerator.js.map +1 -0
- package/dist/module/index.js +75 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/specs/v1/NativeRNQrGenerator.js +3 -0
- package/dist/module/specs/v1/NativeRNQrGenerator.js.map +1 -0
- package/dist/typescript/index.d.ts +39 -0
- package/dist/typescript/specs/v1/NativeRNQrGenerator.d.ts +40 -0
- package/harmony/qr_generator/LICENSE +21 -0
- package/harmony/qr_generator/NOTICE +33 -0
- package/harmony/qr_generator/OAT.xml +38 -0
- package/harmony/qr_generator/build-profile.json5 +16 -0
- package/harmony/qr_generator/hvigorfile.ts +2 -0
- package/harmony/qr_generator/index.ets +1 -0
- package/harmony/qr_generator/oh-package.json5 +15 -0
- package/harmony/qr_generator/src/main/cpp/CMakeLists.txt +15 -0
- package/harmony/qr_generator/src/main/cpp/QrGeneratorPackage.h +13 -0
- package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/BaseQrGeneratorPackage.h +72 -0
- package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/dummy.cpp +2 -0
- package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/turbo_modules/RNQrGenerator.cpp +17 -0
- package/harmony/qr_generator/src/main/cpp/generated/RNOH/generated/turbo_modules/RNQrGenerator.h +16 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ComponentDescriptors.h +24 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/EventEmitters.cpp +16 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/EventEmitters.h +17 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/Props.cpp +19 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/Props.h +18 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ShadowNodes.cpp +17 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/ShadowNodes.h +23 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/States.cpp +16 -0
- package/harmony/qr_generator/src/main/cpp/generated/react/renderer/components/qr_generator/States.h +19 -0
- package/harmony/qr_generator/src/main/ets/DetectScanWorker.ets +6 -0
- package/harmony/qr_generator/src/main/ets/QrGeneratorTurboModulesFactory.ets +18 -0
- package/harmony/qr_generator/src/main/ets/RNQrGeneratorTurboModule.ets +75 -0
- package/harmony/qr_generator/src/main/ets/ZxingImageHelper.ets +1449 -0
- package/harmony/qr_generator/src/main/ets/generated/index.ets +5 -0
- package/harmony/qr_generator/src/main/ets/generated/ts.ts +5 -0
- package/harmony/qr_generator/src/main/ets/generated/turboModules/RNQrGenerator.ts +26 -0
- package/harmony/qr_generator/src/main/ets/generated/turboModules/ts.ts +5 -0
- package/harmony/qr_generator/src/main/module.json5 +13 -0
- package/harmony/qr_generator/src/main/resources/base/element/string.json +8 -0
- package/harmony/qr_generator/src/main/resources/en_US/element/string.json +8 -0
- package/harmony/qr_generator/src/main/resources/zh_CN/element/string.json +8 -0
- package/harmony/qr_generator.har +0 -0
- package/package.json +72 -0
- package/src/index.ts +151 -0
- package/src/specs/v1/.gitkeep +1 -0
- package/src/specs/v1/NativeRNQrGenerator.ts +55 -0
- package/src/specs/v2/.gitkeep +1 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by "react-native codegen-lib-harmony"
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Tag } from "@rnoh/react-native-openharmony/ts"
|
|
6
|
+
|
|
7
|
+
export namespace RNQrGenerator {
|
|
8
|
+
export const NAME = 'RNQrGenerator' as const
|
|
9
|
+
|
|
10
|
+
export type DetectOptions = {uri?: string, base64?: string}
|
|
11
|
+
|
|
12
|
+
export type DetectResult = {values: string[], type: string, correctionLevel?: string}
|
|
13
|
+
|
|
14
|
+
export type GenerateOptions = {value: string, backgroundColor?: number, color?: number, width?: number, height?: number, base64?: boolean, padding?: Padding, fileName?: string, correctionLevel?: string}
|
|
15
|
+
|
|
16
|
+
export type GenerateResult = {uri: string, width: number, height: number, base64?: string}
|
|
17
|
+
|
|
18
|
+
export type Padding = {top?: number, left?: number, bottom?: number, right?: number}
|
|
19
|
+
|
|
20
|
+
export interface Spec {
|
|
21
|
+
generate(options: GenerateOptions, errorCallback: (error: string) => void, successCallback: (result: GenerateResult) => void): void;
|
|
22
|
+
|
|
23
|
+
detect(options: DetectOptions, errorCallback: (error: string) => void, successCallback: (result: DetectResult) => void): void;
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
}
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hxa-rn/rn-qr-generator",
|
|
3
|
+
"displayName": "@hxa-rn/rn-qr-generator",
|
|
4
|
+
"version": "2.0.0-beta.1",
|
|
5
|
+
"description": "React native QR Code generator / reader",
|
|
6
|
+
"main": "./dist/commonjs/index.js",
|
|
7
|
+
"module": "./dist/module/index.js",
|
|
8
|
+
"react-native": "./dist/module/index.js",
|
|
9
|
+
"types": "./dist/typescript/index.d.ts",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"private": false,
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/gevgasparyan/rn-qr-generator.git"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"react-native",
|
|
18
|
+
"harmony",
|
|
19
|
+
"harmonyos"
|
|
20
|
+
],
|
|
21
|
+
"homepage": "https://github.com/gevgasparyan/rn-qr-generator#readme",
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"registry": "https://registry.npmjs.org/"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/",
|
|
27
|
+
"src/",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE",
|
|
30
|
+
"harmony/"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"prepare": "tsc --noEmit && bob build",
|
|
34
|
+
"codegen-lib": "react-native codegen-lib-harmony --no-safety-check --npm-package-name qr_generator --cpp-output-path ./harmony/qr_generator/src/main/cpp/generated --ets-output-path ./harmony/qr_generator/src/main/ets/generated --turbo-modules-spec-paths ./src/specs/v1/NativeRNQrGenerator.ts"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"react-native": ">=0.72",
|
|
38
|
+
"react": "*"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"typescript": "5.0.4",
|
|
42
|
+
"@react-native/typescript-config": "0.79.5",
|
|
43
|
+
"react": "18.2.0",
|
|
44
|
+
"@types/react": "18.2.79",
|
|
45
|
+
"react-native": "0.72.5",
|
|
46
|
+
"jest": "^29.6.3",
|
|
47
|
+
"react-native-builder-bob": "^0.18.0",
|
|
48
|
+
"@react-native-oh/react-native-harmony-cli": "^0.77.50",
|
|
49
|
+
"metro": "^0.81.0"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18"
|
|
53
|
+
},
|
|
54
|
+
"harmony": {
|
|
55
|
+
"alias": "rn-qr-generator",
|
|
56
|
+
"autolinking": {
|
|
57
|
+
"cmakeLibraryTargetName": "qr_generator",
|
|
58
|
+
"ohPackageName": "@hxa-rn/rn-qr-generator",
|
|
59
|
+
"etsPackageClassName": "QrGeneratorPackage",
|
|
60
|
+
"cppPackageClassName": "QrGeneratorPackage"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"react-native-builder-bob": {
|
|
64
|
+
"source": "src",
|
|
65
|
+
"output": "dist",
|
|
66
|
+
"targets": [
|
|
67
|
+
"commonjs",
|
|
68
|
+
"module",
|
|
69
|
+
"typescript"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { NativeModules, Platform, processColor } from "react-native";
|
|
2
|
+
|
|
3
|
+
const LINKING_ERROR =
|
|
4
|
+
`The package 'rn-qr-generator' doesn't seem to be linked. Make sure: \n\n` +
|
|
5
|
+
Platform.select({ ios: "- You have run 'pod install'\n", default: "" }) +
|
|
6
|
+
"- You rebuilt the app after installing the package\n" +
|
|
7
|
+
"- You are not using Expo Go\n";
|
|
8
|
+
|
|
9
|
+
// Try to get TurboModule first, then fall back to legacy
|
|
10
|
+
const isTurboModuleEnabled = (globalThis as any).__turboModuleProxy != null;
|
|
11
|
+
|
|
12
|
+
const RNQrGeneratorModule = isTurboModuleEnabled
|
|
13
|
+
? require("./specs/v1/NativeRNQrGenerator").default
|
|
14
|
+
: NativeModules.RNQrGenerator;
|
|
15
|
+
|
|
16
|
+
const RNQrGenerator = RNQrGeneratorModule
|
|
17
|
+
? RNQrGeneratorModule
|
|
18
|
+
: new Proxy(
|
|
19
|
+
{},
|
|
20
|
+
{
|
|
21
|
+
get() {
|
|
22
|
+
throw new Error(LINKING_ERROR);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export type Padding = {
|
|
28
|
+
top?: number;
|
|
29
|
+
left?: number;
|
|
30
|
+
bottom?: number;
|
|
31
|
+
right?: number;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type QRCodeGenerateOptions = {
|
|
35
|
+
value: string;
|
|
36
|
+
backgroundColor?: string;
|
|
37
|
+
color?: string;
|
|
38
|
+
width?: number;
|
|
39
|
+
height?: number;
|
|
40
|
+
base64?: boolean;
|
|
41
|
+
padding?: Padding;
|
|
42
|
+
fileName?: string;
|
|
43
|
+
correctionLevel?: "L" | "M" | "Q" | "H";
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type QRCodeGenerateResult = {
|
|
47
|
+
uri: string;
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
base64?: string;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type QRCodeDetectOptions = {
|
|
54
|
+
uri?: string;
|
|
55
|
+
base64?: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export type CodeType =
|
|
59
|
+
| "Aztec"
|
|
60
|
+
| "Codabar"
|
|
61
|
+
| "Code39"
|
|
62
|
+
| "Code93"
|
|
63
|
+
| "Code128"
|
|
64
|
+
| "DataMatrix"
|
|
65
|
+
| "Ean8"
|
|
66
|
+
| "Ean13"
|
|
67
|
+
| "ITF"
|
|
68
|
+
| "MaxiCode"
|
|
69
|
+
| "PDF417"
|
|
70
|
+
| "QRCode"
|
|
71
|
+
| "RSS14"
|
|
72
|
+
| "RSSExpanded"
|
|
73
|
+
| "UPCA"
|
|
74
|
+
| "UPCE"
|
|
75
|
+
| "UPCEANExtension";
|
|
76
|
+
|
|
77
|
+
export type QRCodeScanResult = {
|
|
78
|
+
values: string[];
|
|
79
|
+
type: CodeType;
|
|
80
|
+
types?: CodeType[];
|
|
81
|
+
correctionLevel?: string;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const MIN_QR_DIMENSION = 10;
|
|
85
|
+
const MAX_QR_DIMENSION = 2000;
|
|
86
|
+
|
|
87
|
+
function assertDimension(
|
|
88
|
+
value: number | undefined,
|
|
89
|
+
name: "width" | "height",
|
|
90
|
+
): number | undefined {
|
|
91
|
+
if (value === undefined) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
if (!Number.isFinite(value) || !Number.isInteger(value)) {
|
|
95
|
+
throw new Error(`Property "${name}" must be a positive integer`);
|
|
96
|
+
}
|
|
97
|
+
if (value < MIN_QR_DIMENSION || value > MAX_QR_DIMENSION) {
|
|
98
|
+
throw new Error(
|
|
99
|
+
`Property "${name}" must be between ${MIN_QR_DIMENSION} and ${MAX_QR_DIMENSION}`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export default {
|
|
106
|
+
generate: (options: QRCodeGenerateOptions): Promise<QRCodeGenerateResult> => {
|
|
107
|
+
const { value, backgroundColor, color } = options;
|
|
108
|
+
if (!value) {
|
|
109
|
+
return Promise.reject('Property "value" is missing');
|
|
110
|
+
}
|
|
111
|
+
let width: number | undefined;
|
|
112
|
+
let height: number | undefined;
|
|
113
|
+
try {
|
|
114
|
+
width = assertDimension(options.width, "width");
|
|
115
|
+
height = assertDimension(options.height, "height");
|
|
116
|
+
} catch (e) {
|
|
117
|
+
return Promise.reject((e as Error).message);
|
|
118
|
+
}
|
|
119
|
+
const qrOptions = {
|
|
120
|
+
correctionLevel: "H",
|
|
121
|
+
...options,
|
|
122
|
+
width,
|
|
123
|
+
height,
|
|
124
|
+
backgroundColor: processColor(backgroundColor || "white") as number,
|
|
125
|
+
color: processColor(color || "black") as number,
|
|
126
|
+
};
|
|
127
|
+
return new Promise((resolve, reject) => {
|
|
128
|
+
RNQrGenerator.generate(
|
|
129
|
+
qrOptions,
|
|
130
|
+
(error: string) => reject(error),
|
|
131
|
+
(data: QRCodeGenerateResult) => resolve(data),
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
detect: (options: QRCodeDetectOptions): Promise<QRCodeScanResult> => {
|
|
136
|
+
const { uri, base64 } = options;
|
|
137
|
+
if (!uri && !base64) {
|
|
138
|
+
return Promise.reject('Property "uri" or "base64" are missing');
|
|
139
|
+
}
|
|
140
|
+
const qrOptions = {
|
|
141
|
+
...options,
|
|
142
|
+
};
|
|
143
|
+
return new Promise((resolve, reject) => {
|
|
144
|
+
RNQrGenerator.detect(
|
|
145
|
+
qrOptions,
|
|
146
|
+
(error: string) => reject(error),
|
|
147
|
+
(data: QRCodeScanResult) => resolve(data),
|
|
148
|
+
);
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This file ensures the directory is tracked by Git even if other files are removed
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { TurboModule } from "react-native";
|
|
2
|
+
import { TurboModuleRegistry } from "react-native";
|
|
3
|
+
|
|
4
|
+
export interface Padding {
|
|
5
|
+
top?: number;
|
|
6
|
+
left?: number;
|
|
7
|
+
bottom?: number;
|
|
8
|
+
right?: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface GenerateOptions {
|
|
12
|
+
value: string;
|
|
13
|
+
backgroundColor?: number;
|
|
14
|
+
color?: number;
|
|
15
|
+
width?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
base64?: boolean;
|
|
18
|
+
padding?: Padding;
|
|
19
|
+
fileName?: string;
|
|
20
|
+
correctionLevel?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface GenerateResult {
|
|
24
|
+
uri: string;
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
base64?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface DetectOptions {
|
|
31
|
+
uri?: string;
|
|
32
|
+
base64?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface DetectResult {
|
|
36
|
+
values: string[];
|
|
37
|
+
type: string;
|
|
38
|
+
types?: string[];
|
|
39
|
+
correctionLevel?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface Spec extends TurboModule {
|
|
43
|
+
generate(
|
|
44
|
+
options: GenerateOptions,
|
|
45
|
+
errorCallback: (error: string) => void,
|
|
46
|
+
successCallback: (result: GenerateResult) => void,
|
|
47
|
+
): void;
|
|
48
|
+
detect(
|
|
49
|
+
options: DetectOptions,
|
|
50
|
+
errorCallback: (error: string) => void,
|
|
51
|
+
successCallback: (result: DetectResult) => void,
|
|
52
|
+
): void;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default TurboModuleRegistry.getEnforcing<Spec>("RNQrGenerator");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# This file ensures the directory is tracked by Git
|