index.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /** Host document rendering: authorized Office bytes become a complete PDF. */
  2. import { Context, Service } from '@deepseek-ai/cordis'
  3. import type { DocumentRenderErrorCode, DocumentRenderRequest, DocumentRenderResult, DocumentRendererGeneration } from './types.ts'
  4. export * from './types.ts'
  5. /** Classified conversion failure; engine details stay in the cause. */
  6. export class DocumentRenderError extends Error {
  7. /**
  8. * @param code - category suitable for a conversion consumer.
  9. * @param message - diagnostic explaining the failed conversion.
  10. * @param options - underlying engine or filesystem failure.
  11. */
  12. constructor(readonly code: DocumentRenderErrorCode, message: string, options?: ErrorOptions) {
  13. super(message, options)
  14. this.name = 'DocumentRenderError'
  15. }
  16. }
  17. declare module '@deepseek-ai/cordis' {
  18. interface Context {
  19. /** One Host renderer for already-authorized Office bytes. */
  20. documentRender: DocumentRenderer
  21. }
  22. }
  23. /** Load one provider subclass per context; consumers own source authorization. */
  24. export abstract class DocumentRenderer extends Service {
  25. constructor(ctx: Context) { super(ctx, 'documentRender') }
  26. /** Changes whenever engine, font, or rendering configuration is replaced. */
  27. abstract readonly generation: DocumentRendererGeneration
  28. /**
  29. * Convert Office bytes without modifying the source or writing Session events.
  30. * @param request - authorized metadata and deferred bounded source read.
  31. * @param signal - caller cancellation; provider disposal also stops active work.
  32. * @returns caller-owned PDF bytes after conversion and scratch cleanup settle; canceled readers reject independently.
  33. * @throws {DocumentRenderError} Invalid input, unusable output, or engine failure; cancellation rejects with its reason.
  34. */
  35. abstract render(request: DocumentRenderRequest, signal?: AbortSignal): Promise<DocumentRenderResult>
  36. }
  37. export default DocumentRenderer