id-scanner-lib 1.3.3 → 1.6.2

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 (80) hide show
  1. package/README.md +324 -410
  2. package/dist/id-scanner-lib.esm.js +4826 -0
  3. package/dist/id-scanner-lib.esm.js.map +1 -0
  4. package/dist/id-scanner-lib.js +4858 -0
  5. package/dist/id-scanner-lib.js.map +1 -0
  6. package/dist/types/browser-image-compression.d.ts +19 -0
  7. package/dist/types/tesseract.d.ts +280 -0
  8. package/package.json +89 -78
  9. package/src/core/base-module.ts +78 -0
  10. package/src/core/camera-manager.ts +813 -0
  11. package/src/core/config.ts +305 -0
  12. package/src/core/errors.ts +174 -0
  13. package/src/core/event-emitter.test.ts +42 -0
  14. package/src/core/event-emitter.ts +110 -0
  15. package/src/core/loading-state.test.ts +67 -0
  16. package/src/core/loading-state.ts +156 -0
  17. package/src/core/logger.test.ts +49 -0
  18. package/src/core/logger.ts +549 -0
  19. package/src/core/module-manager.ts +163 -0
  20. package/src/core/plugin-manager.ts +429 -0
  21. package/src/core/resource-manager.ts +762 -0
  22. package/src/core/result.ts +163 -0
  23. package/src/core/scanner-factory.ts +236 -0
  24. package/src/index.ts +117 -939
  25. package/src/interfaces/external-types.ts +200 -0
  26. package/src/interfaces/face-detection.ts +309 -0
  27. package/src/interfaces/scanner-module.ts +384 -0
  28. package/src/modules/face/face-detector.ts +988 -0
  29. package/src/modules/face/index.ts +208 -0
  30. package/src/modules/face/liveness-detector.ts +908 -0
  31. package/src/modules/face/types.ts +133 -0
  32. package/src/{id-recognition → modules/id-card}/anti-fake-detector.ts +274 -240
  33. package/src/modules/id-card/id-card-detector.ts +474 -0
  34. package/src/modules/id-card/index.ts +425 -0
  35. package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
  36. package/src/modules/id-card/ocr-worker.ts +259 -0
  37. package/src/modules/id-card/types.ts +178 -0
  38. package/src/modules/qrcode/index.ts +175 -0
  39. package/src/modules/qrcode/qr-code-scanner.ts +231 -0
  40. package/src/modules/qrcode/types.ts +169 -0
  41. package/src/types/common.test.ts +99 -0
  42. package/src/types/common.ts +166 -0
  43. package/src/types/tesseract.d.ts +265 -22
  44. package/src/utils/camera.test.ts +30 -0
  45. package/src/utils/camera.ts +4 -1
  46. package/src/utils/error-handler.test.ts +137 -0
  47. package/src/utils/error-handler.ts +110 -0
  48. package/src/utils/image-processing.ts +68 -49
  49. package/src/utils/index.test.ts +186 -0
  50. package/src/utils/index.ts +429 -0
  51. package/src/utils/performance.ts +168 -131
  52. package/src/utils/resource-manager.ts +65 -146
  53. package/src/utils/retry.test.ts +142 -0
  54. package/src/utils/retry.ts +282 -0
  55. package/src/utils/types.ts +90 -2
  56. package/src/utils/utils.test.ts +171 -0
  57. package/src/utils/worker.ts +123 -84
  58. package/src/version.ts +11 -0
  59. package/tools/scaffold.js +543 -0
  60. package/dist/id-scanner-core.esm.js +0 -11349
  61. package/dist/id-scanner-core.js +0 -11361
  62. package/dist/id-scanner-core.min.js +0 -1
  63. package/dist/id-scanner-ocr.esm.js +0 -2319
  64. package/dist/id-scanner-ocr.js +0 -2328
  65. package/dist/id-scanner-ocr.min.js +0 -1
  66. package/dist/id-scanner-qr.esm.js +0 -1296
  67. package/dist/id-scanner-qr.js +0 -1305
  68. package/dist/id-scanner-qr.min.js +0 -1
  69. package/dist/id-scanner.js +0 -4561
  70. package/dist/id-scanner.min.js +0 -1
  71. package/src/core.ts +0 -138
  72. package/src/demo/demo.ts +0 -204
  73. package/src/id-recognition/data-extractor.ts +0 -262
  74. package/src/id-recognition/id-detector.ts +0 -510
  75. package/src/id-recognition/ocr-worker.ts +0 -156
  76. package/src/index-umd.ts +0 -477
  77. package/src/ocr-module.ts +0 -187
  78. package/src/qr-module.ts +0 -179
  79. package/src/scanner/barcode-scanner.ts +0 -251
  80. package/src/scanner/qr-scanner.ts +0 -167
@@ -0,0 +1,156 @@
1
+ /**
2
+ * @file 加载状态管理
3
+ * @description 提供模块加载状态跟踪功能
4
+ * @module core/loading-state
5
+ */
6
+
7
+ import { EventEmitter } from './event-emitter';
8
+
9
+ /**
10
+ * 加载状态类型
11
+ */
12
+ export enum LoadingState {
13
+ /** 空闲 */
14
+ IDLE = 'idle',
15
+ /** 加载中 */
16
+ LOADING = 'loading',
17
+ /** 就绪 */
18
+ READY = 'ready',
19
+ /** 错误 */
20
+ ERROR = 'error',
21
+ /** 已释放 */
22
+ DISPOSED = 'disposed'
23
+ }
24
+
25
+ /**
26
+ * 加载进度信息
27
+ */
28
+ export interface LoadingProgress {
29
+ /** 当前状态 */
30
+ state: LoadingState;
31
+ /** 已加载的模型 */
32
+ loadedModels: string[];
33
+ /** 正在加载的模型 */
34
+ loadingModel?: string;
35
+ /** 进度百分比 (0-100) */
36
+ progress: number;
37
+ /** 错误信息 */
38
+ error?: string;
39
+ }
40
+
41
+ /**
42
+ * 加载状态管理器
43
+ * 用于跟踪和管理模块的加载状态
44
+ */
45
+ export class LoadingStateManager extends EventEmitter {
46
+ private state: LoadingState = LoadingState.IDLE;
47
+ private loadedModels: Set<string> = new Set();
48
+ private loadingModel?: string;
49
+ private totalModels: number = 0;
50
+ private error?: string;
51
+
52
+ /**
53
+ * 开始加载
54
+ * @param totalModels 总模型数
55
+ */
56
+ startLoading(totalModels: number): void {
57
+ this.totalModels = totalModels;
58
+ this.state = LoadingState.LOADING;
59
+ this.error = undefined;
60
+ this.emit('stateChange', this.getProgress());
61
+ }
62
+
63
+ /**
64
+ * 模型开始加载
65
+ * @param modelName 模型名称
66
+ */
67
+ startModelLoading(modelName: string): void {
68
+ this.loadingModel = modelName;
69
+ this.emit('progress', this.getProgress());
70
+ }
71
+
72
+ /**
73
+ * 模型加载完成
74
+ * @param modelName 模型名称
75
+ */
76
+ completeModelLoading(modelName: string): void {
77
+ this.loadedModels.add(modelName);
78
+ this.loadingModel = undefined;
79
+ this.emit('progress', this.getProgress());
80
+ }
81
+
82
+ /**
83
+ * 加载完成
84
+ */
85
+ complete(): void {
86
+ this.state = LoadingState.READY;
87
+ this.totalModels = 0;
88
+ this.emit('stateChange', this.getProgress());
89
+ }
90
+
91
+ /**
92
+ * 加载失败
93
+ * @param error 错误信息
94
+ */
95
+ fail(error: string): void {
96
+ this.state = LoadingState.ERROR;
97
+ this.error = error;
98
+ this.emit('error', { error, progress: this.getProgress() });
99
+ }
100
+
101
+ /**
102
+ * 释放
103
+ */
104
+ dispose(): void {
105
+ this.state = LoadingState.DISPOSED;
106
+ this.loadedModels.clear();
107
+ this.totalModels = 0;
108
+ this.error = undefined;
109
+ this.emit('stateChange', this.getProgress());
110
+ }
111
+
112
+ /**
113
+ * 获取当前进度
114
+ */
115
+ getProgress(): LoadingProgress {
116
+ const progress = this.totalModels > 0
117
+ ? Math.round((this.loadedModels.size / this.totalModels) * 100)
118
+ : 0;
119
+
120
+ return {
121
+ state: this.state,
122
+ loadedModels: Array.from(this.loadedModels),
123
+ loadingModel: this.loadingModel,
124
+ progress,
125
+ error: this.error
126
+ };
127
+ }
128
+
129
+ /**
130
+ * 获取当前状态
131
+ */
132
+ getState(): LoadingState {
133
+ return this.state;
134
+ }
135
+
136
+ /**
137
+ * 是否已就绪
138
+ */
139
+ isReady(): boolean {
140
+ return this.state === LoadingState.READY;
141
+ }
142
+
143
+ /**
144
+ * 是否有错误
145
+ */
146
+ hasError(): boolean {
147
+ return this.state === LoadingState.ERROR;
148
+ }
149
+ }
150
+
151
+ /**
152
+ * 创建加载状态管理器
153
+ */
154
+ export function createLoadingStateManager(): LoadingStateManager {
155
+ return new LoadingStateManager();
156
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file Logger 测试
3
+ * @description 测试日志系统
4
+ */
5
+
6
+ import { Logger, LogLevel } from './logger';
7
+
8
+ describe('Logger', () => {
9
+ let logger: Logger;
10
+
11
+ beforeEach(() => {
12
+ logger = Logger.getInstance();
13
+ });
14
+
15
+ it('should get singleton instance', () => {
16
+ const logger2 = Logger.getInstance();
17
+ expect(logger).toBe(logger2);
18
+ });
19
+
20
+ it('should log debug message', () => {
21
+ expect(() => {
22
+ logger.debug('Test', 'Debug message');
23
+ }).not.toThrow();
24
+ });
25
+
26
+ it('should log info message', () => {
27
+ expect(() => {
28
+ logger.info('Test', 'Info message');
29
+ }).not.toThrow();
30
+ });
31
+
32
+ it('should log warn message', () => {
33
+ expect(() => {
34
+ logger.warn('Test', 'Warning message');
35
+ }).not.toThrow();
36
+ });
37
+
38
+ it('should log error message', () => {
39
+ expect(() => {
40
+ logger.error('Test', 'Error message', new Error('test error'));
41
+ }).not.toThrow();
42
+ });
43
+
44
+ it('should set log level', () => {
45
+ expect(() => {
46
+ logger.setLevel(LogLevel.WARN);
47
+ }).not.toThrow();
48
+ });
49
+ });