zipurl 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -15
- package/package.json +22 -20
- package/src/cli.js +20 -0
- package/src/index.js +5 -0
- package/src/unzipurl.js +4 -0
- package/src/zipurl.js +4 -0
- package/bin/getInputs.js +0 -10
- package/bin/stdin.js +0 -24
- package/bin/unzipurl.js +0 -7
- package/bin/zipurl.js +0 -7
- package/index.js +0 -5
package/README.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
# zipurl
|
|
2
2
|
|
|
3
|
-
> Generate **gzip** web-safe strings on the browser. Built in 10 minutes.
|
|
3
|
+
> Generate **gzip** web-safe strings on the browser. Built in 10 minutes.
|
|
4
|
+
> :smile:
|
|
4
5
|
|
|
5
|
-
Dead simple mash-up of [pako](https://github.com/nodeca/pako) and
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Dead simple mash-up of [pako](https://github.com/nodeca/pako) and
|
|
7
|
+
[js-base64](https://github.com/dankogai/js-base64) to create **gzipped**
|
|
8
|
+
URL-safe base64 strings from any data on the browser. Very useful for passing
|
|
9
|
+
large datasets via shareable web links.
|
|
8
10
|
|
|
9
11
|
45kb minified, 14kb **gzipped**, pun not intended.
|
|
10
12
|
|
|
11
13
|
## Demo
|
|
12
14
|
|
|
13
|
-
This package is used in
|
|
14
|
-
|
|
15
|
+
This package is used in
|
|
16
|
+
[JSON Pretty Print Online](https://zerodevx.github.io/json-pretty-print/) to
|
|
17
|
+
compress and share stringified JSON via URL query parameters.
|
|
15
18
|
|
|
16
|
-
See it in action
|
|
19
|
+
See it in action
|
|
20
|
+
[here](https://zerodevx.github.io/json-pretty-print/?data=H4sIAAAAAAAAA7WaXXOkNhaG7_MrtK692FQaAgIE8tU4tmfjxJ7MepykUklqS4Do1g4NHT5sd1L73_foC2g3bXs83krF0wLpICHpOe854tcvEPoL_kfo6N8iPzpGR8SLKWFBESakIJnvJYkfZn4YHS10NVHl_B4qeqa87E27mMShz1InS7PQCUmWOkkUJg4hHityFjCSpoON9iTrxC2Hdl3Tc3M1ZSWrMnnx6O94QXDiJtS22Iis6xt1b9V1m-Ovv96ULOOrusxd0X0d4PsA27psKesFoSnyLT-ty7qRbdOmvqtsvYqtlcHLuqkY-lDWbLi15DBK1aLga1Zyez2r1xtWbeWN9z9c31ycntg7UE2U8noprbXS2JtN3XQiYy60Gsaxqiv10K989A_qh1-i0KMOjnAy9D7PG962so4fxOikgr6d1n3TLdB5Kf5kt6Is-QK943foit-LrF4g6sX-0Dyt-042Pu9QLofNEavEGq3ZEgyxUvzRM9SKqkObphY5hx9rISuIHG1YIxi8ZsR7aIu4vMxysRGtyES1dNHJmnfTK6jol9ACQX85-qMXKOctb3qwCYXWRdd80_CVepeiQ1lfbpjtlO6PNCdtqkfVRQFWGRJNLyvUZQmN-rJk66xGonJ_a34bJqjhS9F2vOFq7WHPJ44XOV5w4yXHPj3GEXLgl-fZ-iXrRNfn8tXD2nSjIMTUt_fqamlvJp4bJ4TG5lbHlnImflUl9djJgIxtuZJkL8diBlPUr8eyHspYZvmkbr1e13k9qSxn40iVfje9KBoBj5x25C_zr9xL-bgZd5b1DUtFt2LobVlv8yNz_7-LAxb8GQuXNXSboZ9XouNPGsBzBmA_MzlN6BtYaCXfDlZ2xrdsOO9gOckm3_KyhCU92ZN_Q7_UPVqxW44o6quGsxytYcXBNm9dO78Fu61hSvjbphdq-bPNplSdVh2eR1zBo4BgwlOeQgGzh4izC8QizkvDIgtI4NACOBcmReSwNA6cOPPSPCe0oJjMIK5gZTvHuGARhoE77vwXMM728EnG_SSfCrMwh7iDgLs8ub748WqPcLfSVsoV4EpARr8-TLgQS8IRJ0jCYI5wfoROyhRMNyVH1zXLF-g7lvXrlC3Q-543XY2uFeN8j5A9xsEq4Wt0yyUoFNrEBkCRiVzkEkIKc2pvGvZM7ilkAXn0XkWcDexy0akGFSBM_7Fg4m03_r7nTQa7oxN1hUroUQNW9LMUzFr5EAtUF11sWrjP-o4PlXeYJ01b1KkK8Fg7Ii76FhghCW2rtKqfJ6aCQaodyrRnA9L1C6izjPGMQdt3dQuuN7cENxhCHV-D1xq4Di_WRVeaxPxev43JS9RG9ainboFNh6aA5qJzeW3wKvKP5L4Z2s7QwWPBlc56ANMX3QRek5rup5yBjx0fnEF8HITHHj3sDLAbhDSi0YwrcGjgejQmyQFfYKZnJLd-d2OZT1yCkPM_FqfAlwN7WPEV8P9dvUXfsqaB-ejq6kX8Py2ZgNl4z16I_7clX8vl8DPQonk2-kdUTcjve6-Lfs7jnLEgoRxHOY3zh-jHD9CfxHHggx52siLznBBj7qSpzx3ix3maFoz7RTSD_gPqNlh41Aeh8Rnktyt2h_xlzx-C_7K-480WFOR6I5fBs-F_8uHmx-uLOXkr7WXa3JsNePceCHPQASTY_xJFIHEDL_JnHAAFpXYjN73VuBfNnai0vP2ONy3fSnk78R0W_WdWaXI2CMtR0g4_JDB2RJtSphaV2n8YzoDolQ4D8D-9mdVVy0EzG49hoAY4kyXlYCymDQZNSd2yWlc_QNfOB8hNa3LLOQNKC8TKYNr6hH23I_2Tobpm6-BfFCsrwQC-H_SjJ4S2nYYLgx3bUrmpdgQ89FldUiN00Q8G7GZ0le0JB2g_ymXsSZHu-zdedIzxsRce5nLsuzQMYOLnwIxBNWGPEhvhPSTzjpyWccZYtK9qKsBhgrOOwzqe53M1bBt1Q475NfgMU7IsOWwidNJUsNFfptA5y1boJ3DJsNhfJtG3FVg47asK-rNi609Q6FOwvBDVKavgvydYndNIanXOCpLk_kRiG1bbNWJZzTgpYo9wJwhi4oR5gh1Ki8AJ0zyJIi-Nw5g9n9X-AnuRi-PPYLVNlTzFanC03RZ90zdV-wmJiIuz83_-sMfpjbSVSlNvgITL-rBEpxEQmmAHe8lcEiKKI9ARVVZnH9GHTq6DBToBf55zbjj9S918BEr7sbdH6fdWfhoEap6YQj7iTYX8LrrUGBmyCBZMokJKF5m_Wb8ROQMIDhoTFptRrmq_gzTOd6kG__Y2K3Ey4aCinGnaihHC77SS7wY6g_o1zHxcelLHi-FV3vge8O0Ye4_kIRLiEprQmM4xLqIuhVkZIrzHGCcmgJo6iMnVflI7n7_-emg7XTFwjqesuZ3Ivk_B2tlWpwz-w0A_vghrsIk-gohs6vpj-2ykTfbfhGfk-TiDxczuYG8026fkZx4QkgVB5McBjTLvIdKsZ7NIi_OcFTEBmhVJ7IQsBqRhQh1KAhrmBQ2jmM4g7VDmAS9I7LkR_gymzWUe5Cvdyzx8zyoOEQD_OMO0A0Q7PX93c3F6vse0j2DqTlp6I92dyPhhqCnZSX0nID6egRoJMTrjrAEyVFZ5vq2bFDRTfQdYu8jZChZEGCT7TLtQ6UmtrLQGmgDJoMTKNw2cn7jRl1Iq6WwrsM-G3GPj27rsN_CDm0oD_vJB0I7ReGtCYmAjSOAhR6AAOQAUwGWQqTWttquzB1cqA6sAqFSgzojcZ3zTcSC2MFQeGGvlniKjRrghttSlbEw16HzMTq6lm-ho5QNA5trEwaTimB9RUvdx0kaOFzqY3vj4GFNA7GHShoEbxoBmm9WdgjbGrhdiEhzK-A4v5HB690H2Vw1_UttO73jJvqkJh18p53tW98uStehdzcsXkRdIuGTomlUw25vVi9D7PetWEGnBrr8W9fPhO3Jiwt74_8DePMQsioqEp4SlBU0estdG1pa92M95SnHm5HmKndBjvkOTkDhZ5kUkIrGfRMknsDdY-J7vks-J_e1afTLrC7qNb9HNtv2EyP-DpO_1xekefVfSWCdtvWklfxuRHQ77Y6JFZYDJXNgfxRid33N5MmA15RWgGFZEC5gDgdmIP-uKAYETuk_gd4BR_jCuN0DWzFKBsEkcmhvmwEmp0DHks1G7Cm8VBe8tGXdCbQtrI111K3niZZTrqblvQ2jrAAx3p0-0fJOtpU9QpqCpOgiz-tME7FONrLunUt0TAavHO4bx3OQt1IhsrwfHMnaUj8lg1RObPDZ-RBkc_ZH1ATtZ7Snx1SuejPJJkUwdn954-Djwj8PgMLoD7EaeH8-R2_djF9MEk4PoBof2QN6ORf2yDp_RmYk8TH3evcohHaASnDUAu4E18SJkX7GmXTEQr6B4n5bbB47pGLoCmjw_STshy8uk8rMi_5CEJA-LkKZREsZR_BDV5AGqk8IjGfaIk7I0csKQZk6SF7nDQ5_JbxNAAhSf8g2Ch-URwGufz81E_ld1nW_Rt7AG6zu2fTarv7m4vLw6P9tD9VqaWxlrb1JYuWueH4a1FwOsYwhb49kMQBhRdAIDL8XwJQLEdk1rv0Som24lr9SlkMjGkZfsIft89lBKa1NNQHsQpTlkdLQBiwrCh7wmEPpMJnEBniqZO3wioK1Jcg0ZBiVZx28IND-1cYCspJmpOmaMBwW8k6zY8QZa4Q6nfhrQoPMHXu50eDjPm6pbVWN3lOOTBwob9GvB_mHyTCmpDe8HjCs4a3-gHjWcH1q7LrrRD5RxiIS-DgdsvSFq2HWsrRgSMS76F7QaPxNR8Yd6oA4j1ERq_zPrPc3nJ5NBPO4nYgf2sgd-wj_2yXH0SL7YiWOZE_Y8GzlPPUUkz1rCgNpDnX2N_wjmJxmS_eSx9Nljyayz8YJe06_hJ74XDbyZCp3DYqy7p1O9c47iWiyXLegtVj3nQHDOUZyuOIhaBqDqW_5sX7ELt4m7iF7kLr74_X8qHdwptSYAAA)!
|
|
17
21
|
|
|
18
22
|
## Install
|
|
19
23
|
|
|
@@ -39,7 +43,8 @@ $ npm i -D zipurl
|
|
|
39
43
|
<script src="https://cdn.jsdelivr.net/npm/zipurl@0"></script>
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
The functions `zipurl()` and `unzipurl()` are available in the global (`window`)
|
|
46
|
+
The functions `zipurl()` and `unzipurl()` are available in the global (`window`)
|
|
47
|
+
scope.
|
|
43
48
|
|
|
44
49
|
#### Or with a bundler
|
|
45
50
|
|
|
@@ -108,7 +113,8 @@ That's it!
|
|
|
108
113
|
Ok, so it works much better with larger datasets:
|
|
109
114
|
|
|
110
115
|
```js
|
|
111
|
-
const a =
|
|
116
|
+
const a =
|
|
117
|
+
JSON.stringify(`{"students":[{"name":"Jack","age":17},{"name":"Jill","age":16},
|
|
112
118
|
{"name":"Sue","age":16}],"class":"math"}`)
|
|
113
119
|
|
|
114
120
|
console.log(a.length) // 103 bytes
|
|
@@ -116,7 +122,8 @@ console.log(encodeURIComponent(a).length) // 199 bytes
|
|
|
116
122
|
console.log(zipurl(a).length) // 116 bytes
|
|
117
123
|
|
|
118
124
|
// Let's try something bigger (3122 bytes)
|
|
119
|
-
const b =
|
|
125
|
+
const b =
|
|
126
|
+
JSON.stringify(`{"shaderStatements":[{"output":"b","outputSwizzle":"zxyw","assignmentOperator":"-=",
|
|
120
127
|
"functionName":"","parameter":"a","valueX":6.62,"valueY":6.165,"valueZ":-0.974,"valueW":-4.233,"parameterSwizzle":"xzyy"},
|
|
121
128
|
{"output":"b","outputSwizzle":"ywxz","assignmentOperator":"-=","functionName":"","parameter":"a","valueX":-4.88,
|
|
122
129
|
"valueY":0.649,"valueZ":0.171,"valueW":-0.084,"parameterSwizzle":"yzwx"},{"output":"a","outputSwizzle":"xzwy",
|
|
@@ -151,19 +158,22 @@ console.log(zipurl(b).length) // 1120 bytes - 77.4% reduction in size :)
|
|
|
151
158
|
|
|
152
159
|
## Google Apps Script
|
|
153
160
|
|
|
154
|
-
If you're using GAS somewhere along your pipeline, `zipurl` is supported
|
|
161
|
+
If you're using GAS somewhere along your pipeline, `zipurl` is supported
|
|
162
|
+
natively (kindof).
|
|
155
163
|
|
|
156
164
|
Here's the gist:
|
|
157
165
|
|
|
158
166
|
```js
|
|
159
167
|
function zipurl(data) {
|
|
160
|
-
var blob = Utilities.gzip(Utilities.newBlob(data))
|
|
161
|
-
return Utilities.base64EncodeWebSafe(blob.getBytes())
|
|
168
|
+
var blob = Utilities.gzip(Utilities.newBlob(data))
|
|
169
|
+
return Utilities.base64EncodeWebSafe(blob.getBytes())
|
|
162
170
|
}
|
|
163
171
|
|
|
164
172
|
function unzipurl(data) {
|
|
165
|
-
var blob = Utilities.newBlob(
|
|
166
|
-
|
|
173
|
+
var blob = Utilities.newBlob(
|
|
174
|
+
Utilities.base64DecodeWebSafe(data)
|
|
175
|
+
).setContentType('application/x-gzip')
|
|
176
|
+
return Utilities.ungzip(blob).getDataAsString()
|
|
167
177
|
}
|
|
168
178
|
```
|
|
169
179
|
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zipurl",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Generate gzip web-safe strings on the browser",
|
|
5
5
|
"author": "Jason Lee <jason@zerodevx.com>",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
9
|
-
"import": "./index.js",
|
|
9
|
+
"import": "./src/index.js",
|
|
10
10
|
"require": "./zipurl.min.js"
|
|
11
11
|
},
|
|
12
12
|
"./package.json": "./package.json"
|
|
13
13
|
},
|
|
14
14
|
"bin": {
|
|
15
|
-
"zipurl": "
|
|
16
|
-
"unzipurl": "
|
|
15
|
+
"zipurl": "./src/zipurl.js",
|
|
16
|
+
"unzipurl": "./src/unzipurl.js"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
-
"
|
|
19
|
+
"format": "prettier --write .",
|
|
20
|
+
"lint": "eslint .",
|
|
20
21
|
"build": "rollup -c",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"test": "npm run dev"
|
|
22
|
+
"prepublishOnly": "run-s format lint build",
|
|
23
|
+
"test": "http-server . -c-1 -o test/"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"js-base64": "^3.7.2",
|
|
@@ -29,24 +29,24 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
31
31
|
"ansi-regex": "^6.0.1",
|
|
32
|
-
"chai": "^4.3.
|
|
32
|
+
"chai": "^4.3.6",
|
|
33
|
+
"eslint": "^8.8.0",
|
|
34
|
+
"eslint-config-prettier": "^8.3.0",
|
|
35
|
+
"http-server": "^14.1.0",
|
|
33
36
|
"mocha": "^9.2.0",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"rollup
|
|
37
|
-
"rollup-plugin-terser": "^7.0.2"
|
|
38
|
-
"snazzy": "^9.0.0",
|
|
39
|
-
"standard": "^16.0.4"
|
|
37
|
+
"npm-run-all": "^4.1.5",
|
|
38
|
+
"prettier": "^2.5.1",
|
|
39
|
+
"rollup": "^2.67.1",
|
|
40
|
+
"rollup-plugin-terser": "^7.0.2"
|
|
40
41
|
},
|
|
41
|
-
"license": "ISC",
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
44
44
|
},
|
|
45
45
|
"files": [
|
|
46
|
-
"
|
|
47
|
-
"zipurl.min.js"
|
|
48
|
-
"/bin"
|
|
46
|
+
"src/",
|
|
47
|
+
"zipurl.min.js"
|
|
49
48
|
],
|
|
49
|
+
"license": "ISC",
|
|
50
50
|
"repository": {
|
|
51
51
|
"type": "git",
|
|
52
52
|
"url": "git+https://github.com/zerodevx/zipurl.git"
|
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
"keywords": [
|
|
55
55
|
"gzip",
|
|
56
56
|
"base64",
|
|
57
|
-
"url-safe"
|
|
57
|
+
"url-safe",
|
|
58
|
+
"web-safe-strings",
|
|
59
|
+
"json-compress"
|
|
58
60
|
]
|
|
59
61
|
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
async function read() {
|
|
2
|
+
const { stdin } = process
|
|
3
|
+
if (stdin.isTTY) return ''
|
|
4
|
+
const results = []
|
|
5
|
+
let length = 0
|
|
6
|
+
for await (const chunk of stdin) {
|
|
7
|
+
results.push(chunk)
|
|
8
|
+
length += chunk.length
|
|
9
|
+
}
|
|
10
|
+
return Buffer.concat(results, length).toString('utf8')
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default async function () {
|
|
14
|
+
const arg = process.argv.slice(2).join(' ') || (await read()).trim()
|
|
15
|
+
if (!arg) {
|
|
16
|
+
console.error('Error: No arguments found!')
|
|
17
|
+
process.exit(1)
|
|
18
|
+
}
|
|
19
|
+
return arg
|
|
20
|
+
}
|
package/src/index.js
ADDED
package/src/unzipurl.js
ADDED
package/src/zipurl.js
ADDED
package/bin/getInputs.js
DELETED
package/bin/stdin.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const { stdin } = process
|
|
2
|
-
|
|
3
|
-
const getStdinBuffer = async () => {
|
|
4
|
-
if (stdin.isTTY) {
|
|
5
|
-
return Buffer.alloc(0)
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
const result = []
|
|
9
|
-
let length = 0
|
|
10
|
-
|
|
11
|
-
for await (const chunk of stdin) {
|
|
12
|
-
result.push(chunk)
|
|
13
|
-
length += chunk.length
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return Buffer.concat(result, length)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export default async function getStdin () {
|
|
20
|
-
const buffer = await getStdinBuffer()
|
|
21
|
-
return buffer.toString()
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
getStdin.buffer = getStdinBuffer
|
package/bin/unzipurl.js
DELETED
package/bin/zipurl.js
DELETED