@resolveio/server-lib 20.12.43 → 20.12.44
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.
- package/fixtures/init.js +8 -1
- package/fixtures/init.js.map +1 -1
- package/methods/pdf.js +89 -49
- package/methods/pdf.js.map +1 -1
- package/methods/report-builder.js +60 -0
- package/methods/report-builder.js.map +1 -1
- package/package.json +1 -1
- package/util/chrome-cleaner.d.ts +5 -0
- package/util/chrome-cleaner.js +139 -0
- package/util/chrome-cleaner.js.map +1 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.trackChromePid = trackChromePid;
|
|
40
|
+
exports.untrackChromePid = untrackChromePid;
|
|
41
|
+
exports.killChromePid = killChromePid;
|
|
42
|
+
exports.killTrackedChromePids = killTrackedChromePids;
|
|
43
|
+
exports.cleanupExistingChromeProcesses = cleanupExistingChromeProcesses;
|
|
44
|
+
var child_process_1 = require("child_process");
|
|
45
|
+
var util_1 = require("util");
|
|
46
|
+
var execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
47
|
+
var trackedChromePids = new Set();
|
|
48
|
+
var exitCleanupRegistered = false;
|
|
49
|
+
function killPid(pid, reason) {
|
|
50
|
+
try {
|
|
51
|
+
process.kill(pid, 'SIGKILL');
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// Ignore "no such process", but log other errors
|
|
55
|
+
if (!err || err.code !== 'ESRCH') {
|
|
56
|
+
console.error(new Date(), 'Failed to kill chrome pid', pid, reason || '', err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function registerExitCleanup() {
|
|
61
|
+
if (exitCleanupRegistered) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
exitCleanupRegistered = true;
|
|
65
|
+
var handler = function () {
|
|
66
|
+
killTrackedChromePids('process-exit');
|
|
67
|
+
};
|
|
68
|
+
['exit', 'SIGINT', 'SIGTERM'].forEach(function (evt) {
|
|
69
|
+
process.on(evt, handler);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function trackChromePid(pid) {
|
|
73
|
+
if (!pid) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
trackedChromePids.add(pid);
|
|
77
|
+
registerExitCleanup();
|
|
78
|
+
}
|
|
79
|
+
function untrackChromePid(pid) {
|
|
80
|
+
if (!pid) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
trackedChromePids.delete(pid);
|
|
84
|
+
}
|
|
85
|
+
function killChromePid(pid, reason) {
|
|
86
|
+
if (!pid) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
killPid(pid, reason);
|
|
90
|
+
trackedChromePids.delete(pid);
|
|
91
|
+
}
|
|
92
|
+
function killTrackedChromePids(reason) {
|
|
93
|
+
var pids = Array.from(trackedChromePids);
|
|
94
|
+
pids.forEach(function (pid) {
|
|
95
|
+
killPid(pid, reason);
|
|
96
|
+
trackedChromePids.delete(pid);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function cleanupExistingChromeProcesses(reason) {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
101
|
+
var stdout, lines, killed_1, _a;
|
|
102
|
+
return __generator(this, function (_b) {
|
|
103
|
+
switch (_b.label) {
|
|
104
|
+
case 0:
|
|
105
|
+
if (process.platform !== 'linux' && process.platform !== 'darwin') {
|
|
106
|
+
return [2 /*return*/];
|
|
107
|
+
}
|
|
108
|
+
_b.label = 1;
|
|
109
|
+
case 1:
|
|
110
|
+
_b.trys.push([1, 3, , 4]);
|
|
111
|
+
return [4 /*yield*/, execAsync('ps -eo pid=,command= | grep -E "[c]hrome.*(headless|puppeteer)"')];
|
|
112
|
+
case 2:
|
|
113
|
+
stdout = (_b.sent()).stdout;
|
|
114
|
+
if (!stdout) {
|
|
115
|
+
return [2 /*return*/];
|
|
116
|
+
}
|
|
117
|
+
lines = stdout.trim().split('\n').filter(Boolean);
|
|
118
|
+
killed_1 = 0;
|
|
119
|
+
lines.forEach(function (line) {
|
|
120
|
+
var pid = parseInt(line.trim().split(' ')[0], 10);
|
|
121
|
+
if (!isNaN(pid)) {
|
|
122
|
+
killPid(pid, reason || 'startup-clean');
|
|
123
|
+
killed_1++;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
if (killed_1) {
|
|
127
|
+
console.log(new Date(), 'Cleaned orphaned Chrome processes', { reason: reason || 'startup-clean', count: killed_1 });
|
|
128
|
+
}
|
|
129
|
+
return [3 /*break*/, 4];
|
|
130
|
+
case 3:
|
|
131
|
+
_a = _b.sent();
|
|
132
|
+
return [3 /*break*/, 4];
|
|
133
|
+
case 4: return [2 /*return*/];
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
//# sourceMappingURL=chrome-cleaner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/util/chrome-cleaner.ts"],"names":[],"mappings":"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","file":"chrome-cleaner.js","sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\nconst trackedChromePids: Set<number> = new Set();\nlet exitCleanupRegistered = false;\n\nfunction killPid(pid: number, reason?: string) {\n\ttry {\n\t\tprocess.kill(pid, 'SIGKILL');\n\t}\n\tcatch (err) {\n\t\t// Ignore \"no such process\", but log other errors\n\t\tif (!err || err.code !== 'ESRCH') {\n\t\t\tconsole.error(new Date(), 'Failed to kill chrome pid', pid, reason || '', err);\n\t\t}\n\t}\n}\n\nfunction registerExitCleanup() {\n\tif (exitCleanupRegistered) {\n\t\treturn;\n\t}\n\n\texitCleanupRegistered = true;\n\n\tlet handler = () => {\n\t\tkillTrackedChromePids('process-exit');\n\t};\n\n\t['exit', 'SIGINT', 'SIGTERM'].forEach((evt) => {\n\t\tprocess.on(evt, handler);\n\t});\n}\n\nexport function trackChromePid(pid?: number) {\n\tif (!pid) {\n\t\treturn;\n\t}\n\n\ttrackedChromePids.add(pid);\n\tregisterExitCleanup();\n}\n\nexport function untrackChromePid(pid?: number) {\n\tif (!pid) {\n\t\treturn;\n\t}\n\n\ttrackedChromePids.delete(pid);\n}\n\nexport function killChromePid(pid?: number, reason?: string) {\n\tif (!pid) {\n\t\treturn;\n\t}\n\n\tkillPid(pid, reason);\n\ttrackedChromePids.delete(pid);\n}\n\nexport function killTrackedChromePids(reason?: string) {\n\tlet pids = Array.from(trackedChromePids);\n\n\tpids.forEach((pid) => {\n\t\tkillPid(pid, reason);\n\t\ttrackedChromePids.delete(pid);\n\t});\n}\n\nexport async function cleanupExistingChromeProcesses(reason?: string): Promise<void> {\n\tif (process.platform !== 'linux' && process.platform !== 'darwin') {\n\t\treturn;\n\t}\n\n\ttry {\n\t\t// Target only headless/puppeteer Chrome processes.\n\t\tconst { stdout } = await execAsync('ps -eo pid=,command= | grep -E \"[c]hrome.*(headless|puppeteer)\"');\n\n\t\tif (!stdout) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet lines = stdout.trim().split('\\n').filter(Boolean);\n\t\tlet killed = 0;\n\n\t\tlines.forEach((line) => {\n\t\t\tlet pid = parseInt(line.trim().split(' ')[0], 10);\n\n\t\t\tif (!isNaN(pid)) {\n\t\t\t\tkillPid(pid, reason || 'startup-clean');\n\t\t\t\tkilled++;\n\t\t\t}\n\t\t});\n\n\t\tif (killed) {\n\t\t\tconsole.log(new Date(), 'Cleaned orphaned Chrome processes', { reason: reason || 'startup-clean', count: killed });\n\t\t}\n\t}\n\tcatch {\n\t\t// ignore errors; cleanup best-effort\n\t}\n}\n"]}
|