@embedpdf/engines 1.0.0

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.
@@ -0,0 +1,1122 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/webworker-engine.ts
21
+ var webworker_engine_exports = {};
22
+ __export(webworker_engine_exports, {
23
+ EngineRunner: () => EngineRunner,
24
+ WebWorkerEngine: () => WebWorkerEngine,
25
+ WorkerTask: () => WorkerTask
26
+ });
27
+ module.exports = __toCommonJS(webworker_engine_exports);
28
+
29
+ // src/webworker/engine.ts
30
+ var import_models = require("@embedpdf/models");
31
+ var LOG_SOURCE = "WebWorkerEngine";
32
+ var LOG_CATEGORY = "Engine";
33
+ var WorkerTask = class extends import_models.Task {
34
+ /**
35
+ * Create a task that bind to web worker with specified message id
36
+ * @param worker - web worker instance
37
+ * @param messageId - id of message
38
+ *
39
+ * @public
40
+ */
41
+ constructor(worker, messageId) {
42
+ super();
43
+ this.worker = worker;
44
+ this.messageId = messageId;
45
+ }
46
+ /**
47
+ * {@inheritDoc @embedpdf/models!Task.abort}
48
+ *
49
+ * @override
50
+ */
51
+ abort(e) {
52
+ super.abort(e);
53
+ this.worker.postMessage({
54
+ type: "AbortRequest",
55
+ data: {
56
+ messageId: this.messageId
57
+ }
58
+ });
59
+ }
60
+ };
61
+ var _WebWorkerEngine = class _WebWorkerEngine {
62
+ /**
63
+ * Create an instance of WebWorkerEngine, it will create a worker with
64
+ * specified url.
65
+ * @param worker - webworker instance, this worker needs to contains the running instance of {@link EngineRunner}
66
+ * @param logger - logger instance
67
+ *
68
+ * @public
69
+ */
70
+ constructor(worker, logger = new import_models.NoopLogger()) {
71
+ this.worker = worker;
72
+ this.logger = logger;
73
+ /**
74
+ * All the tasks that is executing
75
+ */
76
+ this.tasks = /* @__PURE__ */ new Map();
77
+ /**
78
+ * Handle event from web worker. There are 2 kinds of event
79
+ * 1. ReadyResponse: web worker is ready
80
+ * 2. ExecuteResponse: result of execution
81
+ * @param evt - message event from web worker
82
+ * @returns
83
+ *
84
+ * @private
85
+ */
86
+ this.handle = (evt) => {
87
+ this.logger.debug(
88
+ LOG_SOURCE,
89
+ LOG_CATEGORY,
90
+ "webworker engine start handling message: ",
91
+ evt.data
92
+ );
93
+ try {
94
+ const response = evt.data;
95
+ const task = this.tasks.get(response.id);
96
+ if (!task) {
97
+ return;
98
+ }
99
+ switch (response.type) {
100
+ case "ReadyResponse":
101
+ this.readyTask.resolve(true);
102
+ break;
103
+ case "ExecuteResponse":
104
+ {
105
+ switch (response.data.type) {
106
+ case "result":
107
+ task.resolve(response.data.value);
108
+ break;
109
+ case "error":
110
+ task.reject(response.data.value.reason);
111
+ break;
112
+ }
113
+ this.tasks.delete(response.id);
114
+ }
115
+ break;
116
+ }
117
+ } catch (e) {
118
+ this.logger.error(LOG_SOURCE, LOG_CATEGORY, "webworker met error when handling message: ", e);
119
+ }
120
+ };
121
+ this.worker.addEventListener("message", this.handle);
122
+ this.readyTask = new WorkerTask(this.worker, _WebWorkerEngine.readyTaskId);
123
+ this.tasks.set(_WebWorkerEngine.readyTaskId, this.readyTask);
124
+ }
125
+ /**
126
+ * Generate a unique message id
127
+ * @returns message id
128
+ *
129
+ * @private
130
+ */
131
+ generateRequestId(id) {
132
+ return `${id}.${Date.now()}.${Math.random()}`;
133
+ }
134
+ /**
135
+ * {@inheritDoc @embedpdf/models!PdfEngine.initialize}
136
+ *
137
+ * @public
138
+ */
139
+ initialize() {
140
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "initialize");
141
+ const requestId = this.generateRequestId("General");
142
+ const task = new WorkerTask(this.worker, requestId);
143
+ const request = {
144
+ id: requestId,
145
+ type: "ExecuteRequest",
146
+ data: {
147
+ name: "initialize",
148
+ args: []
149
+ }
150
+ };
151
+ this.proxy(task, request);
152
+ return task;
153
+ }
154
+ /**
155
+ * {@inheritDoc @embedpdf/models!PdfEngine.destroy}
156
+ *
157
+ * @public
158
+ */
159
+ destroy() {
160
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "destroy");
161
+ const requestId = this.generateRequestId("General");
162
+ const task = new WorkerTask(this.worker, requestId);
163
+ task.wait(
164
+ () => {
165
+ this.worker.removeEventListener("message", this.handle);
166
+ },
167
+ () => {
168
+ this.worker.removeEventListener("message", this.handle);
169
+ }
170
+ );
171
+ const request = {
172
+ id: requestId,
173
+ type: "ExecuteRequest",
174
+ data: {
175
+ name: "destroy",
176
+ args: []
177
+ }
178
+ };
179
+ this.proxy(task, request);
180
+ return task;
181
+ }
182
+ /**
183
+ * {@inheritDoc @embedpdf/models!PdfEngine.openDocumentUrl}
184
+ *
185
+ * @public
186
+ */
187
+ openDocumentUrl(file, options) {
188
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "openDocumentUrl", file.url, options);
189
+ const requestId = this.generateRequestId(file.id);
190
+ const task = new WorkerTask(this.worker, requestId);
191
+ const request = {
192
+ id: requestId,
193
+ type: "ExecuteRequest",
194
+ data: {
195
+ name: "openDocumentUrl",
196
+ args: [file, options]
197
+ }
198
+ };
199
+ this.proxy(task, request);
200
+ return task;
201
+ }
202
+ /**
203
+ * {@inheritDoc @embedpdf/models!PdfEngine.openDocument}
204
+ *
205
+ * @public
206
+ */
207
+ openDocumentFromBuffer(file, password) {
208
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "openDocumentFromBuffer", file, password);
209
+ const requestId = this.generateRequestId(file.id);
210
+ const task = new WorkerTask(this.worker, requestId);
211
+ const request = {
212
+ id: requestId,
213
+ type: "ExecuteRequest",
214
+ data: {
215
+ name: "openDocumentFromBuffer",
216
+ args: [file, password]
217
+ }
218
+ };
219
+ this.proxy(task, request);
220
+ return task;
221
+ }
222
+ /**
223
+ * {@inheritDoc @embedpdf/models!PdfEngine.openDocumentFromLoader}
224
+ *
225
+ * @public
226
+ */
227
+ openDocumentFromLoader(file, password) {
228
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "openDocumentFromLoader", file, password);
229
+ const requestId = this.generateRequestId(file.id);
230
+ const task = new WorkerTask(this.worker, requestId);
231
+ const request = {
232
+ id: requestId,
233
+ type: "ExecuteRequest",
234
+ data: {
235
+ name: "openDocumentFromLoader",
236
+ args: [file, password]
237
+ }
238
+ };
239
+ this.proxy(task, request);
240
+ return task;
241
+ }
242
+ /**
243
+ * {@inheritDoc @embedpdf/models!PdfEngine.getMetadata}
244
+ *
245
+ * @public
246
+ */
247
+ getMetadata(doc) {
248
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getMetadata", doc);
249
+ const requestId = this.generateRequestId(doc.id);
250
+ const task = new WorkerTask(this.worker, requestId);
251
+ const request = {
252
+ id: requestId,
253
+ type: "ExecuteRequest",
254
+ data: {
255
+ name: "getMetadata",
256
+ args: [doc]
257
+ }
258
+ };
259
+ this.proxy(task, request);
260
+ return task;
261
+ }
262
+ /**
263
+ * {@inheritDoc @embedpdf/models!PdfEngine.getDocPermissions}
264
+ *
265
+ * @public
266
+ */
267
+ getDocPermissions(doc) {
268
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getDocPermissions", doc);
269
+ const requestId = this.generateRequestId(doc.id);
270
+ const task = new WorkerTask(this.worker, requestId);
271
+ const request = {
272
+ id: requestId,
273
+ type: "ExecuteRequest",
274
+ data: {
275
+ name: "getDocPermissions",
276
+ args: [doc]
277
+ }
278
+ };
279
+ this.proxy(task, request);
280
+ return task;
281
+ }
282
+ /**
283
+ * {@inheritDoc @embedpdf/models!PdfEngine.getDocUserPermissions}
284
+ *
285
+ * @public
286
+ */
287
+ getDocUserPermissions(doc) {
288
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getDocUserPermissions", doc);
289
+ const requestId = this.generateRequestId(doc.id);
290
+ const task = new WorkerTask(this.worker, requestId);
291
+ const request = {
292
+ id: requestId,
293
+ type: "ExecuteRequest",
294
+ data: {
295
+ name: "getDocUserPermissions",
296
+ args: [doc]
297
+ }
298
+ };
299
+ this.proxy(task, request);
300
+ return task;
301
+ }
302
+ /**
303
+ * {@inheritDoc @embedpdf/models!PdfEngine.getBookmarks}
304
+ *
305
+ * @public
306
+ */
307
+ getBookmarks(doc) {
308
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getBookmarks", doc);
309
+ const requestId = this.generateRequestId(doc.id);
310
+ const task = new WorkerTask(this.worker, requestId);
311
+ const request = {
312
+ id: requestId,
313
+ type: "ExecuteRequest",
314
+ data: {
315
+ name: "getBookmarks",
316
+ args: [doc]
317
+ }
318
+ };
319
+ this.proxy(task, request);
320
+ return task;
321
+ }
322
+ /**
323
+ * {@inheritDoc @embedpdf/models!PdfEngine.getSignatures}
324
+ *
325
+ * @public
326
+ */
327
+ getSignatures(doc) {
328
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getSignatures", doc);
329
+ const requestId = this.generateRequestId(doc.id);
330
+ const task = new WorkerTask(this.worker, requestId);
331
+ const request = {
332
+ id: requestId,
333
+ type: "ExecuteRequest",
334
+ data: {
335
+ name: "getSignatures",
336
+ args: [doc]
337
+ }
338
+ };
339
+ this.proxy(task, request);
340
+ return task;
341
+ }
342
+ /**
343
+ * {@inheritDoc @embedpdf/models!PdfEngine.renderPage}
344
+ *
345
+ * @public
346
+ */
347
+ renderPage(doc, page, scaleFactor, rotation, dpr, options) {
348
+ this.logger.debug(
349
+ LOG_SOURCE,
350
+ LOG_CATEGORY,
351
+ "renderPage",
352
+ doc,
353
+ page,
354
+ scaleFactor,
355
+ rotation,
356
+ dpr,
357
+ options
358
+ );
359
+ const requestId = this.generateRequestId(doc.id);
360
+ const task = new WorkerTask(this.worker, requestId);
361
+ const request = {
362
+ id: requestId,
363
+ type: "ExecuteRequest",
364
+ data: {
365
+ name: "renderPage",
366
+ args: [doc, page, scaleFactor, rotation, dpr, options]
367
+ }
368
+ };
369
+ this.proxy(task, request);
370
+ return task;
371
+ }
372
+ /**
373
+ * {@inheritDoc @embedpdf/models!PdfEngine.renderPageRect}
374
+ *
375
+ * @public
376
+ */
377
+ renderPageRect(doc, page, scaleFactor, rotation, dpr, rect, options) {
378
+ this.logger.debug(
379
+ LOG_SOURCE,
380
+ LOG_CATEGORY,
381
+ "renderPageRect",
382
+ doc,
383
+ page,
384
+ scaleFactor,
385
+ rotation,
386
+ dpr,
387
+ rect,
388
+ options
389
+ );
390
+ const requestId = this.generateRequestId(doc.id);
391
+ const task = new WorkerTask(this.worker, requestId);
392
+ const request = {
393
+ id: requestId,
394
+ type: "ExecuteRequest",
395
+ data: {
396
+ name: "renderPageRect",
397
+ args: [doc, page, scaleFactor, rotation, dpr, rect, options]
398
+ }
399
+ };
400
+ this.proxy(task, request);
401
+ return task;
402
+ }
403
+ /**
404
+ * {@inheritDoc @embedpdf/models!PdfEngine.getAllAnnotations}
405
+ *
406
+ * @public
407
+ */
408
+ getAllAnnotations(doc) {
409
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getAllAnnotations", doc);
410
+ const requestId = this.generateRequestId(doc.id);
411
+ const task = new WorkerTask(this.worker, requestId);
412
+ const request = {
413
+ id: requestId,
414
+ type: "ExecuteRequest",
415
+ data: {
416
+ name: "getAllAnnotations",
417
+ args: [doc]
418
+ }
419
+ };
420
+ this.proxy(task, request);
421
+ return task;
422
+ }
423
+ /**
424
+ * {@inheritDoc @embedpdf/models!PdfEngine.getPageAnnotations}
425
+ *
426
+ * @public
427
+ */
428
+ getPageAnnotations(doc, page) {
429
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getPageAnnotations", doc, page);
430
+ const requestId = this.generateRequestId(doc.id);
431
+ const task = new WorkerTask(this.worker, requestId);
432
+ const request = {
433
+ id: requestId,
434
+ type: "ExecuteRequest",
435
+ data: {
436
+ name: "getPageAnnotations",
437
+ args: [doc, page]
438
+ }
439
+ };
440
+ this.proxy(task, request);
441
+ return task;
442
+ }
443
+ /**
444
+ * {@inheritDoc @embedpdf/models!PdfEngine.createPageAnnotation}
445
+ *
446
+ * @public
447
+ */
448
+ createPageAnnotation(doc, page, annotation) {
449
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "createPageAnnotations", doc, page, annotation);
450
+ const requestId = this.generateRequestId(doc.id);
451
+ const task = new WorkerTask(this.worker, requestId);
452
+ const request = {
453
+ id: requestId,
454
+ type: "ExecuteRequest",
455
+ data: {
456
+ name: "createPageAnnotation",
457
+ args: [doc, page, annotation]
458
+ }
459
+ };
460
+ this.proxy(task, request);
461
+ return task;
462
+ }
463
+ /**
464
+ * {@inheritDoc @embedpdf/models!PdfEngine.transformPageAnnotation}
465
+ *
466
+ * @public
467
+ */
468
+ transformPageAnnotation(doc, page, annotation, transformation) {
469
+ this.logger.debug(
470
+ LOG_SOURCE,
471
+ LOG_CATEGORY,
472
+ "transformPageAnnotation",
473
+ doc,
474
+ page,
475
+ annotation,
476
+ transformation
477
+ );
478
+ const requestId = this.generateRequestId(doc.id);
479
+ const task = new WorkerTask(this.worker, requestId);
480
+ const request = {
481
+ id: requestId,
482
+ type: "ExecuteRequest",
483
+ data: {
484
+ name: "transformPageAnnotation",
485
+ args: [doc, page, annotation, transformation]
486
+ }
487
+ };
488
+ this.proxy(task, request);
489
+ return task;
490
+ }
491
+ /**
492
+ * {@inheritDoc @embedpdf/models!PdfEngine.removePageAnnotation}
493
+ *
494
+ * @public
495
+ */
496
+ removePageAnnotation(doc, page, annotation) {
497
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "removePageAnnotations", doc, page, annotation);
498
+ const requestId = this.generateRequestId(doc.id);
499
+ const task = new WorkerTask(this.worker, requestId);
500
+ const request = {
501
+ id: requestId,
502
+ type: "ExecuteRequest",
503
+ data: {
504
+ name: "removePageAnnotation",
505
+ args: [doc, page, annotation]
506
+ }
507
+ };
508
+ this.proxy(task, request);
509
+ return task;
510
+ }
511
+ /**
512
+ * {@inheritDoc @embedpdf/models!PdfEngine.getPageTextRects}
513
+ *
514
+ * @public
515
+ */
516
+ getPageTextRects(doc, page, scaleFactor, rotation) {
517
+ this.logger.debug(
518
+ LOG_SOURCE,
519
+ LOG_CATEGORY,
520
+ "getPageTextRects",
521
+ doc,
522
+ page,
523
+ scaleFactor,
524
+ rotation
525
+ );
526
+ const requestId = this.generateRequestId(doc.id);
527
+ const task = new WorkerTask(this.worker, requestId);
528
+ const request = {
529
+ id: requestId,
530
+ type: "ExecuteRequest",
531
+ data: {
532
+ name: "getPageTextRects",
533
+ args: [doc, page, scaleFactor, rotation]
534
+ }
535
+ };
536
+ this.proxy(task, request);
537
+ return task;
538
+ }
539
+ /**
540
+ * {@inheritDoc @embedpdf/models!PdfEngine.renderThumbnail}
541
+ *
542
+ * @public
543
+ */
544
+ renderThumbnail(doc, page, scaleFactor, rotation, dpr) {
545
+ this.logger.debug(
546
+ LOG_SOURCE,
547
+ LOG_CATEGORY,
548
+ "renderThumbnail",
549
+ doc,
550
+ page,
551
+ scaleFactor,
552
+ rotation,
553
+ dpr
554
+ );
555
+ const requestId = this.generateRequestId(doc.id);
556
+ const task = new WorkerTask(this.worker, requestId);
557
+ const request = {
558
+ id: requestId,
559
+ type: "ExecuteRequest",
560
+ data: {
561
+ name: "renderThumbnail",
562
+ args: [doc, page, scaleFactor, rotation, dpr]
563
+ }
564
+ };
565
+ this.proxy(task, request);
566
+ return task;
567
+ }
568
+ /**
569
+ * {@inheritDoc @embedpdf/models!PdfEngine.searchAllPages}
570
+ *
571
+ * @public
572
+ */
573
+ searchAllPages(doc, keyword, flags = []) {
574
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "searchAllPages 123", doc, keyword, flags);
575
+ const requestId = this.generateRequestId(doc.id);
576
+ const task = new WorkerTask(this.worker, requestId);
577
+ const request = {
578
+ id: requestId,
579
+ type: "ExecuteRequest",
580
+ data: {
581
+ name: "searchAllPages",
582
+ args: [doc, keyword, flags]
583
+ }
584
+ };
585
+ this.proxy(task, request);
586
+ return task;
587
+ }
588
+ /**
589
+ * {@inheritDoc @embedpdf/models!PdfEngine.saveAsCopy}
590
+ *
591
+ * @public
592
+ */
593
+ saveAsCopy(doc) {
594
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "saveAsCopy", doc);
595
+ const requestId = this.generateRequestId(doc.id);
596
+ const task = new WorkerTask(this.worker, requestId);
597
+ const request = {
598
+ id: requestId,
599
+ type: "ExecuteRequest",
600
+ data: {
601
+ name: "saveAsCopy",
602
+ args: [doc]
603
+ }
604
+ };
605
+ this.proxy(task, request);
606
+ return task;
607
+ }
608
+ /**
609
+ * {@inheritDoc @embedpdf/models!PdfEngine.getAttachments}
610
+ *
611
+ * @public
612
+ */
613
+ getAttachments(doc) {
614
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getAttachments", doc);
615
+ const requestId = this.generateRequestId(doc.id);
616
+ const task = new WorkerTask(this.worker, requestId);
617
+ const request = {
618
+ id: requestId,
619
+ type: "ExecuteRequest",
620
+ data: {
621
+ name: "getAttachments",
622
+ args: [doc]
623
+ }
624
+ };
625
+ this.proxy(task, request);
626
+ return task;
627
+ }
628
+ /**
629
+ * {@inheritDoc @embedpdf/models!PdfEngine.readAttachmentContent}
630
+ *
631
+ * @public
632
+ */
633
+ readAttachmentContent(doc, attachment) {
634
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "readAttachmentContent", doc, attachment);
635
+ const requestId = this.generateRequestId(doc.id);
636
+ const task = new WorkerTask(this.worker, requestId);
637
+ const request = {
638
+ id: requestId,
639
+ type: "ExecuteRequest",
640
+ data: {
641
+ name: "readAttachmentContent",
642
+ args: [doc, attachment]
643
+ }
644
+ };
645
+ this.proxy(task, request);
646
+ return task;
647
+ }
648
+ /**
649
+ * {@inheritDoc @embedpdf/models!PdfEngine.setFormFieldValue}
650
+ *
651
+ * @public
652
+ */
653
+ setFormFieldValue(doc, page, annotation, value) {
654
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "setFormFieldValue", doc, annotation, value);
655
+ const requestId = this.generateRequestId(doc.id);
656
+ const task = new WorkerTask(this.worker, requestId);
657
+ const request = {
658
+ id: requestId,
659
+ type: "ExecuteRequest",
660
+ data: {
661
+ name: "setFormFieldValue",
662
+ args: [doc, page, annotation, value]
663
+ }
664
+ };
665
+ this.proxy(task, request);
666
+ return task;
667
+ }
668
+ /**
669
+ * {@inheritDoc @embedpdf/models!PdfEngine.flattenPage}
670
+ *
671
+ * @public
672
+ */
673
+ flattenPage(doc, page, flag) {
674
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "flattenPage", doc, page, flag);
675
+ const requestId = this.generateRequestId(doc.id);
676
+ const task = new WorkerTask(this.worker, requestId);
677
+ const request = {
678
+ id: requestId,
679
+ type: "ExecuteRequest",
680
+ data: {
681
+ name: "flattenPage",
682
+ args: [doc, page, flag]
683
+ }
684
+ };
685
+ this.proxy(task, request);
686
+ return task;
687
+ }
688
+ /**
689
+ * {@inheritDoc @embedpdf/models!PdfEngine.extractPages}
690
+ *
691
+ * @public
692
+ */
693
+ extractPages(doc, pageIndexes) {
694
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "extractPages", doc);
695
+ const requestId = this.generateRequestId(doc.id);
696
+ const task = new WorkerTask(this.worker, requestId);
697
+ const request = {
698
+ id: requestId,
699
+ type: "ExecuteRequest",
700
+ data: {
701
+ name: "extractPages",
702
+ args: [doc, pageIndexes]
703
+ }
704
+ };
705
+ this.proxy(task, request);
706
+ return task;
707
+ }
708
+ /**
709
+ * {@inheritDoc @embedpdf/models!PdfEngine.extractText}
710
+ *
711
+ * @public
712
+ */
713
+ extractText(doc, pageIndexes) {
714
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "extractText", doc);
715
+ const requestId = this.generateRequestId(doc.id);
716
+ const task = new WorkerTask(this.worker, requestId);
717
+ const request = {
718
+ id: requestId,
719
+ type: "ExecuteRequest",
720
+ data: {
721
+ name: "extractText",
722
+ args: [doc, pageIndexes]
723
+ }
724
+ };
725
+ this.proxy(task, request);
726
+ return task;
727
+ }
728
+ /**
729
+ * {@inheritDoc @embedpdf/models!PdfEngine.getPageGlyphs}
730
+ *
731
+ * @public
732
+ */
733
+ getPageGlyphs(doc, page) {
734
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getPageGlyphs", doc, page);
735
+ const requestId = this.generateRequestId(doc.id);
736
+ const task = new WorkerTask(this.worker, requestId);
737
+ const request = {
738
+ id: requestId,
739
+ type: "ExecuteRequest",
740
+ data: {
741
+ name: "getPageGlyphs",
742
+ args: [doc, page]
743
+ }
744
+ };
745
+ this.proxy(task, request);
746
+ return task;
747
+ }
748
+ /**
749
+ * {@inheritDoc @embedpdf/models!PdfEngine.getPageGeometry}
750
+ *
751
+ * @public
752
+ */
753
+ getPageGeometry(doc, page) {
754
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "getPageGeometry", doc, page);
755
+ const requestId = this.generateRequestId(doc.id);
756
+ const task = new WorkerTask(this.worker, requestId);
757
+ const request = {
758
+ id: requestId,
759
+ type: "ExecuteRequest",
760
+ data: {
761
+ name: "getPageGeometry",
762
+ args: [doc, page]
763
+ }
764
+ };
765
+ this.proxy(task, request);
766
+ return task;
767
+ }
768
+ /**
769
+ * {@inheritDoc @embedpdf/models!PdfEngine.merge}
770
+ *
771
+ * @public
772
+ */
773
+ merge(files) {
774
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "merge", files);
775
+ const fileIds = files.map((file) => file.id).join(".");
776
+ const requestId = this.generateRequestId(fileIds);
777
+ const task = new WorkerTask(this.worker, requestId);
778
+ const request = {
779
+ id: requestId,
780
+ type: "ExecuteRequest",
781
+ data: {
782
+ name: "merge",
783
+ args: [files]
784
+ }
785
+ };
786
+ this.proxy(task, request);
787
+ return task;
788
+ }
789
+ /**
790
+ * {@inheritDoc @embedpdf/models!PdfEngine.mergePages}
791
+ *
792
+ * @public
793
+ */
794
+ mergePages(mergeConfigs) {
795
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "mergePages", mergeConfigs);
796
+ const requestId = this.generateRequestId(mergeConfigs.map((config) => config.docId).join("."));
797
+ const task = new WorkerTask(this.worker, requestId);
798
+ const request = {
799
+ id: requestId,
800
+ type: "ExecuteRequest",
801
+ data: {
802
+ name: "mergePages",
803
+ args: [mergeConfigs]
804
+ }
805
+ };
806
+ this.proxy(task, request);
807
+ return task;
808
+ }
809
+ /**
810
+ * {@inheritDoc @embedpdf/models!PdfEngine.closeDocument}
811
+ *
812
+ * @public
813
+ */
814
+ closeDocument(doc) {
815
+ this.logger.debug(LOG_SOURCE, LOG_CATEGORY, "closeDocument", doc);
816
+ const requestId = this.generateRequestId(doc.id);
817
+ const task = new WorkerTask(this.worker, requestId);
818
+ const request = {
819
+ id: requestId,
820
+ type: "ExecuteRequest",
821
+ data: {
822
+ name: "closeDocument",
823
+ args: [doc]
824
+ }
825
+ };
826
+ this.proxy(task, request);
827
+ return task;
828
+ }
829
+ /**
830
+ * Send the request to webworker inside and register the task
831
+ * @param task - task that waiting for the response
832
+ * @param request - request that needs send to web worker
833
+ * @param transferables - transferables that need to transfer to webworker
834
+ * @returns
835
+ *
836
+ * @internal
837
+ */
838
+ proxy(task, request, transferables = []) {
839
+ this.logger.debug(
840
+ LOG_SOURCE,
841
+ LOG_CATEGORY,
842
+ "send request to worker",
843
+ task,
844
+ request,
845
+ transferables
846
+ );
847
+ this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, "Begin", request.id);
848
+ this.readyTask.wait(
849
+ () => {
850
+ this.worker.postMessage(request, transferables);
851
+ task.wait(
852
+ () => {
853
+ this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, "End", request.id);
854
+ },
855
+ () => {
856
+ this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, "End", request.id);
857
+ }
858
+ );
859
+ this.tasks.set(request.id, task);
860
+ },
861
+ () => {
862
+ this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, "End", request.id);
863
+ task.reject({
864
+ code: import_models.PdfErrorCode.Initialization,
865
+ message: "worker initialization failed"
866
+ });
867
+ }
868
+ );
869
+ }
870
+ };
871
+ _WebWorkerEngine.readyTaskId = "0";
872
+ var WebWorkerEngine = _WebWorkerEngine;
873
+
874
+ // src/webworker/runner.ts
875
+ var import_models2 = require("@embedpdf/models");
876
+ var LOG_SOURCE2 = "WebWorkerEngineRunner";
877
+ var LOG_CATEGORY2 = "Engine";
878
+ var EngineRunner = class {
879
+ /**
880
+ * Create instance of EngineRunnder
881
+ * @param logger - logger instance
882
+ */
883
+ constructor(logger = new import_models2.NoopLogger()) {
884
+ this.logger = logger;
885
+ /**
886
+ * Execute the request
887
+ * @param request - request that represent the pdf engine call
888
+ * @returns
889
+ *
890
+ * @protected
891
+ */
892
+ this.execute = (request) => {
893
+ this.logger.debug(LOG_SOURCE2, LOG_CATEGORY2, "runner start exeucte request");
894
+ if (!this.engine) {
895
+ const error = {
896
+ type: "reject",
897
+ reason: {
898
+ code: import_models2.PdfErrorCode.NotReady,
899
+ message: "engine has not started yet"
900
+ }
901
+ };
902
+ const response = {
903
+ id: request.id,
904
+ type: "ExecuteResponse",
905
+ data: {
906
+ type: "error",
907
+ value: error
908
+ }
909
+ };
910
+ this.respond(response);
911
+ return;
912
+ }
913
+ const engine = this.engine;
914
+ const { name, args } = request.data;
915
+ if (!engine[name]) {
916
+ const error = {
917
+ type: "reject",
918
+ reason: {
919
+ code: import_models2.PdfErrorCode.NotSupport,
920
+ message: "engine method has not supported yet"
921
+ }
922
+ };
923
+ const response = {
924
+ id: request.id,
925
+ type: "ExecuteResponse",
926
+ data: {
927
+ type: "error",
928
+ value: error
929
+ }
930
+ };
931
+ this.respond(response);
932
+ return;
933
+ }
934
+ let task;
935
+ switch (name) {
936
+ case "isSupport":
937
+ task = this.engine[name](...args);
938
+ break;
939
+ case "initialize":
940
+ task = this.engine[name](...args);
941
+ break;
942
+ case "destroy":
943
+ task = this.engine[name](...args);
944
+ break;
945
+ case "openDocumentUrl":
946
+ task = this.engine[name](...args);
947
+ break;
948
+ case "openDocumentFromBuffer":
949
+ task = this.engine[name](...args);
950
+ break;
951
+ case "openDocumentFromLoader":
952
+ task = this.engine[name](...args);
953
+ break;
954
+ case "getDocPermissions":
955
+ task = this.engine[name](...args);
956
+ break;
957
+ case "getDocUserPermissions":
958
+ task = this.engine[name](...args);
959
+ break;
960
+ case "getMetadata":
961
+ task = this.engine[name](...args);
962
+ break;
963
+ case "getBookmarks":
964
+ task = this.engine[name](...args);
965
+ break;
966
+ case "getSignatures":
967
+ task = this.engine[name](...args);
968
+ break;
969
+ case "renderPage":
970
+ task = this.engine[name](...args);
971
+ break;
972
+ case "renderPageRect":
973
+ task = this.engine[name](...args);
974
+ break;
975
+ case "renderThumbnail":
976
+ task = this.engine[name](...args);
977
+ break;
978
+ case "getAllAnnotations":
979
+ task = this.engine[name](...args);
980
+ break;
981
+ case "getPageAnnotations":
982
+ task = this.engine[name](...args);
983
+ break;
984
+ case "createPageAnnotation":
985
+ task = this.engine[name](...args);
986
+ break;
987
+ case "transformPageAnnotation":
988
+ task = this.engine[name](...args);
989
+ break;
990
+ case "removePageAnnotation":
991
+ task = this.engine[name](...args);
992
+ break;
993
+ case "getPageTextRects":
994
+ task = this.engine[name](...args);
995
+ break;
996
+ case "searchAllPages":
997
+ task = this.engine[name](...args);
998
+ break;
999
+ case "closeDocument":
1000
+ task = this.engine[name](...args);
1001
+ break;
1002
+ case "saveAsCopy":
1003
+ task = this.engine[name](...args);
1004
+ break;
1005
+ case "getAttachments":
1006
+ task = this.engine[name](...args);
1007
+ break;
1008
+ case "readAttachmentContent":
1009
+ task = this.engine[name](...args);
1010
+ break;
1011
+ case "setFormFieldValue":
1012
+ task = this.engine[name](...args);
1013
+ break;
1014
+ case "flattenPage":
1015
+ task = this.engine[name](...args);
1016
+ break;
1017
+ case "extractPages":
1018
+ task = this.engine[name](...args);
1019
+ break;
1020
+ case "extractText":
1021
+ task = this.engine[name](...args);
1022
+ break;
1023
+ case "getPageGlyphs":
1024
+ task = this.engine[name](...args);
1025
+ break;
1026
+ case "getPageGeometry":
1027
+ task = this.engine[name](...args);
1028
+ break;
1029
+ case "merge":
1030
+ task = this.engine[name](...args);
1031
+ break;
1032
+ case "mergePages":
1033
+ task = this.engine[name](...args);
1034
+ break;
1035
+ }
1036
+ task.wait(
1037
+ (result) => {
1038
+ const response = {
1039
+ id: request.id,
1040
+ type: "ExecuteResponse",
1041
+ data: {
1042
+ type: "result",
1043
+ value: result
1044
+ }
1045
+ };
1046
+ this.respond(response);
1047
+ },
1048
+ (error) => {
1049
+ const response = {
1050
+ id: request.id,
1051
+ type: "ExecuteResponse",
1052
+ data: {
1053
+ type: "error",
1054
+ value: error
1055
+ }
1056
+ };
1057
+ this.respond(response);
1058
+ }
1059
+ );
1060
+ };
1061
+ }
1062
+ /**
1063
+ * Listening on post message
1064
+ */
1065
+ listen() {
1066
+ self.onmessage = (evt) => {
1067
+ return this.handle(evt);
1068
+ };
1069
+ }
1070
+ /**
1071
+ * Handle post message
1072
+ */
1073
+ handle(evt) {
1074
+ this.logger.debug(LOG_SOURCE2, LOG_CATEGORY2, "webworker receive message event: ", evt.data);
1075
+ try {
1076
+ const request = evt.data;
1077
+ switch (request.type) {
1078
+ case "ExecuteRequest":
1079
+ this.execute(request);
1080
+ break;
1081
+ }
1082
+ } catch (e) {
1083
+ this.logger.info(
1084
+ LOG_SOURCE2,
1085
+ LOG_CATEGORY2,
1086
+ "webworker met error when processing message event:",
1087
+ e
1088
+ );
1089
+ }
1090
+ }
1091
+ /**
1092
+ * Send the ready response when pdf engine is ready
1093
+ * @returns
1094
+ *
1095
+ * @protected
1096
+ */
1097
+ ready() {
1098
+ this.listen();
1099
+ this.respond({
1100
+ id: "0",
1101
+ type: "ReadyResponse"
1102
+ });
1103
+ this.logger.debug(LOG_SOURCE2, LOG_CATEGORY2, "runner is ready");
1104
+ }
1105
+ /**
1106
+ * Send back the response
1107
+ * @param response - response that needs sent back
1108
+ *
1109
+ * @protected
1110
+ */
1111
+ respond(response) {
1112
+ this.logger.debug(LOG_SOURCE2, LOG_CATEGORY2, "runner respond: ", response);
1113
+ self.postMessage(response);
1114
+ }
1115
+ };
1116
+ // Annotate the CommonJS export names for ESM import in node:
1117
+ 0 && (module.exports = {
1118
+ EngineRunner,
1119
+ WebWorkerEngine,
1120
+ WorkerTask
1121
+ });
1122
+ //# sourceMappingURL=worker.cjs.map