@resolveio/server-lib 12.0.4 → 12.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -36,13 +36,13 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var worker_threads_1 = require("worker_threads");
|
|
39
40
|
var fs = require('fs');
|
|
40
|
-
var _a = require('worker_threads'), workerData = _a.workerData, parentPort = _a.parentPort;
|
|
41
41
|
var jobQueue = [];
|
|
42
42
|
var runningQueue = false;
|
|
43
43
|
var pdfCnt = 0;
|
|
44
44
|
console.log('Helper thread started');
|
|
45
|
-
parentPort.on('message', function (msg) {
|
|
45
|
+
worker_threads_1.parentPort.on('message', function (msg) {
|
|
46
46
|
jobQueue.splice(0, 0, msg);
|
|
47
47
|
});
|
|
48
48
|
setInterval(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -55,12 +55,12 @@ setInterval(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
|
55
55
|
generatePDF(job_1.params).then(function (res) {
|
|
56
56
|
job_1.result = res;
|
|
57
57
|
job_1.error = false;
|
|
58
|
-
parentPort.postMessage(job_1);
|
|
58
|
+
worker_threads_1.parentPort.postMessage(job_1);
|
|
59
59
|
runningQueue = false;
|
|
60
60
|
}, function (err) {
|
|
61
61
|
job_1.result = err;
|
|
62
62
|
job_1.error = true;
|
|
63
|
-
parentPort.postMessage(job_1);
|
|
63
|
+
worker_threads_1.parentPort.postMessage(job_1);
|
|
64
64
|
runningQueue = false;
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/multi_threaded/helper_thread.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,IAAA,KAA6B,OAAO,CAAC,gBAAgB,CAAC,EAApD,UAAU,gBAAA,EAAE,UAAU,gBAA8B,CAAC;AAG7D,IAAI,QAAQ,GAA0B,EAAE,CAAC;AACzC,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAErC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,UAAC,GAAwB;IAC9C,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC;;;QACR,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE;YAClC,YAAY,GAAG,IAAI,CAAC;YAEhB,QAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,KAAG,CAAC,MAAM,KAAK,aAAa,EAAE;gBAC9B,WAAW,CAAC,KAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG;oBAC5B,KAAG,CAAC,MAAM,GAAG,GAAG,CAAC;oBACjB,KAAG,CAAC,KAAK,GAAG,KAAK,CAAC;oBAClB,UAAU,CAAC,WAAW,CAAC,KAAG,CAAC,CAAC;oBAC5B,YAAY,GAAG,KAAK,CAAC;gBACzB,CAAC,EAAE,UAAA,GAAG;oBACF,KAAG,CAAC,MAAM,GAAG,GAAG,CAAC;oBACjB,KAAG,CAAC,KAAK,GAAG,IAAI,CAAC;oBACjB,UAAU,CAAC,WAAW,CAAC,KAAG,CAAC,CAAC;oBAC5B,YAAY,GAAG,KAAK,CAAC;gBACzB,CAAC,CAAC,CAAC;aACN;SACJ;;;KACJ,EAAE,CAAC,CAAC,CAAC;AAEN,SAAS,WAAW,CAAC,IAAW;IAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;IACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IAEhC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC/B,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,UAAU,GAAG,IAAI,CAAC;QAEtB,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAA,QAAQ;YAC1B,UAAU,GAAG,QAAQ,CAAC;YACtB,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI;YACR,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAC,WAAW,EAAE,cAAc;gBACvD,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,UAAC,QAAQ;gBACnC,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE;oBAC1B,IAAI,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC/C,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAClC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;gBACvB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,WAAW;gBACxB,MAAM,EAAE;oBACJ,MAAM,EAAE,KAAK;oBACb,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAC,OAAO,EAAE,QAAQ;wBAC5C,OAAO,qDAAqD,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;oBAC3G,CAAC,CAAC;iBACL;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,60CAiCA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,o6EAoE/D,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC,CAAC;YACpI,IAAI,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAE7E,IAAI,QAAQ,GAAG,WAAW,CAAC;gBACvB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAExB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;wBACrB,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE,KAAK;qBACjB,CAAC,CAAC,IAAI,CAAC;wBACJ,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;4BAC5B,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAC,OAAO,EAAE,IAAI;gCACnC,IAAI,CAAC,OAAO,EAAE;oCACV,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oCAC3B,OAAO,CAAC,8BAA8B,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;iCAClF;qCACI;oCACF,MAAM,CAAC,SAAS,CAAC,CAAC;iCACpB;gCAED,UAAU,CAAC,cAAa,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACrD,CAAC,CAAC,CAAC;yBACN;6BACI;4BACD,MAAM,CAAC,aAAa,CAAC,CAAC;4BACtB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;yBAC5C;oBACL,CAAC,EAAE,UAAA,GAAG;wBACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjB,UAAU,CAAC,cAAa,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrD,CAAC,CAAC,CAAC;iBACN;YACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC,EAAE,UAAA,KAAK;YACJ,MAAM,CAAC,KAAK,CAAC,CAAC;YACd,UAAU,CAAC,cAAa,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC","file":"helper_thread.js","sourcesContent":["const fs = require('fs');\nconst { workerData, parentPort } = require('worker_threads');\nimport { HelperThreadMessage } from '../managers/method.manager';\n\nlet jobQueue: HelperThreadMessage[] = [];\nlet runningQueue = false;\n\nlet pdfCnt = 0;\n\nconsole.log('Helper thread started');\n\nparentPort.on('message', (msg: HelperThreadMessage) => {\n jobQueue.splice(0, 0, msg);\n});\n\nsetInterval(async () => {\n if (!runningQueue && jobQueue.length) {\n runningQueue = true;\n\n let job = jobQueue.pop();\n if (job.method === 'generatePDF') {\n generatePDF(job.params).then(res => {\n job.result = res;\n job.error = false;\n parentPort.postMessage(job);\n runningQueue = false;\n }, err => {\n job.result = err;\n job.error = true;\n parentPort.postMessage(job);\n runningQueue = false;\n });\n }\n }\n}, 1);\n\nfunction generatePDF(data: any[]) {\n console.log('Running generate PDF');\n \n let html = data[0];\n let fileName = data[1];\n let orientation = data[2] || 'portrait';\n let fontSize = data[3] || '8px';\n\n return new Promise((resolve, reject) => {\n let phantom = require('phantom');\n let phInstance = null;\n \n phantom.create().then(instance => {\n phInstance = instance;\n return instance.createPage();\n }).then(page => {\n let requestsArray = [];\n\n page.on('onResourceRequested', (requestData, networkRequest) => {\n requestsArray.push(requestData.id);\n });\n\n page.on('onResourceReceived', (response) => {\n if (response.stage === 'end') {\n let index = requestsArray.indexOf(response.id);\n requestsArray.splice(index, 1);\n }\n });\n\n page.property('paperSize', {\n format: 'letter',\n margin: '1cm',\n orientation: orientation,\n footer: {\n height: '1cm',\n contents: phInstance.callback((pageNum, numPages) => {\n return '<span style=\\'float:right; font-size: 12px;\\'>Page ' + pageNum + ' of ' + numPages + '</span>';\n })\n }\n });\n page.property('content', `\n <head>\n <style>\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: normal;\n font-weight: normal;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: normal;\n font-weight: bold;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: italic;\n font-weight: normal;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-Italic.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: italic;\n font-weight: bold;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-BoldItalic.ttf\");\n }\n\n body {\n font-family: 'Dejavu Serif', serif;\n font-size: ` + (fontSize ? fontSize : '8px') + `;\n }\n\n .row {\n display: -webkit-flex;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n }\n \n .page-break {\n page-break-before: always !important;\n margin-bottom: 1px;\n }\n\n .cell {\n box-sizing: border-box;\n padding : 2px;\n -webkit-flex: 1;\n word-wrap: break-word;\n }\n\n .cell-no-padding {\n box-sizing: border-box;\n -webkit-flex: 1;\n word-wrap: break-word;\n }\n\n .centered {\n -webkit-justify-content: center;\n -webkit-align-items: center;\n display: -webkit-flex;\n text-align: center;\n }\n\n .centered-left {\n -webkit-align-items: center;\n display: -webkit-flex;\n -webkit-justify-content: flex-start;\n }\n\n .centered-right {\n -webkit-justify-content: flex-end;\n -webkit-align-items: center;\n display: -webkit-flex;\n }\n \n .box {\n border: 1px solid black;\n margin: -1px 0px 0px -1px;\n }\n\n .boxNoBorder {\n margin: -1px 0px 0px -1px;\n }\n\n pre {\n white-space: pre-wrap; /* css-3 */\n white-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n white-space: -pre-wrap; /* Opera 4-6 */\n white-space: -o-pre-wrap; /* Opera 7 */\n word-wrap: break-word; /* Internet Explorer 5.5+ */\n font-size: 12px;\n font-family: Open Sans; \n }\n </style>\n </head>\n <body>\n ` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>');\n let tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/\\W/g), '');\n \n let interval = setInterval(() => {\n if (requestsArray.length === 0) {\n clearInterval(interval);\n \n page.render(tmpFileName, {\n format: 'pdf',\n quality: '100'\n }).then(() => {\n if (fs.existsSync(tmpFileName)) {\n fs.readFile(tmpFileName, (errRead, data) => {\n if (!errRead) {\n fs.unlinkSync(tmpFileName);\n resolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\n }\n else {\n reject('No file');\n }\n \n setTimeout(function() { phInstance.exit(); }, 0);\n });\n }\n else {\n reject('No tmp file');\n console.log('No tmp file ', tmpFileName);\n }\n }, err => {\n console.log(err);\n setTimeout(function() { phInstance.exit(); }, 0);\n });\n }\n }, 1000);\n }, error => {\n reject(error);\n setTimeout(function() { phInstance.exit(); }, 0);\n });\n });\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/multi_threaded/helper_thread.ts"],"names":[],"mappings":"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","file":"helper_thread.js","sourcesContent":["import { parentPort } from 'worker_threads';\nlet fs = require('fs');\nimport { HelperThreadMessage } from '../managers/method.manager';\n\nlet jobQueue: HelperThreadMessage[] = [];\nlet runningQueue = false;\n\nlet pdfCnt = 0;\n\nconsole.log('Helper thread started');\n\nparentPort.on('message', (msg: HelperThreadMessage) => {\n jobQueue.splice(0, 0, msg);\n});\n\nsetInterval(async () => {\n if (!runningQueue && jobQueue.length) {\n runningQueue = true;\n\n let job = jobQueue.pop();\n if (job.method === 'generatePDF') {\n generatePDF(job.params).then(res => {\n job.result = res;\n job.error = false;\n parentPort.postMessage(job);\n runningQueue = false;\n }, err => {\n job.result = err;\n job.error = true;\n parentPort.postMessage(job);\n runningQueue = false;\n });\n }\n }\n}, 1);\n\nfunction generatePDF(data: any[]) {\n console.log('Running generate PDF');\n \n let html = data[0];\n let fileName = data[1];\n let orientation = data[2] || 'portrait';\n let fontSize = data[3] || '8px';\n\n return new Promise((resolve, reject) => {\n let phantom = require('phantom');\n let phInstance = null;\n \n phantom.create().then(instance => {\n phInstance = instance;\n return instance.createPage();\n }).then(page => {\n let requestsArray = [];\n\n page.on('onResourceRequested', (requestData, networkRequest) => {\n requestsArray.push(requestData.id);\n });\n\n page.on('onResourceReceived', (response) => {\n if (response.stage === 'end') {\n let index = requestsArray.indexOf(response.id);\n requestsArray.splice(index, 1);\n }\n });\n\n page.property('paperSize', {\n format: 'letter',\n margin: '1cm',\n orientation: orientation,\n footer: {\n height: '1cm',\n contents: phInstance.callback((pageNum, numPages) => {\n return '<span style=\\'float:right; font-size: 12px;\\'>Page ' + pageNum + ' of ' + numPages + '</span>';\n })\n }\n });\n page.property('content', `\n <head>\n <style>\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: normal;\n font-weight: normal;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: normal;\n font-weight: bold;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: italic;\n font-weight: normal;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-Italic.ttf\");\n }\n\n @font-face {\n font-family: 'Dejavu Serif', serif;\n font-style: italic;\n font-weight: bold;\n src: url(\"/usr/share/fonts/dejavu/DejaVuSerif-BoldItalic.ttf\");\n }\n\n body {\n font-family: 'Dejavu Serif', serif;\n font-size: ` + (fontSize ? fontSize : '8px') + `;\n }\n\n .row {\n display: -webkit-flex;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n }\n \n .page-break {\n page-break-before: always !important;\n margin-bottom: 1px;\n }\n\n .cell {\n box-sizing: border-box;\n padding : 2px;\n -webkit-flex: 1;\n word-wrap: break-word;\n }\n\n .cell-no-padding {\n box-sizing: border-box;\n -webkit-flex: 1;\n word-wrap: break-word;\n }\n\n .centered {\n -webkit-justify-content: center;\n -webkit-align-items: center;\n display: -webkit-flex;\n text-align: center;\n }\n\n .centered-left {\n -webkit-align-items: center;\n display: -webkit-flex;\n -webkit-justify-content: flex-start;\n }\n\n .centered-right {\n -webkit-justify-content: flex-end;\n -webkit-align-items: center;\n display: -webkit-flex;\n }\n \n .box {\n border: 1px solid black;\n margin: -1px 0px 0px -1px;\n }\n\n .boxNoBorder {\n margin: -1px 0px 0px -1px;\n }\n\n pre {\n white-space: pre-wrap; /* css-3 */\n white-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n white-space: -pre-wrap; /* Opera 4-6 */\n white-space: -o-pre-wrap; /* Opera 7 */\n word-wrap: break-word; /* Internet Explorer 5.5+ */\n font-size: 12px;\n font-family: Open Sans; \n }\n </style>\n </head>\n <body>\n ` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>');\n let tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/\\W/g), '');\n \n let interval = setInterval(() => {\n if (requestsArray.length === 0) {\n clearInterval(interval);\n \n page.render(tmpFileName, {\n format: 'pdf',\n quality: '100'\n }).then(() => {\n if (fs.existsSync(tmpFileName)) {\n fs.readFile(tmpFileName, (errRead, data) => {\n if (!errRead) {\n fs.unlinkSync(tmpFileName);\n resolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\n }\n else {\n reject('No file');\n }\n \n setTimeout(function() { phInstance.exit(); }, 0);\n });\n }\n else {\n reject('No tmp file');\n console.log('No tmp file ', tmpFileName);\n }\n }, err => {\n console.log(err);\n setTimeout(function() { phInstance.exit(); }, 0);\n });\n }\n }, 1000);\n }, error => {\n reject(error);\n setTimeout(function() { phInstance.exit(); }, 0);\n });\n });\n}"]}
|