@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
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This code was generated by "react-native codegen-lib-harmony"
3
+ */
4
+
5
+ export * from './ts'
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This code was generated by "react-native codegen-lib-harmony"
3
+ */
4
+
5
+ export * as TM from "./turboModules/ts"
@@ -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
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This code was generated by "react-native codegen-lib-harmony"
3
+ */
4
+
5
+ export * from "./RNQrGenerator"
@@ -0,0 +1,13 @@
1
+ {
2
+ "module": {
3
+ "name": "qr_generator",
4
+ "type": "har",
5
+ "deviceTypes": [
6
+ "default",
7
+ "tablet",
8
+ "2in1"
9
+ ],
10
+ "requestPermissions": [
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "page_show",
5
+ "value": "page from npm package"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "page_show",
5
+ "value": "page from npm package"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "page_show",
5
+ "value": "page from npm package"
6
+ }
7
+ ]
8
+ }
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