⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

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 };.}.