1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-12-17 04:01:51 +00:00
tobspr_shapez.io/src/js/webworkers/compression.worker.js

42 lines
1.2 KiB
JavaScript
Raw Normal View History

2020-05-09 14:45:23 +00:00
import { globalConfig } from "../core/config";
2020-08-10 21:34:30 +00:00
import { compressX64 } from "../core/lzstring";
import { computeCrc } from "../core/sensitive_utils.encrypt";
import { compressObject } from "../savegame/savegame_compressor";
2020-05-09 14:45:23 +00:00
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"]);
2020-08-10 17:46:41 +00:00
self.addEventListener("message", event => {
2020-08-10 17:56:56 +00:00
// @ts-ignore
2020-08-10 13:27:40 +00:00
const { jobId, job, data } = event.data;
2020-05-09 14:45:23 +00:00
const result = performJob(job, data);
2020-08-11 11:29:47 +00:00
// @ts-ignore
2020-08-10 17:56:56 +00:00
self.postMessage({ jobId, result });
2020-08-10 17:46:41 +00:00
});
2020-05-09 14:45:23 +00:00
function performJob(job, data) {
switch (job) {
case "compressX64": {
return compressX64(data);
}
case "compressObject": {
const optimized = compressObject(data.obj);
const stringified = JSON.stringify(optimized);
2020-08-10 21:34:30 +00:00
const checksum = computeCrc(stringified + salt);
return data.compressionPrefix + compressX64(checksum + stringified);
2020-05-09 14:45:23 +00:00
}
default:
throw new Error("Webworker: Unknown job: " + job);
}
}