Artifact
7ef95d391c35161b6692151c2e5fb0c923ce1fbc5be80403c2ab18b1347f63db:
0000: 69 6d 70 6f 72 74 20 41 4c 47 4f 52 49 54 48 4d import ALGORITHM
0010: 53 20 66 72 6f 6d 20 27 6d 61 69 6e 2f 63 6f 64 S from 'main/cod
0020: 65 63 73 27 3b 0a 69 6d 70 6f 72 74 20 4c 4f 41 ecs';.import LOA
0030: 44 45 52 53 20 66 72 6f 6d 20 27 6d 61 69 6e 2f DERS from 'main/
0040: 6c 6f 61 64 65 72 73 27 3b 0a 0a 63 6f 6e 73 74 loaders';..const
0050: 20 74 77 6f 44 69 67 69 74 50 65 72 63 65 6e 74 twoDigitPercent
0060: 61 67 65 20 3d 20 76 61 6c 20 3d 3e 20 4d 61 74 age = val => Mat
0070: 68 2e 66 6c 6f 6f 72 28 76 61 6c 20 2a 20 31 30 h.floor(val * 10
0080: 30 30 30 29 20 2f 20 31 30 30 30 30 3b 0a 0a 65 000) / 10000;..e
0090: 78 70 6f 72 74 20 64 65 66 61 75 6c 74 20 66 75 xport default fu
00a0: 6e 63 74 69 6f 6e 20 63 72 65 61 74 65 43 6c 69 nction createCli
00b0: 65 6e 74 28 61 6c 67 6f 72 69 74 68 6d 29 20 7b ent(algorithm) {
00c0: 0a 09 69 66 20 28 21 4f 62 6a 65 63 74 2e 70 72 ..if (!Object.pr
00d0: 6f 74 6f 74 79 70 65 2e 68 61 73 4f 77 6e 50 72 ototype.hasOwnPr
00e0: 6f 70 65 72 74 79 2e 63 61 6c 6c 28 41 4c 47 4f operty.call(ALGO
00f0: 52 49 54 48 4d 53 2c 20 61 6c 67 6f 72 69 74 68 RITHMS, algorith
0100: 6d 29 29 20 74 68 72 6f 77 20 6e 65 77 20 45 72 m)) throw new Er
0110: 72 6f 72 28 60 4e 6f 20 73 75 63 68 20 61 6c 67 ror(`No such alg
0120: 6f 72 69 74 68 6d 20 24 7b 61 6c 67 6f 72 69 74 orithm ${algorit
0130: 68 6d 7d 60 29 3b 0a 0a 09 63 6f 6e 73 74 20 7b hm}`);...const {
0140: 20 70 61 63 6b 2c 20 65 6e 63 6f 64 65 20 7d 20 pack, encode }
0150: 3d 20 41 4c 47 4f 52 49 54 48 4d 53 5b 61 6c 67 = ALGORITHMS[alg
0160: 6f 72 69 74 68 6d 5d 3b 0a 0a 09 61 73 79 6e 63 orithm];...async
0170: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6d 70 72 65 function compre
0180: 73 73 28 6a 73 6f 6e 29 20 7b 0a 09 09 63 6f 6e ss(json) {...con
0190: 73 74 20 70 61 63 6b 65 64 20 3d 20 70 61 63 6b st packed = pack
01a0: 20 3f 20 28 61 77 61 69 74 20 4c 4f 41 44 45 52 ? (await LOADER
01b0: 53 2e 6d 73 67 70 61 63 6b 28 29 29 2e 65 6e 63 S.msgpack()).enc
01c0: 6f 64 65 28 6a 73 6f 6e 29 20 3a 20 4a 53 4f 4e ode(json) : JSON
01d0: 2e 73 74 72 69 6e 67 69 66 79 28 6a 73 6f 6e 29 .stringify(json)
01e0: 3b 0a 09 09 63 6f 6e 73 74 20 63 6f 6d 70 72 65 ;...const compre
01f0: 73 73 65 64 20 3d 20 61 77 61 69 74 20 41 4c 47 ssed = await ALG
0200: 4f 52 49 54 48 4d 53 5b 61 6c 67 6f 72 69 74 68 ORITHMS[algorith
0210: 6d 5d 2e 63 6f 6d 70 72 65 73 73 28 70 61 63 6b m].compress(pack
0220: 65 64 29 3b 0a 09 09 63 6f 6e 73 74 20 65 6e 63 ed);...const enc
0230: 6f 64 65 64 20 3d 20 65 6e 63 6f 64 65 20 3f 20 oded = encode ?
0240: 28 61 77 61 69 74 20 4c 4f 41 44 45 52 53 2e 73 (await LOADERS.s
0250: 61 66 65 36 34 28 29 29 2e 65 6e 63 6f 64 65 28 afe64()).encode(
0260: 63 6f 6d 70 72 65 73 73 65 64 29 20 3a 20 63 6f compressed) : co
0270: 6d 70 72 65 73 73 65 64 3b 0a 09 09 72 65 74 75 mpressed;...retu
0280: 72 6e 20 65 6e 63 6f 64 65 64 3b 0a 09 7d 0a 0a rn encoded;..}..
0290: 09 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 .async function
02a0: 64 65 63 6f 6d 70 72 65 73 73 28 73 74 72 69 6e decompress(strin
02b0: 67 29 20 7b 0a 09 09 63 6f 6e 73 74 20 64 65 63 g) {...const dec
02c0: 6f 64 65 64 20 3d 20 65 6e 63 6f 64 65 20 3f 20 oded = encode ?
02d0: 28 61 77 61 69 74 20 4c 4f 41 44 45 52 53 2e 73 (await LOADERS.s
02e0: 61 66 65 36 34 28 29 29 2e 64 65 63 6f 64 65 28 afe64()).decode(
02f0: 73 74 72 69 6e 67 29 20 3a 20 73 74 72 69 6e 67 string) : string
0300: 3b 0a 09 09 63 6f 6e 73 74 20 64 65 63 6f 6d 70 ;...const decomp
0310: 72 65 73 73 65 64 20 3d 20 61 77 61 69 74 20 41 ressed = await A
0320: 4c 47 4f 52 49 54 48 4d 53 5b 61 6c 67 6f 72 69 LGORITHMS[algori
0330: 74 68 6d 5d 2e 64 65 63 6f 6d 70 72 65 73 73 28 thm].decompress(
0340: 64 65 63 6f 64 65 64 29 3b 0a 09 09 63 6f 6e 73 decoded);...cons
0350: 74 20 75 6e 70 61 63 6b 65 64 20 3d 20 70 61 63 t unpacked = pac
0360: 6b 20 3f 20 28 61 77 61 69 74 20 4c 4f 41 44 45 k ? (await LOADE
0370: 52 53 2e 6d 73 67 70 61 63 6b 28 29 29 2e 64 65 RS.msgpack()).de
0380: 63 6f 64 65 28 64 65 63 6f 6d 70 72 65 73 73 65 code(decompresse
0390: 64 29 20 3a 20 4a 53 4f 4e 2e 70 61 72 73 65 28 d) : JSON.parse(
03a0: 64 65 63 6f 6d 70 72 65 73 73 65 64 29 3b 0a 09 decompressed);..
03b0: 09 72 65 74 75 72 6e 20 75 6e 70 61 63 6b 65 64 .return unpacked
03c0: 3b 0a 09 7d 0a 0a 09 61 73 79 6e 63 20 66 75 6e ;..}...async fun
03d0: 63 74 69 6f 6e 20 73 74 61 74 73 28 6a 73 6f 6e ction stats(json
03e0: 29 20 7b 0a 09 09 63 6f 6e 73 74 20 72 61 77 20 ) {...const raw
03f0: 3d 20 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66 79 = JSON.stringify
0400: 28 6a 73 6f 6e 29 3b 0a 09 09 63 6f 6e 73 74 20 (json);...const
0410: 72 61 77 65 6e 63 6f 64 65 64 20 3d 20 65 6e 63 rawencoded = enc
0420: 6f 64 65 55 52 49 43 6f 6d 70 6f 6e 65 6e 74 28 odeURIComponent(
0430: 72 61 77 29 3b 0a 09 09 63 6f 6e 73 74 20 63 6f raw);...const co
0440: 6d 70 72 65 73 73 65 64 20 3d 20 61 77 61 69 74 mpressed = await
0450: 20 63 6f 6d 70 72 65 73 73 28 6a 73 6f 6e 29 3b compress(json);
0460: 0a 0a 09 09 72 65 74 75 72 6e 20 7b 0a 09 09 09 ....return {....
0470: 72 61 77 3a 20 72 61 77 2e 6c 65 6e 67 74 68 2c raw: raw.length,
0480: 0a 09 09 09 72 61 77 65 6e 63 6f 64 65 64 3a 20 ....rawencoded:
0490: 72 61 77 65 6e 63 6f 64 65 64 2e 6c 65 6e 67 74 rawencoded.lengt
04a0: 68 2c 0a 09 09 09 63 6f 6d 70 72 65 73 73 65 64 h,....compressed
04b0: 65 6e 63 6f 64 65 64 3a 20 63 6f 6d 70 72 65 73 encoded: compres
04c0: 73 65 64 2e 6c 65 6e 67 74 68 2c 0a 09 09 09 63 sed.length,....c
04d0: 6f 6d 70 72 65 73 73 69 6f 6e 3a 20 74 77 6f 44 ompression: twoD
04e0: 69 67 69 74 50 65 72 63 65 6e 74 61 67 65 28 72 igitPercentage(r
04f0: 61 77 65 6e 63 6f 64 65 64 2e 6c 65 6e 67 74 68 awencoded.length
0500: 20 2f 20 63 6f 6d 70 72 65 73 73 65 64 2e 6c 65 / compressed.le
0510: 6e 67 74 68 29 0a 09 09 7d 3b 0a 09 7d 0a 0a 09 ngth)...};..}...
0520: 72 65 74 75 72 6e 20 7b 20 63 6f 6d 70 72 65 73 return { compres
0530: 73 2c 20 64 65 63 6f 6d 70 72 65 73 73 2c 20 73 s, decompress, s
0540: 74 61 74 73 20 7d 3b 0a 7d 0a tats };.}.