You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
import { globalConfig } from "../core/config";
|
|
import { compressX64 } from "../core/lzstring";
|
|
import { computeCrc } from "../core/sensitive_utils.encrypt";
|
|
import { compressObject } from "../savegame/savegame_compressor";
|
|
|
|
function accessNestedPropertyReverse(obj, keys) {
|
|
let result = obj;
|
|
for (let i = keys.length - 1; i >= 0; --i) {
|
|
result = result[keys[i]];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
const salt = accessNestedPropertyReverse(globalConfig, ["file", "info"]);
|
|
|
|
self.addEventListener("message", event => {
|
|
// @ts-ignore
|
|
const { jobId, job, data } = event.data;
|
|
const result = performJob(job, data);
|
|
self.postMessage({ jobId, result });
|
|
});
|
|
|
|
function performJob(job, data) {
|
|
switch (job) {
|
|
case "compressX64": {
|
|
return compressX64(data);
|
|
}
|
|
|
|
case "compressObject": {
|
|
const optimized = compressObject(data.obj);
|
|
const stringified = JSON.stringify(optimized);
|
|
|
|
const checksum = computeCrc(stringified + salt);
|
|
return data.compressionPrefix + compressX64(checksum + stringified);
|
|
}
|
|
default:
|
|
throw new Error("Webworker: Unknown job: " + job);
|
|
}
|
|
}
|