Improve script url encoding #312

Merged
Irev-Dev merged 2 commits from kurt/improve-script-url-encoding-311 into main 2021-05-08 01:15:49 +02:00
Irev-Dev commented 2021-05-08 01:15:25 +02:00 (Migrated from github.com)

resolves #311

Some quick comparisons I need showed that the new URLs should be about 3x smaller than before.

It probably wasn't needed because of how much the app is used so far, but I made it backwards compatible, so old links should still work.

Look at compress.ts for an explanation of what I'm doing, in a nutshell I'm using a compression library, but than have to do some tricky-ness to get the compressed result into a string efficiently using character codes.

The new url to @jmwright braille example is:
https://cadhub.xyz/dev-ide/cadQuery#encoded_script_v2=eJy9Vttu3DYQfddXDJQXyVZk7802FlCBtkH6VCAPBQrUMASuRK0Ya0ktSWXtFP33zlDXjXfRIjEswJDmcC5nSM5Zi12ttIWM5fuG62dgBrK9572DX0smtxxsiX/8yYKQRuStvW+U5QaYzIFBXTHL0f8gbOlWWV1rVWuBMOTKGlypKthw2HLJNaJ57LmMCfh9WZ8q/qIZerog9FU7bpFPkCuQCGQtnUZW3Bh4Vg1+5lwbSyyobKak4ZhMZtyEXqm0+KqkZVUqpOWaciYwj1feF66tyF7i30ZkHFkncPNNQCUkR3h27WFoWnKxLSnDNWYgIBcMeXNNLvHC8zbM8NSWInuUxJvQlUfN/s5qKLTaUWOaZRRiFdTKCCuwk5j2A2NzUBJKa2uzvrriMj6IR1FzrBIrvb0i66rbtvQTs5hFGoz8A/djSAVM0/ngwRaqqtTBrNGaASzxNQdY4WsB2Oc7uAW484hPWitsNt0hxwT+9gAfn/lr8Gd+1FobZ0Xz3s5ae9nbeWdHqx7hLTLYRZdhjNkOyOhV9tiACEImUZ87e/R4bGMWvV31OQZk13mMWeSAjHlUjw1IPWQaI/cTbPTUIzpgpmU6ibUDMno1beRtdNcjX8ZcNz12GLoesad+zyexz5O+Rs+vQ2eIef/ghcx5gTNnUzfN6UHktgxoSMN1G+H77v2B7vYOR8C4meuuvyqc5WJh099agmSz2+DNRofhmuPVnmbU3DZaQlBx2RaECzg5ihc4OsvwBdWWwv/g6nr6Iao79pQiTRwJ/AruHeMQhwonF9XRqeRDeNTU/EQzpDiXzqt//tsj6Eu/h9m5DQqdrPzWaaxradMJaivRbc8JBNk+/lPpR7QlD8JY88wGJ88+OrPPcAkvVfQCVfQ6gowTwPPkI6sMD4/amDwx5tFNzoNjgQxDauLnvJV0SuuUyJA2Dufm1YQkcP/gCVJUTxWF4U6FPToNOr/+QNorUamMAo6l7Z7Mh349rYShFOQam7oSNvAjH+nQOmXFBUrau66HzkTh1pKE5HF91DARjfH3kMs8CE4d8wUI3MyWf3RyU5fhuIe8mtSav36txblai9evNT9X6/b1a83O1Vp+X62TA/t9p7h6KwZnz/bmrRicPfG7t2JA98BV6gTjMjmppM5F0OrMfQ7K6d5xwfA/zMD/6S8/jA8THa0bU35yahVQB52wziIsO6jdDAmYUh1StflMqy5j+C/dOFmn

The old url is:
https://cadhub.xyz/dev-ide/cadQuery#encoded_script=aW1wb3J0IGNhZHF1ZXJ5IGFzIGNxCgojIENoYW5nZSB0aGUgdGV4dCBpbnNpZGUgdGhlIHF1b3RlcyBhbmQgYSBwbGF0ZQojIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRvdHMgd2lsbCBiZSBnZW5lcmF0ZWQuCnRleHQgPSAiY2FkcXVlcnkiCgojIEJyYWlsbGUgZG90IGdlb21ldHJ5IChkbyBub3QgY2hhbmdlIHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzKQpob3Jpem9udGFsX2ludGVyZG90ID0gMi41CnZlcnRpY2FsX2ludGVyZG90ID0gMi41Cmhvcml6b250YWxfaW50ZXJjZWxsID0gNgp2ZXJ0aWNhbF9pbnRlcmxpbmUgPSAxMApkb3RfaGVpZ2h0ID0gMC41CmRvdF9kaWFtZXRlciA9IDEuMwoKYmFzZV90aGlja25lc3MgPSAxLjUKCgojIE1hcCBmcm9tIGNoYXJhY3RlciB0byBwb3NpdGlvbnMuCiMgQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJhaWxsZV9QYXR0ZXJucwojIFRoZSBwb3NpdGlvbnMgYXJlCiMgYXMgZm9sbG93czoKIyAxICA0CiMgMiAgNQojIDMgIDYKIyA3ICA4CmNoYXJfcG9pbnRfbWFwID0gewogICAgImEiOiAiMSIsCiAgICAiYiI6ICIxLDIiLAogICAgImMiOiAiMSw0IiwKICAgICJkIjogIjEsNCw1IiwKICAgICJlIjogIjEsNSIsCiAgICAiZiI6ICIxLDIsNCIsCiAgICAiZyI6ICIxLDIsNCw1IiwKICAgICJoIjogIjEsMiw1IiwKICAgICJpIjogIjIsNCIsCiAgICAiaiI6ICIyLDQsNSIsCiAgICAiayI6ICIxLDMiLAogICAgImwiOiAiMSwyLDMiLAogICAgIm0iOiAiMSwzLDQiLAogICAgIm4iOiAiMSwzLDQsNSIsCiAgICAibyI6ICIxLDMsNSIsCiAgICAicCI6ICIxLDIsMyw0IiwKICAgICJxIjogIjEsMiwzLDQsNSIsCiAgICAiciI6ICIxLDIsMyw1IiwKICAgICJzIjogIjIsMyw0IiwKICAgICJ0IjogIjIsMyw0LDUiLAogICAgInUiOiAiMSw3LDgiLAogICAgInYiOiAiMSwyLDMsNiIsCiAgICAidyI6ICIyLDQsNSw2IiwKICAgICJ4IjogIjEsNCw3LDgiLAogICAgInkiOiAiMSwzLDQsNSw2IiwKICAgICJ6IjogIjEsMyw1LDYiCn0KCgpkZWYgZ2V0X3BsYXRlX3dpZHRoKHRleHQpOgogICAgIiIiCiAgICBEZXRlcm1pbmVzIHRoZSBoZWlnaHQgb2YgdGhlIHBsYXRlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KICAgICIiIgogICAgcmV0dXJuIChsZW4odGV4dCkgKiBob3Jpem9udGFsX2ludGVyY2VsbCAqIDEuNCkKCgpkZWYgZ2V0X3BsYXRlX2hlaWdodCh0ZXh0KToKICAgICIiIgogICAgRGV0ZXJtaW5lcyB0aGUgd2lkdGggb2YgdGhlIHBsYXRlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KICAgICIiIgogICAgbWF4X2xlbiA9IG1heChbbGVuKHQpIGZvciB0IGluIHRleHRdKQogICAgcmV0dXJuICgyICogaG9yaXpvbnRhbF9pbnRlcmRvdCArCiAgICAgICAgICAgIGhvcml6b250YWxfaW50ZXJkb3QgKwogICAgICAgICAgICAobWF4X2xlbiAtIDEpICogaG9yaXpvbnRhbF9pbnRlcmNlbGwpCgoKIyBHZW5lcmF0ZSB0aGUgYnJhaWxsZSBwbGF0ZQpwbGF0ZSA9IChjcS5Xb3JrcGxhbmUoKS5yZWN0KGdldF9wbGF0ZV93aWR0aCh0ZXh0KSwgZ2V0X3BsYXRlX2hlaWdodCh0ZXh0KSArIHZlcnRpY2FsX2ludGVyZG90ICogMi4wLCBjZW50ZXJlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAuZXh0cnVkZShiYXNlX3RoaWNrbmVzcykpCgojIEFkZCB0aGUgZG90IHBvaW50cyB0byB0aGUgcGxhdGUKcG50cyA9IFtdCmkgPSAxCm9mZnNldCA9IDAKZm9yIGNoYXIgaW4gdGV4dDoKICAgIGxvY3MgPSBjaGFyX3BvaW50X21hcFtjaGFyXQogICAgbG9jX2xpc3QgPSBsb2NzLnNwbGl0KCIsIikKCiAgICBmb3IgbG9jIGluIGxvY19saXN0OgogICAgICAgIGlmIGxvYyA9PSAiMSI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiA0KSkKICAgICAgICBlbGlmIGxvYyA9PSAiMiI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAzKSkKICAgICAgICBlbGlmIGxvYyA9PSAiMyI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAyKSkKICAgICAgICBlbGlmIGxvYyA9PSAiNyI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAxKSkKICAgICAgICBlbGlmIGxvYyA9PSAiNCI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIGhvcml6b250YWxfaW50ZXJkb3QgKyBvZmZzZXQsIHZlcnRpY2FsX2ludGVyZG90ICogNCkpCiAgICAgICAgZWxpZiBsb2MgPT0gIjUiOgogICAgICAgICAgICBwbnRzLmFwcGVuZCgoaG9yaXpvbnRhbF9pbnRlcmRvdCAqIGkgKyBob3Jpem9udGFsX2ludGVyZG90ICsgb2Zmc2V0LCB2ZXJ0aWNhbF9pbnRlcmRvdCAqIDMpKQogICAgICAgIGVsaWYgbG9jID09ICI2IjoKICAgICAgICAgICAgcG50cy5hcHBlbmQoKGhvcml6b250YWxfaW50ZXJkb3QgKiBpICsgaG9yaXpvbnRhbF9pbnRlcmRvdCArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAyKSkKICAgICAgICBlbGlmIGxvYyA9PSAiOCI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIGhvcml6b250YWxfaW50ZXJkb3QgKyBvZmZzZXQsIHZlcnRpY2FsX2ludGVyZG90ICogMSkpCgogICAgb2Zmc2V0ICs9IGhvcml6b250YWxfaW50ZXJjZWxsCiAgICBpICs9IDEKICAgIApwbGF0ZSA9IHBsYXRlLmZhY2VzKCI+WiIpLndvcmtwbGFuZSgpLnB1c2hQb2ludHMocG50cykucmVjdCgxLCAxKS5leHRydWRlKDEpCgpzaG93X29iamVjdChwbGF0ZSk=

resolves #311 Some quick comparisons I need showed that the new URLs should be about 3x smaller than before. It probably wasn't needed because of how much the app is used so far, but I made it backwards compatible, so old links should still work. Look at `compress.ts` for an explanation of what I'm doing, in a nutshell I'm using a compression library, but than have to do some tricky-ness to get the compressed result into a string efficiently using character codes. The new url to @jmwright braille example is: https://cadhub.xyz/dev-ide/cadQuery#encoded_script_v2=eJy9Vttu3DYQfddXDJQXyVZk7802FlCBtkH6VCAPBQrUMASuRK0Ya0ktSWXtFP33zlDXjXfRIjEswJDmcC5nSM5Zi12ttIWM5fuG62dgBrK9572DX0smtxxsiX/8yYKQRuStvW+U5QaYzIFBXTHL0f8gbOlWWV1rVWuBMOTKGlypKthw2HLJNaJ57LmMCfh9WZ8q/qIZerog9FU7bpFPkCuQCGQtnUZW3Bh4Vg1+5lwbSyyobKak4ZhMZtyEXqm0+KqkZVUqpOWaciYwj1feF66tyF7i30ZkHFkncPNNQCUkR3h27WFoWnKxLSnDNWYgIBcMeXNNLvHC8zbM8NSWInuUxJvQlUfN/s5qKLTaUWOaZRRiFdTKCCuwk5j2A2NzUBJKa2uzvrriMj6IR1FzrBIrvb0i66rbtvQTs5hFGoz8A/djSAVM0/ngwRaqqtTBrNGaASzxNQdY4WsB2Oc7uAW484hPWitsNt0hxwT+9gAfn/lr8Gd+1FobZ0Xz3s5ae9nbeWdHqx7hLTLYRZdhjNkOyOhV9tiACEImUZ87e/R4bGMWvV31OQZk13mMWeSAjHlUjw1IPWQaI/cTbPTUIzpgpmU6ibUDMno1beRtdNcjX8ZcNz12GLoesad+zyexz5O+Rs+vQ2eIef/ghcx5gTNnUzfN6UHktgxoSMN1G+H77v2B7vYOR8C4meuuvyqc5WJh099agmSz2+DNRofhmuPVnmbU3DZaQlBx2RaECzg5ihc4OsvwBdWWwv/g6nr6Iao79pQiTRwJ/AruHeMQhwonF9XRqeRDeNTU/EQzpDiXzqt//tsj6Eu/h9m5DQqdrPzWaaxradMJaivRbc8JBNk+/lPpR7QlD8JY88wGJ88+OrPPcAkvVfQCVfQ6gowTwPPkI6sMD4/amDwx5tFNzoNjgQxDauLnvJV0SuuUyJA2Dufm1YQkcP/gCVJUTxWF4U6FPToNOr/+QNorUamMAo6l7Z7Mh349rYShFOQam7oSNvAjH+nQOmXFBUrau66HzkTh1pKE5HF91DARjfH3kMs8CE4d8wUI3MyWf3RyU5fhuIe8mtSav36txblai9evNT9X6/b1a83O1Vp+X62TA/t9p7h6KwZnz/bmrRicPfG7t2JA98BV6gTjMjmppM5F0OrMfQ7K6d5xwfA/zMD/6S8/jA8THa0bU35yahVQB52wziIsO6jdDAmYUh1StflMqy5j+C/dOFmn The old url is: https://cadhub.xyz/dev-ide/cadQuery#encoded_script=aW1wb3J0IGNhZHF1ZXJ5IGFzIGNxCgojIENoYW5nZSB0aGUgdGV4dCBpbnNpZGUgdGhlIHF1b3RlcyBhbmQgYSBwbGF0ZQojIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRvdHMgd2lsbCBiZSBnZW5lcmF0ZWQuCnRleHQgPSAiY2FkcXVlcnkiCgojIEJyYWlsbGUgZG90IGdlb21ldHJ5IChkbyBub3QgY2hhbmdlIHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzKQpob3Jpem9udGFsX2ludGVyZG90ID0gMi41CnZlcnRpY2FsX2ludGVyZG90ID0gMi41Cmhvcml6b250YWxfaW50ZXJjZWxsID0gNgp2ZXJ0aWNhbF9pbnRlcmxpbmUgPSAxMApkb3RfaGVpZ2h0ID0gMC41CmRvdF9kaWFtZXRlciA9IDEuMwoKYmFzZV90aGlja25lc3MgPSAxLjUKCgojIE1hcCBmcm9tIGNoYXJhY3RlciB0byBwb3NpdGlvbnMuCiMgQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnJhaWxsZV9QYXR0ZXJucwojIFRoZSBwb3NpdGlvbnMgYXJlCiMgYXMgZm9sbG93czoKIyAxICA0CiMgMiAgNQojIDMgIDYKIyA3ICA4CmNoYXJfcG9pbnRfbWFwID0gewogICAgImEiOiAiMSIsCiAgICAiYiI6ICIxLDIiLAogICAgImMiOiAiMSw0IiwKICAgICJkIjogIjEsNCw1IiwKICAgICJlIjogIjEsNSIsCiAgICAiZiI6ICIxLDIsNCIsCiAgICAiZyI6ICIxLDIsNCw1IiwKICAgICJoIjogIjEsMiw1IiwKICAgICJpIjogIjIsNCIsCiAgICAiaiI6ICIyLDQsNSIsCiAgICAiayI6ICIxLDMiLAogICAgImwiOiAiMSwyLDMiLAogICAgIm0iOiAiMSwzLDQiLAogICAgIm4iOiAiMSwzLDQsNSIsCiAgICAibyI6ICIxLDMsNSIsCiAgICAicCI6ICIxLDIsMyw0IiwKICAgICJxIjogIjEsMiwzLDQsNSIsCiAgICAiciI6ICIxLDIsMyw1IiwKICAgICJzIjogIjIsMyw0IiwKICAgICJ0IjogIjIsMyw0LDUiLAogICAgInUiOiAiMSw3LDgiLAogICAgInYiOiAiMSwyLDMsNiIsCiAgICAidyI6ICIyLDQsNSw2IiwKICAgICJ4IjogIjEsNCw3LDgiLAogICAgInkiOiAiMSwzLDQsNSw2IiwKICAgICJ6IjogIjEsMyw1LDYiCn0KCgpkZWYgZ2V0X3BsYXRlX3dpZHRoKHRleHQpOgogICAgIiIiCiAgICBEZXRlcm1pbmVzIHRoZSBoZWlnaHQgb2YgdGhlIHBsYXRlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KICAgICIiIgogICAgcmV0dXJuIChsZW4odGV4dCkgKiBob3Jpem9udGFsX2ludGVyY2VsbCAqIDEuNCkKCgpkZWYgZ2V0X3BsYXRlX2hlaWdodCh0ZXh0KToKICAgICIiIgogICAgRGV0ZXJtaW5lcyB0aGUgd2lkdGggb2YgdGhlIHBsYXRlIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KICAgICIiIgogICAgbWF4X2xlbiA9IG1heChbbGVuKHQpIGZvciB0IGluIHRleHRdKQogICAgcmV0dXJuICgyICogaG9yaXpvbnRhbF9pbnRlcmRvdCArCiAgICAgICAgICAgIGhvcml6b250YWxfaW50ZXJkb3QgKwogICAgICAgICAgICAobWF4X2xlbiAtIDEpICogaG9yaXpvbnRhbF9pbnRlcmNlbGwpCgoKIyBHZW5lcmF0ZSB0aGUgYnJhaWxsZSBwbGF0ZQpwbGF0ZSA9IChjcS5Xb3JrcGxhbmUoKS5yZWN0KGdldF9wbGF0ZV93aWR0aCh0ZXh0KSwgZ2V0X3BsYXRlX2hlaWdodCh0ZXh0KSArIHZlcnRpY2FsX2ludGVyZG90ICogMi4wLCBjZW50ZXJlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAuZXh0cnVkZShiYXNlX3RoaWNrbmVzcykpCgojIEFkZCB0aGUgZG90IHBvaW50cyB0byB0aGUgcGxhdGUKcG50cyA9IFtdCmkgPSAxCm9mZnNldCA9IDAKZm9yIGNoYXIgaW4gdGV4dDoKICAgIGxvY3MgPSBjaGFyX3BvaW50X21hcFtjaGFyXQogICAgbG9jX2xpc3QgPSBsb2NzLnNwbGl0KCIsIikKCiAgICBmb3IgbG9jIGluIGxvY19saXN0OgogICAgICAgIGlmIGxvYyA9PSAiMSI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiA0KSkKICAgICAgICBlbGlmIGxvYyA9PSAiMiI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAzKSkKICAgICAgICBlbGlmIGxvYyA9PSAiMyI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAyKSkKICAgICAgICBlbGlmIGxvYyA9PSAiNyI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAxKSkKICAgICAgICBlbGlmIGxvYyA9PSAiNCI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIGhvcml6b250YWxfaW50ZXJkb3QgKyBvZmZzZXQsIHZlcnRpY2FsX2ludGVyZG90ICogNCkpCiAgICAgICAgZWxpZiBsb2MgPT0gIjUiOgogICAgICAgICAgICBwbnRzLmFwcGVuZCgoaG9yaXpvbnRhbF9pbnRlcmRvdCAqIGkgKyBob3Jpem9udGFsX2ludGVyZG90ICsgb2Zmc2V0LCB2ZXJ0aWNhbF9pbnRlcmRvdCAqIDMpKQogICAgICAgIGVsaWYgbG9jID09ICI2IjoKICAgICAgICAgICAgcG50cy5hcHBlbmQoKGhvcml6b250YWxfaW50ZXJkb3QgKiBpICsgaG9yaXpvbnRhbF9pbnRlcmRvdCArIG9mZnNldCwgdmVydGljYWxfaW50ZXJkb3QgKiAyKSkKICAgICAgICBlbGlmIGxvYyA9PSAiOCI6CiAgICAgICAgICAgIHBudHMuYXBwZW5kKChob3Jpem9udGFsX2ludGVyZG90ICogaSArIGhvcml6b250YWxfaW50ZXJkb3QgKyBvZmZzZXQsIHZlcnRpY2FsX2ludGVyZG90ICogMSkpCgogICAgb2Zmc2V0ICs9IGhvcml6b250YWxfaW50ZXJjZWxsCiAgICBpICs9IDEKICAgIApwbGF0ZSA9IHBsYXRlLmZhY2VzKCI+WiIpLndvcmtwbGFuZSgpLnB1c2hQb2ludHMocG50cykucmVjdCgxLCAxKS5leHRydWRlKDEpCgpzaG93X29iamVjdChwbGF0ZSk=
franknoirot (Migrated from github.com) reviewed 2021-05-08 01:15:25 +02:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: h3n3/cadhub#312