import Embeddable from 'src/api/Embeddable' ; import PDFDocument from 'src/api/PDFDocument' ; import JavaScriptEmbedder from 'src/core/embedders/JavaScriptEmbedder' ; import { PDFName , PDFArray , PDFDict , PDFHexString , PDFRef } from 'src/core' ; /**
 * Represents JavaScript that has been embedded in a [[PDFDocument]].
 */ export default class PDFJavaScript implements Embeddable { param ref param doc param embedder static of = ( ref , doc , embedder ) => new PDFJavaScript ( ref , doc , embedder ) ; /** The unique reference assigned to this embedded script within the document. */ readonly ref : PDFRef ; /** The document to which this embedded script belongs. */ readonly doc : PDFDocument ; private alreadyEmbedded = false ; private readonly embedder : JavaScriptEmbedder ; private constructor ( ref , doc , embedder ) { this . ref = ref ; this . doc = doc ; this . embedder = embedder ; } returns async embed ( ) { if ( ! this . alreadyEmbedded ) { const { catalog , context } = this . doc ; const ref = await this . embedder . embedIntoContext ( this . doc . context , this . ref ) ; if ( ! catalog . has ( PDFName . of ( 'Names' ) ) ) { catalog . set ( PDFName . of ( 'Names' ) , context . obj ( { } ) ) ; } const Names = catalog . lookup ( PDFName . of ( 'Names' ) , PDFDict ) ; if ( ! Names . has ( PDFName . of ( 'JavaScript' ) ) ) { Names . set ( PDFName . of ( 'JavaScript' ) , context . obj ( { } ) ) ; } const Javascript = Names . lookup ( PDFName . of ( 'JavaScript' ) , PDFDict ) ; if ( ! Javascript . has ( PDFName . of ( 'Names' ) ) ) { Javascript . set ( PDFName . of ( 'Names' ) , context . obj ( [ ] ) ) ; } const JSNames = Javascript . lookup ( PDFName . of ( 'Names' ) , PDFArray ) ; JSNames . push ( PDFHexString . fromText ( this . embedder . scriptName ) ) ; JSNames . push ( ref ) ; this . alreadyEmbedded = true ; } } }