{"version":3,"file":"engine.cjs","sources":["../../../src/lib/webworker/engine.ts"],"sourcesContent":["import {\r\n  FormFieldValue,\r\n  PdfAttachmentObject,\r\n  PdfFile,\r\n  PdfMetadataObject,\r\n  PdfSignatureObject,\r\n  PdfTextRectObject,\r\n  PdfWidgetAnnoObject,\r\n  Task,\r\n  Logger,\r\n  NoopLogger,\r\n  PdfAnnotationObject,\r\n  PdfBookmarksObject,\r\n  PdfDocumentObject,\r\n  PdfEngine,\r\n  PdfPageObject,\r\n  Rect,\r\n  PdfErrorCode,\r\n  PdfErrorReason,\r\n  PdfPageFlattenResult,\r\n  SearchAllPagesResult,\r\n  PdfFileUrl,\r\n  PdfGlyphObject,\r\n  PdfPageGeometry,\r\n  PageTextSlice,\r\n  AnnotationCreateContext,\r\n  PdfEngineMethodArgs,\r\n  PdfEngineMethodName,\r\n  PdfPageSearchProgress,\r\n  PdfRenderThumbnailOptions,\r\n  PdfSearchAllPagesOptions,\r\n  PdfFlattenPageOptions,\r\n  PdfRedactTextOptions,\r\n  PdfRenderPageAnnotationOptions,\r\n  PdfRenderPageOptions,\r\n  PdfOpenDocumentUrlOptions,\r\n  PdfOpenDocumentBufferOptions,\r\n  PdfAnnotationsProgress,\r\n  PdfPrintOptions,\r\n  PdfBookmarkObject,\r\n  PdfAddAttachmentParams,\r\n} from '@elhalawany/models';\r\nimport { ExecuteRequest, Response, SpecificExecuteRequest } from './runner';\r\n\r\nconst LOG_SOURCE = 'WebWorkerEngine';\r\nconst LOG_CATEGORY = 'Engine';\r\n\r\n/**\r\n * Create a request for the webworker\r\n * @param id - id of the request\r\n * @param name - name of the method\r\n * @param args - arguments of the method\r\n * @returns request\r\n */\r\nfunction createRequest<M extends PdfEngineMethodName>(\r\n  id: string,\r\n  name: M,\r\n  args: PdfEngineMethodArgs<M>,\r\n): SpecificExecuteRequest<M> {\r\n  return {\r\n    id,\r\n    type: 'ExecuteRequest',\r\n    data: {\r\n      name,\r\n      args,\r\n    },\r\n  };\r\n}\r\n\r\n/**\r\n * Task that executed by webworker\r\n */\r\nexport class WorkerTask<R, P = unknown> extends Task<R, PdfErrorReason, P> {\r\n  /**\r\n   * Create a task that bind to web worker with specified message id\r\n   * @param worker - web worker instance\r\n   * @param messageId - id of message\r\n   *\r\n   * @public\r\n   */\r\n  constructor(\r\n    public worker: Worker,\r\n    private messageId: string,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!Task.abort}\r\n   *\r\n   * @override\r\n   */\r\n  abort(e: PdfErrorReason) {\r\n    super.abort(e);\r\n\r\n    this.worker.postMessage({\r\n      id: this.messageId,\r\n      type: 'AbortRequest',\r\n    });\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!Task.progress}\r\n   *\r\n   * @override\r\n   */\r\n  progress(p: P) {\r\n    super.progress(p);\r\n  }\r\n}\r\n\r\n/**\r\n * PDF engine that runs within webworker\r\n */\r\nexport class WebWorkerEngine implements PdfEngine {\r\n  static readyTaskId = '0';\r\n  /**\r\n   * Task that represent the state of preparation\r\n   */\r\n  readyTask: WorkerTask<boolean>;\r\n  /**\r\n   * All the tasks that is executing\r\n   */\r\n  tasks: Map<string, WorkerTask<any>> = new Map();\r\n\r\n  /**\r\n   * Create an instance of WebWorkerEngine, it will create a worker with\r\n   * specified url.\r\n   * @param worker - webworker instance, this worker needs to contains the running instance of {@link EngineRunner}\r\n   * @param logger - logger instance\r\n   *\r\n   * @public\r\n   */\r\n  constructor(\r\n    private worker: Worker,\r\n    private logger: Logger = new NoopLogger(),\r\n  ) {\r\n    this.worker.addEventListener('message', this.handle);\r\n\r\n    this.readyTask = new WorkerTask<boolean>(this.worker, WebWorkerEngine.readyTaskId);\r\n    this.tasks.set(WebWorkerEngine.readyTaskId, this.readyTask);\r\n  }\r\n\r\n  /**\r\n   * Handle event from web worker. There are 2 kinds of event\r\n   * 1. ReadyResponse: web worker is ready\r\n   * 2. ExecuteResponse: result of execution\r\n   * @param evt - message event from web worker\r\n   * @returns\r\n   *\r\n   * @private\r\n   */\r\n  handle = (evt: MessageEvent<any>) => {\r\n    this.logger.debug(\r\n      LOG_SOURCE,\r\n      LOG_CATEGORY,\r\n      'webworker engine start handling message: ',\r\n      evt.data,\r\n    );\r\n    try {\r\n      const response = evt.data as Response;\r\n      const task = this.tasks.get(response.id);\r\n      if (!task) {\r\n        return;\r\n      }\r\n\r\n      switch (response.type) {\r\n        case 'ReadyResponse':\r\n          this.readyTask.resolve(true);\r\n          break;\r\n        case 'ExecuteProgress':\r\n          task.progress(response.data);\r\n          break;\r\n        case 'ExecuteResponse':\r\n          {\r\n            switch (response.data.type) {\r\n              case 'result':\r\n                task.resolve(response.data.value);\r\n                break;\r\n              case 'error':\r\n                task.reject(response.data.value.reason);\r\n                break;\r\n            }\r\n            this.tasks.delete(response.id);\r\n          }\r\n          break;\r\n      }\r\n    } catch (e) {\r\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'webworker met error when handling message: ', e);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Generate a unique message id\r\n   * @returns message id\r\n   *\r\n   * @private\r\n   */\r\n  generateRequestId(id: string) {\r\n    return `${id}.${Date.now()}.${Math.random()}`;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.initialize}\r\n   *\r\n   * @public\r\n   */\r\n  initialize() {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'initialize');\r\n    const requestId = this.generateRequestId('General');\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'initialize', []);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.destroy}\r\n   *\r\n   * @public\r\n   */\r\n  destroy() {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\r\n    const requestId = this.generateRequestId('General');\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const finish = () => {\r\n      this.worker.removeEventListener('message', this.handle);\r\n      this.worker.terminate();\r\n    };\r\n\r\n    task.wait(finish, finish);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'destroy', []);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.openDocumentUrl}\r\n   *\r\n   * @public\r\n   */\r\n  openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl', file.url, options);\r\n    const requestId = this.generateRequestId(file.id);\r\n    const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'openDocumentUrl', [file, options]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.openDocument}\r\n   *\r\n   * @public\r\n   */\r\n  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\r\n    const requestId = this.generateRequestId(file.id);\r\n    const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'openDocumentBuffer', [file, options]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getMetadata}\r\n   *\r\n   * @public\r\n   */\r\n  getMetadata(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfMetadataObject>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getMetadata', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.setMetadata}\r\n   *\r\n   * @public\r\n   */\r\n  setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, metadata);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'setMetadata', [doc, metadata]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getDocPermissions}\r\n   *\r\n   * @public\r\n   */\r\n  getDocPermissions(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<number>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getDocPermissions', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getDocUserPermissions}\r\n   *\r\n   * @public\r\n   */\r\n  getDocUserPermissions(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<number>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getDocUserPermissions', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getBookmarks}\r\n   *\r\n   * @public\r\n   */\r\n  getBookmarks(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfBookmarksObject>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getBookmarks', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.setBookmarks}\r\n   *\r\n   * @public\r\n   */\r\n  setBookmarks(doc: PdfDocumentObject, payload: PdfBookmarkObject[]) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, payload);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'setBookmarks', [doc, payload]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.deleteBookmarks}\r\n   *\r\n   * @public\r\n   */\r\n  deleteBookmarks(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'deleteBookmarks', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getSignatures}\r\n   *\r\n   * @public\r\n   */\r\n  getSignatures(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfSignatureObject[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getSignatures', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.renderPage}\r\n   *\r\n   * @public\r\n   */\r\n  renderPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfRenderPageOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<Blob>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'renderPage', [doc, page, options]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.renderPageRect}\r\n   *\r\n   * @public\r\n   */\r\n  renderPageRect(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    rect: Rect,\r\n    options?: PdfRenderPageOptions,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<Blob>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'renderPageRect', [\r\n      doc,\r\n      page,\r\n      rect,\r\n      options,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.renderAnnotation}\r\n   *\r\n   * @public\r\n   */\r\n  renderPageAnnotation(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    annotation: PdfAnnotationObject,\r\n    options?: PdfRenderPageAnnotationOptions,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderAnnotation', doc, page, annotation, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<Blob>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'renderPageAnnotation', [\r\n      doc,\r\n      page,\r\n      annotation,\r\n      options,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getAllAnnotations}\r\n   *\r\n   * @public\r\n   */\r\n  getAllAnnotations(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n\r\n    const task = new WorkerTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress>(\r\n      this.worker,\r\n      requestId,\r\n    );\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getAllAnnotations', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getPageAnnotations}\r\n   *\r\n   * @public\r\n   */\r\n  getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfAnnotationObject[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getPageAnnotations', [doc, page]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.createPageAnnotation}\r\n   *\r\n   * @public\r\n   */\r\n  createPageAnnotation<A extends PdfAnnotationObject>(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    annotation: A,\r\n    context?: AnnotationCreateContext<A>,\r\n  ) {\r\n    this.logger.debug(\r\n      LOG_SOURCE,\r\n      LOG_CATEGORY,\r\n      'createPageAnnotations',\r\n      doc,\r\n      page,\r\n      annotation,\r\n      context,\r\n    );\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<string>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'createPageAnnotation', [\r\n      doc,\r\n      page,\r\n      annotation,\r\n      context,\r\n    ] as PdfEngineMethodArgs<'createPageAnnotation'>);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  updatePageAnnotation(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    annotation: PdfAnnotationObject,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'updatePageAnnotation', [\r\n      doc,\r\n      page,\r\n      annotation,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.removePageAnnotation}\r\n   *\r\n   * @public\r\n   */\r\n  removePageAnnotation(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    annotation: PdfAnnotationObject,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotations', doc, page, annotation);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'removePageAnnotation', [\r\n      doc,\r\n      page,\r\n      annotation,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getPageTextRects}\r\n   *\r\n   * @public\r\n   */\r\n  getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfTextRectObject[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getPageTextRects', [doc, page]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.renderThumbnail}\r\n   *\r\n   * @public\r\n   */\r\n  renderThumbnail(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    options?: PdfRenderThumbnailOptions,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<Blob>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'renderThumbnail', [\r\n      doc,\r\n      page,\r\n      options,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.searchAllPages}\r\n   *\r\n   * @public\r\n   */\r\n  searchAllPages(doc: PdfDocumentObject, keyword: string, options?: PdfSearchAllPagesOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\r\n\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<SearchAllPagesResult, PdfPageSearchProgress>(\r\n      this.worker,\r\n      requestId,\r\n    );\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'searchAllPages', [\r\n      doc,\r\n      keyword,\r\n      options,\r\n    ]);\r\n\r\n    this.proxy(task, request);\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.saveAsCopy}\r\n   *\r\n   * @public\r\n   */\r\n  saveAsCopy(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'saveAsCopy', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getAttachments}\r\n   *\r\n   * @public\r\n   */\r\n  getAttachments(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfAttachmentObject[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getAttachments', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.addAttachment}\r\n   *\r\n   * @public\r\n   */\r\n  addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'addAttachment', [doc, params]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.removeAttachment}\r\n   *\r\n   * @public\r\n   */\r\n  removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removeAttachment', doc, attachment);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'removeAttachment', [doc, attachment]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.readAttachmentContent}\r\n   *\r\n   * @public\r\n   */\r\n  readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'readAttachmentContent', [\r\n      doc,\r\n      attachment,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.setFormFieldValue}\r\n   *\r\n   * @public\r\n   */\r\n  setFormFieldValue(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    annotation: PdfWidgetAnnoObject,\r\n    value: FormFieldValue,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setFormFieldValue', doc, annotation, value);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'setFormFieldValue', [\r\n      doc,\r\n      page,\r\n      annotation,\r\n      value,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.flattenPage}\r\n   *\r\n   * @public\r\n   */\r\n  flattenPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfFlattenPageOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfPageFlattenResult>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'flattenPage', [doc, page, options]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.extractPages}\r\n   *\r\n   * @public\r\n   */\r\n  extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'extractPages', [doc, pageIndexes]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.redactTextInQuads}\r\n   *\r\n   * @public\r\n   */\r\n  redactTextInRects(\r\n    doc: PdfDocumentObject,\r\n    page: PdfPageObject,\r\n    rects: Rect[],\r\n    options?: PdfRedactTextOptions,\r\n  ) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'redactTextInRects', doc, page, rects, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'redactTextInRects', [\r\n      doc,\r\n      page,\r\n      rects,\r\n      options,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.extractText}\r\n   *\r\n   * @public\r\n   */\r\n  extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<string>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'extractText', [doc, pageIndexes]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getTextSlices}\r\n   *\r\n   * @public\r\n   */\r\n  getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<string[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getTextSlices', [doc, slices]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getPageGlyphs}\r\n   *\r\n   * @public\r\n   */\r\n  getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfGlyphObject[]>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getPageGlyphs', [doc, page]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.getPageGeometry}\r\n   *\r\n   * @public\r\n   */\r\n  getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGeometry', doc, page);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<PdfPageGeometry>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'getPageGeometry', [doc, page]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.merge}\r\n   *\r\n   * @public\r\n   */\r\n  merge(files: PdfFile[]) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\r\n    const fileIds = files.map((file) => file.id).join('.');\r\n    const requestId = this.generateRequestId(fileIds);\r\n    const task = new WorkerTask<PdfFile>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'merge', [files]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.mergePages}\r\n   *\r\n   * @public\r\n   */\r\n  mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\r\n    const requestId = this.generateRequestId(mergeConfigs.map((config) => config.docId).join('.'));\r\n    const task = new WorkerTask<PdfFile>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'mergePages', [mergeConfigs]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.preparePrintDocument}\r\n   *\r\n   * @public\r\n   */\r\n  preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'preparePrintDocument', [\r\n      doc,\r\n      options,\r\n    ]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.closeDocument}\r\n   *\r\n   * @public\r\n   */\r\n  closeDocument(doc: PdfDocumentObject) {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\r\n    const requestId = this.generateRequestId(doc.id);\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n\r\n    const request: ExecuteRequest = createRequest(requestId, 'closeDocument', [doc]);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * {@inheritDoc @elhalawany/models!PdfEngine.closeAllDocuments}\r\n   *\r\n   * @public\r\n   */\r\n  closeAllDocuments() {\r\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\r\n    const requestId = this.generateRequestId('closeAllDocuments');\r\n    const task = new WorkerTask<boolean>(this.worker, requestId);\r\n    const request: ExecuteRequest = createRequest(requestId, 'closeAllDocuments', []);\r\n    this.proxy(task, request);\r\n\r\n    return task;\r\n  }\r\n\r\n  /**\r\n   * Send the request to webworker inside and register the task\r\n   * @param task - task that waiting for the response\r\n   * @param request - request that needs send to web worker\r\n   * @param transferables - transferables that need to transfer to webworker\r\n   * @returns\r\n   *\r\n   * @internal\r\n   */\r\n  proxy<R>(task: WorkerTask<R>, request: ExecuteRequest, transferables: any[] = []) {\r\n    this.logger.debug(\r\n      LOG_SOURCE,\r\n      LOG_CATEGORY,\r\n      'send request to worker',\r\n      task,\r\n      request,\r\n      transferables,\r\n    );\r\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'Begin', request.id);\r\n    this.readyTask.wait(\r\n      () => {\r\n        this.worker.postMessage(request, transferables);\r\n        task.wait(\r\n          () => {\r\n            this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\r\n          },\r\n          () => {\r\n            this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\r\n          },\r\n        );\r\n        this.tasks.set(request.id, task);\r\n      },\r\n      () => {\r\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\r\n        task.reject({\r\n          code: PdfErrorCode.Initialization,\r\n          message: 'worker initialization failed',\r\n        });\r\n      },\r\n    );\r\n  }\r\n}\r\n"],"names":["LOG_SOURCE","LOG_CATEGORY","createRequest","id","name","args","type","data","WorkerTask","Task","constructor","worker","messageId","super","this","abort","e","postMessage","progress","p","_WebWorkerEngine","logger","NoopLogger","tasks","Map","handle","evt","debug","response","task","get","readyTask","resolve","value","reject","reason","delete","error","addEventListener","readyTaskId","set","generateRequestId","Date","now","Math","random","initialize","requestId","request","proxy","destroy","finish","removeEventListener","terminate","wait","openDocumentUrl","file","options","url","openDocumentBuffer","getMetadata","doc","setMetadata","metadata","getDocPermissions","getDocUserPermissions","getBookmarks","setBookmarks","payload","deleteBookmarks","getSignatures","renderPage","page","renderPageRect","rect","renderPageAnnotation","annotation","getAllAnnotations","getPageAnnotations","createPageAnnotation","context","updatePageAnnotation","removePageAnnotation","getPageTextRects","renderThumbnail","searchAllPages","keyword","saveAsCopy","getAttachments","addAttachment","params","removeAttachment","attachment","readAttachmentContent","setFormFieldValue","flattenPage","extractPages","pageIndexes","redactTextInRects","rects","extractText","getTextSlices","slices","getPageGlyphs","getPageGeometry","merge","files","fileIds","map","join","mergePages","mergeConfigs","config","docId","preparePrintDocument","closeDocument","closeAllDocuments","transferables","perf","code","PdfErrorCode","Initialization","message","WebWorkerEngine"],"mappings":"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"}