{"version":3,"file":"index.cjs","sources":["../src/lib/loader/strategies/url-strategy.ts","../src/lib/loader/strategies/buffer-strategy.ts","../src/lib/loader/document-loader.ts","../src/lib/loader-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["import { PdfDocumentObject } from '@embedpdf/models';\nimport { PDFUrlLoadingOptions, PDFLoadingStrategy } from './loading-strategy';\n\nexport class UrlStrategy implements PDFLoadingStrategy {\n  async load(loadingOptions: PDFUrlLoadingOptions): Promise<PdfDocumentObject> {\n    const { pdfFile, options, engine } = loadingOptions;\n\n    const task = engine.openDocumentUrl(pdfFile, options);\n\n    return new Promise<PdfDocumentObject>((resolve, reject) => {\n      task.wait(\n        // Success callback\n        (result) => resolve(result),\n        // Error callback\n        (error) => {\n          if (error.type === 'abort') {\n            reject(new Error(`PDF loading aborted: ${error.reason}`));\n          } else {\n            reject(new Error(`PDF loading failed: ${error.reason}`));\n          }\n        },\n      );\n    });\n  }\n}\n","import { PdfDocumentObject } from '@embedpdf/models';\nimport { PDFBufferLoadingOptions, PDFLoadingStrategy } from './loading-strategy';\n\nexport class BufferStrategy implements PDFLoadingStrategy {\n  async load(loadingOptions: PDFBufferLoadingOptions): Promise<PdfDocumentObject> {\n    const { pdfFile, options, engine } = loadingOptions;\n\n    const task = engine.openDocumentBuffer(pdfFile, options);\n\n    return new Promise<PdfDocumentObject>((resolve, reject) => {\n      task.wait(\n        // Success callback\n        (result) => resolve(result),\n        // Error callback\n        (error) => {\n          if (error.type === 'abort') {\n            reject(new Error(`PDF loading aborted: ${error.reason}`));\n          } else {\n            reject(new Error(`PDF loading failed: ${error.reason}`));\n          }\n        },\n      );\n    });\n  }\n}\n","import {\n  PDFUrlLoadingOptions,\n  PDFBufferLoadingOptions,\n  PDFLoadingStrategy,\n  PDFLoadingOptions,\n} from './strategies/loading-strategy';\nimport { UrlStrategy } from './strategies/url-strategy';\nimport { BufferStrategy } from './strategies/buffer-strategy';\nimport { PdfDocumentObject } from '@embedpdf/models';\n\nexport type StrategyResolver = (options: PDFLoadingOptions) => PDFLoadingStrategy | undefined;\n\nexport class PDFDocumentLoader {\n  private strategies: Map<string, PDFLoadingStrategy> = new Map();\n  private strategyResolvers: StrategyResolver[] = [];\n\n  constructor() {\n    // Set up default strategies\n    const bufferStrategy = new BufferStrategy();\n    this.registerStrategy('url', new UrlStrategy());\n    this.registerStrategy('buffer', bufferStrategy);\n\n    // Add default resolver\n    this.addStrategyResolver((options) => {\n      if (isPdfUrlLoadingOptions(options)) {\n        return this.strategies.get('url');\n      }\n      return this.strategies.get('buffer');\n    });\n  }\n\n  public registerStrategy(name: string, strategy: PDFLoadingStrategy): void {\n    this.strategies.set(name, strategy);\n  }\n\n  public getStrategy(name: string): PDFLoadingStrategy | undefined {\n    return this.strategies.get(name);\n  }\n\n  public addStrategyResolver(resolver: StrategyResolver): void {\n    this.strategyResolvers.push(resolver);\n  }\n\n  async loadDocument(options: PDFLoadingOptions): Promise<PdfDocumentObject> {\n    try {\n      const strategy = this.resolveStrategy(options);\n      if (!strategy) {\n        throw new Error('No suitable strategy found for the given options');\n      }\n      return await strategy.load(options);\n    } catch (error) {\n      console.error('Error loading document:', error);\n      throw error;\n    }\n  }\n\n  private resolveStrategy(options: PDFLoadingOptions): PDFLoadingStrategy | undefined {\n    for (const resolver of this.strategyResolvers) {\n      const strategy = resolver(options);\n      if (strategy) {\n        return strategy;\n      }\n    }\n    return undefined;\n  }\n}\n\nexport function isPdfUrlLoadingOptions(\n  options: PDFLoadingOptions,\n): options is PDFUrlLoadingOptions {\n  return options.type === 'url';\n}\n\nexport function isPdfBufferLoadingOptions(\n  options: PDFLoadingOptions,\n): options is PDFBufferLoadingOptions {\n  return options.type === 'buffer';\n}\n","import {\n  BasePlugin,\n  IPlugin,\n  PluginRegistry,\n  createEmitter,\n  createBehaviorEmitter,\n  loadDocument,\n  setDocument,\n} from '@embedpdf/core';\nimport { PdfDocumentObject, PdfEngine } from '@embedpdf/models';\nimport { PDFDocumentLoader } from './loader';\nimport { PDFLoadingOptions } from './loader/strategies/loading-strategy';\nimport { LoaderCapability, LoaderEvent, LoaderPluginConfig } from './types';\n\nexport class LoaderPlugin extends BasePlugin<LoaderPluginConfig, LoaderCapability> {\n  static readonly id = 'loader' as const;\n\n  private readonly loaderHandlers$ = createBehaviorEmitter<LoaderEvent>();\n  private readonly documentLoadedHandlers$ = createBehaviorEmitter<PdfDocumentObject>();\n  private readonly openFileRequest$ = createEmitter<'open'>();\n\n  private documentLoader: PDFDocumentLoader;\n  private loadingOptions?: Omit<PDFLoadingOptions, 'engine'>;\n  private loadedDocument?: PdfDocumentObject;\n\n  constructor(\n    public readonly id: string,\n    registry: PluginRegistry,\n  ) {\n    super(id, registry);\n    this.documentLoader = new PDFDocumentLoader();\n  }\n\n  protected buildCapability(): LoaderCapability {\n    return {\n      onLoaderEvent: this.loaderHandlers$.on,\n      onDocumentLoaded: this.documentLoadedHandlers$.on,\n      onOpenFileRequest: this.openFileRequest$.on,\n      openFileDialog: () => this.openFileRequest$.emit('open'),\n      loadDocument: (options) => this.loadDocument(options),\n      registerStrategy: (name, strategy) => this.documentLoader.registerStrategy(name, strategy),\n      getDocument: () => this.loadedDocument,\n      addStrategyResolver: (resolver) => this.documentLoader.addStrategyResolver(resolver),\n    };\n  }\n\n  async initialize(config: LoaderPluginConfig): Promise<void> {\n    // Register any custom strategies provided in config\n    if (config.defaultStrategies) {\n      Object.entries(config.defaultStrategies).forEach(([name, strategy]) => {\n        this.documentLoader.registerStrategy(name, strategy);\n      });\n    }\n\n    if (config.loadingOptions) {\n      this.loadingOptions = config.loadingOptions;\n    }\n  }\n\n  async postInitialize(): Promise<void> {\n    if (this.loadingOptions) {\n      await this.loadDocument(this.loadingOptions);\n    }\n  }\n\n  private async loadDocument(\n    options: Omit<PDFLoadingOptions, 'engine'>,\n  ): Promise<PdfDocumentObject> {\n    try {\n      if (this.loadedDocument) {\n        this.engine.closeDocument(this.loadedDocument);\n      }\n      this.loaderHandlers$.emit({ type: 'start', documentId: options.pdfFile.id });\n      this.dispatchCoreAction(loadDocument());\n      const document = await this.documentLoader.loadDocument({\n        ...options,\n        engine: this.engine,\n      } as PDFLoadingOptions);\n      this.dispatchCoreAction(setDocument(document));\n      this.loadedDocument = document;\n\n      this.loaderHandlers$.emit({ type: 'complete', documentId: options.pdfFile.id });\n      this.documentLoadedHandlers$.emit(document);\n      return document;\n    } catch (error) {\n      const errorEvent: LoaderEvent = {\n        type: 'error',\n        documentId: options.pdfFile.id,\n        error: error instanceof Error ? error : new Error(String(error)),\n      };\n      this.loaderHandlers$.emit(errorEvent);\n      throw error;\n    }\n  }\n\n  async destroy(): Promise<void> {\n    this.loaderHandlers$.clear();\n    this.documentLoadedHandlers$.clear();\n    this.openFileRequest$.clear();\n    super.destroy();\n  }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { LoaderPluginConfig } from './types';\n\nexport const LOADER_PLUGIN_ID = 'loader';\n\nexport const manifest: PluginManifest<LoaderPluginConfig> = {\n  id: LOADER_PLUGIN_ID,\n  name: 'Loader Plugin',\n  version: '1.0.0',\n  provides: ['loader'],\n  requires: [],\n  optional: [],\n  metadata: {\n    name: 'Loader Plugin',\n    description: 'A plugin for loading PDF documents',\n    version: '1.0.0',\n    author: 'EmbedPDF',\n    license: 'MIT',\n  },\n  defaultConfig: {\n    enabled: true,\n  },\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { LoaderPlugin } from './loader-plugin';\nimport { LOADER_PLUGIN_ID, manifest } from './manifest';\nimport { LoaderPluginConfig } from './types';\n\nexport const LoaderPluginPackage: PluginPackage<LoaderPlugin, LoaderPluginConfig> = {\n  manifest,\n  create: (registry) => new LoaderPlugin(LOADER_PLUGIN_ID, registry),\n  reducer: () => {},\n  initialState: {},\n};\n\nexport * from './loader-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"names":["UrlStrategy","load","loadingOptions","pdfFile","options","engine","task","openDocumentUrl","Promise","resolve","reject","wait","result","error","type","Error","reason","BufferStrategy","openDocumentBuffer","PDFDocumentLoader","constructor","this","strategies","Map","strategyResolvers","bufferStrategy","registerStrategy","addStrategyResolver","isPdfUrlLoadingOptions","get","name","strategy","set","getStrategy","resolver","push","loadDocument","resolveStrategy","console","_LoaderPlugin","BasePlugin","id","registry","super","loaderHandlers$","createBehaviorEmitter","documentLoadedHandlers$","openFileRequest$","createEmitter","documentLoader","buildCapability","onLoaderEvent","on","onDocumentLoaded","onOpenFileRequest","openFileDialog","emit","getDocument","loadedDocument","initialize","config","defaultStrategies","Object","entries","forEach","postInitialize","closeDocument","documentId","dispatchCoreAction","document","setDocument","errorEvent","String","destroy","clear","LoaderPlugin","LOADER_PLUGIN_ID","manifest","version","provides","requires","optional","metadata","description","author","license","defaultConfig","enabled","LoaderPluginPackage","create","reducer","initialState"],"mappings":"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"}