280 lines
622 KiB
JavaScript
280 lines
622 KiB
JavaScript
|
/**
|
||
|
* @licstart The following is the entire license notice for the
|
||
|
* JavaScript code in this page
|
||
|
*
|
||
|
* Copyright 2023 Mozilla Foundation
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
* @licend The above is the entire license notice for the
|
||
|
* JavaScript code in this page
|
||
|
*/
|
||
|
|
||
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||
|
if(typeof exports === 'object' && typeof module === 'object')
|
||
|
module.exports = root.pdfjsSandbox = factory();
|
||
|
else if(typeof define === 'function' && define.amd)
|
||
|
define("pdfjs-dist/build/pdf.sandbox", [], () => { return (root.pdfjsSandbox = factory()); });
|
||
|
else if(typeof exports === 'object')
|
||
|
exports["pdfjs-dist/build/pdf.sandbox"] = root.pdfjsSandbox = factory();
|
||
|
else
|
||
|
root["pdfjs-dist/build/pdf.sandbox"] = root.pdfjsSandbox = factory();
|
||
|
})(globalThis, () => {
|
||
|
return /******/ (() => { // webpackBootstrap
|
||
|
/******/ "use strict";
|
||
|
/******/ var __webpack_modules__ = ([
|
||
|
/* 0 */,
|
||
|
/* 1 */
|
||
|
/***/ ((__unused_webpack_module, exports) => {
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", ({value:true}));exports["default"]=void 0;var Module=(()=>{var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var c;c||(c=typeof Module!=='undefined'?Module:{});var h,n;c.ready=new Promise(function(a,b){h=a;n=b;});var r=Object.assign({},c),t="";"undefined"!=typeof document&&document.currentScript&&(t=document.currentScript.src);_scriptDir&&(t=_scriptDir);0!==t.indexOf("blob:")?t=t.substr(0,t.replace(/[?#].*/,"").lastIndexOf("/")+1):t="";var aa=c.print||console.log.bind(console),u=c.printErr||console.warn.bind(console);Object.assign(c,r);r=null;var v;c.wasmBinary&&(v=c.wasmBinary);var noExitRuntime=c.noExitRuntime||!0;"object"!=typeof WebAssembly&&w("no native wasm support detected");var x,y=!1;function z(a,b,d,e){var f={string:function(l){var p=0;if(null!==l&&void 0!==l&&0!==l){var S=(l.length<<2)+1;p=A(S);B(l,C,p,S);}return p;},array:function(l){var p=A(l.length);D.set(l,p);return p;}};a=c["_"+a];var g=[],k=0;if(e)for(var m=0;m<e.length;m++){var q=f[d[m]];q?(0===k&&(k=E()),g[m]=q(e[m])):g[m]=e[m];}d=a.apply(null,g);return d=function(l){0!==k&&F(k);return"string"===b?G(l):"boolean"===b?!!l:l;}(d);}var H="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function I(a,b){for(var d=b+NaN,e=b;a[e]&&!(e>=d);)++e;if(16<e-b&&a.buffer&&H)return H.decode(a.subarray(b,e));for(d="";b<e;){var f=a[b++];if(f&128){var g=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|g);else{var k=a[b++]&63;f=224==(f&240)?(f&15)<<12|g<<6|k:(f&7)<<18|g<<12|k<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023));}}else d+=String.fromCharCode(f);}return d;}function G(a){return a?I(C,a):"";}function B(a,b,d,e){if(0<e){e=d+e-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var k=a.charCodeAt(++f);g=65536+((g&1023)<<10)|k&1023;}if(127>=g){if(d>=e)break;b[d++]=g;}else{if(2047>=g){if(d+1>=e)break;b[d++]=192|g>>6;}else{if(65535>=g){if(d+2>=e)break;b[d++]=224|g>>12;}else{if(d+3>=e)break;b[d++]=240|g>>18;b[d++]=128|g>>12&63;}b[d++]=128|g>>6&63;}b[d++]=128|g&63;}}b[d]=0;}}function J(a){for(var b=0,d=0;d<a.length;++d){var e=a.charCodeAt(d);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++d)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:b+4;}return b;}function K(a){var b=J(a)+1,d=L(b);d&&B(a,D,d,b);return d;}var M,D,C,N;function ba(){var a=x.buffer;M=a;c.HEAP8=D=new Int8Array(a);c.HEAP16=new Int16Array(a);c.HEAP32=N=new Int32Array(a);c.HEAPU8=C=new Uint8Array(a);c.HEAPU16=new Uint16Array(a);c.HEAPU32=new Uint32Array(a);c.HEAPF32=new Float32Array(a);c.HEAPF64=new Float64Array(a);}var O,ca=[],da=[],ea=[];function fa(){var a=c.preRun.shift();ca.unshift(a);}var P=0,Q=null,R=null;function w(a){if(c.onAbort)c.onAbort(a);a="Aborted("+a+")";u(a);y=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");n(a);throw a;}function T(a){return a.startsWith("data:application/octet-stream;base64,");}var U;U="data:application/octet-stream;base64,AGFzbQEAAAAByQZtYAR/fn9/AX5gA39/fwF/YAJ/fwF/YAJ/fwBgAX8Bf2AFf35/f38BfmADf39/AGABfwBgAXwBfGACf34BfmAEf39/fwF/YAJ/fgBgAn9/AX5gAn9+AX9gA39/fgF/YAN/fn8BfmABfgF/YAN/fn8AYAZ/fn9/f38BfmADf35/AX9gBX9/f39/AX9gBn9+fn9/fwF+YAN/fn4BfmAEf39/fwBgBH9/fn8Bf2ADf39/AX5gBH9/f38BfmAGf39/f39/AX9gBX9+fn5+AGABfwF+YAN/fn4Bf2ACfHwBfGABfgF+YAV/fn9+fwF/YAV/fn5/fwF+YAd/fn9+fn5/AX9gAABgBX9/f39/AGAEf35+fwBgBX9+fn5/AX9gB39/f39/f38Bf2AGf35/fn5/AX9gBH9+f34BfmACfn8Bf2AEf35+fwF/YAJ+fwBgCX9/f39/f39/fwF/YAR/fn5/AX5gBn9/f39/fwF+YAN/fn4AYAR/fn9/AX9gBX9+fn9/AGACfn4BfmAHf35/f39/fwF+YAF/AXxgA39/fgBgBH9+f38AYAR/fn9+AX9gBH9+fn4Bf2AEf39/fgF/YAh/f39/f39/fwF/YAd/f39/f39/AGACfH8BfGADfn9/AX9gA3x8fwF8YAR/f35/AGAEf35+fgF+YAABf2AGf3x/f39/AX9gAAF8YAV/fn9+fwF+YAF8AX5gAX4BfGAFf39+f38Bf2AGf39+fn5+AX9gBn9/f39/fwBgAn98AGAEf39+fwF+YAR/fn9+AGAFf39/f34BfmAHf35+fn9/fwF+YAR+fn5+AX9gCn9/f39/f39/f38Bf2AHf39/f39/fgF+YAd8f39/f39/AGADf39+AX5gBX9/f39/AX5gBX9+f39/AGAFf3x/f38BfmAGf35+fn5/AX9gBH98f38Bf2AGf35/f39/AX9gBX9/fn5/AX9gBX9+f39/AX9gB
|
||
|
|
||
|
/***/ }),
|
||
|
/* 2 */
|
||
|
/***/ ((__unused_webpack_module, exports) => {
|
||
|
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", ({
|
||
|
value: true
|
||
|
}));
|
||
|
exports.SandboxSupportBase = void 0;
|
||
|
class SandboxSupportBase {
|
||
|
constructor(win) {
|
||
|
this.win = win;
|
||
|
this.timeoutIds = new Map();
|
||
|
this.commFun = null;
|
||
|
}
|
||
|
destroy() {
|
||
|
this.commFun = null;
|
||
|
for (const id of this.timeoutIds.values()) {
|
||
|
this.win.clearTimeout(id);
|
||
|
}
|
||
|
this.timeoutIds = null;
|
||
|
}
|
||
|
exportValueToSandbox(val) {
|
||
|
throw new Error("Not implemented");
|
||
|
}
|
||
|
importValueFromSandbox(val) {
|
||
|
throw new Error("Not implemented");
|
||
|
}
|
||
|
createErrorForSandbox(errorMessage) {
|
||
|
throw new Error("Not implemented");
|
||
|
}
|
||
|
callSandboxFunction(name, args) {
|
||
|
try {
|
||
|
args = this.exportValueToSandbox(args);
|
||
|
this.commFun(name, args);
|
||
|
} catch (e) {
|
||
|
this.win.console.error(e);
|
||
|
}
|
||
|
}
|
||
|
createSandboxExternals() {
|
||
|
const externals = {
|
||
|
setTimeout: (callbackId, nMilliseconds) => {
|
||
|
if (typeof callbackId !== "number" || typeof nMilliseconds !== "number") {
|
||
|
return;
|
||
|
}
|
||
|
if (callbackId === 0) {
|
||
|
this.win.clearTimeout(this.timeoutIds.get(callbackId));
|
||
|
}
|
||
|
const id = this.win.setTimeout(() => {
|
||
|
this.timeoutIds.delete(callbackId);
|
||
|
this.callSandboxFunction("timeoutCb", {
|
||
|
callbackId,
|
||
|
interval: false
|
||
|
});
|
||
|
}, nMilliseconds);
|
||
|
this.timeoutIds.set(callbackId, id);
|
||
|
},
|
||
|
clearTimeout: callbackId => {
|
||
|
this.win.clearTimeout(this.timeoutIds.get(callbackId));
|
||
|
this.timeoutIds.delete(callbackId);
|
||
|
},
|
||
|
setInterval: (callbackId, nMilliseconds) => {
|
||
|
if (typeof callbackId !== "number" || typeof nMilliseconds !== "number") {
|
||
|
return;
|
||
|
}
|
||
|
const id = this.win.setInterval(() => {
|
||
|
this.callSandboxFunction("timeoutCb", {
|
||
|
callbackId,
|
||
|
interval: true
|
||
|
});
|
||
|
}, nMilliseconds);
|
||
|
this.timeoutIds.set(callbackId, id);
|
||
|
},
|
||
|
clearInterval: callbackId => {
|
||
|
this.win.clearInterval(this.timeoutIds.get(callbackId));
|
||
|
this.timeoutIds.delete(callbackId);
|
||
|
},
|
||
|
alert: cMsg => {
|
||
|
if (typeof cMsg !== "string") {
|
||
|
return;
|
||
|
}
|
||
|
this.win.alert(cMsg);
|
||
|
},
|
||
|
confirm: cMsg => {
|
||
|
if (typeof cMsg !== "string") {
|
||
|
return false;
|
||
|
}
|
||
|
return this.win.confirm(cMsg);
|
||
|
},
|
||
|
prompt: (cQuestion, cDefault) => {
|
||
|
if (typeof cQuestion !== "string" || typeof cDefault !== "string") {
|
||
|
return null;
|
||
|
}
|
||
|
return this.win.prompt(cQuestion, cDefault);
|
||
|
},
|
||
|
parseURL: cUrl => {
|
||
|
const url = new this.win.URL(cUrl);
|
||
|
const props = ["hash", "host", "hostname", "href", "origin", "password", "pathname", "port", "protocol", "search", "searchParams", "username"];
|
||
|
return Object.fromEntries(props.map(name => [name, url[name].toString()]));
|
||
|
},
|
||
|
send: data => {
|
||
|
if (!data) {
|
||
|
return;
|
||
|
}
|
||
|
const event = new this.win.CustomEvent("updatefromsandbox", {
|
||
|
detail: this.importValueFromSandbox(data)
|
||
|
});
|
||
|
this.win.dispatchEvent(event);
|
||
|
}
|
||
|
};
|
||
|
Object.setPrototypeOf(externals, null);
|
||
|
return (name, args) => {
|
||
|
try {
|
||
|
const result = externals[name](...args);
|
||
|
return this.exportValueToSandbox(result);
|
||
|
} catch (error) {
|
||
|
throw this.createErrorForSandbox(error?.toString() ?? "");
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
exports.SandboxSupportBase = SandboxSupportBase;
|
||
|
|
||
|
/***/ })
|
||
|
/******/ ]);
|
||
|
/************************************************************************/
|
||
|
/******/ // The module cache
|
||
|
/******/ var __webpack_module_cache__ = {};
|
||
|
/******/
|
||
|
/******/ // The require function
|
||
|
/******/ function __w_pdfjs_require__(moduleId) {
|
||
|
/******/ // Check if module is in cache
|
||
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||
|
/******/ if (cachedModule !== undefined) {
|
||
|
/******/ return cachedModule.exports;
|
||
|
/******/ }
|
||
|
/******/ // Create a new module (and put it into the cache)
|
||
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||
|
/******/ // no module.id needed
|
||
|
/******/ // no module.loaded needed
|
||
|
/******/ exports: {}
|
||
|
/******/ };
|
||
|
/******/
|
||
|
/******/ // Execute the module function
|
||
|
/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
|
||
|
/******/
|
||
|
/******/ // Return the exports of the module
|
||
|
/******/ return module.exports;
|
||
|
/******/ }
|
||
|
/******/
|
||
|
/************************************************************************/
|
||
|
var __webpack_exports__ = {};
|
||
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
||
|
(() => {
|
||
|
var exports = __webpack_exports__;
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", ({
|
||
|
value: true
|
||
|
}));
|
||
|
exports.QuickJSSandbox = QuickJSSandbox;
|
||
|
var _quickjsEval = _interopRequireDefault(__w_pdfjs_require__(1));
|
||
|
var _pdfSandboxExternal = __w_pdfjs_require__(2);
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
const pdfjsVersion = '3.11.176';
|
||
|
const pdfjsBuild = '92d22853e';
|
||
|
class SandboxSupport extends _pdfSandboxExternal.SandboxSupportBase {
|
||
|
exportValueToSandbox(val) {
|
||
|
return JSON.stringify(val);
|
||
|
}
|
||
|
importValueFromSandbox(val) {
|
||
|
return val;
|
||
|
}
|
||
|
createErrorForSandbox(errorMessage) {
|
||
|
return new Error(errorMessage);
|
||
|
}
|
||
|
}
|
||
|
class Sandbox {
|
||
|
constructor(win, module) {
|
||
|
this.support = new SandboxSupport(win, this);
|
||
|
module.externalCall = this.support.createSandboxExternals();
|
||
|
this._module = module;
|
||
|
this._alertOnError = 0;
|
||
|
}
|
||
|
create(data) {
|
||
|
const code = ['(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === \'object\' && typeof module === \'object\')\n\t\tmodule.exports = root.pdfjsScripting = factory();\n\telse if(typeof define === \'function\' && define.amd)\n\t\tdefine("pdfjs-dist/build/pdf.scripting", [], () => { return (root.pdfjsScripting = factory()); });\n\telse if(typeof exports === \'object\')\n\t\texports["pdfjs-dist/build/pdf.scripting"] = root.pdfjsScripting = factory();\n\telse\n\t\troot["pdfjs-dist/build/pdf.scripting"] = root.pdfjsScripting = factory();\n})(globalThis, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t"use strict";\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.initSandbox = initSandbox;\nvar _constants = __w_pdfjs_require__(2);\nvar _field = __w_pdfjs_require__(3);\nvar _aform = __w_pdfjs_require__(8);\nvar _app = __w_pdfjs_require__(9);\nvar _color = __w_pdfjs_require__(5);\nvar _console = __w_pdfjs_require__(14);\nvar _doc = __w_pdfjs_require__(15);\nvar _proxy = __w_pdfjs_require__(17);\nvar _app_utils = __w_pdfjs_require__(10);\nvar _util = __w_pdfjs_require__(18);\nfunction initSandbox(params) {\n delete globalThis.pdfjsScripting;\n const externalCall = globalThis.callExternalFunction;\n delete globalThis.callExternalFunction;\n const globalEval = code => globalThis.eval(code);\n const send = data => externalCall("send", [data]);\n const proxyHandler = new _proxy.ProxyHandler();\n const {\n data\n } = params;\n const doc = new _doc.Doc({\n send,\n globalEval,\n ...data.docInfo\n });\n const _document = {\n obj: doc,\n wrapped: new Proxy(doc, proxyHandler)\n };\n const app = new _app.App({\n send,\n globalEval,\n externalCall,\n _document,\n calculationOrder: data.calculationOrder,\n proxyHandler,\n ...data.appInfo\n });\n const util = new _util.Util({\n externalCall\n });\n const appObjects = app._objects;\n if (data.objects) {\n const annotations = [];\n for (const [name, objs] of Object.entries(data.objects)) {\n annotations.length = 0;\n let container = null;\n for (const obj of objs) {\n if (obj.type !== "") {\n annotations.push(obj);\n } else {\n container = obj;\n }\n }\n let obj = container;\n if (annotations.length > 0) {\n obj = annotations[0];\n obj.send = send;\n }\n obj.globalEval = globalEval;\n obj.doc = _document;\n obj.fieldPath = name;\n obj.appObjects = appObjects;\n let field;\n switch (obj.type) {\n case "radiobutton":\n {\n const otherButtons = annotations.slice(1);\n field = new _field.RadioButtonField(otherButtons, obj);\n break;\n }\n case "checkbox":\n {\n const otherButtons = annotations.slice(1);\n field = new _field.CheckboxField(otherButtons, obj);\n break;\n }\n case "text":\n if (annotations.length <= 1) {\n field = new _field.Field(obj);\n break;\n }\n obj.siblings = annotations.map(x => x.id).slice(1);\n field = new _field.Field(obj);\n break;\n default:\n field = new _field.Field(obj);\n }\n const wrapped = new Proxy(field, proxyHandler);\n const _object = {\n obj: field,\n wrapped\n };\n doc._addField(name, _object);\n for (const object of objs) {\n appObjects[object.id] = _object;\n }\n if (container) {\n appObjects[container.id] = _object;\n }\n }\n }\n const color = new _color.Color();\n globalThis.event = null;\n globalThis.global = Object.create(null);\n globalThis.app = new Proxy(app, proxyHandler);\n globalThis.color = new Proxy(color, proxyHandler);\n globalThis.console = new Proxy(new _console.Co
|
||
|
code.push("delete dump;");
|
||
|
let success = false;
|
||
|
let buf = 0;
|
||
|
try {
|
||
|
const sandboxData = JSON.stringify(data);
|
||
|
code.push(`pdfjsScripting.initSandbox({ data: ${sandboxData} })`);
|
||
|
buf = this._module.stringToNewUTF8(code.join("\n"));
|
||
|
success = !!this._module.ccall("init", "number", ["number", "number"], [buf, this._alertOnError]);
|
||
|
} catch (error) {
|
||
|
console.error(error);
|
||
|
} finally {
|
||
|
if (buf) {
|
||
|
this._module.ccall("free", "number", ["number"], [buf]);
|
||
|
}
|
||
|
}
|
||
|
if (success) {
|
||
|
this.support.commFun = this._module.cwrap("commFun", null, ["string", "string"]);
|
||
|
} else {
|
||
|
this.nukeSandbox();
|
||
|
throw new Error("Cannot start sandbox");
|
||
|
}
|
||
|
}
|
||
|
dispatchEvent(event) {
|
||
|
this.support?.callSandboxFunction("dispatchEvent", event);
|
||
|
}
|
||
|
dumpMemoryUse() {
|
||
|
this._module?.ccall("dumpMemoryUse", null, []);
|
||
|
}
|
||
|
nukeSandbox() {
|
||
|
if (this._module !== null) {
|
||
|
this.support.destroy();
|
||
|
this.support = null;
|
||
|
this._module.ccall("nukeSandbox", null, []);
|
||
|
this._module = null;
|
||
|
}
|
||
|
}
|
||
|
evalForTesting(code, key) {
|
||
|
throw new Error("Not implemented: evalForTesting");
|
||
|
}
|
||
|
}
|
||
|
function QuickJSSandbox() {
|
||
|
return (0, _quickjsEval.default)().then(module => {
|
||
|
return new Sandbox(window, module);
|
||
|
});
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
/******/ return __webpack_exports__;
|
||
|
/******/ })()
|
||
|
;
|
||
|
});
|
||
|
//# sourceMappingURL=pdf.sandbox.js.map
|