@embedpdf/pdfium
Version:
PDFium WebAssembly for the web platform. This package provides a powerful JavaScript interface to PDFium, enabling high-quality PDF rendering and manipulation directly in web applications.
1,358 lines (1,260 loc) • 315 kB
JavaScript
var createPdfium = (() => {
var _scriptName = import.meta.url;
return async function (moduleArg = {}) {
var moduleRtn;
// include: shell.js
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(moduleArg) => Promise<Module>
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module = moduleArg;
// Set up the promise that indicates the Module is initialized
var readyPromiseResolve, readyPromiseReject;
var readyPromise = new Promise((resolve, reject) => {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
[
'_EPDF_GetMetaKeyCount',
'_EPDF_GetMetaKeyName',
'_EPDF_GetMetaTrapped',
'_EPDF_GetPageRotationByIndex',
'_EPDF_GetPageSizeByIndexNormalized',
'_EPDF_HasMetaText',
'_EPDF_IsEncrypted',
'_EPDF_IsOwnerUnlocked',
'_EPDF_LoadPageNormalized',
'_EPDF_PNG_EncodeRGBA',
'_EPDF_RemoveEncryption',
'_EPDF_RenderAnnotBitmap',
'_EPDF_RenderAnnotBitmapUnrotated',
'_EPDF_SetEncryption',
'_EPDF_SetMetaText',
'_EPDF_SetMetaTrapped',
'_EPDF_UnlockOwnerPermissions',
'_EPDFAction_CreateGoTo',
'_EPDFAction_CreateGoToNamed',
'_EPDFAction_CreateLaunch',
'_EPDFAction_CreateRemoteGoToByName',
'_EPDFAction_CreateRemoteGoToDest',
'_EPDFAction_CreateURI',
'_EPDFAnnot_ApplyRedaction',
'_EPDFAnnot_ClearColor',
'_EPDFAnnot_ClearRectangleDifferences',
'_EPDFAnnot_Flatten',
'_EPDFAnnot_GenerateAppearance',
'_EPDFAnnot_GenerateAppearanceWithBlend',
'_EPDFAnnot_GetAPMatrix',
'_EPDFAnnot_GetAvailableAppearanceModes',
'_EPDFAnnot_GetBlendMode',
'_EPDFAnnot_GetBorderDashPattern',
'_EPDFAnnot_GetBorderDashPatternCount',
'_EPDFAnnot_GetBorderEffect',
'_EPDFAnnot_GetBorderStyle',
'_EPDFAnnot_GetColor',
'_EPDFAnnot_GetDefaultAppearance',
'_EPDFAnnot_GetExtendedRotation',
'_EPDFAnnot_GetIcon',
'_EPDFAnnot_GetIntent',
'_EPDFAnnot_GetLineEndings',
'_EPDFAnnot_GetOpacity',
'_EPDFAnnot_GetOverlayText',
'_EPDFAnnot_GetOverlayTextRepeat',
'_EPDFAnnot_GetRect',
'_EPDFAnnot_GetRectangleDifferences',
'_EPDFAnnot_GetReplyType',
'_EPDFAnnot_GetRichContent',
'_EPDFAnnot_GetRotate',
'_EPDFAnnot_GetTextAlignment',
'_EPDFAnnot_GetUnrotatedRect',
'_EPDFAnnot_GetVerticalAlignment',
'_EPDFAnnot_HasAppearanceStream',
'_EPDFAnnot_SetAction',
'_EPDFAnnot_SetAPMatrix',
'_EPDFAnnot_SetBorderDashPattern',
'_EPDFAnnot_SetBorderStyle',
'_EPDFAnnot_SetColor',
'_EPDFAnnot_SetDefaultAppearance',
'_EPDFAnnot_SetExtendedRotation',
'_EPDFAnnot_SetIcon',
'_EPDFAnnot_SetIntent',
'_EPDFAnnot_SetLine',
'_EPDFAnnot_SetLineEndings',
'_EPDFAnnot_SetLinkedAnnot',
'_EPDFAnnot_SetOpacity',
'_EPDFAnnot_SetOverlayText',
'_EPDFAnnot_SetOverlayTextRepeat',
'_EPDFAnnot_SetRectangleDifferences',
'_EPDFAnnot_SetReplyType',
'_EPDFAnnot_SetRotate',
'_EPDFAnnot_SetTextAlignment',
'_EPDFAnnot_SetUnrotatedRect',
'_EPDFAnnot_SetVerticalAlignment',
'_EPDFAnnot_SetVertices',
'_EPDFAnnot_UpdateAppearanceToRect',
'_EPDFAttachment_GetDescription',
'_EPDFAttachment_GetIntegerValue',
'_EPDFAttachment_SetDescription',
'_EPDFAttachment_SetSubtype',
'_EPDFBookmark_AppendChild',
'_EPDFBookmark_Clear',
'_EPDFBookmark_ClearTarget',
'_EPDFBookmark_Create',
'_EPDFBookmark_Delete',
'_EPDFBookmark_InsertAfter',
'_EPDFBookmark_SetAction',
'_EPDFBookmark_SetDest',
'_EPDFBookmark_SetTitle',
'_EPDFCatalog_GetLanguage',
'_EPDFDest_CreateRemoteView',
'_EPDFDest_CreateRemoteXYZ',
'_EPDFDest_CreateView',
'_EPDFDest_CreateXYZ',
'_EPDFNamedDest_Remove',
'_EPDFNamedDest_SetDest',
'_EPDFPage_ApplyRedactions',
'_EPDFPage_CreateAnnot',
'_EPDFPage_GetAnnotByName',
'_EPDFPage_GetAnnotCountRaw',
'_EPDFPage_GetAnnotRaw',
'_EPDFPage_RemoveAnnotByName',
'_EPDFPage_RemoveAnnotRaw',
'_EPDFText_RedactInQuads',
'_EPDFText_RedactInRect',
'_FORM_CanRedo',
'_FORM_CanUndo',
'_FORM_DoDocumentAAction',
'_FORM_DoDocumentJSAction',
'_FORM_DoDocumentOpenAction',
'_FORM_DoPageAAction',
'_FORM_ForceToKillFocus',
'_FORM_GetFocusedAnnot',
'_FORM_GetFocusedText',
'_FORM_GetSelectedText',
'_FORM_IsIndexSelected',
'_FORM_OnAfterLoadPage',
'_FORM_OnBeforeClosePage',
'_FORM_OnChar',
'_FORM_OnFocus',
'_FORM_OnKeyDown',
'_FORM_OnKeyUp',
'_FORM_OnLButtonDoubleClick',
'_FORM_OnLButtonDown',
'_FORM_OnLButtonUp',
'_FORM_OnMouseMove',
'_FORM_OnMouseWheel',
'_FORM_OnRButtonDown',
'_FORM_OnRButtonUp',
'_FORM_Redo',
'_FORM_ReplaceAndKeepSelection',
'_FORM_ReplaceSelection',
'_FORM_SelectAllText',
'_FORM_SetFocusedAnnot',
'_FORM_SetIndexSelected',
'_FORM_Undo',
'_FPDF_AddInstalledFont',
'_FPDF_CloseDocument',
'_FPDF_ClosePage',
'_FPDF_CloseXObject',
'_FPDF_CopyViewerPreferences',
'_FPDF_CountNamedDests',
'_FPDF_CreateClipPath',
'_FPDF_CreateNewDocument',
'_FPDF_DestroyClipPath',
'_FPDF_DestroyLibrary',
'_FPDF_DeviceToPage',
'_FPDF_DocumentHasValidCrossReferenceTable',
'_FPDF_FFLDraw',
'_FPDF_FreeDefaultSystemFontInfo',
'_FPDF_GetDefaultSystemFontInfo',
'_FPDF_GetDefaultTTFMap',
'_FPDF_GetDefaultTTFMapCount',
'_FPDF_GetDefaultTTFMapEntry',
'_FPDF_GetDocPermissions',
'_FPDF_GetDocUserPermissions',
'_FPDF_GetFileIdentifier',
'_FPDF_GetFileVersion',
'_FPDF_GetFormType',
'_FPDF_GetLastError',
'_FPDF_GetMetaText',
'_FPDF_GetNamedDest',
'_FPDF_GetNamedDestByName',
'_FPDF_GetPageAAction',
'_FPDF_GetPageBoundingBox',
'_FPDF_GetPageCount',
'_FPDF_GetPageHeight',
'_FPDF_GetPageHeightF',
'_FPDF_GetPageLabel',
'_FPDF_GetPageSizeByIndex',
'_FPDF_GetPageSizeByIndexF',
'_FPDF_GetPageWidth',
'_FPDF_GetPageWidthF',
'_FPDF_GetSecurityHandlerRevision',
'_FPDF_GetSignatureCount',
'_FPDF_GetSignatureObject',
'_FPDF_GetTrailerEnds',
'_FPDF_GetXFAPacketContent',
'_FPDF_GetXFAPacketCount',
'_FPDF_GetXFAPacketName',
'_FPDF_ImportNPagesToOne',
'_FPDF_ImportPages',
'_FPDF_ImportPagesByIndex',
'_FPDF_InitLibrary',
'_FPDF_InitLibraryWithConfig',
'_FPDF_LoadCustomDocument',
'_FPDF_LoadDocument',
'_FPDF_LoadMemDocument',
'_FPDF_LoadMemDocument64',
'_FPDF_LoadPage',
'_FPDF_LoadXFA',
'_FPDF_MovePages',
'_FPDF_NewFormObjectFromXObject',
'_FPDF_NewXObjectFromPage',
'_FPDF_PageToDevice',
'_FPDF_RemoveFormFieldHighlight',
'_FPDF_RenderPage_Close',
'_FPDF_RenderPage_Continue',
'_FPDF_RenderPageBitmap',
'_FPDF_RenderPageBitmap_Start',
'_FPDF_RenderPageBitmapWithColorScheme_Start',
'_FPDF_RenderPageBitmapWithMatrix',
'_FPDF_SaveAsCopy',
'_FPDF_SaveWithVersion',
'_FPDF_SetFormFieldHighlightAlpha',
'_FPDF_SetFormFieldHighlightColor',
'_FPDF_SetSandBoxPolicy',
'_FPDF_SetSystemFontInfo',
'_FPDF_StructElement_Attr_CountChildren',
'_FPDF_StructElement_Attr_GetBlobValue',
'_FPDF_StructElement_Attr_GetBooleanValue',
'_FPDF_StructElement_Attr_GetChildAtIndex',
'_FPDF_StructElement_Attr_GetCount',
'_FPDF_StructElement_Attr_GetName',
'_FPDF_StructElement_Attr_GetNumberValue',
'_FPDF_StructElement_Attr_GetStringValue',
'_FPDF_StructElement_Attr_GetType',
'_FPDF_StructElement_Attr_GetValue',
'_FPDF_StructElement_CountChildren',
'_FPDF_StructElement_GetActualText',
'_FPDF_StructElement_GetAltText',
'_FPDF_StructElement_GetAttributeAtIndex',
'_FPDF_StructElement_GetAttributeCount',
'_FPDF_StructElement_GetChildAtIndex',
'_FPDF_StructElement_GetChildMarkedContentID',
'_FPDF_StructElement_GetID',
'_FPDF_StructElement_GetLang',
'_FPDF_StructElement_GetMarkedContentID',
'_FPDF_StructElement_GetMarkedContentIdAtIndex',
'_FPDF_StructElement_GetMarkedContentIdCount',
'_FPDF_StructElement_GetObjType',
'_FPDF_StructElement_GetParent',
'_FPDF_StructElement_GetStringAttribute',
'_FPDF_StructElement_GetTitle',
'_FPDF_StructElement_GetType',
'_FPDF_StructTree_Close',
'_FPDF_StructTree_CountChildren',
'_FPDF_StructTree_GetChildAtIndex',
'_FPDF_StructTree_GetForPage',
'_FPDF_VIEWERREF_GetDuplex',
'_FPDF_VIEWERREF_GetName',
'_FPDF_VIEWERREF_GetNumCopies',
'_FPDF_VIEWERREF_GetPrintPageRange',
'_FPDF_VIEWERREF_GetPrintPageRangeCount',
'_FPDF_VIEWERREF_GetPrintPageRangeElement',
'_FPDF_VIEWERREF_GetPrintScaling',
'_FPDFAction_GetDest',
'_FPDFAction_GetFilePath',
'_FPDFAction_GetType',
'_FPDFAction_GetURIPath',
'_FPDFAnnot_AddFileAttachment',
'_FPDFAnnot_AddInkStroke',
'_FPDFAnnot_AppendAttachmentPoints',
'_FPDFAnnot_AppendObject',
'_FPDFAnnot_CountAttachmentPoints',
'_FPDFAnnot_GetAP',
'_FPDFAnnot_GetAttachmentPoints',
'_FPDFAnnot_GetBorder',
'_FPDFAnnot_GetColor',
'_FPDFAnnot_GetFileAttachment',
'_FPDFAnnot_GetFlags',
'_FPDFAnnot_GetFocusableSubtypes',
'_FPDFAnnot_GetFocusableSubtypesCount',
'_FPDFAnnot_GetFontColor',
'_FPDFAnnot_GetFontSize',
'_FPDFAnnot_GetFormAdditionalActionJavaScript',
'_FPDFAnnot_GetFormControlCount',
'_FPDFAnnot_GetFormControlIndex',
'_FPDFAnnot_GetFormFieldAlternateName',
'_FPDFAnnot_GetFormFieldAtPoint',
'_FPDFAnnot_GetFormFieldExportValue',
'_FPDFAnnot_GetFormFieldFlags',
'_FPDFAnnot_GetFormFieldName',
'_FPDFAnnot_GetFormFieldType',
'_FPDFAnnot_GetFormFieldValue',
'_FPDFAnnot_GetInkListCount',
'_FPDFAnnot_GetInkListPath',
'_FPDFAnnot_GetLine',
'_FPDFAnnot_GetLink',
'_FPDFAnnot_GetLinkedAnnot',
'_FPDFAnnot_GetNumberValue',
'_FPDFAnnot_GetObject',
'_FPDFAnnot_GetObjectCount',
'_FPDFAnnot_GetOptionCount',
'_FPDFAnnot_GetOptionLabel',
'_FPDFAnnot_GetRect',
'_FPDFAnnot_GetStringValue',
'_FPDFAnnot_GetSubtype',
'_FPDFAnnot_GetValueType',
'_FPDFAnnot_GetVertices',
'_FPDFAnnot_HasAttachmentPoints',
'_FPDFAnnot_HasKey',
'_FPDFAnnot_IsChecked',
'_FPDFAnnot_IsObjectSupportedSubtype',
'_FPDFAnnot_IsOptionSelected',
'_FPDFAnnot_IsSupportedSubtype',
'_FPDFAnnot_RemoveInkList',
'_FPDFAnnot_RemoveObject',
'_FPDFAnnot_SetAP',
'_FPDFAnnot_SetAttachmentPoints',
'_FPDFAnnot_SetBorder',
'_FPDFAnnot_SetColor',
'_FPDFAnnot_SetFlags',
'_FPDFAnnot_SetFocusableSubtypes',
'_FPDFAnnot_SetFontColor',
'_FPDFAnnot_SetFormFieldFlags',
'_FPDFAnnot_SetRect',
'_FPDFAnnot_SetStringValue',
'_FPDFAnnot_SetURI',
'_FPDFAnnot_UpdateObject',
'_FPDFAttachment_GetFile',
'_FPDFAttachment_GetName',
'_FPDFAttachment_GetStringValue',
'_FPDFAttachment_GetSubtype',
'_FPDFAttachment_GetValueType',
'_FPDFAttachment_HasKey',
'_FPDFAttachment_SetFile',
'_FPDFAttachment_SetStringValue',
'_FPDFAvail_Create',
'_FPDFAvail_Destroy',
'_FPDFAvail_GetDocument',
'_FPDFAvail_GetFirstPageNum',
'_FPDFAvail_IsDocAvail',
'_FPDFAvail_IsFormAvail',
'_FPDFAvail_IsLinearized',
'_FPDFAvail_IsPageAvail',
'_FPDFBitmap_Create',
'_FPDFBitmap_CreateEx',
'_FPDFBitmap_Destroy',
'_FPDFBitmap_FillRect',
'_FPDFBitmap_GetBuffer',
'_FPDFBitmap_GetFormat',
'_FPDFBitmap_GetHeight',
'_FPDFBitmap_GetStride',
'_FPDFBitmap_GetWidth',
'_FPDFBookmark_Find',
'_FPDFBookmark_GetAction',
'_FPDFBookmark_GetCount',
'_FPDFBookmark_GetDest',
'_FPDFBookmark_GetFirstChild',
'_FPDFBookmark_GetNextSibling',
'_FPDFBookmark_GetTitle',
'_FPDFCatalog_GetLanguage',
'_FPDFCatalog_IsTagged',
'_FPDFCatalog_SetLanguage',
'_FPDFClipPath_CountPaths',
'_FPDFClipPath_CountPathSegments',
'_FPDFClipPath_GetPathSegment',
'_FPDFDest_GetDestPageIndex',
'_FPDFDest_GetLocationInPage',
'_FPDFDest_GetView',
'_FPDFDoc_AddAttachment',
'_FPDFDoc_CloseJavaScriptAction',
'_FPDFDoc_DeleteAttachment',
'_FPDFDOC_ExitFormFillEnvironment',
'_FPDFDoc_GetAttachment',
'_FPDFDoc_GetAttachmentCount',
'_FPDFDoc_GetJavaScriptAction',
'_FPDFDoc_GetJavaScriptActionCount',
'_FPDFDoc_GetPageMode',
'_FPDFDOC_InitFormFillEnvironment',
'_FPDFFont_Close',
'_FPDFFont_GetAscent',
'_FPDFFont_GetBaseFontName',
'_FPDFFont_GetDescent',
'_FPDFFont_GetFamilyName',
'_FPDFFont_GetFlags',
'_FPDFFont_GetFontData',
'_FPDFFont_GetGlyphPath',
'_FPDFFont_GetGlyphWidth',
'_FPDFFont_GetIsEmbedded',
'_FPDFFont_GetItalicAngle',
'_FPDFFont_GetWeight',
'_FPDFFormObj_CountObjects',
'_FPDFFormObj_GetObject',
'_FPDFFormObj_RemoveObject',
'_FPDFGlyphPath_CountGlyphSegments',
'_FPDFGlyphPath_GetGlyphPathSegment',
'_FPDFImageObj_GetBitmap',
'_FPDFImageObj_GetIccProfileDataDecoded',
'_FPDFImageObj_GetImageDataDecoded',
'_FPDFImageObj_GetImageDataRaw',
'_FPDFImageObj_GetImageFilter',
'_FPDFImageObj_GetImageFilterCount',
'_FPDFImageObj_GetImageMetadata',
'_FPDFImageObj_GetImagePixelSize',
'_FPDFImageObj_GetRenderedBitmap',
'_FPDFImageObj_LoadJpegFile',
'_FPDFImageObj_LoadJpegFileInline',
'_FPDFImageObj_SetBitmap',
'_FPDFImageObj_SetMatrix',
'_FPDFJavaScriptAction_GetName',
'_FPDFJavaScriptAction_GetScript',
'_FPDFLink_CloseWebLinks',
'_FPDFLink_CountQuadPoints',
'_FPDFLink_CountRects',
'_FPDFLink_CountWebLinks',
'_FPDFLink_Enumerate',
'_FPDFLink_GetAction',
'_FPDFLink_GetAnnot',
'_FPDFLink_GetAnnotRect',
'_FPDFLink_GetDest',
'_FPDFLink_GetLinkAtPoint',
'_FPDFLink_GetLinkZOrderAtPoint',
'_FPDFLink_GetQuadPoints',
'_FPDFLink_GetRect',
'_FPDFLink_GetTextRange',
'_FPDFLink_GetURL',
'_FPDFLink_LoadWebLinks',
'_FPDFPage_CloseAnnot',
'_FPDFPage_CountObjects',
'_FPDFPage_CreateAnnot',
'_FPDFPage_Delete',
'_FPDFPage_Flatten',
'_FPDFPage_FormFieldZOrderAtPoint',
'_FPDFPage_GenerateContent',
'_FPDFPage_GetAnnot',
'_FPDFPage_GetAnnotCount',
'_FPDFPage_GetAnnotIndex',
'_FPDFPage_GetArtBox',
'_FPDFPage_GetBleedBox',
'_FPDFPage_GetCropBox',
'_FPDFPage_GetDecodedThumbnailData',
'_FPDFPage_GetMediaBox',
'_FPDFPage_GetObject',
'_FPDFPage_GetRawThumbnailData',
'_FPDFPage_GetRotation',
'_FPDFPage_GetThumbnailAsBitmap',
'_FPDFPage_GetTrimBox',
'_FPDFPage_HasFormFieldAtPoint',
'_FPDFPage_HasTransparency',
'_FPDFPage_InsertClipPath',
'_FPDFPage_InsertObject',
'_FPDFPage_InsertObjectAtIndex',
'_FPDFPage_New',
'_FPDFPage_RemoveAnnot',
'_FPDFPage_RemoveObject',
'_FPDFPage_SetArtBox',
'_FPDFPage_SetBleedBox',
'_FPDFPage_SetCropBox',
'_FPDFPage_SetMediaBox',
'_FPDFPage_SetRotation',
'_FPDFPage_SetTrimBox',
'_FPDFPage_TransformAnnots',
'_FPDFPage_TransFormWithClip',
'_FPDFPageObj_AddMark',
'_FPDFPageObj_CountMarks',
'_FPDFPageObj_CreateNewPath',
'_FPDFPageObj_CreateNewRect',
'_FPDFPageObj_CreateTextObj',
'_FPDFPageObj_Destroy',
'_FPDFPageObj_GetBounds',
'_FPDFPageObj_GetClipPath',
'_FPDFPageObj_GetDashArray',
'_FPDFPageObj_GetDashCount',
'_FPDFPageObj_GetDashPhase',
'_FPDFPageObj_GetFillColor',
'_FPDFPageObj_GetIsActive',
'_FPDFPageObj_GetLineCap',
'_FPDFPageObj_GetLineJoin',
'_FPDFPageObj_GetMark',
'_FPDFPageObj_GetMarkedContentID',
'_FPDFPageObj_GetMatrix',
'_FPDFPageObj_GetRotatedBounds',
'_FPDFPageObj_GetStrokeColor',
'_FPDFPageObj_GetStrokeWidth',
'_FPDFPageObj_GetType',
'_FPDFPageObj_HasTransparency',
'_FPDFPageObj_NewImageObj',
'_FPDFPageObj_NewTextObj',
'_FPDFPageObj_RemoveMark',
'_FPDFPageObj_SetBlendMode',
'_FPDFPageObj_SetDashArray',
'_FPDFPageObj_SetDashPhase',
'_FPDFPageObj_SetFillColor',
'_FPDFPageObj_SetIsActive',
'_FPDFPageObj_SetLineCap',
'_FPDFPageObj_SetLineJoin',
'_FPDFPageObj_SetMatrix',
'_FPDFPageObj_SetStrokeColor',
'_FPDFPageObj_SetStrokeWidth',
'_FPDFPageObj_Transform',
'_FPDFPageObj_TransformClipPath',
'_FPDFPageObj_TransformF',
'_FPDFPageObjMark_CountParams',
'_FPDFPageObjMark_GetName',
'_FPDFPageObjMark_GetParamBlobValue',
'_FPDFPageObjMark_GetParamFloatValue',
'_FPDFPageObjMark_GetParamIntValue',
'_FPDFPageObjMark_GetParamKey',
'_FPDFPageObjMark_GetParamStringValue',
'_FPDFPageObjMark_GetParamValueType',
'_FPDFPageObjMark_RemoveParam',
'_FPDFPageObjMark_SetBlobParam',
'_FPDFPageObjMark_SetFloatParam',
'_FPDFPageObjMark_SetIntParam',
'_FPDFPageObjMark_SetStringParam',
'_FPDFPath_BezierTo',
'_FPDFPath_Close',
'_FPDFPath_CountSegments',
'_FPDFPath_GetDrawMode',
'_FPDFPath_GetPathSegment',
'_FPDFPath_LineTo',
'_FPDFPath_MoveTo',
'_FPDFPath_SetDrawMode',
'_FPDFPathSegment_GetClose',
'_FPDFPathSegment_GetPoint',
'_FPDFPathSegment_GetType',
'_FPDFSignatureObj_GetByteRange',
'_FPDFSignatureObj_GetContents',
'_FPDFSignatureObj_GetDocMDPPermission',
'_FPDFSignatureObj_GetReason',
'_FPDFSignatureObj_GetSubFilter',
'_FPDFSignatureObj_GetTime',
'_FPDFText_ClosePage',
'_FPDFText_CountChars',
'_FPDFText_CountRects',
'_FPDFText_FindClose',
'_FPDFText_FindNext',
'_FPDFText_FindPrev',
'_FPDFText_FindStart',
'_FPDFText_GetBoundedText',
'_FPDFText_GetCharAngle',
'_FPDFText_GetCharBox',
'_FPDFText_GetCharIndexAtPos',
'_FPDFText_GetCharIndexFromTextIndex',
'_FPDFText_GetCharOrigin',
'_FPDFText_GetFillColor',
'_FPDFText_GetFontInfo',
'_FPDFText_GetFontSize',
'_FPDFText_GetFontWeight',
'_FPDFText_GetLooseCharBox',
'_FPDFText_GetMatrix',
'_FPDFText_GetRect',
'_FPDFText_GetSchCount',
'_FPDFText_GetSchResultIndex',
'_FPDFText_GetStrokeColor',
'_FPDFText_GetText',
'_FPDFText_GetTextIndexFromCharIndex',
'_FPDFText_GetTextObject',
'_FPDFText_GetUnicode',
'_FPDFText_HasUnicodeMapError',
'_FPDFText_IsGenerated',
'_FPDFText_IsHyphen',
'_FPDFText_LoadCidType2Font',
'_FPDFText_LoadFont',
'_FPDFText_LoadPage',
'_FPDFText_LoadStandardFont',
'_FPDFText_SetCharcodes',
'_FPDFText_SetText',
'_FPDFTextObj_GetFont',
'_FPDFTextObj_GetFontSize',
'_FPDFTextObj_GetRenderedBitmap',
'_FPDFTextObj_GetText',
'_FPDFTextObj_GetTextRenderMode',
'_FPDFTextObj_SetTextRenderMode',
'_PDFiumExt_CloseFileWriter',
'_PDFiumExt_CloseFormFillInfo',
'_PDFiumExt_ExitFormFillEnvironment',
'_PDFiumExt_GetFileWriterData',
'_PDFiumExt_GetFileWriterSize',
'_PDFiumExt_Init',
'_PDFiumExt_InitFormFillEnvironment',
'_PDFiumExt_OpenFileWriter',
'_PDFiumExt_OpenFormFillInfo',
'_PDFiumExt_SaveAsCopy',
'_malloc',
'_free',
'_memory',
'___indirect_function_table',
'onRuntimeInitialized',
].forEach((prop) => {
if (!Object.getOwnPropertyDescriptor(readyPromise, prop)) {
Object.defineProperty(readyPromise, prop, {
get: () =>
abort(
'You are getting ' +
prop +
' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',
),
set: () =>
abort(
'You are setting ' +
prop +
' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',
),
});
}
});
// Determine the runtime environment we are in. You can customize this by
// setting the ENVIRONMENT setting at compile time (see settings.js).
// Attempt to auto-detect the environment
var ENVIRONMENT_IS_WEB = typeof window == 'object';
var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';
// N.b. Electron.js environment is simultaneously a NODE-environment, but
// also a web environment.
typeof process == 'object' &&
typeof process.versions == 'object' &&
typeof process.versions.node == 'string' &&
process.type != 'renderer';
var ENVIRONMENT_IS_SHELL =
!ENVIRONMENT_IS_WEB && true && !ENVIRONMENT_IS_WORKER;
var require;
// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = Object.assign({}, Module);
var thisProgram = './this.program';
// `/` should be present at the end if `scriptDirectory` is not empty
var scriptDirectory = '';
function locateFile(path) {
if (Module['locateFile']) {
return Module['locateFile'](path, scriptDirectory);
}
return scriptDirectory + path;
}
// Hooks that are implemented differently in different runtime environments.
var readAsync, readBinary;
if (ENVIRONMENT_IS_SHELL) {
if (
(typeof process == 'object' && typeof require === 'function') ||
typeof window == 'object' ||
typeof importScripts == 'function'
)
throw new Error(
'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',
);
readBinary = (f) => {
if (typeof readbuffer == 'function') {
return new Uint8Array(readbuffer(f));
}
let data = read(f, 'binary');
assert(typeof data == 'object');
return data;
};
readAsync = (f) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(readBinary(f)));
});
};
globalThis.clearTimeout ??= (id) => {};
// spidermonkey lacks setTimeout but we use it above in readAsync.
globalThis.setTimeout ??= (f) => (typeof f == 'function' ? f() : abort());
if (typeof print != 'undefined') {
// Prefer to use print/printErr where they exist, as they usually work better.
globalThis.console ??= /** @type{!Console} */ ({});
console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);
console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (
globalThis.printErr ?? print
);
}
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
// Note that this includes Node.js workers when relevant (pthreads is enabled).
// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
// ENVIRONMENT_IS_NODE.
if (ENVIRONMENT_IS_WORKER) {
// Check worker, not web, since window could be polyfilled
scriptDirectory = self.location.href;
} else if (typeof document != 'undefined' && document.currentScript) {
// web
scriptDirectory = document.currentScript.src;
}
// When MODULARIZE, this JS may be executed later, after document.currentScript
// is gone, so we saved it, and we use it here instead of any other info.
if (_scriptName) {
scriptDirectory = _scriptName;
}
// blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
// otherwise, slice off the final part of the url to find the script directory.
// if scriptDirectory does not contain a slash, lastIndexOf will return -1,
// and scriptDirectory will correctly be replaced with an empty string.
// If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),
// they are removed because they could contain a slash.
if (scriptDirectory.startsWith('blob:')) {
scriptDirectory = '';
} else {
scriptDirectory = scriptDirectory.substr(
0,
scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,
);
}
if (!(typeof window == 'object' || typeof importScripts == 'function'))
throw new Error(
'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',
);
{
// include: web_or_worker_shell_read.js
if (ENVIRONMENT_IS_WORKER) {
readBinary = (url) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.responseType = 'arraybuffer';
xhr.send(null);
return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response));
};
}
readAsync = (url) => {
assert(!isFileURI(url), 'readAsync does not work with file:// URLs');
return fetch(url, { credentials: 'same-origin' }).then((response) => {
if (response.ok) {
return response.arrayBuffer();
}
return Promise.reject(new Error(response.status + ' : ' + response.url));
});
};
// end include: web_or_worker_shell_read.js
}
} else {
throw new Error('environment detection error');
}
var out = Module['print'] || console.log.bind(console);
var err = Module['printErr'] || console.error.bind(console);
// Merge back in the overrides
Object.assign(Module, moduleOverrides);
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used.
moduleOverrides = null;
checkIncomingModuleAPI();
// Emit code to handle expected values on the Module object. This applies Module.x
// to the proper local x. This has two benefits: first, we only emit it if it is
// expected to arrive, and second, by using a local everywhere else that can be
// minified.
if (Module['arguments']) Module['arguments'];
legacyModuleProp('arguments', 'arguments_');
if (Module['thisProgram']) thisProgram = Module['thisProgram'];
legacyModuleProp('thisProgram', 'thisProgram');
// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
// Assertions on removed incoming Module JS APIs.
assert(
typeof Module['memoryInitializerPrefixURL'] == 'undefined',
'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead',
);
assert(
typeof Module['pthreadMainPrefixURL'] == 'undefined',
'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead',
);
assert(
typeof Module['cdInitializerPrefixURL'] == 'undefined',
'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead',
);
assert(
typeof Module['filePackagePrefixURL'] == 'undefined',
'Module.filePackagePrefixURL option was removed, use Module.locateFile instead',
);
assert(typeof Module['read'] == 'undefined', 'Module.read option was removed');
assert(
typeof Module['readAsync'] == 'undefined',
'Module.readAsync option was removed (modify readAsync in JS)',
);
assert(
typeof Module['readBinary'] == 'undefined',
'Module.readBinary option was removed (modify readBinary in JS)',
);
assert(
typeof Module['setWindowTitle'] == 'undefined',
'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)',
);
assert(
typeof Module['TOTAL_MEMORY'] == 'undefined',
'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY',
);
legacyModuleProp('asm', 'wasmExports');
legacyModuleProp('readAsync', 'readAsync');
legacyModuleProp('readBinary', 'readBinary');
legacyModuleProp('setWindowTitle', 'setWindowTitle');
// end include: shell.js
// include: preamble.js
// === Preamble library stuff ===
// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
var wasmBinary = Module['wasmBinary'];
legacyModuleProp('wasmBinary', 'wasmBinary');
if (typeof WebAssembly != 'object') {
err('no native wasm support detected');
}
// Wasm globals
var wasmMemory;
//========================================
// Runtime essentials
//========================================
// whether we are quitting the application. no code should run after this.
// set in exit() and abort()
var ABORT = false;
// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we
// don't define it at all in release modes. This matches the behaviour of
// MINIMAL_RUNTIME.
// TODO(sbc): Make this the default even without STRICT enabled.
/** @type {function(*, string=)} */
function assert(condition, text) {
if (!condition) {
abort('Assertion failed' + (text ? ': ' + text : ''));
}
}
// We used to include malloc/free by default in the past. Show a helpful error in
// builds with assertions.
// Memory management
var /** @type {!Int8Array} */
HEAP8,
/** @type {!Uint8Array} */
HEAPU8,
/** @type {!Int16Array} */
HEAP16,
/** @type {!Uint16Array} */
HEAPU16,
/** @type {!Int32Array} */
HEAP32,
/** @type {!Uint32Array} */
HEAPU32,
/** @type {!Float32Array} */
HEAPF32,
/** @type {!Float64Array} */
HEAPF64;
// include: runtime_shared.js
function updateMemoryViews() {
var b = wasmMemory.buffer;
Module['HEAP8'] = HEAP8 = new Int8Array(b);
Module['HEAP16'] = HEAP16 = new Int16Array(b);
Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);
Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);
Module['HEAP32'] = HEAP32 = new Int32Array(b);
Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);
Module['HEAPF32'] = HEAPF32 = new Float32Array(b);
Module['HEAPF64'] = HEAPF64 = new Float64Array(b);
}
// end include: runtime_shared.js
assert(
!Module['STACK_SIZE'],
'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time',
);
assert(
typeof Int32Array != 'undefined' &&
typeof Float64Array !== 'undefined' &&
Int32Array.prototype.subarray != undefined &&
Int32Array.prototype.set != undefined,
'JS engine does not provide full typed array support',
);
// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY
assert(
!Module['wasmMemory'],
'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally',
);
assert(
!Module['INITIAL_MEMORY'],
'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically',
);
// include: runtime_stack_check.js
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
function writeStackCookie() {
var max = _emscripten_stack_get_end();
assert((max & 3) == 0);
// If the stack ends at address zero we write our cookies 4 bytes into the
// stack. This prevents interference with SAFE_HEAP and ASAN which also
// monitor writes to address zero.
if (max == 0) {
max += 4;
}
// The stack grow downwards towards _emscripten_stack_get_end.
// We write cookies to the final two words in the stack and detect if they are
// ever overwritten.
HEAPU32[max >> 2] = 0x02135467;
HEAPU32[(max + 4) >> 2] = 0x89bacdfe;
// Also test the global address 0 for integrity.
HEAPU32[0 >> 2] = 1668509029;
}
function checkStackCookie() {
if (ABORT) return;
var max = _emscripten_stack_get_end();
// See writeStackCookie().
if (max == 0) {
max += 4;
}
var cookie1 = HEAPU32[max >> 2];
var cookie2 = HEAPU32[(max + 4) >> 2];
if (cookie1 != 0x02135467 || cookie2 != 0x89bacdfe) {
abort(
`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`,
);
}
// Also test the global address 0 for integrity.
if (HEAPU32[0 >> 2] != 0x63736d65 /* 'emsc' */) {
abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
}
}
// end include: runtime_stack_check.js
var __ATPRERUN__ = []; // functions called before the runtime is initialized
var __ATINIT__ = []; // functions called during startup
var __ATPOSTRUN__ = []; // functions called after the main() is called
var runtimeInitialized = false;
function preRun() {
var preRuns = Module['preRun'];
if (preRuns) {
if (typeof preRuns == 'function') preRuns = [preRuns];
preRuns.forEach(addOnPreRun);
}
callRuntimeCallbacks(__ATPRERUN__);
}
function initRuntime() {
assert(!runtimeInitialized);
runtimeInitialized = true;
checkStackCookie();
if (!Module['noFSInit'] && !FS.initialized) FS.init();
FS.ignorePermissions = false;
callRuntimeCallbacks(__ATINIT__);
}
function postRun() {
checkStackCookie();
var postRuns = Module['postRun'];
if (postRuns) {
if (typeof postRuns == 'function') postRuns = [postRuns];
postRuns.forEach(addOnPostRun);
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
// include: runtime_math.js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
assert(
Math.imul,
'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',
);
assert(
Math.fround,
'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',
);
assert(
Math.clz32,
'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',
);
assert(
Math.trunc,
'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',
);
// end include: runtime_math.js
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// Module.preRun (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
var runDependencyTracking = {};
function getUniqueRunDependency(id) {
var orig = id;
while (1) {
if (!runDependencyTracking[id]) return id;
id = orig + Math.random();
}
}
function addRunDependency(id) {
runDependencies++;
Module['monitorRunDependencies']?.(runDependencies);
if (id) {
assert(!runDependencyTracking[id]);
runDependencyTracking[id] = 1;
if (runDependencyWatcher === null && typeof setInterval != 'undefined') {
// Check for missing dependencies every few seconds
runDependencyWatcher = setInterval(() => {
if (ABORT) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
return;
}
var shown = false;
for (var dep in runDependencyTracking) {
if (!shown) {
shown = true;
err('still waiting on run dependencies:');
}
err(`dependency: ${dep}`);
}
if (shown) {
err('(end of list)');
}
}, 10000);
}
} else {
err('warning: run dependency added without ID');
}
}
function removeRunDependency(id) {
runDependencies--;
Module['monitorRunDependencies']?.(runDependencies);
if (id) {
assert(runDependencyTracking[id]);
delete runDependencyTracking[id];
} else {
err('warning: run dependency removed without ID');
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback(); // can add another dependenciesFulfilled
}
}
}
/** @param {string|number=} what */
function abort(what) {
Module['onAbort']?.(what);
what = 'Aborted(' + what + ')';
// TODO(sbc): Should we remove printing and leave it up to whoever
// catches the exception?
err(what);
ABORT = true;
// Use a wasm runtime error, because a JS error might be seen as a foreign
// exception, which means we'd run destructors on it. We need the error to
// simply make the program stop.
// FIXME This approach does not work in Wasm EH because it currently does not assume
// all RuntimeErrors are from traps; it decides whether a RuntimeError is from
// a trap or not based on a hidden field within the object. So at the moment
// we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
// allows this in the wasm spec.
// Suppress closure compiler warning here. Closure compiler's builtin extern
// definition for WebAssembly.RuntimeError claims it takes no arguments even
// though it can.
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
/** @suppress {checkTypes} */
var e = new WebAssembly.RuntimeError(what);
readyPromiseReject(e);
// Throw the error whether or not MODULARIZE is set because abort is used
// in code paths apart from instantiation where an exception is expected
// to be thrown when abort is called.
throw e;
}
// include: memoryprofiler.js
// end include: memoryprofiler.js
// include: URIUtils.js
// Prefix of data URIs emitted by SINGLE_FILE and related options.
var dataURIPrefix = 'data:application/octet-stream;base64,';
/**
* Indicates whether filename is a base64 data URI.
* @noinline
*/
var isDataURI = (filename) => filename.startsWith(dataURIPrefix);
/**
* Indicates whether filename is delivered via file protocol (as opposed to http/https)
* @noinline
*/
var isFileURI = (filename) => filename.startsWith('file://');
// end include: URIUtils.js
function createExportWrapper(name, nargs) {
return (...args) => {
assert(
runtimeInitialized,
`native function \`${name}\` called before runtime initialization`,
);
var f = wasmExports[name];
assert(f, `exported native function \`${name}\` not found`);
// Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.
assert(
args.length <= nargs,
`native function \`${name}\` called with ${args.length} args but expects ${nargs}`,
);
return f(...args);
};
}
// include: runtime_exceptions.js
// end include: runtime_exceptions.js
function findWasmBinary() {
if (Module['locateFile']) {
var f = 'pdfium.wasm';
if (!isDataURI(f)) {
return locateFile(f);
}
return f;
}
if (ENVIRONMENT_IS_SHELL) return 'pdfium.wasm';
// Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.
return new URL('pdfium.wasm', import.meta.url).href;
}
var wasmBinaryFile;
function getBinarySync(file) {
if (file == wasmBinaryFile && wasmBinary) {
return new Uint8Array(wasmBinary);
}
if (readBinary) {
return readBinary(file);
}
throw 'both async and sync fetching of the wasm failed';
}
function getBinaryPromise(binaryFile) {
// If we don't have the binary yet, load it asynchronously using readAsync.
if (!wasmBinary) {
// Fetch the binary using readAsync
return readAsync(binaryFile).then(
(response) => new Uint8Array(/** @type{!ArrayBuffer} */ (response)),
// Fall back to getBinarySync if readAsync fails
() => getBinarySync(binaryFile),
);
}
// Otherwise, getBinarySync should be able to get it synchronously
return Promise.resolve().then(() => getBinarySync(binaryFile));
}
function instantiateArrayBuffer(binaryFile, imports, receiver) {
return getBinaryPromise(binaryFile)
.then((binary) => {
return WebAssembly.instantiate(binary, imports);
})
.then(receiver, (reason) => {
err(`failed to asynchronously prepare wasm: ${reason}`);
// Warn on some common problems.
if (isFileURI(wasmBinaryFile)) {
err(
`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`,
);
}
abort(reason);
});
}
function instantiateAsync(binary, binaryFile, imports, callback) {
if (
!binary &&
typeof WebAssembly.instantiateStreaming == 'function' &&
!isDataURI(binaryFile) &&
// Avoid instantiateStreaming() on Node.js environment for now, as while
// Node.js v18.1.0 implements it, it does not have a full fetch()
// implementation yet.
//
// Reference:
// https://github.com/emscripten-core/emscripten/pull/16917
true &&
typeof fetch == 'function'
) {
return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => {
// Suppress closure warning here since the upstream definition for
// instantiateStreaming only allows Promise<Repsponse> rather than
// an actual Response.
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.
/** @suppress {checkTypes} */
var result = WebAssembly.instantiateStreaming(response, imports);
return result.then(callback, function (reason) {
// We expect the most common failure cause to be a bad MIME type for the binary,
// in which case falling back to ArrayBuffer instantiation should work.
err(`wasm streaming compile failed: ${reason}`);
err('falling back to ArrayBuffer instantiation');
return instantiateArrayBuffer(binaryFile, imports, callback);
});
});
}
return instantiateArrayBuffer(binaryFile, imports, callback);
}
function getWasmImports() {
// prepare imports
return {
env: wasmImports,
wasi_snapshot_preview1: wasmImports,
};
}
// Create the wasm instance.
// Receives the wasm imports, returns the exports.
function createWasm() {
var info = getWasmImports();
// Load the wasm module and create an instance of using native support in the JS engine.
// handle a generated wasm instance, receiving its exports and
// performing other necessary setup
/** @param {WebAssembly.Module=} module*/
function receiveInstance(instance, module) {
wasmExports = instance.exports;
Module['wasmExports'] = wasmExports;
wasmMemory = wasmExports['memory'];
assert(wasmMemory, 'memory not found in wasm exports');
updateMemoryViews();
wasmTable = wasmExports['__indirect_function_table'];
assert(wasmTable, 'table not found in wasm exports');
addOnInit(wasmExports['__wasm_call_ctors']);
removeRunDependency('wasm-instantiate');
return wasmExports;
}
// wait for the pthread pool (if any)
addRunDependency('wasm-instantiate');
// Prefer streaming instantiation if available.
// Async compilation can be confusing when an error on the page overwrites Module
// (for example, if the order of elements is wrong, and the one defining Module is
// later), so we save Module and check it later.
var trueModule = Module;
function receiveInstantiationResult(result) {
// 'result' is a ResultObject object which has both the module and instance.
// receiveInstance() will swap in the exports (to Module.asm) so they can be called
assert(
Module === trueModule,
'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?',
);
trueModule = null;
// TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
// When the regression is fixed, can restore the above PTHREADS-enabled path.
receiveInstance(result['instance']);
}
// User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
// to manually instantiate the Wasm module themselves. This allows pages to
// run the instantiation parallel to any other async startup actions they are
// performing.
// Also pthreads and wasm workers initialize the wasm instance through this
// path.
if (Module['instantiateWasm']) {
try {
return Module['instantiateWasm'](info, receiveInstance);
} catch (e) {
err(`Module.instantiateWasm callback failed with error: ${e}`);
// If instantiation fails, reject the module ready promise.
readyPromiseReject(e);
}
}
wasmBinaryFile ??= findWasmBinary();
// If instantiation fails, reject the module ready promise.
instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(
readyPromiseReject,