Compare commits
540
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ec4c2cdb1 | ||
|
|
77953d8c8d | ||
|
|
58c0d615c7 | ||
|
|
70c9dc516f | ||
|
|
74c46239b9 | ||
|
|
ac35c7dcbb | ||
|
|
864d769d88 | ||
|
|
bd56a74562 | ||
|
|
da4da65c0c | ||
|
|
53bbd4a3f9 | ||
|
|
49fbca1242 | ||
|
|
e440cccc0a | ||
|
|
94b00aa807 | ||
|
|
4b45d6c1ba | ||
|
|
175b8e3c51 | ||
|
|
ec0e2f3f94 | ||
|
|
afa23a53cd | ||
|
|
852c4d6096 | ||
|
|
633ae6058a | ||
|
|
6b53f80311 | ||
|
|
80fc7a169d | ||
|
|
611c575a97 | ||
|
|
b904884b94 | ||
|
|
a5323a369c | ||
|
|
04042494cf | ||
|
|
a8e6d5f871 | ||
|
|
dbbae0dee3 | ||
|
|
e001deb4cf | ||
|
|
17b87d25c7 | ||
|
|
fd25c3e720 | ||
|
|
a19efdd45d | ||
|
|
f13c1effbf | ||
|
|
57a03d610c | ||
|
|
2bea9d6df9 | ||
|
|
9a75bb0d43 | ||
|
|
32580f5d83 | ||
|
|
df24981307 | ||
|
|
4beed4e01a | ||
|
|
12cdd950e9 | ||
|
|
e371bfaa92 | ||
|
|
dd409de28d | ||
|
|
7422e8c914 | ||
|
|
6aeafff056 | ||
|
|
57f5976edf | ||
|
|
1b4109b0d0 | ||
|
|
9d241e2772 | ||
|
|
8bce8b6543 | ||
|
|
41b8edfe54 | ||
|
|
17b411837d | ||
|
|
fbee8f48ba | ||
|
|
8cf81cb80c | ||
|
|
4bb50d772b | ||
|
|
603db3f577 | ||
|
|
2d410d6d86 | ||
|
|
f1f39b42e3 | ||
|
|
dbcaa9d491 | ||
|
|
579e6f76cf | ||
|
|
42d4035d4f | ||
|
|
3c81b62958 | ||
|
|
f0dabad36a | ||
|
|
34f7186b86 | ||
|
|
88e83408f2 | ||
|
|
a5a29cccc5 | ||
|
|
46d1da3094 | ||
|
|
e987df0d46 | ||
|
|
985abe534f | ||
|
|
df924eae91 | ||
|
|
a829f678f3 | ||
|
|
7122866869 | ||
|
|
f58787c418 | ||
|
|
9d223f153c | ||
|
|
9761ceb7d6 | ||
|
|
532ccea608 | ||
|
|
33d7bce321 | ||
|
|
7316e5ce4b | ||
|
|
63751f8a9f | ||
|
|
5f2a14dd1b | ||
|
|
5a015deae3 | ||
|
|
01b3cded76 | ||
|
|
d1a12569d9 | ||
|
|
870207323d | ||
|
|
1eaa31acea | ||
|
|
fb59f14910 | ||
|
|
2f09060afa | ||
|
|
0c7d133c3c | ||
|
|
6374ae0bcd | ||
|
|
fdf8ef0f08 | ||
|
|
e47e56d226 | ||
|
|
9f778b4cb5 | ||
|
|
27f417f481 | ||
|
|
69785bf77f | ||
|
|
847b6afd2c | ||
|
|
c26756395c | ||
|
|
cec6b0f346 | ||
|
|
b6a9e260cd | ||
|
|
1a394919f9 | ||
|
|
4b145b3a58 | ||
|
|
03a269b2f7 | ||
|
|
3985b80ce5 | ||
|
|
3cd7e0da00 | ||
|
|
ed3c7f214b | ||
|
|
bfcf82fde1 | ||
|
|
36b6ae00b1 | ||
|
|
0df54c888a | ||
|
|
262f0b81c1 | ||
|
|
c3d3e7d656 | ||
|
|
2beac1aed0 | ||
|
|
2d5239e8c1 | ||
|
|
601a37f452 | ||
|
|
750dbe723b | ||
|
|
2ad99a6c70 | ||
|
|
061fd14d74 | ||
|
|
22361cfb87 | ||
|
|
a2741ee0a8 | ||
|
|
b33a7634ba | ||
|
|
d44baeb67a | ||
|
|
ea9e41f758 | ||
|
|
f46dc3dd61 | ||
|
|
88b9c4920e | ||
|
|
0eb3da11ed | ||
|
|
39572e129f | ||
|
|
4829059147 | ||
|
|
33b3a68f9c | ||
|
|
cff4e00982 | ||
|
|
5529788292 | ||
|
|
8d9a3c3ab3 | ||
|
|
b29504b4e1 | ||
|
|
589a6947fa | ||
|
|
c9c96b3cdd | ||
|
|
f240512140 | ||
|
|
2b084a6d2d | ||
|
|
169457328d | ||
|
|
c8017bf079 | ||
|
|
a4d9d54010 | ||
|
|
695830c453 | ||
|
|
cd3a4c3d31 | ||
|
|
63c5f4e196 | ||
|
|
755ac61755 | ||
|
|
68f9e0a7e1 | ||
|
|
21471c5e3b | ||
|
|
a8115e5bc9 | ||
|
|
0ff997f7c4 | ||
|
|
4357b6154e | ||
|
|
3c5ceac8e7 | ||
|
|
b9e19de76e | ||
|
|
3db7b519bf | ||
|
|
4467af7068 | ||
|
|
98a1176cff | ||
|
|
205b3a2d75 | ||
|
|
d21e506d52 | ||
|
|
11f43e9d93 | ||
|
|
2e6987967e | ||
|
|
0b1ef46973 | ||
|
|
5e159b34b1 | ||
|
|
499c91bca9 | ||
|
|
edbc1da809 | ||
|
|
a587ddc5a3 | ||
|
|
78045d8aa9 | ||
|
|
7cc202aa6e | ||
|
|
859a8073ee | ||
|
|
023f274ee9 | ||
|
|
62cafa2367 | ||
|
|
89d657e3fa | ||
|
|
d23a7b9db9 | ||
|
|
d3cf5caf72 | ||
|
|
aa977aa716 | ||
|
|
c6e041699d | ||
|
|
3b00981acd | ||
|
|
f28720f699 | ||
|
|
9ac6ddae22 | ||
|
|
aaace5432a | ||
|
|
4e3088f188 | ||
|
|
7d8c096e48 | ||
|
|
de21386681 | ||
|
|
4e2ccc4c9b | ||
|
|
b733dfaee7 | ||
|
|
c350566001 | ||
|
|
92daac90f6 | ||
|
|
b088e83a82 | ||
|
|
96d19ca2ee | ||
|
|
ecea2d29bd | ||
|
|
eff9caf6c7 | ||
|
|
77d23e9a5f | ||
|
|
931a362f8b | ||
|
|
a8f27cc4db | ||
|
|
9f6bcdc321 | ||
|
|
622e2d1d7f | ||
|
|
43506372b5 | ||
|
|
abde27d0f5 | ||
|
|
aea8efaf0b | ||
|
|
947fcbbb1f | ||
|
|
1e22960cf5 | ||
|
|
0b2bda8108 | ||
|
|
5f7b1aed16 | ||
|
|
8819eb8fb4 | ||
|
|
313b0e3735 | ||
|
|
4b84a6e2f6 | ||
|
|
668871bdfa | ||
|
|
94fd973ebb | ||
|
|
c70ae1ada4 | ||
|
|
f65d088b75 | ||
|
|
7e5cad359a | ||
|
|
9d6efec198 | ||
|
|
a09a4dfd55 | ||
|
|
a8ce2ff09a | ||
|
|
4003202ccf | ||
|
|
dc849e9bb7 | ||
|
|
5df471fa5b | ||
|
|
c4e1fb08fb | ||
|
|
b7a1201b72 | ||
|
|
17be97a8ad | ||
|
|
95ee663b28 | ||
|
|
8ba03f788f | ||
|
|
f3d4c1165d | ||
|
|
70e72abea3 | ||
|
|
6d8e9f98ae | ||
|
|
b86ff49f46 | ||
|
|
64bd8ba374 | ||
|
|
fa6a2ff688 | ||
|
|
e33578a53e | ||
|
|
6ce3bdf382 | ||
|
|
972772153f | ||
|
|
2755664a8e | ||
|
|
d0adcbfebb | ||
|
|
07af9c11b7 | ||
|
|
0d1e371e63 | ||
|
|
dea5e61cde | ||
|
|
ce54621904 | ||
|
|
39eea145b4 | ||
|
|
da28628edd | ||
|
|
31dac287cc | ||
|
|
562ffec869 | ||
|
|
18bd8374c1 | ||
|
|
d8463c2549 | ||
|
|
71ed7b3412 | ||
|
|
588ff1874c | ||
|
|
bcbf2b4616 | ||
|
|
8bcdc9304a | ||
|
|
0b82b3841b | ||
|
|
96e8d893c1 | ||
|
|
8619f8a8ac | ||
|
|
a7b22539a4 | ||
|
|
3c5707f7fb | ||
|
|
32a304b912 | ||
|
|
eb9bdca296 | ||
|
|
7cac5e80ec | ||
|
|
7a1fd72d2d | ||
|
|
0558e77e8c | ||
|
|
ff4acba769 | ||
|
|
562d5c5222 | ||
|
|
1bebd23aad | ||
|
|
860af44fee | ||
|
|
37f4cd2648 | ||
|
|
6322b99252 | ||
|
|
da2a0b970c | ||
|
|
0e0cdd552e | ||
|
|
0b5ae30f19 | ||
|
|
137018d2ae | ||
|
|
c1d885b024 | ||
|
|
2ee20ca604 | ||
|
|
e2ffb5360a | ||
|
|
ba741e5968 | ||
|
|
7be6870751 | ||
|
|
5208a4425f | ||
|
|
7cd23f1f2f | ||
|
|
4842146e1b | ||
|
|
6d02d53f51 | ||
|
|
c1276169d6 | ||
|
|
ed8f7154f4 | ||
|
|
9afc450930 | ||
|
|
d875ff5c7a | ||
|
|
6ce6e7c713 | ||
|
|
e4d0b12d7d | ||
|
|
6eff31a204 | ||
|
|
6408338e93 | ||
|
|
5bbd02f581 | ||
|
|
afe0afaf06 | ||
|
|
ce2638af40 | ||
|
|
ea78b5a030 | ||
|
|
22a03e9e06 | ||
|
|
be437ec049 | ||
|
|
81f4f883ac | ||
|
|
b6da71bf68 | ||
|
|
bc96146825 | ||
|
|
d69733154a | ||
|
|
10ea3c7d9f | ||
|
|
d777b6570c | ||
|
|
1411ce63d5 | ||
|
|
6f67bae60b | ||
|
|
c95b34ff82 | ||
|
|
ce0e788ce2 | ||
|
|
913b26469f | ||
|
|
fc9ecd71b3 | ||
|
|
623d7a8bd6 | ||
|
|
6980cc9713 | ||
|
|
92d35378ff | ||
|
|
54cc15c127 | ||
|
|
48df9bce0c | ||
|
|
76853f6046 | ||
|
|
3c37522aaa | ||
|
|
8a9a74dc12 | ||
|
|
13e02ba348 | ||
|
|
bd3c828f98 | ||
|
|
605836b263 | ||
|
|
7bdc9a7a63 | ||
|
|
1daabc67ed | ||
|
|
c95f6ce700 | ||
|
|
1f1e619f4e | ||
|
|
71e7bcdfc1 | ||
|
|
f954e82b14 | ||
|
|
f51e841fbc | ||
|
|
2381d15d3e | ||
|
|
701c880805 | ||
|
|
0b922725b1 | ||
|
|
e011f003b6 | ||
|
|
56828b6d04 | ||
|
|
9e2695e117 | ||
|
|
95c50a2d0d | ||
|
|
71c2ab509a | ||
|
|
c9a5156521 | ||
|
|
c5fd64ba97 | ||
|
|
dcf9a8e580 | ||
|
|
c3b14967d3 | ||
|
|
5d95791a67 | ||
|
|
511d50b15b | ||
|
|
7298972551 | ||
|
|
19453a60cf | ||
|
|
527c5abab1 | ||
|
|
c2db51eeb3 | ||
|
|
507eb8283c | ||
|
|
2ccab044fe | ||
|
|
7e54d9646e | ||
|
|
22f81401f8 | ||
|
|
6b69ffe769 | ||
|
|
80bc768c5d | ||
|
|
5029328d35 | ||
|
|
20a403e97e | ||
|
|
693a7261e5 | ||
|
|
bfb7fd570f | ||
|
|
252ab244ce | ||
|
|
13353515bd | ||
|
|
98a206964d | ||
|
|
1617091033 | ||
|
|
d14393f552 | ||
|
|
6b82dd3c47 | ||
|
|
460a5c12b4 | ||
|
|
4570c23720 | ||
|
|
eb3b5654bb | ||
|
|
44300e4310 | ||
|
|
88f01a741c | ||
|
|
6c035133e8 | ||
|
|
cca1f7d18f | ||
|
|
f4929f3c19 | ||
|
|
d5590f90da | ||
|
|
e85e358233 | ||
|
|
7ab117a483 | ||
|
|
77dcaf3fdc | ||
|
|
f1bfd0c518 | ||
|
|
9de0e26ce6 | ||
|
|
c10cbbff34 | ||
|
|
6b6feaffbb | ||
|
|
0e70f7a57e | ||
|
|
0bce9fb8ed | ||
|
|
4ebd21e1eb | ||
|
|
7f547827e4 | ||
|
|
6b5a18f036 | ||
|
|
8206bc8fd2 | ||
|
|
623ace27e8 | ||
|
|
2b709727a9 | ||
|
|
07149397d1 | ||
|
|
e526df15fe | ||
|
|
8f81668014 | ||
|
|
de1c10ca8a | ||
|
|
a5afeea0a6 | ||
|
|
b0b7614daf | ||
|
|
d3a356fa1c | ||
|
|
24e6e6ea39 | ||
|
|
fb493df018 | ||
|
|
f3a46a62de | ||
|
|
e69398ea0f | ||
|
|
dfd930f81a | ||
|
|
4c6f6dc231 | ||
|
|
5ea1a4ab3b | ||
|
|
7a72f58d2e | ||
|
|
806475da29 | ||
|
|
4b579ca31f | ||
|
|
11c528d04d | ||
|
|
ac3b70d3a1 | ||
|
|
df95871dd7 | ||
|
|
91d72575e4 | ||
|
|
0e067ef936 | ||
|
|
ab47880b4c | ||
|
|
6436f1e0f8 | ||
|
|
2c3561810d | ||
|
|
70807e2b1b | ||
|
|
080471b2a0 | ||
|
|
583e4a2718 | ||
|
|
7d64381016 | ||
|
|
0733fd3d58 | ||
|
|
f85c9fcb78 | ||
|
|
4cf1408e0b | ||
|
|
3fa10e8cc1 | ||
|
|
f86566b263 | ||
|
|
f31c180e8f | ||
|
|
65ed95c93a | ||
|
|
fdab39bc7b | ||
|
|
5a52553a3b | ||
|
|
765a5c77eb | ||
|
|
d1a6da2205 | ||
|
|
a692060129 | ||
|
|
f94a9d463f | ||
|
|
3b6e7ddd72 | ||
|
|
5fc5453409 | ||
|
|
71941a0d47 | ||
|
|
dcaf701ef6 | ||
|
|
d8327a90b8 | ||
|
|
ddef804945 | ||
|
|
949d38e6dc | ||
|
|
53a62cf2b0 | ||
|
|
ff4bf68b29 | ||
|
|
fd0d475694 | ||
|
|
680baeffeb | ||
|
|
27a4d5757e | ||
|
|
044b38595c | ||
|
|
161ab0402b | ||
|
|
29698118c5 | ||
|
|
96263f2e4b | ||
|
|
90a6b2d9e6 | ||
|
|
4d4c17ca6a | ||
|
|
0f80921268 | ||
|
|
6716e23ae6 | ||
|
|
f61f842ad0 | ||
|
|
69deec63e5 | ||
|
|
77c4c8afc5 | ||
|
|
c8e28da129 | ||
|
|
4af3f99728 | ||
|
|
82f7f772e6 | ||
|
|
f733a1535e | ||
|
|
c8b30dff4a | ||
|
|
a6eb055c47 | ||
|
|
ee2a215f2e | ||
|
|
70bbd10b0b | ||
|
|
28af007518 | ||
|
|
336c3deb8a | ||
|
|
086a156ec3 | ||
|
|
d319eb2187 | ||
|
|
17889a1a85 | ||
|
|
5b9d0750db | ||
|
|
b33725c96e | ||
|
|
72f147e82e | ||
|
|
4160a36fb5 | ||
|
|
668607e305 | ||
|
|
a1e791acf8 | ||
|
|
13fbe98dff | ||
|
|
7b725378b9 | ||
|
|
3a1ba0c42d | ||
|
|
ae95864b6b | ||
|
|
a949745059 | ||
|
|
a29ac81de1 | ||
|
|
bb8221efdc | ||
|
|
4705a22c7d | ||
|
|
8f49600a6b | ||
|
|
330559643a | ||
|
|
cca0087ee6 | ||
|
|
2dbae5610b | ||
|
|
5300fbda58 | ||
|
|
c4d5ba954d | ||
|
|
54fef09ac3 | ||
|
|
4cc99831e4 | ||
|
|
16ae275d4c | ||
|
|
97c6d2848c | ||
|
|
8a4f246876 | ||
|
|
cf3c11bde8 | ||
|
|
ed334b536f | ||
|
|
1cf6515c06 | ||
|
|
98f709d0c1 | ||
|
|
dfdce8c6e7 | ||
|
|
f64ef1a7d7 | ||
|
|
123c780607 | ||
|
|
99a381b5aa | ||
|
|
575372222a | ||
|
|
34629ed223 | ||
|
|
9044f540bb | ||
|
|
c9c45d7f03 | ||
|
|
649d6b5f5e | ||
|
|
e0e1b2293e | ||
|
|
3ed928954a | ||
|
|
4732dd82c0 | ||
|
|
3553a9d617 | ||
|
|
7c2bf9bd17 | ||
|
|
99a77f724b | ||
|
|
515260213c | ||
|
|
3ec66c858c | ||
|
|
a192e647c5 | ||
|
|
4c25cf3f7c | ||
|
|
f1c49473a3 | ||
|
|
f0306405c1 | ||
|
|
0615d4982c | ||
|
|
87e3dfddb8 | ||
|
|
0b558f6ed4 | ||
|
|
62d65a8a9c | ||
|
|
0e3c3913d8 | ||
|
|
7ffb7943d4 | ||
|
|
15fd31de78 | ||
|
|
01dfd8b86d | ||
|
|
bb0f898c01 | ||
|
|
9e4c71558a | ||
|
|
4b3090a9ab | ||
|
|
e79335e3a5 | ||
|
|
1cb9ba3533 | ||
|
|
1915b689f7 | ||
|
|
bf4390562f | ||
|
|
24871fb4a3 | ||
|
|
07ef97c414 | ||
|
|
4b1ac7c95f | ||
|
|
092fef740a | ||
|
|
481167c8f1 | ||
|
|
689a4e660b | ||
|
|
55249e29be | ||
|
|
ab2779e2e5 | ||
|
|
b5c4c3d67d | ||
|
|
14e5e630ed | ||
|
|
c99981c5b2 | ||
|
|
c049061084 | ||
|
|
83d4dd16ad | ||
|
|
4ff63d9365 | ||
|
|
4c125c7ca6 | ||
|
|
2377972dfe | ||
|
|
31280c3b50 | ||
|
|
7fba85095b | ||
|
|
fc1bef0261 | ||
|
|
295ff72dd0 | ||
|
|
1ec8be1422 | ||
|
|
2a67fc377d | ||
|
|
3df8f90c4e | ||
|
|
6ca7973d49 | ||
|
|
841445eea7 | ||
|
|
8345a8a62b | ||
|
|
39cf2fb7a6 | ||
|
|
d710324ef8 |
No files matched your search
@@ -1,7 +1,12 @@
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
* text=auto eol=lf
|
||||
vendor/** linguist-vendored
|
||||
|
||||
# generated files
|
||||
src/lexer.[ch] linguist-generated=true
|
||||
src/parser.[ch] linguist-generated=true
|
||||
tests/man.test linguist-generated=true
|
||||
tests/manonig.test linguist-generated=true
|
||||
jq.1.prebuilt linguist-generated=true
|
||||
docs/Pipfile.lock linguist-generated=true
|
||||
@@ -7,7 +7,7 @@ about: Create a report to help us improve
|
||||
<!--
|
||||
READ THIS FIRST!
|
||||
|
||||
If you have a usage question, please ask us on either Stack Overflow (https://stackoverflow.com/questions/tagged/jq) or in the #jq channel (https://web.libera.chat/#jq) on Libera.Chat (https://libera.chat/).
|
||||
If you have a usage question, please ask us on [Stack Overflow](https://stackoverflow.com/questions/tagged/jq), in the [#jq channel](https://web.libera.chat/#jq) on [Libera.Chat](https://libera.chat/), or in our [Discord server](https://discord.gg/yg6yjNmgAC).
|
||||
|
||||
-->
|
||||
|
||||
@@ -22,8 +22,9 @@ If the input is large, either attach it as a file, or [create a gist](https://gi
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
- OS and Version: [e.g. macOS, Windows, Linux (please specify distro)]
|
||||
- jq version [e.g. 1.5]
|
||||
|
||||
- OS and Version: [e.g. macOS, Windows, Linux (please specify distro)]
|
||||
- jq version [e.g. 1.5]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,15 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pip"
|
||||
directory: "docs/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
groups:
|
||||
official-actions:
|
||||
patterns: ["actions/*"]
|
||||
docker-actions:
|
||||
patterns: ["docker/*"]
|
||||
@@ -0,0 +1,84 @@
|
||||
name: BSD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- "jq-*"
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
freebsd:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Build and test
|
||||
uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
usesh: true
|
||||
cache-after-prepare: true
|
||||
prepare: |
|
||||
pkg install -y autoconf automake libtool gmake git
|
||||
run: |
|
||||
set -e
|
||||
# The VM runs as root over a checkout owned by another uid, so git
|
||||
# rejects the repository and scripts/version -- which AC_INIT calls
|
||||
# through m4_esyscmd_s -- exits 128, leaving JQ_VERSION undefined.
|
||||
git config --global --add safe.directory "$PWD"
|
||||
git config --global --add safe.directory "$PWD/vendor/oniguruma"
|
||||
autoreconf -i
|
||||
./configure --disable-docs --with-oniguruma=builtin --enable-static
|
||||
gmake -j"$(sysctl -n hw.ncpu)"
|
||||
gmake check VERBOSE=yes
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-freebsd
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
|
||||
netbsd:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Build and test
|
||||
uses: vmactions/netbsd-vm@v1
|
||||
with:
|
||||
usesh: true
|
||||
cache-after-prepare: true
|
||||
prepare: |
|
||||
# -uu also updates installed dependencies that are too old, such
|
||||
# as the image's pcre2 when git needs a newer build.
|
||||
pkg_add -uu autoconf automake libtool gmake git
|
||||
run: |
|
||||
set -e
|
||||
# The VM runs as root over a checkout owned by another uid, so git
|
||||
# rejects the repository and scripts/version -- which AC_INIT calls
|
||||
# through m4_esyscmd_s -- exits 128, leaving JQ_VERSION undefined.
|
||||
git config --global --add safe.directory "$PWD"
|
||||
git config --global --add safe.directory "$PWD/vendor/oniguruma"
|
||||
autoreconf -i
|
||||
./configure --disable-docs --with-oniguruma=builtin --enable-static
|
||||
gmake -j"$(sysctl -n hw.ncpu)"
|
||||
gmake check VERBOSE=yes
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-netbsd
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
+200
-129
@@ -13,110 +13,109 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
[
|
||||
amd64,
|
||||
arm64,
|
||||
armel,
|
||||
armhf,
|
||||
i386,
|
||||
mips,
|
||||
mips64,
|
||||
mips64el,
|
||||
mips64r6,
|
||||
mips64r6el,
|
||||
mipsel,
|
||||
mipsr6,
|
||||
mipsr6el,
|
||||
powerpc,
|
||||
ppc64el,
|
||||
s390x,
|
||||
riscv64,
|
||||
]
|
||||
- amd64
|
||||
- arm64
|
||||
- armel
|
||||
- armhf
|
||||
- i386
|
||||
- mips
|
||||
- mips64
|
||||
- mips64el
|
||||
- mips64r6
|
||||
- mips64r6el
|
||||
- mipsel
|
||||
- mipsr6
|
||||
- mipsr6el
|
||||
- powerpc
|
||||
- ppc64el
|
||||
- riscv64
|
||||
- s390x
|
||||
include:
|
||||
- arch: amd64
|
||||
CC: "x86_64-linux-gnu"
|
||||
CC: x86_64-linux-gnu
|
||||
- arch: arm64
|
||||
CC: "aarch64-linux-gnu"
|
||||
CC: aarch64-linux-gnu
|
||||
- arch: armel
|
||||
CC: "arm-linux-gnueabi"
|
||||
CC: arm-linux-gnueabi
|
||||
# Ubuntu 26.04 has no crossbuild-essential-armel
|
||||
packages: gcc-arm-linux-gnueabi libc6-dev-armel-cross
|
||||
- arch: armhf
|
||||
CC: "arm-linux-gnueabihf"
|
||||
CC: arm-linux-gnueabihf
|
||||
- arch: i386
|
||||
CC: "i686-linux-gnu"
|
||||
CC: i686-linux-gnu
|
||||
- arch: mips
|
||||
CC: "mips-linux-gnu"
|
||||
CC: mips-linux-gnu
|
||||
- arch: mips64
|
||||
CC: "mips64-linux-gnuabi64"
|
||||
CC: mips64-linux-gnuabi64
|
||||
- arch: mips64el
|
||||
CC: "mips64el-linux-gnuabi64"
|
||||
CC: mips64el-linux-gnuabi64
|
||||
- arch: mips64r6
|
||||
CC: "mipsisa64r6-linux-gnuabi64"
|
||||
CC: mipsisa64r6-linux-gnuabi64
|
||||
- arch: mips64r6el
|
||||
CC: "mipsisa64r6el-linux-gnuabi64"
|
||||
CC: mipsisa64r6el-linux-gnuabi64
|
||||
- arch: mipsel
|
||||
CC: "mipsel-linux-gnu"
|
||||
CC: mipsel-linux-gnu
|
||||
- arch: mipsr6
|
||||
CC: "mipsisa32r6-linux-gnu"
|
||||
CC: mipsisa32r6-linux-gnu
|
||||
- arch: mipsr6el
|
||||
CC: "mipsisa32r6el-linux-gnu"
|
||||
CC: mipsisa32r6el-linux-gnu
|
||||
- arch: powerpc
|
||||
CC: "powerpc-linux-gnu"
|
||||
CC: powerpc-linux-gnu
|
||||
- arch: ppc64el
|
||||
CC: "powerpc64le-linux-gnu"
|
||||
- arch: s390x
|
||||
CC: "s390x-linux-gnu"
|
||||
CC: powerpc64le-linux-gnu
|
||||
- arch: riscv64
|
||||
CC: "riscv64-linux-gnu"
|
||||
runs-on: ubuntu-22.04
|
||||
CC: riscv64-linux-gnu
|
||||
- arch: s390x
|
||||
CC: s390x-linux-gnu
|
||||
# Ubuntu 26.04 no longer ships the MIPS cross toolchains.
|
||||
runs-on: ${{ startsWith(matrix.arch, 'mips') && 'ubuntu-24.04' || 'ubuntu-26.04' }}
|
||||
env:
|
||||
AR: ${{ matrix.CC }}-ar
|
||||
CHOST: ${{ matrix.cc }}
|
||||
CC: ${{ matrix.cc }}-gcc
|
||||
CPP: ${{ matrix.cc }}-cpp
|
||||
CXX: ${{ matrix.cc }}-g++
|
||||
CHOST: ${{ matrix.CC }}
|
||||
CC: ${{ matrix.CC }}-gcc
|
||||
CPP: ${{ matrix.CC }}-cpp
|
||||
LDFLAGS: -s
|
||||
SUFFIX: linux-${{ matrix.arch }}
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade
|
||||
sudo apt-get install -y automake autoconf libtool crossbuild-essential-${{ matrix.arch }}
|
||||
sudo apt-get install -y automake autoconf libtool \
|
||||
${{ matrix.packages || format('crossbuild-essential-{0}', matrix.arch) }}
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--host=${{ matrix.CC }} \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-valgrind \
|
||||
--with-oniguruma=builtin \
|
||||
--enable-static \
|
||||
--enable-all-static
|
||||
make -j$(nproc)
|
||||
--enable-all-static \
|
||||
CFLAGS="-O2 -pthread -fstack-protector-all"
|
||||
make -j"$(nproc)"
|
||||
file ./jq
|
||||
cp ./jq jq-${{ env.SUFFIX }}
|
||||
- name: Test
|
||||
# Only run tests for amd64 matching the CI machine arch
|
||||
if: ${{ matrix.arch == 'amd64' }}
|
||||
run: |
|
||||
make check
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-${{ env.SUFFIX }}
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: jq-${{ env.SUFFIX }}
|
||||
path: jq-${{ env.SUFFIX }}
|
||||
@@ -128,22 +127,20 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
[
|
||||
amd64,
|
||||
arm64,
|
||||
]
|
||||
- amd64
|
||||
- arm64
|
||||
include:
|
||||
- arch: amd64
|
||||
target: "x86_64-apple-darwin"
|
||||
target: x86_64-apple-macos14
|
||||
- arch: arm64
|
||||
target: "arm64-apple-darwin"
|
||||
runs-on: macos-13
|
||||
target: arm64-apple-macos14
|
||||
runs-on: macos-15
|
||||
env:
|
||||
LDFLAGS: -s
|
||||
LDFLAGS: -dead_strip
|
||||
SUFFIX: macos-${{ matrix.arch }}
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
@@ -151,40 +148,39 @@ jobs:
|
||||
# brew update sometimes fails with "Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask failed!"
|
||||
brew update || brew update-reset
|
||||
brew install autoconf automake libtool
|
||||
- name: "Set CC"
|
||||
- name: Set CC
|
||||
run: |
|
||||
echo "CC=clang -target ${{ matrix.target }}$(uname -r)" >> $GITHUB_ENV
|
||||
echo "CC=clang -target ${{ matrix.target }}" >> "$GITHUB_ENV"
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--host=${{ matrix.target }}$(uname -r) \
|
||||
--host="${{ matrix.target }}" \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-valgrind \
|
||||
--with-oniguruma=builtin \
|
||||
--disable-shared \
|
||||
--enable-static \
|
||||
--enable-all-static
|
||||
make -j$(nproc)
|
||||
--enable-all-static \
|
||||
CFLAGS="-O2 -pthread -fstack-protector-all"
|
||||
make -j"$(sysctl -n hw.logicalcpu)"
|
||||
strip ./jq
|
||||
file ./jq
|
||||
cp ./jq jq-${{ env.SUFFIX }}
|
||||
- name: Test
|
||||
# Only run tests for amd64 matching the CI machine arch
|
||||
if: ${{ matrix.arch == 'amd64' }}
|
||||
run: |
|
||||
make check
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-${{ env.SUFFIX }}
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: jq-${{ env.SUFFIX }}
|
||||
path: jq-${{ env.SUFFIX }}
|
||||
@@ -196,28 +192,32 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch:
|
||||
[
|
||||
amd64,
|
||||
i386,
|
||||
]
|
||||
- amd64
|
||||
- i386
|
||||
- arm64
|
||||
include:
|
||||
- arch: amd64
|
||||
CC: "x86_64-pc-msys"
|
||||
toolchain: "gcc"
|
||||
msystem: msys
|
||||
msystem: UCRT64
|
||||
os: windows-2022
|
||||
- arch: i386
|
||||
CC: "i686-w64-mingw32"
|
||||
toolchain: "mingw-w64-i686-toolchain"
|
||||
msystem: mingw32
|
||||
runs-on: windows-2022
|
||||
msystem: MINGW32
|
||||
os: windows-2022
|
||||
- arch: arm64
|
||||
msystem: CLANGARM64
|
||||
os: windows-11-arm
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
CHOST: ${{ matrix.CC }}
|
||||
CC: ${{ matrix.CC }}-gcc
|
||||
LDFLAGS: -s
|
||||
SUFFIX: windows-${{ matrix.arch }}
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
steps:
|
||||
- name: Prepare git config
|
||||
run: git config --system core.autocrlf false
|
||||
shell: bash
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- uses: msys2/setup-msys2@v2
|
||||
@@ -230,41 +230,36 @@ jobs:
|
||||
autoconf
|
||||
automake
|
||||
libtool
|
||||
${{ matrix.toolchain }}
|
||||
pacboy: >-
|
||||
toolchain:p
|
||||
- name: Build
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--host=${{ matrix.CC }} \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-valgrind \
|
||||
--with-oniguruma=builtin \
|
||||
--disable-shared \
|
||||
--enable-static \
|
||||
--enable-all-static
|
||||
--enable-all-static \
|
||||
CFLAGS="-O2 -pthread -fstack-protector-all -Wl,--stack,8388608"
|
||||
make -j$(nproc)
|
||||
file ./jq.exe
|
||||
cp ./jq.exe jq-${{ env.SUFFIX }}.exe
|
||||
- name: Test
|
||||
# Only run tests for amd64 matching the CI machine arch
|
||||
if: ${{ matrix.arch == 'amd64' }}
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
make check
|
||||
git diff --exit-code --ignore-submodules
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-${{ env.SUFFIX }}
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: jq-${{ env.SUFFIX }}
|
||||
path: jq-${{ env.SUFFIX }}.exe
|
||||
@@ -273,10 +268,9 @@ jobs:
|
||||
|
||||
dist:
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/jq-')
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
@@ -288,13 +282,12 @@ jobs:
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-valgrind \
|
||||
--with-oniguruma=builtin
|
||||
make distcheck
|
||||
make dist dist-zip
|
||||
git diff --exit-code
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: jq-dist
|
||||
if-no-files-found: error
|
||||
@@ -306,59 +299,137 @@ jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
attestations: write
|
||||
artifact-metadata: write
|
||||
packages: write
|
||||
if: startsWith(github.ref, 'refs/tags/jq-')
|
||||
needs: linux
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v7
|
||||
- name: Download executables
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
submodules: true
|
||||
pattern: jq-linux-*
|
||||
merge-multiple: true
|
||||
- name: Move executables
|
||||
run: |
|
||||
mkdir -p linux/{386,amd64,arm64,arm/v7,mips64le,ppc64le,riscv64,s390x}
|
||||
chmod +x jq-linux-*
|
||||
mv jq-linux-i386 linux/386/jq
|
||||
mv jq-linux-amd64 linux/amd64/jq
|
||||
mv jq-linux-arm64 linux/arm64/jq
|
||||
mv jq-linux-armhf linux/arm/v7/jq
|
||||
mv jq-linux-mips64el linux/mips64le/jq
|
||||
mv jq-linux-ppc64el linux/ppc64le/jq
|
||||
mv jq-linux-riscv64 linux/riscv64/jq
|
||||
mv jq-linux-s390x linux/s390x/jq
|
||||
- name: Create Dockerfile
|
||||
run: |
|
||||
cat <<'EOF' >Dockerfile
|
||||
FROM scratch
|
||||
ARG TARGETPLATFORM
|
||||
COPY AUTHORS COPYING $TARGETPLATFORM/jq /
|
||||
RUN ["/jq", "--version"]
|
||||
ENTRYPOINT ["/jq"]
|
||||
EOF
|
||||
- name: Docker metadata
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@v6
|
||||
id: metadata
|
||||
with:
|
||||
images: ghcr.io/${{ github.repository }}
|
||||
tags: type=match,pattern=jq-(.*),group=1,value=${{ github.ref_name }}
|
||||
tags: >
|
||||
${{ startsWith(github.ref, 'refs/tags/jq-')
|
||||
&& format('type=match,pattern=jq-(.*),group=1,value={0}', github.ref_name)
|
||||
|| 'type=sha,format=long' }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v4
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v4
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@v4
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Build and release Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v7
|
||||
id: build-push
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
push: ${{ startsWith(github.ref, 'refs/tags/jq-') }}
|
||||
provenance: false
|
||||
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/s390x
|
||||
platforms: linux/386,linux/amd64,linux/arm64,linux/arm/v7,linux/mips64le,linux/ppc64le,linux/riscv64,linux/s390x
|
||||
tags: ${{ steps.metadata.outputs.tags }}
|
||||
labels: ${{ steps.metadata.outputs.labels }}
|
||||
- name: Generate signed attestations
|
||||
if: startsWith(github.ref, 'refs/tags/jq-')
|
||||
uses: actions/attest@v4
|
||||
with:
|
||||
subject-name: ghcr.io/${{ github.repository }}
|
||||
subject-digest: ${{ steps.build-push.outputs.digest }}
|
||||
push-to-registry: true
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
artifact-metadata: write
|
||||
pull-requests: write
|
||||
environment: release
|
||||
needs: [linux, macos, windows, dist, docker]
|
||||
if: startsWith(github.ref, 'refs/tags/jq-')
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Merge built artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/checkout@v7
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: jq-*
|
||||
merge-multiple: true
|
||||
- name: Prepare release artifacts
|
||||
run: |
|
||||
cp jq-linux-amd64 jq-linux64
|
||||
cp jq-macos-amd64 jq-osx-amd64
|
||||
cp jq-windows-amd64.exe jq-win64.exe
|
||||
- name: Generate signed attestations
|
||||
id: attest
|
||||
uses: actions/attest@v4
|
||||
with:
|
||||
subject-path: jq-*
|
||||
- name: Upload release
|
||||
env:
|
||||
TAG_NAME: ${{ github.ref_name }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
mkdir -p "release"
|
||||
for files in jq-*; do
|
||||
cp -rf "${files}/"* "release/"
|
||||
done
|
||||
|
||||
mv "${{ steps.attest.outputs.bundle-path }}" jq-attestation.json
|
||||
sha256sum jq-* > sha256sum.txt
|
||||
gh release create "$TAG_NAME" --draft --title "jq ${TAG_NAME#jq-}" --generate-notes
|
||||
gh release upload "$TAG_NAME" --clobber release/jq-*
|
||||
gh release upload "$TAG_NAME" --clobber jq-* sha256sum.txt
|
||||
- name: Import GPG key
|
||||
uses: crazy-max/ghaction-import-gpg@v7
|
||||
with:
|
||||
gpg_private_key: ${{ secrets.JQ_RELEASE_GPG_PRIVATE_KEY }}
|
||||
passphrase: ${{ secrets.JQ_RELEASE_GPG_PASSPHRASE }}
|
||||
- name: Update signatures
|
||||
env:
|
||||
TAG_NAME: ${{ github.ref_name }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
sig_dir="sig/v${TAG_NAME#jq-}"
|
||||
mkdir -p "$sig_dir"
|
||||
mv sha256sum.txt "$sig_dir"
|
||||
for file in jq-*; do
|
||||
gpg --detach-sign --armor --batch --output "${sig_dir}/${file#*/}.asc" "$file"
|
||||
done
|
||||
git add sig
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
title="Update signatures of ${TAG_NAME#jq-}"
|
||||
git commit -m "$title"
|
||||
branch="update-signatures-${TAG_NAME#jq-}"
|
||||
git push origin "HEAD:refs/heads/$branch"
|
||||
gh pr create --title "$title" --body "" --head "$branch"
|
||||
@@ -0,0 +1,42 @@
|
||||
name: decnum
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
disabled:
|
||||
runs-on: ubuntu-26.04
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y automake autoconf libtool
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-decnum
|
||||
make -j"$(nproc)"
|
||||
file ./jq
|
||||
- name: Test
|
||||
run: |
|
||||
diff <(echo 100000000000000000000 | ./jq) <(echo 1e+20)
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-decnum-disabled
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
@@ -0,0 +1,49 @@
|
||||
name: Building man page, man.test, manonig.test
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- '.github/workflows/manpage.yml'
|
||||
- 'docs/**'
|
||||
- 'tests/man.test'
|
||||
- 'tests/manonig.test'
|
||||
- 'jq.1.prebuilt'
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/manpage.yml'
|
||||
- 'docs/**'
|
||||
- 'tests/man.test'
|
||||
- 'tests/manonig.test'
|
||||
- 'jq.1.prebuilt'
|
||||
|
||||
jobs:
|
||||
manpages:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v7
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.11'
|
||||
cache: pipenv
|
||||
- name: Install pipenv
|
||||
run: pip install pipenv
|
||||
- name: Install dependencies
|
||||
run: pipenv sync
|
||||
working-directory: docs
|
||||
- name: Validate manual schema
|
||||
run: pipenv run python3 validate_manual_schema.py content/manual/**/*.yml
|
||||
working-directory: docs
|
||||
- name: Configure
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure --enable-docs
|
||||
- name: Build man page, man.test, manonig.test
|
||||
run: |
|
||||
rm -f jq.1.prebuilt tests/man.test tests/manonig.test
|
||||
make jq.1.prebuilt tests/man.test tests/manonig.test
|
||||
- name: Make sure that jq.1.prebuilt, man.test, manonig.test are up to date
|
||||
run: |
|
||||
git diff --exit-code jq.1.prebuilt tests/man.test tests/manonig.test
|
||||
@@ -0,0 +1,75 @@
|
||||
name: oniguruma
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
# Since builtin oniguruma is tested in the CI workflow,
|
||||
# we test other options for --with-oniguruma here.
|
||||
jobs:
|
||||
installed:
|
||||
runs-on: ubuntu-26.04
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y automake autoconf libtool valgrind libonig-dev
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--disable-docs \
|
||||
--enable-valgrind \
|
||||
--with-oniguruma=yes
|
||||
make -j"$(nproc)"
|
||||
file ./jq
|
||||
- name: Test
|
||||
run: |
|
||||
./jq -n '"" | test("")'
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-oniguruma-installed
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
|
||||
disabled:
|
||||
runs-on: ubuntu-26.04
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y automake autoconf libtool valgrind
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--disable-docs \
|
||||
--enable-valgrind \
|
||||
--with-oniguruma=no
|
||||
make -j"$(nproc)"
|
||||
file ./jq
|
||||
- name: Test
|
||||
run: |
|
||||
! ./jq -n '"" | test("")'
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-oniguruma-disabled
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
@@ -1,77 +1,47 @@
|
||||
name: Linux Clang scan-build Static Analyzer Build
|
||||
name: Clang scan-build Static Analyzer Build
|
||||
|
||||
on:
|
||||
# Don't do this for PRs. It eats up minutes.
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'scan-build'
|
||||
paths:
|
||||
- '.github/workflows/scanbuild.yml'
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
unix:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
name: [linux-clang]
|
||||
include:
|
||||
- name: linux-clang
|
||||
os: ubuntu-latest
|
||||
compiler: clang
|
||||
cflags: ''
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v1
|
||||
- name: Open Submodule(s)
|
||||
run: |
|
||||
git submodule update --init --recursive
|
||||
- name: Install packages
|
||||
if: startsWith(matrix.os, 'ubuntu')
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y automake autoconf bison flex gdb python3 valgrind clang-tools
|
||||
- name: Prep
|
||||
run: |
|
||||
#pyenv global 3.6.7
|
||||
#pip3 install pipenv
|
||||
#(cd docs && pipenv sync)
|
||||
#if [ -n "$COVERAGE" ]; then pip install --user cpp-coveralls; fi
|
||||
echo SHELL=$SHELL
|
||||
echo PATH=$PATH
|
||||
which bison
|
||||
bison --version
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
CC: ${{ matrix.compiler }}
|
||||
MAKEVARS: ${{ matrix.makevars }}
|
||||
run: |
|
||||
autoreconf -i
|
||||
rm src/lexer.c src/lexer.h
|
||||
rm src/parser.c src/parser.h
|
||||
./configure --with-oniguruma=builtin YACC="$(which bison) -y" $COVERAGE
|
||||
scan-build --keep-going make -j4
|
||||
- name: Test
|
||||
env:
|
||||
CC: ${{ matrix.compiler }}
|
||||
MAKEVARS: ${{ matrix.makevars }}
|
||||
run: |
|
||||
ulimit -c unlimited
|
||||
scan-build --keep-going make -j4 check
|
||||
- name: Core dump stacks
|
||||
run: |
|
||||
echo "thread apply all bt" > /tmp/x
|
||||
find . -name core -print | while read core; do gdb -batch -x x `file "$core"|sed -e "s/^[^']*'//" -e "s/[ '].*$//"` "$core"; done
|
||||
if [ "$(find . -name core -print | wc -l)" -gt 0 ]; then false; fi
|
||||
- name: Test logs
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
cat test-suite.log
|
||||
cat tests/*.log
|
||||
- name: Upload Logs
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Scan-Build Reports
|
||||
path: '/tmp/scan-build*/'
|
||||
scan-build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y automake autoconf gdb valgrind clang clang-tools
|
||||
echo "CC=clang" >> "$GITHUB_ENV"
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure --enable-valgrind CFLAGS="-g -O0"
|
||||
scan-build --keep-going --exclude vendor/ make -j"$(nproc)"
|
||||
- name: Test
|
||||
run: |
|
||||
ulimit -c unlimited
|
||||
scan-build --keep-going --exclude vendor/ make -j"$(nproc)" check
|
||||
- name: Core dump stacks
|
||||
run: |
|
||||
if [[ -f core ]]; then
|
||||
gdb -batch -ex "thread apply all bt" \
|
||||
"$(file core | sed "s/^[^']*'//; s/[ '].*$//")" core
|
||||
exit 1
|
||||
fi
|
||||
- name: Test logs
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
cat test-suite.log tests/*.log
|
||||
- name: Upload Logs
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Scan-Build Reports
|
||||
path: /tmp/scan-build*
|
||||
if-no-files-found: ignore
|
||||
retention-days: 7
|
||||
@@ -0,0 +1,41 @@
|
||||
name: valgrind
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
runs-on: ubuntu-26.04
|
||||
steps:
|
||||
- name: Clone repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install packages
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y automake autoconf libtool valgrind
|
||||
- name: Build
|
||||
run: |
|
||||
autoreconf -i
|
||||
./configure \
|
||||
--disable-docs \
|
||||
--enable-valgrind \
|
||||
--with-oniguruma=builtin
|
||||
make -j"$(nproc)"
|
||||
file ./jq
|
||||
- name: Test
|
||||
run: |
|
||||
make check VERBOSE=yes
|
||||
git diff --exit-code
|
||||
- name: Upload Test Logs
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: test-logs-valgrind-linux
|
||||
retention-days: 7
|
||||
path: |
|
||||
test-suite.log
|
||||
tests/*.log
|
||||
@@ -6,35 +6,42 @@ on:
|
||||
paths:
|
||||
- 'docs/**'
|
||||
concurrency: website
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
website:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: docs
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
uses: actions/checkout@v7
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: '3.10'
|
||||
python-version: '3.11'
|
||||
cache: pipenv
|
||||
- name: Install pipenv
|
||||
run: pip install pipenv
|
||||
- name: Install dependencies
|
||||
run: pipenv sync
|
||||
working-directory: docs
|
||||
- name: Update website
|
||||
run: scripts/update-website
|
||||
- name: Commit changes
|
||||
run: |
|
||||
if ! git diff --quiet; then
|
||||
git add --all
|
||||
git config user.name 'github-actions[bot]'
|
||||
git config user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
git commit -m 'Update website'
|
||||
git push origin gh-pages
|
||||
fi
|
||||
- name: Build website
|
||||
run: pipenv run python3 build_website.py
|
||||
- name: Upload pages artifact
|
||||
uses: actions/upload-pages-artifact@v5
|
||||
with:
|
||||
path: docs/output/
|
||||
|
||||
deploy:
|
||||
needs: build
|
||||
permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: actions/deploy-pages@v5
|
||||
id: deployment
|
||||
@@ -18,6 +18,7 @@ jq.1
|
||||
|
||||
# Generated source
|
||||
src/builtin.inc
|
||||
src/config_opts.inc
|
||||
*.pc
|
||||
|
||||
# Autotools junk
|
||||
@@ -30,6 +31,8 @@ stamp-h1
|
||||
config.log
|
||||
config.status
|
||||
autom4te.cache
|
||||
confdefs.h
|
||||
conftest*
|
||||
INSTALL
|
||||
Makefile
|
||||
jq-*.tar.gz
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
[submodule "modules/oniguruma"]
|
||||
path = modules/oniguruma
|
||||
[submodule "vendor/oniguruma"]
|
||||
path = vendor/oniguruma
|
||||
url = https://github.com/kkos/oniguruma.git
|
||||
@@ -2,73 +2,252 @@ Created By:
|
||||
Stephen Dolan <mu@netsoc.tcd.ie>
|
||||
|
||||
Maintained by:
|
||||
David Tolnay <dtolnay@gmail.com>
|
||||
Emanuele Torre <torreemanuele6@gmail.com>
|
||||
Leonid S. Usov <leonid@practi.net>
|
||||
Mattias Wadman <mattias.wadman@gmail.com>
|
||||
Muh Muhten <muh.muhten@gmail.com>
|
||||
Nicolas Williams <nico@cryptonector.com>
|
||||
Owen Ou <o@owenou.com>
|
||||
William Langford <wlangfor@gmail.com>
|
||||
itchyny <itchyny@cybozu.co.jp>
|
||||
pkoppstein <pkoppstein@gmail.com>
|
||||
|
||||
Contributions by:
|
||||
13ren <melbourne.research@gmail.com>
|
||||
A4-Tacks <wdsjxhno1001@163.com>
|
||||
AJ Jordan <alex@strugee.net>
|
||||
Aaron Peschel <apeschel@zendesk.com>
|
||||
Adam Lindberg <hello@alind.io>
|
||||
Alanscut <wp_scut@163.com>
|
||||
Aleksey Tsalolikhin <atsalolikhin@spokeo.com>
|
||||
Alex Chamberlain <alex@alexchamberlain.co.uk>
|
||||
Andrew O'Brien <obrien.andrew@gmail.com> - docs build
|
||||
Andrew Rodland <andrew@cleverdomain.org> - bug fixes
|
||||
Ankur <ankz.kothari@gmail.com> - bug fixes
|
||||
Anthony Shortland <anthony.shortland@me.com> - rpmbuild target
|
||||
Assaf Gordon <assafgordon@gmail.com> - error handling
|
||||
Brendan Macmillan <melbourne.research@gmail.com> - bug fixes, load library from ~/.jq
|
||||
cdnbacon <mike@busbud.com>
|
||||
Alex Jurkiewicz <alex@jurkiewi.cz>
|
||||
Alex Ozdemir <aozdemir@hmc.edu>
|
||||
Alex Wilson <gpg@probablyfine.co.uk>
|
||||
Alexandre Jasmin <ajasmin@transtex-llc.com>
|
||||
Allan Clark <allanc@chickenandporn.com>
|
||||
Alyssa Ross <hi@alyssa.is>
|
||||
Andreas Heiduk <asheiduk@users.noreply.github.com>
|
||||
Andrew O'Brien <obrien.andrew@gmail.com>
|
||||
Andrew Rodland <andrew@cleverdomain.org>
|
||||
Andrew Speed <andrew.cspeed@gmail.com>
|
||||
Andy Lester <andy@petdance.com>
|
||||
Ankur <ankz.kothari@gmail.com>
|
||||
Anthony Shortland <anthony@dtosolutions.com>
|
||||
Anthony Sottile <asottile@umich.edu>
|
||||
Assaf Gordon <assafgordon@gmail.com>
|
||||
Attila Fülöp <attila@fueloep.org>
|
||||
Benjamin Wuethrich <benjamin@koho.ca>
|
||||
Benoit de Chezelles <bew@users.noreply.github.com>
|
||||
Bernard Niset <bernard.niset@gmail.com>
|
||||
Bhargava Mummadireddy <kishoreinvits@gmail.com>
|
||||
Binbin Qian <qianbinbin@hotmail.com>
|
||||
Bradley Skaggs <bskaggs@acm.org>
|
||||
Brahm Lower <bplower@gmail.com>
|
||||
Brendan Macmillan <melbourne.research@gmail.com>
|
||||
Cameron Sparr <cameronsparr@gmail.com>
|
||||
Chance Zibolski <czibolsk@redhat.com>
|
||||
Charles Merriam <charles.merriam@gmail.com>
|
||||
Chris LaRose <cjlarose@gmail.com>
|
||||
Chris Moore <dooglus@gmail.com>
|
||||
Christoph Anton Mitterer <calestyo@scientia.org>
|
||||
Christopher Degawa <ccom@randomderp.com>
|
||||
Ciaran McNamara <1372986+ciaranmcnamara@users.noreply.github.com>
|
||||
Clément MATHIEU <clement@unportant.info>
|
||||
Colin Leroy-Mira <colin@colino.net>
|
||||
Colin von Heuring <colin@janrain.com>
|
||||
Dag-Erling Smørgrav <des@des.no>
|
||||
Damian Gryski <damian@gryski.com>
|
||||
David Fetter <david@fetter.org> - added --rawfile
|
||||
Dan Church <h3xx@users.noreply.github.com>
|
||||
Daniel Lange <DLange@git.local>
|
||||
David Biesack <David.Biesack@apiture.com>
|
||||
David Fetter <david@fetter.org>
|
||||
David Haguenauer <ml@kurokatta.org>
|
||||
David R. MacIver <david@drmaciver.com> - bug fixes
|
||||
David Tolnay <dtolnay@gmail.com> - destructuring, build improvements
|
||||
Doug Luce <doug@github.con.com> - build
|
||||
David Korczynski <david@adalogics.com>
|
||||
David R. MacIver <david@drmaciver.com>
|
||||
DavidKorczynski <david@adalogics.com>
|
||||
Dawid Ferenczy Rogožan <ferenczy@users.noreply.github.com>
|
||||
Dennis Ameling <dennis@dennisameling.com>
|
||||
Derrick Pallas <derrick@pallas.us>
|
||||
Doug Luce <doug@github.con.com>
|
||||
Eiichi Sato <sato.eiichi@gmail.com>
|
||||
Eric Bréchemier <eric@egull.co> - bug fix
|
||||
Filippo Giunchedi <fgiunchedi@gmail.com> - bug fixes
|
||||
Filippo Valsorda <filippo.valsorda@gmail.com> - recursive object merge (`*`)
|
||||
Eli Schwartz <eschwartz@archlinux.org>
|
||||
Eloy Coto <eloy.coto@gmail.com>
|
||||
Eric Bréchemier <eric@egull.co>
|
||||
Erik Brinkman <erik.brinkman@gmail.com>
|
||||
Eugen <EugenGez@gmail.com>
|
||||
Evan Zacks <zackse@gmail.com>
|
||||
Fabian Dellwing <fabian.dellwing@mbconnectline.de>
|
||||
Fabian Fleischer <50590395+fab1ano@users.noreply.github.com>
|
||||
Felix Wolfsteller <felix.wolfsteller@gmail.com>
|
||||
Filippo Giunchedi <fgiunchedi@gmail.com>
|
||||
Filippo Valsorda <filippo.valsorda@gmail.com>
|
||||
Florian Weimer <fweimer@redhat.com>
|
||||
Frederic Cambus <fcambus@users.sourceforge.net>
|
||||
Gabriel Marin <gbrlmarn@gmail.com>
|
||||
Gaelan Steele <gbs@canishe.com>
|
||||
George Hopkins <george-hopkins@null.net>
|
||||
Gert Van Gool <gertvangool@gmail.com>
|
||||
Gijs Kunze <gwkunze@gmail.com>
|
||||
Gustav <gustav@invoke.se>
|
||||
HE, Tao <sighingnow@gmail.com>
|
||||
Han Jiang <jhcarl0814@gmail.com>
|
||||
Hanfei Shen <qqshfox@gmail.com>
|
||||
i <isomorphisms@sdf.org>
|
||||
Hanson Char <hanson.char@gmail.com>
|
||||
Haochen Xie <haochenx@acm.org>
|
||||
Helmut K. C. Tessarek <tessarek@evermeet.cx>
|
||||
Henré Botha <henrebotha@gmail.com>
|
||||
Ian Miell <ian.miell@gmail.com>
|
||||
Jack Pearkes <jackpearkes@gmail.com> - update tutorial
|
||||
James Andariese <james.andariese@locationlabs.com> - Dockerfile
|
||||
jkleint <jkleint@gmail.com>
|
||||
Joe Littlejohn <joe.littlejohn@nokia.com> - bug fixes
|
||||
Ikko Ashimine <eltociear@gmail.com>
|
||||
Ish Nagy <50555716+ishnagy@users.noreply.github.com>
|
||||
J Phani Mahesh <github@phanimahesh.me>
|
||||
J. B. Rainsberger <me@jbrains.ca>
|
||||
Jack Pearkes <jackpearkes@gmail.com>
|
||||
Jakub Jirutka <jakub@jirutka.cz>
|
||||
Jakub Wilk <jwilk@jwilk.net>
|
||||
James Andariese <james.andariese@locationlabs.com>
|
||||
James Pearson Hughes <xiong.chiamiov@gmail.com>
|
||||
Jan Schulz <jasc@gmx.net>
|
||||
Jan-Piet Mens <jp@mens.de>
|
||||
Janne Cederberg <janne.cederberg@gmail.com>
|
||||
Jason Hood <jadoxa@yahoo.com.au>
|
||||
Jay Satiro <raysatiro@yahoo.com>
|
||||
Jesper Rønn-Jensen <jesperrr@gmail.com>
|
||||
Jingwen Owen Ou <jingweno@gmail.com>
|
||||
Joe Littlejohn <joe.littlejohn@nokia.com>
|
||||
Joel Nothman <joel.nothman@gmail.com>
|
||||
Joel Purra <code+github@joelpurra.com>
|
||||
Juan Guerrero <juan.guerrero.lozano@gmail.com> - bug fixes
|
||||
Kenny Shen <kenny.shen@zalora.com> - doc fixes
|
||||
Kim De Mey <kim.demey@gmail.com> - build
|
||||
Jonathan Chan Kwan Yin <sofe2038@gmail.com>
|
||||
Jonathan Word <argoday@argoday.com>
|
||||
Josh Soref <2119212+jsoref@users.noreply.github.com>
|
||||
José Joaquín Atria <jjatria@gmail.com>
|
||||
Juan Guerrero <juan.guerrero.lozano@gmail.com>
|
||||
Kamontat Chantrachirathumrong <14089557+kamontat@users.noreply.github.com>
|
||||
Kartik Shah <krtk.6160@gmail.com>
|
||||
Kenny Shen <kenny.shen@zalora.com>
|
||||
Kim De Mey <kim.demey@gmail.com>
|
||||
Kim Toms <kim.toms@bplglobal.net>
|
||||
Kirk McKelvey <kirkoman@gmail.com>
|
||||
Klemens Nanni <kn@openbsd.org>
|
||||
LCD 47 <lcd047@gmail.com>
|
||||
Lee Thompson <stagr.lee@gmail.com> - autoconf stuff, rpm
|
||||
Larry Aasen <larryaasen@gmail.com>
|
||||
Lee Thompson <stagr.lee@gmail.com>
|
||||
Loamhoof <soeren.medard@gmail.com>
|
||||
Lucas Trzesniewski <lucas.trzesniewski@gmail.com>
|
||||
Lukas Lansky <lukas.lansky@suse.com>
|
||||
MCApollo <34170230+MCApollo@users.noreply.github.com>
|
||||
Marc Abramowitz <marc@marc-abramowitz.com>
|
||||
Marc Bruggmann <marcbr@spotify.com>
|
||||
Markus Lanthaler <mark_lanthaler@gmx.net> - doc fixes
|
||||
Maxime Biais <maxime.biais@gmail.com> - build
|
||||
Michael Daines <michael@mdaines.com> - add sqrt; doc fixes
|
||||
Marcin Kłopotek <marcin.klopotek@gmail.com>
|
||||
Marcin Serwin <marcin@serwin.dev>
|
||||
Mark Feit <mfeit@internet2.edu>
|
||||
Mark McKinstry <mmckinst@umich.edu>
|
||||
Markus Lanthaler <mark_lanthaler@gmx.net>
|
||||
Matt Clegg <m@cle.gg>
|
||||
Matt Meyers <matt@mattmeyers.dev>
|
||||
Matti Åstrand <mattiastr@gmail.com>
|
||||
Mattias Hansson <hansson.mattias@gmail.com>
|
||||
Maxime Biais <maxime.biais@gmail.com>
|
||||
Maximilian Roos <5635139+max-sixty@users.noreply.github.com>
|
||||
McSinyx <cnx@loang.net>
|
||||
Michael Daines <michael@mdaines.com>
|
||||
Michael Färber <01mf02@gmail.com>
|
||||
Mike Daines <mdaines@users.noreply.github.com>
|
||||
Mike Fletcher <john.m.fletcher@bankofamerica.com>
|
||||
Mike McCabe <mccabe@archive.org> - math (libm) functions
|
||||
Nicolas Pouillard <nicolas.pouillard@gmail.com> - add tests
|
||||
Nicolas Williams <nico@cryptonector.com> - library-fication, autoconf stuff, exception handling, various
|
||||
Owen Ou <o@owenou.com> - jqplay.org and link to it
|
||||
Peter van Dijk <peter@7bits.nl> - doc fixes
|
||||
Philipp Hagemeister <phihag@phihag.de> - doc fixes
|
||||
pkoppstein <pkoppstein@gmail.com> - various builtins, improvements
|
||||
polyester <paul@cleanclothes.org> - automake version update
|
||||
Ryoichi KATO <ryo1kato@gmail.com> - doc fixes
|
||||
Rémy Léone <remy.leone@gmail.com> - add .travis.yml
|
||||
Santiago Lapresta <santiago.lapresta@gmail.com> - join, arrays, all, any, other filters
|
||||
Sebastian Freundt <freundt@ga-group.nl> - build
|
||||
Shaun Guth <shaun.guth@gmail.com> - base64d
|
||||
Mike McCabe <mccabe@archive.org>
|
||||
Nathan Baulch <nathan.baulch@gmail.com>
|
||||
Naïm Favier <n@monade.li>
|
||||
Nicolas Pouillard <nicolas.pouillard@gmail.com>
|
||||
Nicole Wren <nicole@wren.systems>
|
||||
Paul Chvostek <paul+gitkraken@it.ca>
|
||||
Paul Wise <pabs3@bonedaddy.net>
|
||||
Peter Kjellerstedt <peter.kjellerstedt@gmail.com>
|
||||
Peter van Dijk <peter@7bits.nl>
|
||||
Philipp Hagemeister <phihag@phihag.de>
|
||||
Ricardo Constantino <wiiaboo@gmail.com>
|
||||
Richard Groves <richard@noodlfroot.com>
|
||||
Richard H Lee <richard@webdezign.co.uk>
|
||||
Riley Avron <riley.avron@gmail.com>
|
||||
Rob Wills <rob.wills@gmail.com>
|
||||
Robert Aboukhalil <robert.aboukhalil@gmail.com>
|
||||
Rohan Santhosh Kumar <181558744+Rohan5commit@users.noreply.github.com>
|
||||
Roland C. Dowdeswell <roland.dowdeswell@twosigma.com>
|
||||
Roman Inflianskas <rominf@users.noreply.github.com>
|
||||
Romero Malaquias <romero.malaquias@gmail.com>
|
||||
Ryoichi KATO <ryo1kato@gmail.com>
|
||||
Rémy Léone <remy.leone@gmail.com>
|
||||
SArpnt <sarpnt@ficial.net>
|
||||
Samar Sunkaria <sameesunkaria@me.com>
|
||||
Santiago Lapresta <santiago.lapresta@gmail.com>
|
||||
Scott Seal <seal.scottm@gmail.com>
|
||||
Sean Wei <me@sean.taipei>
|
||||
Sebastian Freundt <freundt@ga-group.nl>
|
||||
Shaun Guth <sguth@practicefusion.com>
|
||||
Shay Elkin <shay@everything.me>
|
||||
Simon Elsbrock <simon@iodev.org> - Debian
|
||||
Simon Elsbrock <simon@iodev.org>
|
||||
Stefan <stefan.haubenthal@gmail.com>
|
||||
Stefan Seemayer <stefan@seemayer.de>
|
||||
Stephen Roantree <stroantree@gmail.com>
|
||||
Stephen Shaw <stesh@netsoc.tcd.ie>
|
||||
Steven Ihde <sihde@hamachi.us>
|
||||
Steven Maude <StevenMaude@users.noreply.github.com>
|
||||
Steven Penny <svnpenn@gmail.com> - Windows bug fixes
|
||||
tal@whatexit.org <tal@whatexit.org>
|
||||
Steven Penny <svnpenn@gmail.com>
|
||||
Sudhakar Verma <10460978+sudhackar@users.noreply.github.com>
|
||||
Thalia Archibald <thalia@archibald.dev>
|
||||
TheOdd <owenhines@protonmail.com>
|
||||
Thomas Bozeman th026106 <thomas.bozeman@digitalglobe.com>
|
||||
Thomas R. Hall <trhall@trhall.org>
|
||||
Thomas Sibley <tom@zulutango.org>
|
||||
Tim McCormack <cortex@brainonfire.net>
|
||||
Timothy John Perisho Eccleston <combinatorist@users.noreply.github.com>
|
||||
Tom Wolf <github@incognitox.org>
|
||||
Tomas Halman <thalman@redhat.com>
|
||||
Travis Gockel <travis@gockelhut.com>
|
||||
Tyler Rockwood <rockwotj@users.noreply.github.com>
|
||||
Ulrich Eckhardt <ulrich.eckhardt@base-42.de>
|
||||
Vladimír Marek <vlmarek13@gmail.com>
|
||||
W-Mark Kubacki <wmark@hurrikane.de>
|
||||
William Chargin <wchargin@gmail.com>
|
||||
Yasuhiro Matsumoto <mattn.jp@gmail.com>
|
||||
Yeikel <email@yeikel.com>
|
||||
Yoichi Nakayama <yoichi.nakayama@gmail.com>
|
||||
Yu-Fu Fu <yufu@yfu.tw>
|
||||
Ze Sheng <108382772+OwenSanzas@users.noreply.github.com>
|
||||
Zhaohui Mei <mzh.whut@gmail.com>
|
||||
Zhiming Wang <zmwangx@gmail.com>
|
||||
13ren <melbourne.research@gmail.com>
|
||||
bigmoonbit <bigmoonbit@outlook.com>
|
||||
calpeconsulting <61429736+calpeconsulting@users.noreply.github.com>
|
||||
cdnbacon <mike@busbud.com>
|
||||
dak180 <dak180@users.sf.net>
|
||||
davkor <david@adalogics.com>
|
||||
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
|
||||
eitsupi <50911393+eitsupi@users.noreply.github.com>
|
||||
fletcher gornick <fletcher@gornick.dev>
|
||||
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
goodactive <167312449+goodactive@users.noreply.github.com>
|
||||
i <isomorphisms@sdf.org>
|
||||
jkleint <jkleint@gmail.com>
|
||||
lectrical <14344693+lectrical@users.noreply.github.com>
|
||||
liviubobocu <liviu.bobocu@uipath.com>
|
||||
maflcko <6399679+maflcko@users.noreply.github.com>
|
||||
mail6543210 <mail6543210@yahoo.com.tw>
|
||||
mjarosie <mjarosie@users.noreply.github.com>
|
||||
myaaaaaaaaa <103326468+myaaaaaaaaa@users.noreply.github.com>
|
||||
nmulcahey <nmulcahey@gmail.com>
|
||||
orbea <orbea@riseup.net>
|
||||
polyester <paul@cleanclothes.org>
|
||||
rain1 <rain1@airmail.cc>
|
||||
riastradh <campbell+github@mumble.net>
|
||||
sachint <32639496+sachintu47@users.noreply.github.com>
|
||||
sheepster <omer531998@gmail.com>
|
||||
tal@whatexit.org <tal@whatexit.org>
|
||||
taoky <taoky99@outlook.com>
|
||||
theyoucheng <daniel1988xyz@gmail.com>
|
||||
tlsbollei <170938166+tlsbollei@users.noreply.github.com>
|
||||
trantor <trantorvega@gmail.com>
|
||||
wellweek <148746285+wellweek@users.noreply.github.com>
|
||||
wllm-rbnt <william.robinet@conostix.com>
|
||||
zstadler <zeev.stadler@gmail.com>
|
||||
наб <nabijaczleweli@nabijaczleweli.xyz>
|
||||
엄태용 <lg65438805@gmail.com>
|
||||
@@ -106,6 +106,15 @@ shall not be used in advertising or otherwise to promote the sale, use
|
||||
or other dealings in this Software without prior written authorization
|
||||
of the copyright holder.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
All trademarks and registered trademarks mentioned herein are the property of their respective owners.
|
||||
|
||||
|
||||
|
||||
jv_thread.h is copied from Heimdal's lib/base/heimbase.h and some code
|
||||
in jv.c is copied from Heimdal's lib/base/dll.c:
|
||||
|
||||
|
||||
Portions Copyright (c) 2016 Kungliga Tekniska Högskolan
|
||||
(Royal Institute of Technology, Stockholm, Sweden).
|
||||
All rights reserved.
|
||||
@@ -134,3 +143,34 @@ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
|
||||
jq uses a modified version of NetBSD implementation strptime(),
|
||||
which is distributed under the following license:
|
||||
|
||||
Copyright (c) 1997, 1998, 2005, 2008 The NetBSD Foundation, Inc.
|
||||
All rights reserved.
|
||||
|
||||
This code was contributed to The NetBSD Foundation by Klaus Klein.
|
||||
Heavily optimised by David Laight
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
+1
-3
@@ -19,14 +19,12 @@ COPY . /app
|
||||
RUN autoreconf -i \
|
||||
&& ./configure \
|
||||
--disable-docs \
|
||||
--disable-maintainer-mode \
|
||||
--disable-valgrind \
|
||||
--with-oniguruma=builtin \
|
||||
--enable-static \
|
||||
--enable-all-static \
|
||||
--prefix=/usr/local \
|
||||
&& make -j$(nproc) \
|
||||
&& make check \
|
||||
&& make check VERBOSE=yes \
|
||||
&& make install-strip
|
||||
|
||||
FROM scratch
|
||||
|
||||
+94
-77
@@ -5,22 +5,23 @@ LIBJQ_INCS = src/builtin.h src/bytecode.h src/compile.h \
|
||||
src/exec_stack.h src/jq_parser.h src/jv_alloc.h src/jv_dtoa.h \
|
||||
src/jv_unicode.h src/jv_utf8_tables.h src/lexer.l src/libm.h \
|
||||
src/linker.h src/locfile.h src/opcode_list.h src/parser.y \
|
||||
src/util.h src/decNumber/decContext.h src/decNumber/decNumber.h \
|
||||
src/decNumber/decNumberLocal.h src/jv_dtoa_tsd.h src/jv_thread.h \
|
||||
src/jv_type_private.h
|
||||
src/util.h src/iso8601.h \
|
||||
src/jv_dtoa_tsd.h src/jv_thread.h src/jv_private.h \
|
||||
vendor/decNumber/decContext.h vendor/decNumber/decNumber.h \
|
||||
vendor/decNumber/decNumberLocal.h
|
||||
|
||||
LIBJQ_SRC = src/builtin.c src/bytecode.c src/compile.c src/execute.c \
|
||||
src/jq_test.c src/jv.c src/jv_alloc.c src/jv_aux.c \
|
||||
src/jv_dtoa.c src/jv_file.c src/jv_parse.c src/jv_print.c \
|
||||
src/jv_unicode.c src/linker.c src/locfile.c src/util.c \
|
||||
src/decNumber/decContext.c src/decNumber/decNumber.c \
|
||||
src/jv_dtoa_tsd.c \
|
||||
src/iso8601.c src/jv_dtoa_tsd.c \
|
||||
vendor/decNumber/decContext.c vendor/decNumber/decNumber.c \
|
||||
${LIBJQ_INCS}
|
||||
|
||||
### C build options
|
||||
|
||||
AM_CFLAGS = -Wextra -Wall -Wno-missing-field-initializers \
|
||||
-Wno-unused-parameter -Wno-unused-function
|
||||
AM_CFLAGS = -Wextra -Wall -Wno-unused-parameter -Wno-unused-function \
|
||||
-Woverlength-strings -Wstrict-prototypes
|
||||
|
||||
if WIN32
|
||||
AM_CFLAGS += -municode
|
||||
@@ -33,17 +34,22 @@ ACLOCAL_AMFLAGS = -I config/m4
|
||||
# While there is some autoconf macro support for lex/flex, it doesn't support
|
||||
# header file creation so we'll use good old make
|
||||
if MAINTAINER_MODE
|
||||
BUILT_SOURCES = src/lexer.h src/lexer.c src/parser.h src/parser.c \
|
||||
src/builtin.inc src/version.h
|
||||
BUILT_SOURCES = src/lexer.h src/lexer.c src/parser.h src/parser.c \
|
||||
src/builtin.inc src/config_opts.inc src/version.h
|
||||
src/lexer.c: src/lexer.l
|
||||
$(AM_V_LEX) flex -o src/lexer.c --header-file=src/lexer.h $<
|
||||
src/lexer.h: src/lexer.c
|
||||
else
|
||||
BUILT_SOURCES = src/builtin.inc src/version.h
|
||||
BUILT_SOURCES = src/builtin.inc src/config_opts.inc src/version.h
|
||||
.y.c:
|
||||
$(AM_V_YACC) echo "NOT building parser.c!"
|
||||
$(AM_V_YACC) [ "$(<D)" = "$(@D)" ] || cp $(<D)/$(@F) $@
|
||||
$(AM_V_YACC) [ "$(<D)" = "$(@D)" ] || cp $(<D)/$(*F).h $*.h
|
||||
$(AM_V_YACC) touch $@ $*.h
|
||||
|
||||
.l.c:
|
||||
$(AM_V_LEX) echo "NOT building lexer.c!"
|
||||
$(AM_V_LEX) [ "$(<D)" = "$(@D)" ] || cp $(<D)/$(@F) $@
|
||||
$(AM_V_LEX) [ "$(<D)" = "$(@D)" ] || cp $(<D)/$(*F).h $*.h
|
||||
$(AM_V_LEX) touch $@ $*.h
|
||||
endif
|
||||
|
||||
# Tell YACC (Bison) autoconf macros that you want a header file created.
|
||||
@@ -65,23 +71,18 @@ endif
|
||||
|
||||
include_HEADERS = src/jv.h src/jq.h
|
||||
|
||||
if ENABLE_UBSAN
|
||||
AM_CFLAGS += -fsanitize=undefined
|
||||
endif
|
||||
AM_CPPFLAGS = -I$(srcdir)/src -I$(srcdir)/vendor
|
||||
|
||||
AM_CPPFLAGS = -I$(srcdir)/src
|
||||
|
||||
### Running tests under Valgrind
|
||||
### Address sanitizer (ASan)
|
||||
|
||||
if ENABLE_ASAN
|
||||
AM_CFLAGS += -fsanitize=address
|
||||
NO_VALGRIND = 1
|
||||
else
|
||||
if ENABLE_VALGRIND
|
||||
NO_VALGRIND =
|
||||
else
|
||||
NO_VALGRIND = 1
|
||||
endif
|
||||
|
||||
### Undefined Behavior Sanitizer
|
||||
|
||||
if ENABLE_UBSAN
|
||||
AM_CFLAGS += -fsanitize=undefined
|
||||
endif
|
||||
|
||||
### Code coverage with gcov
|
||||
@@ -104,36 +105,51 @@ endif
|
||||
# Remake the version.h header file if, and only if, the git ID has changed
|
||||
.PHONY: .FORCE
|
||||
.FORCE:
|
||||
generate_ver = ver="`{ $(srcdir)/scripts/version || echo '$(VERSION)' ; } | sed 's/.*/\#define JQ_VERSION \"&\"/'`"
|
||||
generate_ver = ver="`{ $(srcdir)/scripts/version || echo '$(VERSION)' ; } | xargs printf '\043define JQ_VERSION \"%s\"\n'`"
|
||||
.remake-version-h: .FORCE
|
||||
@ $(generate_ver); test "x`cat src/version.h 2>/dev/null`" = "x$$ver" || touch .remake-version-h
|
||||
src/version.h: .remake-version-h
|
||||
mkdir -p src
|
||||
$(AM_V_GEN) $(generate_ver); echo "$$ver" > $@
|
||||
src/main.c: src/version.h
|
||||
src/config_opts.inc:
|
||||
mkdir -p src
|
||||
$(AM_V_GEN) if test -x ./config.status; then \
|
||||
./config.status --config; \
|
||||
else echo "(unknown)"; \
|
||||
fi | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/"/' -e 's/^/#define JQ_CONFIG /' > $@
|
||||
src/main.c: src/version.h src/config_opts.inc
|
||||
|
||||
src/builtin.inc: $(srcdir)/src/builtin.jq
|
||||
mkdir -p src
|
||||
$(AM_V_GEN) sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' $(srcdir)/src/builtin.jq > $@
|
||||
$(AM_V_GEN) od -v -A n -t o1 -- $< | \
|
||||
sed -e 's/$$/ /' \
|
||||
-e 's/\([0123456789]\) /\1, /g' \
|
||||
-e 's/ $$//' \
|
||||
-e 's/ 0/ 0/g' \
|
||||
-e 's/ \([123456789]\)/ 0\1/g' > $@
|
||||
src/builtin.o: src/builtin.inc
|
||||
|
||||
CLEANFILES = src/version.h .remake-version-h src/builtin.inc src/config_opts.inc
|
||||
|
||||
bin_PROGRAMS = jq
|
||||
jq_SOURCES = src/main.c src/version.h
|
||||
jq_LDFLAGS = -static-libtool-libs
|
||||
jq_SOURCES = src/main.c
|
||||
jq_LDADD = libjq.la -lm
|
||||
|
||||
if WIN32
|
||||
jq_LDADD += -lshlwapi
|
||||
endif
|
||||
|
||||
if ENABLE_ALL_STATIC
|
||||
jq_LDFLAGS += -all-static
|
||||
jq_LDFLAGS = -all-static
|
||||
endif
|
||||
|
||||
### Tests (make check)
|
||||
|
||||
TESTS = tests/optionaltest tests/mantest tests/jqtest tests/onigtest tests/shtest tests/utf8test tests/base64test tests/commenttest
|
||||
TESTS_ENVIRONMENT = NO_VALGRIND=$(NO_VALGRIND)
|
||||
TESTS = tests/mantest tests/jqtest tests/shtest tests/utf8test tests/base64test tests/uritest
|
||||
if !WIN32
|
||||
TESTS += tests/optionaltest
|
||||
endif
|
||||
|
||||
AM_TESTS_ENVIRONMENT = JQ=$(abs_builddir)/jq
|
||||
if ENABLE_VALGRIND
|
||||
AM_TESTS_ENVIRONMENT += ENABLE_VALGRIND=1
|
||||
endif
|
||||
|
||||
# This is a magic make variable that causes it to treat tests/man.test as a
|
||||
# DATA-type dependency for the check target. As a result, it will attempt to
|
||||
@@ -148,9 +164,11 @@ check_DATA = tests/man.test
|
||||
# Making changes to the manpage without having the python deps means your
|
||||
# tests won't run. If you aren't making changes to the examples, you probably
|
||||
# don't care. But if you are, then you need to run the tests anyway.
|
||||
tests/man.test: $(srcdir)/docs/content/manual/manual.yml
|
||||
tests/man.test tests/manonig.test: $(srcdir)/docs/content/manual/dev/manual.yml
|
||||
if ENABLE_DOCS
|
||||
$(AM_V_GEN) ( cd ${abs_srcdir}/docs; $(PIPENV) run python build_mantests.py ) > $@
|
||||
$(AM_V_GEN) ( cd ${abs_srcdir}/docs && \
|
||||
$(PIPENV) run python validate_manual_schema.py content/manual/dev/manual.yml && \
|
||||
$(PIPENV) run python build_mantests.py )
|
||||
else
|
||||
@echo Changes to the manual.yml require docs to be enabled to update the manual test.
|
||||
@echo As a result, the manual test is out of date.
|
||||
@@ -162,46 +180,63 @@ endif
|
||||
# manpage, then we'll end up using the cached version. Otherwise, we need to
|
||||
# rebuild it.
|
||||
man_MANS = jq.1
|
||||
jq.1.prebuilt: $(srcdir)/docs/content/manual/manual.yml
|
||||
jq.1.prebuilt: $(srcdir)/docs/content/manual/dev/manual.yml
|
||||
if ENABLE_DOCS
|
||||
$(AM_V_GEN) ( cd ${abs_srcdir}/docs; $(PIPENV) run python build_manpage.py ) > $@ || { rm -f $@; false; }
|
||||
$(AM_V_GEN) ( cd ${abs_srcdir}/docs && \
|
||||
$(PIPENV) run python validate_manual_schema.py content/manual/dev/manual.yml && \
|
||||
$(PIPENV) run python build_manpage.py ) > $@
|
||||
else
|
||||
@echo Changes to the manual.yml require docs to be enabled to update the manpage.
|
||||
@echo As a result, the manpage is out of date.
|
||||
endif
|
||||
|
||||
# The committed manpage has no date to avoid merge conflicts. Stamp the date
|
||||
# of the last commit when building in a git repository, including on make
|
||||
# dist, so that release tarballs ship a dated jq.1. Respect SOURCE_DATE_EPOCH
|
||||
# so that distribution builds can pin the date.
|
||||
jq.1: jq.1.prebuilt
|
||||
$(AM_V_GEN) cp $(srcdir)/jq.1.prebuilt $@
|
||||
$(AM_V_GEN) date=`if test -n "$$SOURCE_DATE_EPOCH"; then \
|
||||
date -u -d "@$$SOURCE_DATE_EPOCH" +%F 2>/dev/null || \
|
||||
date -u -r "$$SOURCE_DATE_EPOCH" +%F 2>/dev/null; \
|
||||
elif test -e $(srcdir)/.git; then \
|
||||
cd $(srcdir) && git log -1 --format=%cd --date=short 2>/dev/null; \
|
||||
fi`; \
|
||||
sed 's/^\.TH "JQ" "1" ""/.TH "JQ" "1" "'"$$date"'"/' $(srcdir)/jq.1.prebuilt > $@
|
||||
|
||||
CLEANFILES += jq.1
|
||||
|
||||
### Build oniguruma
|
||||
|
||||
if BUILD_ONIGURUMA
|
||||
libjq_la_LIBADD += modules/oniguruma/src/.libs/libonig.la
|
||||
SUBDIRS = modules/oniguruma
|
||||
libjq_la_LIBADD += vendor/oniguruma/src/.libs/libonig.la
|
||||
jq_LDADD += vendor/oniguruma/src/.libs/libonig.la
|
||||
SUBDIRS = vendor/oniguruma
|
||||
endif
|
||||
|
||||
AM_CFLAGS += $(onig_CFLAGS)
|
||||
|
||||
### Packaging
|
||||
if WITH_ONIGURUMA
|
||||
TESTS += tests/onigtest tests/manonigtest
|
||||
endif
|
||||
|
||||
docs/site.yml: configure.ac
|
||||
sed 's/^jq_version: .*/jq_version: "$(VERSION)"/' $@ > $@.new
|
||||
mv $@.new $@
|
||||
### Packaging
|
||||
|
||||
install-binaries: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) install-exec
|
||||
|
||||
DOC_FILES = docs/content docs/public docs/templates docs/site.yml \
|
||||
DOC_FILES = docs/content docs/public docs/templates \
|
||||
docs/Pipfile docs/Pipfile.lock docs/build_manpage.py \
|
||||
docs/build_manpage.py docs/README.md jq.1.prebuilt
|
||||
docs/build_mantests.py docs/build_website.py docs/README.md \
|
||||
docs/validate_manual_schema.py docs/manual_schema.yml
|
||||
|
||||
EXTRA_DIST = $(DOC_FILES) $(man_MANS) $(TESTS) $(TEST_LOG_COMPILER) \
|
||||
jq.1.prebuilt jq.spec src/lexer.c src/lexer.h src/parser.c \
|
||||
src/parser.h src/version.h src/builtin.jq scripts/version \
|
||||
libjq.pc \
|
||||
tests/base64.test tests/jq-f-test.sh tests/jq.test \
|
||||
tests/modules/a.jq tests/modules/b/b.jq tests/modules/c/c.jq \
|
||||
tests/modules/c/d.jq tests/modules/data.json \
|
||||
tests/modules/deep1.jq tests/modules/deep2a.jq \
|
||||
tests/modules/deep2b.jq tests/modules/deep3.jq \
|
||||
tests/modules/home1/.jq tests/modules/home2/.jq/g.jq \
|
||||
tests/modules/lib/jq/e/e.jq tests/modules/lib/jq/f.jq \
|
||||
tests/modules/shadow1.jq tests/modules/shadow2.jq \
|
||||
@@ -210,19 +245,20 @@ EXTRA_DIST = $(DOC_FILES) $(man_MANS) $(TESTS) $(TEST_LOG_COMPILER) \
|
||||
tests/modules/test_bind_order0.jq \
|
||||
tests/modules/test_bind_order1.jq \
|
||||
tests/modules/test_bind_order2.jq \
|
||||
tests/modules/cycle_a.jq tests/modules/cycle_b.jq \
|
||||
tests/modules/cycle_self.jq \
|
||||
tests/onig.supp tests/local.supp \
|
||||
tests/onig.test tests/setup tests/torture/input0.json \
|
||||
tests/optional.test tests/optionaltest \
|
||||
tests/utf8-truncate.jq tests/utf8test \
|
||||
tests/base64.test tests/base64test \
|
||||
tests/jq-f-test.sh tests/shtest \
|
||||
tests/commenttest
|
||||
tests/setup tests/torture/input0.json \
|
||||
tests/optional.test tests/man.test tests/manonig.test \
|
||||
tests/jq.test tests/onig.test tests/base64.test tests/uri.test \
|
||||
tests/jq-f-test.sh \
|
||||
tests/no-main-program.jq tests/yes-main-program.jq
|
||||
|
||||
DISTCHECK_CONFIGURE_FLAGS=--disable-maintainer-mode --with-oniguruma=builtin
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS=--with-oniguruma=builtin
|
||||
|
||||
# README.md is expected in GitHub projects, good stuff in it, so we'll
|
||||
# distribute it and install it with the package in the doc directory.
|
||||
dist_doc_DATA = README.md COPYING AUTHORS
|
||||
dist_doc_DATA = README.md NEWS.md COPYING AUTHORS
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libjq.pc
|
||||
@@ -235,22 +271,3 @@ rpm: dist jq.spec
|
||||
rpmbuild -tb --define "_topdir ${PWD}/rpm" --define "_prefix /usr" --define "myver $(VERSION)" --define "myrel ${RELEASE}" rpm/SOURCES/jq-$(VERSION).tar.gz
|
||||
find rpm/RPMS/ -name "*.rpm" -exec mv {} ./ \;
|
||||
rm -rf rpm
|
||||
|
||||
dist-clean-local:
|
||||
rm -f ${BUILT_SOURCES}
|
||||
|
||||
# Not sure why this doesn't get cleaned up automatically, guess
|
||||
# automake used to man pages which are hand coded?
|
||||
# 'make clean' doesn't delete the manpage if it can't be rebuilt
|
||||
clean-local-docs:
|
||||
if ENABLE_DOCS
|
||||
rm -f jq.1
|
||||
endif
|
||||
|
||||
clean-local-gcov:
|
||||
rm -f src/*.gcno src/*.gcda src/*.gcov
|
||||
|
||||
clean-local: clean-local-docs clean-local-gcov
|
||||
rm -f src/version.h .remake-version-h
|
||||
|
||||
.PHONY: clean-local-docs clean-local-gcov
|
||||
@@ -1,113 +0,0 @@
|
||||
|
||||
Release history
|
||||
|
||||
* jq version 1.6 was released on Fri Nov 2 2018
|
||||
* jq version 1.5 was released on Sat Aug 15 2015
|
||||
* jq version 1.4 was released on Mon Jun 9 2014
|
||||
* jq version 1.3 was released on Sun May 19 2013
|
||||
* jq version 1.2 was released on Thu Dec 20 2012
|
||||
* jq version 1.1 was released on Sun Oct 21 2012
|
||||
* jq version 1.0 was released on Sun Oct 21 2012
|
||||
|
||||
New features in 1.6 since 1.5:
|
||||
|
||||
- Destructuring Alternation
|
||||
|
||||
- New Builtins:
|
||||
- builtins/0
|
||||
- stderr/0
|
||||
- halt/0, halt_error/1
|
||||
- isempty/1
|
||||
- walk/1
|
||||
- utf8bytelength/1
|
||||
- localtime/0, strflocaltime/1
|
||||
- SQL-style builtins
|
||||
- and more!
|
||||
|
||||
- Add support for ASAN and UBSAN
|
||||
|
||||
- Make it easier to use jq with shebangs (8f6f28c)
|
||||
|
||||
- Add $ENV builtin variable to access environment
|
||||
|
||||
- Add JQ_COLORS env var for configuring the output colors
|
||||
|
||||
New features in 1.5 since 1.4:
|
||||
|
||||
- regular expressions (with Oniguruma)
|
||||
|
||||
- a library/module system
|
||||
|
||||
- many new builtins
|
||||
|
||||
- datetime builtins
|
||||
- math builtins
|
||||
- regexp-related builtins
|
||||
- stream-related builtins (e.g., all/1, any/1)
|
||||
- minimal I/O builtins (`inputs`, `debug`)
|
||||
|
||||
- new syntactic features, including:
|
||||
|
||||
- destructuring (`. as [$first, $second] | ...`)
|
||||
- try/catch, generalized `?` operator, and label/break
|
||||
- `foreach`
|
||||
- multiple definitions of a function with different numbers of
|
||||
arguments
|
||||
|
||||
- command-line arguments
|
||||
|
||||
- --join-lines / -j for raw output
|
||||
- --argjson and --slurpfile
|
||||
- --tab and --indent
|
||||
- --stream (streaming JSON parser)
|
||||
- --seq (RFC7464 JSON text sequence)
|
||||
- --run-tests improvements
|
||||
|
||||
- optimizations:
|
||||
|
||||
- tail-call optimization
|
||||
- reduce and foreach no longer leak a reference to .
|
||||
|
||||
New features in 1.4 since 1.3:
|
||||
|
||||
- command-line arguments
|
||||
|
||||
- jq --arg-file variable file
|
||||
- jq --unbuffered
|
||||
- jq -e / --exit-status (set exit status based on outputs)
|
||||
- jq -S / --sort-keys (now jq no longer sorts object keys by
|
||||
default
|
||||
|
||||
- syntax
|
||||
|
||||
- .. -> like // in XPath (recursive traversal)
|
||||
- question mark (e.g., .a?) to suppress errors
|
||||
- ."foo" syntax (equivalent to .["foo"])
|
||||
- better error handling for .foo
|
||||
- added % operator (modulo)
|
||||
- allow negation without requiring extra parenthesis
|
||||
- more function arguments (up to six)
|
||||
|
||||
- filters:
|
||||
|
||||
- any, all
|
||||
- iterables, arrays, objects, scalars, nulls, booleans, numbers,
|
||||
strings, values
|
||||
|
||||
- string built-ins:
|
||||
|
||||
- split
|
||||
- join (join an array of strings with a given separator string)
|
||||
- ltrimstr, rtrimstr
|
||||
- startswith, endswith
|
||||
- explode, implode
|
||||
- fromjson, tojson
|
||||
- index, rindex, indices
|
||||
|
||||
- math functions
|
||||
|
||||
- floor, sqrt, cbrt, etcetera (depends on what's available from libm)
|
||||
|
||||
- libjq -- a C API interface to jq's JSON representation and for
|
||||
running jq programs from C applications
|
||||
|
||||
@@ -0,0 +1,768 @@
|
||||
# 1.8.2
|
||||
|
||||
This is a patch release with security fixes and bug fixes since 1.8.1, along with new builds for Windows arm64 and Docker arm/v7.
|
||||
Full commit log can be found at <https://github.com/jqlang/jq/compare/jq-1.8.1...jq-1.8.2>.
|
||||
|
||||
## Security fixes
|
||||
|
||||
- CVE-2026-32316: Fix heap buffer overflow in `jvp_string_append` and `jvp_string_copy_replace_bad`.
|
||||
@itchyny e47e56d226519635768e6aab2f38f0ab037c09e5
|
||||
- CVE-2026-33947: Limit path depth to prevent stack overflow in `jv_setpath`, `jv_getpath`, `jv_delpaths`.
|
||||
@itchyny fb59f1491058d58bdc3e8dd28f1773d1ac690a1f
|
||||
- CVE-2026-33948: Fix NUL truncation in the JSON parser.
|
||||
@itchyny 6374ae0bcdfe33a18eb0ae6db28493b1f34a0a5b
|
||||
- CVE-2026-39956: Fix `_strindices` missing runtime type checks.
|
||||
@tlsbollei fdf8ef0f0810e3d365cdd5160de43db46f57ed03
|
||||
- CVE-2026-39979: Fix out-of-bounds read in `jv_parse_sized()`.
|
||||
@wader 2f09060afab23fe9390cce7cb860b10416e1bf5f
|
||||
- CVE-2026-40164: Randomize hash seed to mitigate hash collision DoS attacks.
|
||||
@AsafMeizner @itchyny 0c7d133c3c7e37c00b6d46b658a02244fdd3c784
|
||||
- CVE-2026-40612: Limit containment check depth to prevent stack overflow in `contains`.
|
||||
@itchyny d1a12569d91641135976a8536776a4a329c02cc2
|
||||
- CVE-2026-41256: Fix NUL truncation in program files loaded with `-f`.
|
||||
@itchyny 5a015deae35d19e3ebbc65db6c157a80e76df738
|
||||
- CVE-2026-41257: Fix signed-int overflow in `stack_reallocate`.
|
||||
@itchyny 01b3cded76daacbfddb7f8763700b0803bcb5c6f
|
||||
- CVE-2026-43894: Reject numeric literals longer than `DEC_MAX_DIGITS` (999999999).
|
||||
@itchyny 9761ceb7d6cc48c16b25f0ab1baaef0e701927e4
|
||||
- CVE-2026-43895: Reject embedded NUL bytes in module import paths.
|
||||
@itchyny 9d223f153c3632a207fa071caaa6292da33ae361
|
||||
- CVE-2026-43896: Limit recursive object merge depth to prevent stack overflow.
|
||||
@itchyny 532ccea6080ed6758f39fe9f6208a44b665023d2
|
||||
- CVE-2026-44777: Detect circular module imports to prevent stack overflow.
|
||||
@itchyny f58787c41835d9b17795730cb04925fdba25c71c
|
||||
- CVE-2026-47770: Guard deep structural equality and comparison recursion.
|
||||
@fuyu0425 7122866869960b55cea3646bc91334ef55787831
|
||||
- CVE-2026-49839: Fix heap-buffer-overflow in raw file loading.
|
||||
@itchyny e987df0d463d85fd70825e042a082427e8275b86
|
||||
- CVE-2026-54679: Tighten string length bounds and propagate invalid jv in implode.
|
||||
@itchyny 46d1da30944ce93dd671ac72b6513fc0eb747837
|
||||
- GHSA-gf4g-95wj-4q4r: Fix use-after-free in `args2obj()` array argument path. @sseal #3498
|
||||
- GHSA-hj52-j2c9-r8r4: Fix signed-int overflow in `tokenadd` to prevent buffer overflow.
|
||||
@itchyny 63751f8a9f94dc6d3370084ad0d60826c58b955d
|
||||
- Limit the number of function parameters and definitions to prevent SEGV. @OwenSanzas #3460
|
||||
- Pre-allocate `tokenbuf` for string parser to avoid undefined behavior. @fab1ano #3485
|
||||
- Avoid stack overflow when freeing deeply nested values.
|
||||
@itchyny 33d7bce3218ec718139342e5b48b475c4dea715f
|
||||
- Fix memory leaks and double frees. @itchyny #3487
|
||||
|
||||
## Releasing
|
||||
|
||||
- Add builds for Windows arm64. @dennisameling #3376
|
||||
- Support arm/v7 architecture in Docker images. @itchyny #3463
|
||||
- Update GPG signing key. @itchyny 0ff997f7c4c07660ffc6ad2506d5f56b8136208b
|
||||
- Add `artifact-metadata` permission for actions/attest. @itchyny #3530
|
||||
- Upload attestation bundle as a release artifact, allowing unauthenticated
|
||||
verification via `gh attestation verify --bundle jq-attestation.json`.
|
||||
@itchyny #3563
|
||||
|
||||
## CLI changes
|
||||
|
||||
- Improve error message truncation with closing delimiters. @itchyny #3478
|
||||
- Remove extra space from `die` function output. @krtk6160 #3391
|
||||
- Fix raw input flag not to corrupt multi-byte characters. @itchyny #3421
|
||||
- Fix crash when importing a module with errors twice. @itchyny #3497
|
||||
- Increase the maximum printing depth from 256 to 10000. @ishnagy #3414
|
||||
|
||||
## Changes to existing functions
|
||||
|
||||
- Fix `rtrimstr("")` always outputting `""`. @A4-Tacks #3415
|
||||
- Fix infinite loop and undefined behavior in `del(.[nan])`. @itchyny #3490
|
||||
- Refactor `@uri` and `@urid` to fix multi-byte UTF-8 corruption. @itchyny #3495
|
||||
- Fix `tonumber` and `toboolean` to reject strings with embedded null bytes. @itchyny #3496
|
||||
- Fix undefined behavior in modulo operator. @fab1ano #3486
|
||||
- Fix reversed pointer subtraction in `f_env` bounds check. @itchyny #3465
|
||||
- Fix missing validity check in `f_strflocaltime` after `f_localtime`. @itchyny #3491
|
||||
- Fix year 2038 problem on 32-bit platforms. @itchyny #3407
|
||||
- Use `//` instead of `//=` in `from_entries` definition. @itchyny #3516
|
||||
|
||||
## Build and test changes
|
||||
|
||||
- Drop `strptime` test using non-portable `%F`. @alyssais #3365
|
||||
- Limit oniguruma depth to 1024 in `jq_fuzz_execute`. @sudhackar #3377
|
||||
- Fix localization test for time formatting functions. @itchyny #3409
|
||||
- Fix expected value assertion. @itchyny #3431 #3408
|
||||
- Fix typo in tests/jq.test. @bigmoonbit #3441
|
||||
- Refactor `tm2jv` to handle fractional seconds. @itchyny #3489
|
||||
- Fix `jq_fuzz_parse_stream`: use iterative parser API for streaming mode. @OwenSanzas #3499
|
||||
- Fix crashes and resource leaks in `jq_testsuite`. @itchyny #3509
|
||||
- Support building with `--disable-maintainer-mode` and source != build dir. @Saur2000 #3518
|
||||
- Add Solaris support. @vlmarek #3515
|
||||
- Respect `SOURCE_DATE_EPOCH` while generating man page. @McSinyx #3514
|
||||
- Fix undefined pointer arithmetic in UTF-8 helpers. @theyoucheng df924eae91af10cc236a907cdadd97813827aa1f
|
||||
- Fix one-byte over-read in `BASE64_DECODE_TABLE`. @itchyny #3547
|
||||
|
||||
## Documentation changes
|
||||
|
||||
- Add wiki link to navigation bar. @wader #3424
|
||||
- Add missing word in manual for rawfile. @jpmens #3434
|
||||
- Fix typo "stder" to "stderr". @jjatria #3446
|
||||
- Fix buttons in tutorial to toggle labels when clicked on. @itchyny #3493
|
||||
- Fix "happened" spelling in tutorial changelog entries. @Rohan5commit #3525
|
||||
|
||||
# 1.8.1
|
||||
|
||||
This is a patch release to fix security, performance, and build issues found in 1.8.0.
|
||||
Full commit log can be found at <https://github.com/jqlang/jq/compare/jq-1.8.0...jq-1.8.1>.
|
||||
|
||||
## Security fixes
|
||||
|
||||
- CVE-2025-49014: Fix heap use after free in `f_strftime`, `f_strflocaltime`.
|
||||
@wader 499c91bca9d4d027833bc62787d1bb075c03680e
|
||||
- GHSA-f946-j5j2-4w5m: Fix stack overflow in `node_min_byte_len` of oniguruma.
|
||||
@wader 5e159b34b179417e3e0404108190a2ac7d65611c
|
||||
|
||||
## CLI changes
|
||||
|
||||
- Fix assertion failure when syntax error happens at the end of the query. @itchyny #3350
|
||||
|
||||
## Changes to existing functions
|
||||
|
||||
- Fix portability of `strptime/1` especially for Windows. @itchyny #3342
|
||||
|
||||
## Language changes
|
||||
|
||||
- Revert the change of `reduce`/`foreach` state variable in 1.8.0 (#3205).
|
||||
This change was reverted due to serious performance regression. @itchyny #3349
|
||||
|
||||
## Documentation changes
|
||||
|
||||
- Add LICENSE notice of NetBSD's `strptime()` to COPYING. @itchyny #3344
|
||||
|
||||
## Build improvements
|
||||
|
||||
- Fix build on old Mac with old sed. @qianbinbin #3336
|
||||
|
||||
# 1.8.0
|
||||
|
||||
We are pleased to announce the release of version 1.8.0.
|
||||
This release includes a number of improvements since the last version.
|
||||
Note that some changes may introduce breaking changes to existing scripts,
|
||||
so be sure to read the following information carefully.
|
||||
Full commit log can be found at <https://github.com/jqlang/jq/compare/jq-1.7.1...jq-1.8.0>.
|
||||
|
||||
## Releasing
|
||||
|
||||
- Change the version number pattern to `1.X.Y` (`1.8.0` instead of `1.8`). @itchyny #2999
|
||||
- Generate provenance attestations for release artifacts and docker image. @lectrical #3225
|
||||
|
||||
```sh
|
||||
gh attestation verify --repo jqlang/jq jq-linux-amd64
|
||||
gh attestation verify --repo jqlang/jq oci://ghcr.io/jqlang/jq:1.8.0
|
||||
```
|
||||
|
||||
## Security fixes
|
||||
|
||||
- CVE-2024-23337: Fix signed integer overflow in `jvp_array_write` and `jvp_object_rehash`.
|
||||
@itchyny de21386681c0df0104a99d9d09db23a9b2a78b1e
|
||||
- The fix for this issue now limits the maximum size of arrays and objects to 536870912 (`2^29`) elements.
|
||||
- CVE-2024-53427: Reject NaN with payload while parsing JSON.
|
||||
@itchyny a09a4dfd55e6c24d04b35062ccfe4509748b1dd3
|
||||
- The fix for this issue now drops support for NaN with payload in JSON (like `NaN123`).
|
||||
Other JSON extensions like `NaN` and `Infinity` are still supported.
|
||||
- CVE-2025-48060: Fix heap buffer overflow in `jv_string_vfmt`.
|
||||
@itchyny c6e041699d8cd31b97375a2596217aff2cfca85b
|
||||
- Fix use of uninitialized value in `check_literal`. @itchyny #3324
|
||||
- Fix segmentation fault on `strftime/1`, `strflocaltime/1`. @itchyny #3271
|
||||
- Fix unhandled overflow in `@base64d`. @emanuele6 #3080
|
||||
|
||||
## CLI changes
|
||||
|
||||
- Fix `--indent 0` implicitly enabling `--compact-output`. @amarshall @gbrlmarn @itchyny #3232
|
||||
|
||||
```sh
|
||||
$ jq --indent 0 . <<< '{ "foo": ["hello", "world"] }'
|
||||
{
|
||||
"foo": [
|
||||
"hello",
|
||||
"world"
|
||||
]
|
||||
}
|
||||
# Previously, this implied --compact-output, but now outputs with new lines.
|
||||
```
|
||||
|
||||
- Improve error messages to show problematic position in the filter. @itchyny #3292
|
||||
|
||||
```sh
|
||||
$ jq -n '1 + $foo + 2'
|
||||
jq: error: $foo is not defined at <top-level>, line 1, column 5:
|
||||
1 + $foo + 2
|
||||
^^^^
|
||||
jq: 1 compile error
|
||||
```
|
||||
|
||||
- Include column number in parser and compiler error messages. @liviubobocu #3257
|
||||
- Fix error message for string literal beginning with single quote. @mattmeyers #2964
|
||||
|
||||
```sh
|
||||
$ jq .foo <<< "{'foo':'bar'}"
|
||||
jq: parse error: Invalid string literal; expected ", but got ' at line 1, column 7
|
||||
# Previously, the error message was Invalid numeric literal at line 1, column 7.
|
||||
```
|
||||
|
||||
- Improve `JQ_COLORS` environment variable to support larger escapes like truecolor. @SArpnt #3282
|
||||
|
||||
```sh
|
||||
JQ_COLORS="38;2;255;173;173:38;2;255;214;165:38;2;253;255;182:38;2;202;255;191:38;2;155;246;255:38;2;160;196;255:38;2;189;178;255:38;2;255;198;255" jq -nc '[null,false,true,42,{"a":"bc"}]'
|
||||
```
|
||||
|
||||
- Add `--library-path` long option for `-L`. @thaliaarchi #3194
|
||||
- Fix `--slurp --stream` when input has no trailing newline character. @itchyny #3279
|
||||
- Fix `--indent` option to error for malformed values. @thaliaarchi #3195
|
||||
- Fix option parsing of `--binary` on non-Windows platforms. @calestyo #3131
|
||||
- Fix issue with `~/.jq` on Windows where `$HOME` is not set. @kirkoman #3114
|
||||
- Fix broken non-Latin output in the command help on Windows. @itchyny #3299
|
||||
- Increase the maximum parsing depth for JSON to 10000. @itchyny #3328
|
||||
- Parse short options in order given. @thaliaarchi #3194
|
||||
- Consistently reset color formatting. @thaliaarchi #3034
|
||||
|
||||
## New functions
|
||||
|
||||
- Add `trim/0`, `ltrim/0` and `rtrim/0` to trim leading and trailing white spaces. @wader #3056
|
||||
|
||||
```sh
|
||||
$ jq -n '" hello " | trim, ltrim, rtrim'
|
||||
"hello"
|
||||
"hello "
|
||||
" hello"
|
||||
```
|
||||
|
||||
- Add `trimstr/1` to trim string from both ends. @gbrlmarn #3319
|
||||
|
||||
```sh
|
||||
$ jq -n '"foobarfoo" | trimstr("foo")'
|
||||
"bar"
|
||||
```
|
||||
|
||||
- Add `add/1`. Generator variant of `add/0`. @myaaaaaaaaa #3144
|
||||
|
||||
```sh
|
||||
$ jq -c '.sum = add(.xs[])' <<< '{"xs":[1,2,3]}'
|
||||
{"xs":[1,2,3],"sum":6}
|
||||
```
|
||||
|
||||
- Add `skip/2` as the counterpart to `limit/2`. @itchyny #3181
|
||||
|
||||
```sh
|
||||
$ jq -nc '[1,2,3,4,5] | [skip(2; .[])]'
|
||||
[3,4,5]
|
||||
```
|
||||
|
||||
- Add `toboolean/0` to convert strings to booleans. @brahmlower @itchyny #2098
|
||||
|
||||
```sh
|
||||
$ jq -n '"true", "false" | toboolean'
|
||||
true
|
||||
false
|
||||
```
|
||||
|
||||
- Add `@urid` format. Reverse of `@uri`. @fmgornick #3161
|
||||
|
||||
```sh
|
||||
$ jq -Rr '@urid' <<< '%6a%71'
|
||||
jq
|
||||
```
|
||||
|
||||
## Changes to existing functions
|
||||
|
||||
- Use code point index for `indices/1`, `index/1` and `rindex/1`. @wader #3065
|
||||
- This is a breaking change. Use `utf8bytelength/0` to get byte index.
|
||||
- Improve `tonumber/0` performance and rejects numbers with leading or trailing
|
||||
white spaces. @itchyny @thaliaarchi #3055 #3195
|
||||
- This is a breaking change. Use `trim/0` to remove leading and trailing white spaces.
|
||||
- Populate timezone data when formatting time. This fixes timezone name in
|
||||
`strftime/1`, `strflocaltime/1` for DST. @marcin-serwin @sihde #3203 #3264 #3323
|
||||
- Preserve numerical precision on unary negation, `abs/0`, `length/0`. @itchyny #3242 #3275
|
||||
- Make `last(empty)` yield no output values like `first(empty)`. @itchyny #3179
|
||||
- Make `ltrimstr/1` and `rtrimstr/1` error for non-string inputs. @emanuele6 #2969
|
||||
- Make `limit/2` error for negative count. @itchyny #3181
|
||||
- Fix `mktime/0` overflow and allow fewer elements in date-time representation array. @emanuele6 #3070 #3162
|
||||
- Fix non-matched optional capture group. @wader #3238
|
||||
- Provide `strptime/1` on all systems. @george-hopkins @fdellwing #3008 #3094
|
||||
- Fix `_WIN32` port of `strptime`. @emanuele6 #3071
|
||||
- Improve `bsearch/1` performance by implementing in C. @eloycoto #2945
|
||||
- Improve `unique/0` and `unique_by/1` performance. @itchyny @emanuele6 #3254 #3304
|
||||
- Fix error messages including long string literal not to break Unicode characters. @itchyny #3249
|
||||
- Remove `pow10/0` as it has been deprecated in glibc 2.27. Use `exp10/0` instead. @itchyny #3059
|
||||
- Remove private (and undocumented) `_nwise` filter. @itchyny #3260
|
||||
|
||||
## Language changes
|
||||
|
||||
- Fix precedence of binding syntax against unary and binary operators.
|
||||
Also, allow some expressions as object values. @itchyny #3053 #3326
|
||||
- This is a breaking change that may change the output of filters with binding syntax as follows.
|
||||
|
||||
```sh
|
||||
$ jq -nc '[-1 as $x | 1,$x]'
|
||||
[1,-1] # previously, [-1,-1]
|
||||
$ jq -nc '1 | . + 2 as $x | -$x'
|
||||
-3 # previously, -1
|
||||
$ jq -nc '{x: 1 + 2, y: false or true, z: null // 3}'
|
||||
{"x":3,"y":true,"z":3} # previously, syntax error
|
||||
```
|
||||
|
||||
- Support Tcl-style multiline comments. @emanuele6 #2989
|
||||
|
||||
```sh
|
||||
#!/bin/sh --
|
||||
# Can be use to do shebang scripts.
|
||||
# Next line will be seen as a comment be of the trailing backslash. \
|
||||
exec jq ...
|
||||
# this jq expression will result in [1]
|
||||
[
|
||||
1,
|
||||
# \
|
||||
2
|
||||
]
|
||||
```
|
||||
|
||||
- Fix `foreach` not to break init backtracking with `DUPN`. @kanwren #3266
|
||||
|
||||
```sh
|
||||
$ jq -n '[1, 2] | foreach .[] as $x (0, 1; . + $x)'
|
||||
1
|
||||
3
|
||||
2
|
||||
4
|
||||
```
|
||||
|
||||
- Fix `reduce`/`foreach` state variable should not be reset each iteration. @itchyny #3205
|
||||
|
||||
```sh
|
||||
$ jq -n 'reduce range(5) as $x (0; .+$x | select($x!=2))'
|
||||
8
|
||||
$ jq -nc '[foreach range(5) as $x (0; .+$x | select($x!=2); [$x,.])]'
|
||||
[[0,0],[1,1],[3,4],[4,8]]
|
||||
```
|
||||
|
||||
- Support CRLF line breaks in filters. @itchyny #3274
|
||||
- Improve performance of repeating strings. @itchyny #3272
|
||||
|
||||
## Documentation changes
|
||||
|
||||
- Switch the homepage to custom domain [jqlang.org](https://jqlang.org). @itchyny @owenthereal #3243
|
||||
- Make latest release instead of development version the default manual. @wader #3130
|
||||
- Add opengraph meta tags. @wader #3247
|
||||
- Replace jqplay.org with play.jqlang.org @owenthereal #3265
|
||||
- Add missing line from decNumber's licence to `COPYING`. @emanuele6 #3106
|
||||
- Various document improvements. @tsibley #3322, @itchyny #3240, @jhcarl0814 #3239,
|
||||
@01mf02 #3184, @thaliaarchi #3199, @NathanBaulch #3173, @cjlarose #3164,
|
||||
@sheepster1 #3105, #3103, @kishoreinvits #3042, @jbrains #3035, @thalman #3033,
|
||||
@SOF3 #3017, @wader #3015, @wllm-rbnt #3002
|
||||
|
||||
## Build improvements
|
||||
|
||||
- Fix build with GCC 15 (C23). @emanuele6 #3209
|
||||
- Fix build with `-Woverlength-strings` @emanuele6 #3019
|
||||
- Fix compiler warning `type-limits` in `found_string`. @itchyny #3263
|
||||
- Fix compiler error in `jv_dtoa.c` and `builtin.c`. @UlrichEckhardt #3036
|
||||
- Fix warning: a function definition without a prototype is deprecated. @itchyny #3259
|
||||
- Define `_BSD_SOURCE` in `builtin.c` for OpenBSD support. @itchyny #3278
|
||||
- Define empty `JV_{,V}PRINTF_LIKE` macros if `__GNUC__` is not defined. @emanuele6 #3160
|
||||
- Avoid `ctype.h` abuse: cast `char` to `unsigned char` first. @riastradh #3152
|
||||
- Remove multiple calls to free when successively calling `jq_reset`. @Sameesunkaria #3134
|
||||
- Enable IBM z/OS support. @sachintu47 #3277
|
||||
- Fix insecure `RUNPATH`. @orbea #3212
|
||||
- Avoid zero-length `calloc`. @itchyny #3280
|
||||
- Move oniguruma and decNumber to vendor directory. @itchyny #3234
|
||||
|
||||
## Test improvements
|
||||
|
||||
- Run tests in C locale. @emanuele6 #3039
|
||||
- Improve reliability of `NO_COLOR` tests. @dag-erling #3188
|
||||
- Improve `shtest` not to fail if `JQ_COLORS` and `NO_COLOR` are already set. @SArpnt #3283
|
||||
- Refactor constant folding tests. @itchyny #3233
|
||||
- Make tests pass when `--disable-decnum`. @nicowilliams 6d02d53f515bf1314d644eee93ba30b0d11c7d2b
|
||||
- Disable Valgrind by default during testing. @itchyny #3269
|
||||
|
||||
# 1.7.1
|
||||
|
||||
## Security
|
||||
|
||||
- CVE-2023-50246: Fix heap buffer overflow in jvp\_literal\_number\_literal
|
||||
- CVE-2023-50268: fix stack-buffer-overflow if comparing nan with payload
|
||||
|
||||
## CLI changes
|
||||
|
||||
- Make the default background color more suitable for bright backgrounds. @mjarosie @taoky @nicowilliams @itchyny #2904
|
||||
- Allow passing the inline jq script after `--`. @emanuele6 #2919
|
||||
- Restrict systems operations on OpenBSD and remove unused `mkstemp`. @klemensn #2934
|
||||
- Fix possible uninitialised value dereference if `jq_init()` fails. @emanuele6 @nicowilliams #2935
|
||||
|
||||
## Language changes
|
||||
|
||||
- Simplify `paths/0` and `paths/1`. @asheiduk @emanuele6 #2946
|
||||
- Reject `U+001F` in string literals. @torsten-schenk @itchyny @wader #2911
|
||||
- Remove unused nref accumulator in `block_bind_library`. @emanuele6 #2914
|
||||
- Remove a bunch of unused variables, and useless assignments. @emanuele6 #2914
|
||||
- main.c: Remove unused EXIT\_STATUS\_EXACT option. @emanuele6 #2915
|
||||
- Actually use the number correctly casted from double to int as index. @emanuele6 #2916
|
||||
- src/builtin.c: remove unnecessary jv\_copy-s in type\_error/type\_error2. @emanuele6 #2937
|
||||
- Remove undefined behavior caught by LLVM 10 UBSAN. @Gaelan @emanuele6 #2926
|
||||
- Convert decnum to binary64 (double) instead of decimal64. This makes jq behave like the JSON specification suggests and more similar to other languages. @wader @leonid-s-usov #2949
|
||||
- Fix memory leaks on invalid input for `ltrimstr/1` and `rtrimstr/1`. @emanuele6 #2977
|
||||
- Fix memory leak on failed get for `setpath/2`. @emanuele6 #2970
|
||||
- Fix nan from json parsing also for nans with payload that start with 'n'. @emanuele6 #2985
|
||||
- Allow carriage return characters in comments. @emanuele6 #2942 #2984
|
||||
|
||||
## Documentation changes
|
||||
|
||||
- Generate links in the man page. @emanuele6 #2931
|
||||
- Standardize arch types to AMD64 & ARM64 from index page download dropdown. @owenthereal #2884
|
||||
|
||||
## libjq
|
||||
|
||||
- Add extern C for C++. @rockwotj #2953
|
||||
|
||||
## Build and test changes
|
||||
|
||||
- Fix incorrect syntax for checksum file. @kamontat @wader #2899
|
||||
- Remove `-dirty` version suffix for windows release build. @itchyny #2888
|
||||
- Make use of `od` in tests more compatible. @nabijaczleweli @emanuele6 @nicowilliams #2922
|
||||
- Add dependabot. @yeikel #2889
|
||||
- Extend fuzzing setup to fuzz parser and JSON serializer. @DavidKorczynski @emanuele6 #2952
|
||||
- Keep releasing executables with legacy names. @itchyny #2951
|
||||
|
||||
# 1.7
|
||||
|
||||
After a five year hiatus we're back with a GitHub organization, with new admins and new maintainers who have brought a great deal of energy to make a long-awaited and long-needed new release. We're very grateful for all the new owners, admins, and maintainers. Special thanks go to Owen Ou (@owenthereal) for pushing to set up a new GitHub organization for jq, Stephen Dolan (@stedolan) for transferring the jq repository to the new organization, @itchyny for doing a great deal of work to get the release done, Mattias Wadman (@wader) and Emanuele Torre (@emanuele6) for many PRs and code reviews. Many others also contributed PRs, issues, and code reviews as well, and you can find their contributions in the Git log and on the [closed issues and PRs page](https://github.com/jqlang/jq/issues?q=is%3Aclosed+sort%3Aupdated-desc).
|
||||
|
||||
Since the last stable release many things have happened:
|
||||
|
||||
- jq now lives at <https://github.com/jqlang>
|
||||
- New maintainers, admins, and owners have been recruited.
|
||||
- A list of [current maintainers](https://github.com/jqlang/jq/blob/jq-1.7/AUTHORS#L4-L14)
|
||||
- NEWS file is replaced by NEWS.md with Markdown format. @wader #2599
|
||||
- CI, scan builds, release, website builds etc now use GitHub actions. @owenthereal @wader @itchyny #2596 #2603 #2620 #2723
|
||||
- Lots of documentation improvements and fixes.
|
||||
- Website updated with new section search box, better section ids for linking, dark mode, etc. @itchyny #2628
|
||||
- Release builds for:
|
||||
- Linux `amd64`, `arm64`, `armel`, `armhf`, `i386`, `mips`, `mips64`, `mips64el`, `mips64r6`, `mips64r6el`, `mipsel`, `mipsr6`, `mipsr6el`, `powerpc`, `ppc64el`, `riscv64` and `s390x`
|
||||
- macOS `amd64` and `arm64`
|
||||
- Windows `i386` and `amd64`
|
||||
- Docker `linux/386`, `linux/amd64`, `linux/arm64`, `linux/mips64le`, `linux/ppc64le`, `linux/riscv64` and `linux/s390x`
|
||||
- More details see @owenthereal #2665
|
||||
- Docker images are now available from `ghcr.io/jqlang/jq` instead of Docker Hub. @itchyny #2652 #2686
|
||||
- OSS-fuzz. @DavidKorczynski #2760 #2762
|
||||
|
||||
Full commit log can be found at <https://github.com/jqlang/jq/compare/jq-1.6...jq-1.7> but here are some highlights:
|
||||
|
||||
## CLI changes
|
||||
|
||||
- Make object key color configurable using `JQ_COLORS` environment variable. @itchyny @haguenau @ericpruitt #2703
|
||||
|
||||
```sh
|
||||
# this would make "field" bold yellow (`1;33`, the last value)
|
||||
$ JQ_COLORS="0;90:0;37:0;37:0;37:0;32:1;37:1;37:1;33" ./jq -n '{field: 123}'
|
||||
{
|
||||
"field": 123
|
||||
}
|
||||
```
|
||||
|
||||
- Change the default color of null to Bright Black. @itchyny #2824
|
||||
- Respect `NO_COLOR` environment variable to disable color output. See <https://no-color.org> for details. @itchyny #2728
|
||||
- Improved `--help` output. Now mentions all options and nicer order. @itchyny @wader #2747 #2766 #2799
|
||||
- Fix multiple issues of exit code using `--exit-code`/`-e` option. @ryo1kato #1697
|
||||
|
||||
```sh
|
||||
# true-ish last output value exits with zero
|
||||
$ jq -ne true ; echo $?
|
||||
true
|
||||
0
|
||||
# false-ish last output value (false and null) exits with 1
|
||||
$ jq -ne false ; echo $?
|
||||
false
|
||||
1
|
||||
# no output value exists with 4
|
||||
$ jq -ne empty ; echo $?
|
||||
4
|
||||
```
|
||||
|
||||
- Add `--binary`/`-b` on Windows for binary output. To get `\n` instead of `\r\n` line endings. @nicowilliams 0dab2b1
|
||||
- Add `--raw-output0` for NUL (zero byte) separated output. @asottile @pabs3 @itchyny #1990 #2235 #2684
|
||||
|
||||
```sh
|
||||
# will output a zero byte after each output
|
||||
$ jq -n --raw-output0 '1,2,3' | xxd
|
||||
00000000: 3100 3200 3300 1.2.3.
|
||||
# can be used with xargs -0
|
||||
$ jq -n --raw-output0 '"a","b","c"' | xargs -0 -n1
|
||||
a
|
||||
b
|
||||
c
|
||||
$ jq -n --raw-output0 '"a b c", "d\ne\nf"' | xargs -0 printf '[%s]\n'
|
||||
[a b c]
|
||||
[d
|
||||
e
|
||||
f]
|
||||
# can be used with read -d ''
|
||||
$ while IFS= read -r -d '' json; do
|
||||
> jq '.name' <<< "$json"
|
||||
> done < <(jq -n --raw-output0 '{name:"a b c"},{name:"d\ne\nf"}')
|
||||
"a b c"
|
||||
"d\ne\nf"
|
||||
# also it's an error to output a string containing a NUL when using NUL separator
|
||||
$ jq -n --raw-output0 '"\u0000"'
|
||||
jq: error (at <unknown>): Cannot dump a string containing NUL with --raw-output0 option
|
||||
```
|
||||
|
||||
- Fix assert crash and validate JSON for `--jsonarg`. @wader #2658
|
||||
- Remove deprecated `--argfile` option. @itchyny #2768
|
||||
- Enable stack protection. @nicowilliams #2801
|
||||
|
||||
## Language changes
|
||||
|
||||
- Use decimal number literals to preserve precision. Comparison operations respects precision but arithmetic operations might truncate. @leonid-s-usov #1752
|
||||
|
||||
```sh
|
||||
# precision is preserved
|
||||
$ echo '100000000000000000' | jq .
|
||||
100000000000000000
|
||||
# comparison respects precision (this is false in JavaScript)
|
||||
$ jq -n '100000000000000000 < 100000000000000001'
|
||||
true
|
||||
# sort/0 works
|
||||
$ jq -n -c '[100000000000000001, 100000000000000003, 100000000000000004, 100000000000000002] | sort'
|
||||
[100000000000000001,100000000000000002,100000000000000003,100000000000000004]
|
||||
# arithmetic operations might truncate (same as JavaScript)
|
||||
$ jq -n '100000000000000000 + 10'
|
||||
100000000000000020
|
||||
```
|
||||
|
||||
- Adds new builtin `pick(stream)` to emit a projection of the input object or array. @pkoppstein #2656 #2779
|
||||
|
||||
```sh
|
||||
$ jq -n '{"a": 1, "b": {"c": 2, "d": 3}, "e": 4} | pick(.a, .b.c, .x)'
|
||||
{
|
||||
"a": 1,
|
||||
"b": {
|
||||
"c": 2
|
||||
},
|
||||
"x": null
|
||||
}
|
||||
```
|
||||
|
||||
- Adds new builtin `debug(msgs)` that works like `debug` but applies a filter on the input before writing to stderr. @pkoppstein #2710
|
||||
|
||||
```sh
|
||||
$ jq -n '1 as $x | 2 | debug("Entering function foo with $x == \($x)", .) | (.+1)'
|
||||
["DEBUG:","Entering function foo with $x == 1"]
|
||||
["DEBUG:",2]
|
||||
3
|
||||
$ jq -n '{a: 1, b: 2, c: 3} | debug({a, b, sum: (.a+.b)})'
|
||||
["DEBUG:",{"a":1,"b":2,"sum":3}]
|
||||
{
|
||||
"a": 1,
|
||||
"b": 2,
|
||||
"c": 3
|
||||
}
|
||||
```
|
||||
|
||||
- Adds new builtin `scan($re; $flags)`. Was documented but not implemented. @itchyny #1961
|
||||
|
||||
```sh
|
||||
# look for pattern "ab" in "abAB" ignoring casing
|
||||
$ jq -n '"abAB" | scan("ab"; "i")'
|
||||
"ab"
|
||||
"AB"
|
||||
```
|
||||
|
||||
- Adds new builtin `abs` to get absolute value. This potentially allows the literal value of numbers to be preserved as `length` and `fabs` convert to float. @pkoppstein #2767
|
||||
- Allow `if` without `else`-branch. When skipped the `else`-branch will be `.` (identity). @chancez @wader #1825 #2481
|
||||
|
||||
```sh
|
||||
# convert 1 to "one" otherwise keep as is
|
||||
$ jq -n '1,2 | if . == 1 then "one" end'
|
||||
"one"
|
||||
2
|
||||
# behaves the same as
|
||||
$ jq -n '1,2 | if . == 1 then "one" else . end'
|
||||
"one"
|
||||
2
|
||||
# also works with elif
|
||||
$ jq -n '1,2,3 | if . == 1 then "one" elif . == 2 then "two" end
|
||||
"one"
|
||||
"two"
|
||||
3
|
||||
```
|
||||
|
||||
- Allow use of `$binding` as key in object literals. @nicowilliams 8ea4a55
|
||||
|
||||
```sh
|
||||
$ jq -n '"a" as $key | {$key: 123}'
|
||||
{
|
||||
"a": 123
|
||||
}
|
||||
# previously parentheses were needed
|
||||
$ jq -n '"a" as $key | {($key): 123}'
|
||||
{
|
||||
"a": 123
|
||||
}
|
||||
```
|
||||
|
||||
- Allow dot between chained indexes when using `.["index"]` @nicowilliams #1168
|
||||
|
||||
```sh
|
||||
$ jq -n '{"a": {"b": 123}} | .a["b"]'
|
||||
123
|
||||
# now this also works
|
||||
$ jq -n '{"a": {"b": 123}} | .a.["b"]'
|
||||
123
|
||||
```
|
||||
|
||||
- Allow dot for chained value iterator `.[]`, `.[]?` @wader #2650
|
||||
|
||||
```sh
|
||||
$ jq -n '{"a": [123]} | .a[]'
|
||||
123
|
||||
# now this also works
|
||||
$ jq -n '{"a": [123]} | .a.[]'
|
||||
123
|
||||
```
|
||||
|
||||
- Fix try/catch catches more than it should. @nicowilliams #2750
|
||||
- Speed up and refactor some builtins, also remove `scalars_or_empty/0`. @muhmuhten #1845
|
||||
- Now `halt` and `halt_error` exit immediately instead of continuing to the next input. @emanuele6 #2667
|
||||
- Fix issue converting string to number after previous convert error. @thalman #2400
|
||||
- Fix issue representing large numbers on some platforms causing invalid JSON output. @itchyny #2661
|
||||
- Fix deletion using assigning empty against arrays. @itchyny #2133
|
||||
|
||||
```sh
|
||||
# now this works as expected, filter out all values over 2 by assigning empty
|
||||
$ jq -c '(.[] | select(. >= 2)) |= empty' <<< '[1,5,3,0,7]'
|
||||
[1,0]
|
||||
```
|
||||
|
||||
- Allow keywords to be used as binding name in more places. @emanuele6 #2681
|
||||
- Allow using `nan` as NaN in JSON. @emanuele6 #2712
|
||||
- Expose a module's function names in `modulemeta`. @mrwilson #2837
|
||||
- Fix `contains/1` to handle strings with NUL. @nicowilliams 61cd6db
|
||||
- Fix `stderr/0` to output raw text without any decoration. @itchyny #2751
|
||||
- Fix `nth/2` to emit empty on index out of range. @itchyny #2674
|
||||
- Fix `implode` to not assert and instead replace invalid Unicode codepoints. @wader #2646
|
||||
- Fix `indices/1` and `rindex/1` in case of overlapping matches in strings. @emanuele6 #2718
|
||||
- Fix `sub/3` to resolve issues involving global search-and-replace (gsub) operations. @pkoppstein #2641
|
||||
- Fix `significand/0`, `gamma/0` and `drem/2` to be available on macOS. @itchyny #2756 #2775
|
||||
- Fix empty regular expression matches. @itchyny #2677
|
||||
- Fix overflow exception of the modulo operator. @itchyny #2629
|
||||
- Fix string multiplication by 0 (and less than 1) to emit empty string. @itchyny #2142
|
||||
- Fix segfault when using libjq and threads. @thalman #2546
|
||||
- Fix constant folding of division and reminder with zero divisor. @itchyny #2797
|
||||
- Fix `error/0`, `error/1` to throw null error. @emanuele6 #2823
|
||||
- Simpler and faster `transpose`. @pkoppstein #2758
|
||||
- Simple and efficient implementation of `walk/1`. @pkoppstein #2795
|
||||
- Remove deprecated filters `leaf_paths`, `recurse_down`. @itchyny #2666
|
||||
|
||||
# Previous releases
|
||||
|
||||
Release history
|
||||
|
||||
- jq version 1.6 was released on Fri Nov 2 2018
|
||||
- jq version 1.5 was released on Sat Aug 15 2015
|
||||
- jq version 1.4 was released on Mon Jun 9 2014
|
||||
- jq version 1.3 was released on Sun May 19 2013
|
||||
- jq version 1.2 was released on Thu Dec 20 2012
|
||||
- jq version 1.1 was released on Sun Oct 21 2012
|
||||
- jq version 1.0 was released on Sun Oct 21 2012
|
||||
|
||||
New features in 1.6 since 1.5:
|
||||
|
||||
- Destructuring Alternation
|
||||
|
||||
- New Builtins:
|
||||
- builtins/0
|
||||
- stderr/0
|
||||
- halt/0, halt_error/1
|
||||
- isempty/1
|
||||
- walk/1
|
||||
- utf8bytelength/1
|
||||
- localtime/0, strflocaltime/1
|
||||
- SQL-style builtins
|
||||
- and more!
|
||||
|
||||
- Add support for ASAN and UBSAN
|
||||
|
||||
- Make it easier to use jq with shebangs (8f6f28c)
|
||||
|
||||
- Add $ENV builtin variable to access environment
|
||||
|
||||
- Add JQ_COLORS env var for configuring the output colors
|
||||
|
||||
New features in 1.5 since 1.4:
|
||||
|
||||
- regular expressions (with Oniguruma)
|
||||
|
||||
- a library/module system
|
||||
|
||||
- many new builtins
|
||||
|
||||
- datetime builtins
|
||||
- math builtins
|
||||
- regexp-related builtins
|
||||
- stream-related builtins (e.g., all/1, any/1)
|
||||
- minimal I/O builtins (`inputs`, `debug`)
|
||||
|
||||
- new syntactic features, including:
|
||||
|
||||
- destructuring (`. as [$first, $second] | ...`)
|
||||
- try/catch, generalized `?` operator, and label/break
|
||||
- `foreach`
|
||||
- multiple definitions of a function with different numbers of
|
||||
arguments
|
||||
|
||||
- command-line arguments
|
||||
|
||||
- --join-lines / -j for raw output
|
||||
- --argjson and --slurpfile
|
||||
- --tab and --indent
|
||||
- --stream (streaming JSON parser)
|
||||
- --seq (RFC7464 JSON text sequence)
|
||||
- --run-tests improvements
|
||||
|
||||
- optimizations:
|
||||
|
||||
- tail-call optimization
|
||||
- reduce and foreach no longer leak a reference to .
|
||||
|
||||
New features in 1.4 since 1.3:
|
||||
|
||||
- command-line arguments
|
||||
|
||||
- jq --arg-file variable file
|
||||
- jq --unbuffered
|
||||
- jq -e / --exit-status (set exit status based on outputs)
|
||||
- jq -S / --sort-keys (now jq no longer sorts object keys by
|
||||
default
|
||||
|
||||
- syntax
|
||||
|
||||
- .. -> like // in XPath (recursive traversal)
|
||||
- question mark (e.g., .a?) to suppress errors
|
||||
- ."foo" syntax (equivalent to .["foo"])
|
||||
- better error handling for .foo
|
||||
- added % operator (modulo)
|
||||
- allow negation without requiring extra parenthesis
|
||||
- more function arguments (up to six)
|
||||
|
||||
- filters:
|
||||
|
||||
- any, all
|
||||
- iterables, arrays, objects, scalars, nulls, booleans, numbers,
|
||||
strings, values
|
||||
|
||||
- string built-ins:
|
||||
|
||||
- split
|
||||
- join (join an array of strings with a given separator string)
|
||||
- ltrimstr, rtrimstr
|
||||
- startswith, endswith
|
||||
- explode, implode
|
||||
- fromjson, tojson
|
||||
- index, rindex, indices
|
||||
|
||||
- math functions
|
||||
|
||||
- floor, sqrt, cbrt, etcetera (depends on what's available from libm)
|
||||
|
||||
- libjq -- a C API interface to jq's JSON representation and for
|
||||
running jq programs from C applications
|
||||
@@ -1,74 +1,82 @@
|
||||
jq
|
||||
==
|
||||
# jq
|
||||
|
||||
jq is a lightweight and flexible command-line JSON processor.
|
||||
`jq` is a lightweight and flexible command-line JSON processor akin to `sed`,`awk`,`grep`, and friends for JSON data. It's written in portable C and has zero runtime dependencies, allowing you to easily slice, filter, map, and transform structured data.
|
||||
|
||||
If you want to learn to use jq, read the documentation at
|
||||
[https://jqlang.github.io/jq](https://jqlang.github.io/jq). This
|
||||
documentation is generated from the docs/ folder of this repository.
|
||||
You can also try it online at [jqplay.org](https://jqplay.org).
|
||||
## Documentation
|
||||
|
||||
If you want to hack on jq, feel free, but be warned that its internals
|
||||
are not well-documented at the moment. Bring a hard hat and a
|
||||
shovel. Also, read the wiki: https://github.com/jqlang/jq/wiki, where
|
||||
you will find cookbooks, discussion of advanced topics, internals,
|
||||
release engineering, and more.
|
||||
- **Official Documentation**: [jqlang.org](https://jqlang.org)
|
||||
- **Try jq Online**: [play.jqlang.org](https://play.jqlang.org)
|
||||
|
||||
Source tarball and built executable releases can be found on the
|
||||
homepage and on the github release page, https://github.com/jqlang/jq/releases
|
||||
## Installation
|
||||
|
||||
If you're building directly from the latest git, you'll need flex,
|
||||
bison (3.0 or newer), libtool, make, automake, and autoconf installed.
|
||||
To get regexp support you'll also need to install Oniguruma or clone it as a
|
||||
git submodule as per the instructions below.
|
||||
(note that jq's tests require regexp support to pass). To build, run:
|
||||
### Prebuilt Binaries
|
||||
|
||||
git submodule update --init # if building from git to get oniguruma
|
||||
autoreconf -i # if building from git
|
||||
./configure --with-oniguruma=builtin
|
||||
make -j8
|
||||
make check
|
||||
Download the latest releases from the [GitHub release page](https://github.com/jqlang/jq/releases).
|
||||
The platform-specific assets are standalone executables, not archives. On macOS and Linux,
|
||||
rename the downloaded file to `jq` and make it executable with `chmod +x jq`.
|
||||
|
||||
To build without bison or flex, add `--disable-maintainer-mode` to the
|
||||
./configure invocation:
|
||||
### Docker Image
|
||||
|
||||
./configure --with-oniguruma=builtin --disable-maintainer-mode
|
||||
Pull the [jq image](https://github.com/jqlang/jq/pkgs/container/jq) to start quickly with Docker.
|
||||
|
||||
(Developers must not use `--disable-maintainer-mode`, not when making
|
||||
changes to the jq parser and/or lexer.)
|
||||
#### Run with Docker
|
||||
|
||||
To build a statically linked version of jq, run:
|
||||
##### Example: Extracting the version from a `package.json` file
|
||||
|
||||
make LDFLAGS=-all-static
|
||||
```bash
|
||||
docker run --rm -i ghcr.io/jqlang/jq:latest < package.json '.version'
|
||||
```
|
||||
|
||||
After make finishes, you'll be able to use `./jq`. You can also
|
||||
install it using:
|
||||
##### Example: Extracting the version from a `package.json` file with a mounted volume
|
||||
|
||||
sudo make install
|
||||
```bash
|
||||
docker run --rm -i -v "$PWD:$PWD" -w "$PWD" ghcr.io/jqlang/jq:latest '.version' package.json
|
||||
```
|
||||
|
||||
If you're not using the latest git version but instead building a
|
||||
released tarball (available on the website), then you won't need to
|
||||
run `autoreconf` (and shouldn't), and you won't need flex or bison.
|
||||
### Building from source
|
||||
|
||||
To cross-compile for OS X and Windows, see docs/Rakefile's build task
|
||||
and scripts/crosscompile. You'll need a cross-compilation environment,
|
||||
such as Mingw for cross-compiling for Windows.
|
||||
#### Dependencies
|
||||
|
||||
Cross-compilation requires a clean workspace, then:
|
||||
- libtool
|
||||
- make
|
||||
- automake
|
||||
- autoconf
|
||||
|
||||
# git clean ...
|
||||
autoreconf -i
|
||||
./configure
|
||||
make distclean
|
||||
scripts/crosscompile <name-of-build> <configure-options>
|
||||
#### Instructions
|
||||
|
||||
Use the `--host=` and `--target=` ./configure options to select a
|
||||
cross-compilation environment. See also
|
||||
["Cross compilation"](https://github.com/jqlang/jq/wiki/Cross-compilation) on
|
||||
the wiki.
|
||||
```console
|
||||
git submodule update --init # if building from git to get oniguruma
|
||||
autoreconf -i # if building from git
|
||||
./configure --with-oniguruma=builtin
|
||||
make clean # if upgrading from a version previously built from source
|
||||
make -j8
|
||||
make check
|
||||
sudo make install
|
||||
sudo ldconfig # on Linux, if jq cannot find libjq.so
|
||||
```
|
||||
|
||||
Build a statically linked version:
|
||||
|
||||
# Community
|
||||
```console
|
||||
make clean
|
||||
make LDFLAGS=-all-static
|
||||
```
|
||||
|
||||
* Send questions to https://stackoverflow.com/questions/tagged/jq.
|
||||
* Join our [Discord server](https://discord.gg/yg6yjNmgAC).
|
||||
If you're not using the latest git version but instead building a released tarball (available on the release page), skip the `autoreconf` step, and flex or bison won't be needed.
|
||||
|
||||
##### Cross-Compilation
|
||||
|
||||
For details on cross-compilation, check out the [GitHub Actions file](.github/workflows/ci.yml) and the [cross-compilation wiki page](https://github.com/jqlang/jq/wiki/Cross-compilation).
|
||||
|
||||
## Community & Support
|
||||
|
||||
- Questions & Help: [Stack Overflow (jq tag)](https://stackoverflow.com/questions/tagged/jq)
|
||||
- Chat & Community: [Join us on Discord](https://discord.gg/yg6yjNmgAC)
|
||||
- Wiki & Advanced Topics: [Explore the Wiki](https://github.com/jqlang/jq/wiki)
|
||||
|
||||
## License
|
||||
|
||||
`jq` is released under the [MIT License](COPYING). `jq`'s documentation is
|
||||
licensed under the [Creative Commons CC BY 3.0](COPYING).
|
||||
`jq` uses parts of the open source C library "decNumber", which is distributed
|
||||
under [ICU License](COPYING)
|
||||
@@ -1,68 +0,0 @@
|
||||
environment:
|
||||
matrix:
|
||||
- MSYSTEM: MINGW64
|
||||
PATH: C:\Python36;C:\Python36\Scripts;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\Windows\System32;C:\Windows;%PATH%
|
||||
- MSYSTEM: MINGW32
|
||||
PATH: C:\Python36;C:\Python36\Scripts;C:\msys64\usr\bin;C:\msys64\mingw32\bin;C:\Windows\System32;C:\Windows;%PATH%
|
||||
|
||||
clone_script:
|
||||
- bash -lc "git clone -q --branch=${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH:-$APPVEYOR_REPO_BRANCH} https://github.com/${APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME:-$APPVEYOR_REPO_NAME}.git $APPVEYOR_BUILD_FOLDER"
|
||||
- bash -lc "cd $APPVEYOR_BUILD_FOLDER && git checkout -qf ${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH:APPVEYOR_REPO_BRANCH}"
|
||||
- bash -lc "cd $APPVEYOR_BUILD_FOLDER && git submodule update --init --recursive"
|
||||
|
||||
install:
|
||||
# update msys2
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/bison-3.5.4-1-x86_64.pkg.tar.xz"
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/bison-3.5.4-1-x86_64.pkg.tar.xz.sig"
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/flex-2.6.4-1-x86_64.pkg.tar.xz"
|
||||
- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/flex-2.6.4-1-x86_64.pkg.tar.xz.sig"
|
||||
#- C:\msys64\usr\bin\bash -lc "curl -O http://repo.msys2.org/msys/x86_64/git-2.33.1-1-x86_64.pkg.tar.zst"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman -U --noconfirm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman-key --verify bison-3.5.4-1-x86_64.pkg.tar.xz.sig"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman -U --noconfirm bison-3.5.4-1-x86_64.pkg.tar.xz"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman-key --verify flex-2.6.4-1-x86_64.pkg.tar.xz.sig"
|
||||
- C:\msys64\usr\bin\bash -lc "pacman -U --noconfirm flex-2.6.4-1-x86_64.pkg.tar.xz"
|
||||
- ps: Get-Process | Where-Object {$_.path -like 'C:\msys64*'} | Stop-Process
|
||||
#- C:\msys64\usr\bin\bash -lc "pacman --needed --noconfirm -Sy pacman-mirrors"
|
||||
#- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Su"
|
||||
#- C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S autoconf automake bison flex git"
|
||||
- C:\msys64\usr\bin\bash -lc "pip3 install --upgrade pipenv"
|
||||
- C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER/docs && pipenv sync"
|
||||
|
||||
build_script:
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && autoreconf -i"
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && ./configure --with-oniguruma=builtin --disable-shared --enable-static --enable-all-static"
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && make"
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && cat jq.1 | groff -mandoc -Thtml > jq.html"
|
||||
- 7z a jq-package.zip jq.1 jq.html jq.exe
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && pwd && ls -la"
|
||||
- file jq.exe
|
||||
|
||||
test_script:
|
||||
# tests/optionaltest and tests/shtest fail on Windows; run them
|
||||
# anyways but ignore their failures. Also, trace shtest.
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && make -j3 SUBDIRS= 'TESTS=tests/mantest tests/jqtest tests/onigtest tests/base64test' check"
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && make SUBDIRS= TESTS=tests/optionaltest check || true"
|
||||
- bash -lc "exec 0</dev/null && cd $APPVEYOR_BUILD_FOLDER && make SUBDIRS= TRACE_TESTS=1 TESTS=tests/shtest check || true"
|
||||
|
||||
artifacts:
|
||||
- path: jq-package.zip
|
||||
name: jq-package
|
||||
|
||||
- path: jq.exe
|
||||
name: jq-exe
|
||||
|
||||
- path: test-suite.log
|
||||
name: logs
|
||||
|
||||
|
||||
on_failure:
|
||||
- cat config.log
|
||||
- cat test-suite.log
|
||||
- appveyor PushArtifact test-suite.log
|
||||
# also push the jq.exe so that someone can download it anyways...
|
||||
- appveyor PushArtifact jq-package.zip
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
|
||||
# Defaults
|
||||
set -e
|
||||
oniguruma='6.9.3'
|
||||
oniguruma='6.9.10'
|
||||
|
||||
unset CFLAGS
|
||||
unset CXXFLAGS
|
||||
@@ -89,7 +89,7 @@ cd "${builddir}/"
|
||||
cd ${cwd}
|
||||
[[ ! -f ./configure ]] && autoreconf -ivf
|
||||
CC=${CC} LDFLAGS=${LDFLAGS} \
|
||||
./configure --host=${HOST} --build=$(./config/config.guess) --enable-docs=no --enable-shared=no --enable-static=yes --prefix=/ --with-oniguruma=${cwd}/ios/onig/${arch} $(test -z ${BISON+x} && echo '--disable-maintainer-mode')
|
||||
./configure --host=${HOST} --build=$(./config/config.guess) --enable-docs=no --enable-shared=no --enable-static=yes --prefix=/ --with-oniguruma=${cwd}/ios/onig/${arch} $(test -z ${BISON+x} || echo '--enable-maintainer-mode')
|
||||
make -j${MAKEJOBS} install DESTDIR="${cwd}/ios/jq/${arch}"
|
||||
make clean
|
||||
done
|
||||
|
||||
@@ -2,8 +2,8 @@ dnl AC_CHECK_MATH_FUNC(func)
|
||||
AC_DEFUN([AC_CHECK_MATH_FUNC], [
|
||||
AC_LANG(C)
|
||||
AC_CHECK_LIB([m],[$1],[
|
||||
eval "ac_tr_func=HAVE_[]upcase($1)"
|
||||
AC_DEFINE_UNQUOTED($ac_tr_func)
|
||||
m4_define([ac_tr_func], [HAVE_]m4_toupper($1))
|
||||
AC_DEFINE(ac_tr_func, 1, [Define if you have the $1 math function.])
|
||||
],[
|
||||
])
|
||||
])
|
||||
@@ -42,7 +42,7 @@ case "$ac_res" in
|
||||
yes)
|
||||
eval "ac_cv_func_$1=yes"
|
||||
eval "LIB_$1="
|
||||
AC_DEFINE_UNQUOTED($ac_tr_func)
|
||||
AC_DEFINE_UNQUOTED($ac_tr_func, 1, [Define if the $1 function is available.])
|
||||
AC_MSG_RESULT([yes])
|
||||
;;
|
||||
no)
|
||||
@@ -53,8 +53,8 @@ case "$ac_res" in
|
||||
*)
|
||||
eval "ac_cv_func_$1=yes"
|
||||
eval "ac_cv_lib_`echo "$ac_res" | sed 's/-l//'`=yes"
|
||||
AC_DEFINE_UNQUOTED($ac_tr_func)
|
||||
AC_DEFINE_UNQUOTED($ac_tr_lib)
|
||||
AC_DEFINE_UNQUOTED($ac_tr_func, 1, [Define if you have the $1 function.])
|
||||
AC_DEFINE_UNQUOTED($ac_tr_lib, 1, [Define if you have the $2 library.])
|
||||
AC_MSG_RESULT([yes, in $ac_res])
|
||||
;;
|
||||
esac
|
||||
|
||||
+41
-33
@@ -1,22 +1,27 @@
|
||||
m4_define([jq_version], m4_esyscmd_s([scripts/version])))
|
||||
|
||||
AC_INIT([jq], [jq_version], [https://github.com/jqlang/jq/issues],
|
||||
[jq], [https://jqlang.github.io/jq])
|
||||
AC_INIT([jq],[jq_version],[https://github.com/jqlang/jq/issues],[jq],[https://jqlang.org])
|
||||
|
||||
dnl Created autoconf implementation thompson@dtosolutions, 26NOV12
|
||||
AC_PREREQ([2.64])
|
||||
AC_PREREQ([2.65])
|
||||
AC_CONFIG_AUX_DIR([config])
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
|
||||
dnl Prefer GNU make on Solaris where /usr/bin/make is not suitable
|
||||
AS_IF([test -z "$MAKE"], [
|
||||
AS_CASE(["`uname -s`"], [SunOS], [MAKE=/usr/gnu/bin/make])
|
||||
])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11.2 subdir-objects parallel-tests foreign -Wall])
|
||||
AM_SILENT_RULES([yes])
|
||||
AM_PROG_AR
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
AM_MAINTAINER_MODE([disable])
|
||||
AC_PROG_CC
|
||||
AC_PROG_CC_STDC
|
||||
m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
|
||||
AC_PROG_CPP_WERROR
|
||||
AC_PROG_YACC
|
||||
AC_OBJEXT
|
||||
AC_EXEEXT
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
LT_INIT([shared static win32-dll])
|
||||
AM_PROG_CC_C_O
|
||||
|
||||
@@ -34,54 +39,47 @@ if test "$USE_MAINTAINER_MODE" = yes; then
|
||||
else
|
||||
AX_PROG_BISON_VERSION([3],
|
||||
[],
|
||||
[AC_MSG_ERROR([You need bison version 3.0 or greater, or use --disable-maintainer-mode.])])
|
||||
[AC_MSG_ERROR([You need bison version 3.0 or greater])])
|
||||
fi
|
||||
|
||||
AC_CHECK_PROGS(LEX, flex lex)
|
||||
fi
|
||||
|
||||
dnl Check for valgrind
|
||||
AC_CHECK_PROGS(valgrind_cmd, valgrind)
|
||||
if test "x$valgrind_cmd" = "x" ; then
|
||||
AC_MSG_WARN([valgrind is required to test jq.])
|
||||
fi
|
||||
AC_CHECK_FUNCS(memmem)
|
||||
AC_CHECK_FUNCS(mkstemp)
|
||||
|
||||
AC_CHECK_HEADER("sys/cygwin.h", [have_cygwin=1;])
|
||||
AC_CHECK_HEADER("shlwapi.h",[have_shlwapi=1;])
|
||||
AM_CONDITIONAL([WIN32], [test \( "x$have_shlwapi" = x1 \) -a ! \( "x$have_cygwin" = x1 \)])
|
||||
AM_CONDITIONAL([WIN32], [test "x$have_shlwapi" = x1 && test ! "x$have_cygwin" = x1])
|
||||
|
||||
dnl Running tests with Valgrind is slow. It is faster to iterate on
|
||||
dnl code without Valgrind until tests pass, then enable Valgrind and
|
||||
dnl fix leaks.
|
||||
AC_ARG_ENABLE([valgrind],
|
||||
AC_HELP_STRING([--disable-valgrind], [do not run tests under Valgrind]))
|
||||
AS_HELP_STRING([--enable-valgrind],[enable Valgrind during testing]))
|
||||
|
||||
dnl Running tests with Valgrind is slow; address sanitizer (ASAN) is
|
||||
dnl faster.
|
||||
dnl Address sanitizer (ASan)
|
||||
AC_ARG_ENABLE([asan],
|
||||
AC_HELP_STRING([--enable-asan], [enable address sanitizer]))
|
||||
AS_HELP_STRING([--enable-asan],[enable address sanitizer]))
|
||||
|
||||
dnl Undefined Behavior Sanitizer
|
||||
AC_ARG_ENABLE([ubsan],
|
||||
AC_HELP_STRING([--enable-ubsan], [enable undefined behavior sanitizer]))
|
||||
AS_HELP_STRING([--enable-ubsan],[enable undefined behavior sanitizer]))
|
||||
|
||||
dnl Code coverage
|
||||
AC_ARG_ENABLE([gcov],
|
||||
AC_HELP_STRING([--enable-gcov], [enable gcov code coverage tool]))
|
||||
AS_HELP_STRING([--enable-gcov],[enable gcov code coverage tool]))
|
||||
|
||||
dnl Don't attempt to build docs if python deps aren't installed
|
||||
AC_ARG_ENABLE([docs],
|
||||
AC_HELP_STRING([--disable-docs], [don't build docs]), [], [enable_docs=yes])
|
||||
AS_HELP_STRING([--disable-docs],[do not build docs]), [], [enable_docs=yes])
|
||||
|
||||
dnl Don't attempt to build the error injection object (if there is no LD_PRELOAD support)
|
||||
AC_ARG_ENABLE([error-injection],
|
||||
AC_HELP_STRING([--enable-error-injection], [build and test with error injection]))
|
||||
AS_HELP_STRING([--enable-error-injection],[build and test with error injection]))
|
||||
|
||||
dnl Enable building all static
|
||||
AC_ARG_ENABLE([all-static],
|
||||
AC_HELP_STRING([--enable-all-static], [link jq with static libraries only]))
|
||||
AS_HELP_STRING([--enable-all-static],[link jq with static libraries only]))
|
||||
|
||||
dnl find pipenv
|
||||
AC_ARG_VAR([PIPENV], [pipenv command])
|
||||
@@ -110,13 +108,13 @@ AS_IF([test "x$enable_docs" != "xno"],[
|
||||
|
||||
dnl Disable decNumber support
|
||||
AC_ARG_ENABLE([decnum],
|
||||
AC_HELP_STRING([--disable-decnum], [disable decnum support]))
|
||||
AS_HELP_STRING([--disable-decnum],[disable decnum support]))
|
||||
|
||||
AS_IF([test "x$enable_decnum" != "xno"],[
|
||||
AC_DEFINE([USE_DECNUM],1)
|
||||
AC_DEFINE([USE_DECNUM], 1, [Define to enable decnum support.])
|
||||
])
|
||||
|
||||
AM_CONDITIONAL([ENABLE_VALGRIND], [test "x$enable_valgrind" != xno])
|
||||
AM_CONDITIONAL([ENABLE_VALGRIND], [test "x$enable_valgrind" = xyes])
|
||||
AM_CONDITIONAL([ENABLE_ASAN], [test "x$enable_asan" = xyes])
|
||||
AM_CONDITIONAL([ENABLE_UBSAN], [test "x$enable_ubsan" = xyes])
|
||||
AM_CONDITIONAL([ENABLE_GCOV], [test "x$enable_gcov" = xyes])
|
||||
@@ -127,7 +125,7 @@ AM_CONDITIONAL([ENABLE_ALL_STATIC], [test "x$enable_all_static" = xyes])
|
||||
dnl Find pthread, if we have it. We do this first because we may set -pthread on CFLAGS
|
||||
dnl which can cause various macros to be defined (__REENTRANT on Darwin, for example)
|
||||
AX_PTHREAD([
|
||||
AC_DEFINE([HAVE_PTHREAD], [1])
|
||||
AC_DEFINE([HAVE_PTHREAD], [1], [Define to enable POSIX threads support.])
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
CC="$PTHREAD_CC"
|
||||
@@ -150,6 +148,9 @@ AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_TM_GMT_OFF],1,[Define
|
||||
[], [[#include <time.h>]])
|
||||
AC_CHECK_MEMBER([struct tm.__tm_gmtoff], [AC_DEFINE([HAVE_TM___TM_GMT_OFF],1,[Define to 1 if the system has the __tm_gmt_off field in struct tm])],
|
||||
[], [[#include <time.h>]])
|
||||
AC_FIND_FUNC([setlocale], [c], [#include <locale.h>], [0,0])
|
||||
AC_FIND_FUNC([arc4random], [c], [#include <stdlib.h>], [])
|
||||
AC_FIND_FUNC([getentropy], [c], [#include <unistd.h>], [0, 0])
|
||||
|
||||
dnl Figure out if we have the pthread functions we actually need
|
||||
AC_FIND_FUNC_NO_LIBS([pthread_key_create], [], [#include <pthread.h>], [NULL, NULL])
|
||||
@@ -202,7 +203,6 @@ AC_CHECK_MATH_FUNC(lgamma_r)
|
||||
AC_CHECK_MATH_FUNC(nearbyint)
|
||||
AC_CHECK_MATH_FUNC(nextafter)
|
||||
AC_CHECK_MATH_FUNC(nexttoward)
|
||||
AC_CHECK_MATH_FUNC(pow10) # Not available with glibc version >= 2.27
|
||||
AC_CHECK_MATH_FUNC(pow)
|
||||
AC_CHECK_MATH_FUNC(remainder)
|
||||
AC_CHECK_MATH_FUNC(rint)
|
||||
@@ -276,10 +276,10 @@ AS_IF([test "x$with_oniguruma" != xno], [
|
||||
AC_MSG_NOTICE([Oniguruma was not found. Will use the packaged oniguruma.])
|
||||
])
|
||||
])
|
||||
AS_IF([test "x$build_oniguruma" = xyes -a -f "${srcdir}/modules/oniguruma/configure.ac" ], [
|
||||
onig_CFLAGS="-I${srcdir}/modules/oniguruma/src"
|
||||
onig_LDFLAGS="-L${srcdir}/modules/oniguruma/src -Wl,-rpath,${libdir}"
|
||||
AC_CONFIG_SUBDIRS([modules/oniguruma])
|
||||
AS_IF([test "x$build_oniguruma" = xyes && test -f "${srcdir}/vendor/oniguruma/configure.ac" ], [
|
||||
onig_CFLAGS="-I${srcdir}/vendor/oniguruma/src"
|
||||
onig_LDFLAGS="-L${srcdir}/vendor/oniguruma/src -Wl,-rpath,${libdir}"
|
||||
AC_CONFIG_SUBDIRS([vendor/oniguruma])
|
||||
AC_DEFINE([HAVE_LIBONIG],1,[Define to 1 if the system includes libonig])
|
||||
])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
@@ -289,7 +289,15 @@ AC_SUBST(onig_CFLAGS)
|
||||
AC_SUBST(onig_LDFLAGS)
|
||||
|
||||
AM_CONDITIONAL([BUILD_ONIGURUMA], [test "x$build_oniguruma" = xyes])
|
||||
AC_SUBST([BUNDLER], ["$bundle_cmd"])
|
||||
AM_CONDITIONAL([WITH_ONIGURUMA], [test "x$with_oniguruma" != xno])
|
||||
|
||||
dnl On Solaris, strptime clears the tm structure before parsing. This breaks the
|
||||
dnl sentinel logic in builtin.c, which then incorrectly assumes that strptime set
|
||||
dnl tm_wday and tm_yday. Defining _STRPTIME_DONTZERO disables that behavior.
|
||||
AS_IF([test "x`uname -s 2>/dev/null`" = "xSunOS"], [
|
||||
CPPFLAGS="$CPPFLAGS -D_STRPTIME_DONTZERO"
|
||||
])
|
||||
|
||||
|
||||
AC_CONFIG_MACRO_DIRS([config/m4 m4])
|
||||
AC_CONFIG_FILES([Makefile libjq.pc])
|
||||
|
||||
+3
-1
@@ -9,4 +9,6 @@ verify_ssl = true
|
||||
jinja2 = "*"
|
||||
pyyaml = "*"
|
||||
markdown = "*"
|
||||
lxml = "*"
|
||||
lxml = "*"
|
||||
jsonschema = "*"
|
||||
importlib_resources = "*"
|
||||
Generated
+507
-172
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "16a9ef323592a417142c30be17e58c3cf36dc2bfdbf4757106a796b22262a1ce"
|
||||
"sha256": "14036c3c9f103c52a0c5a53346ef33c2fbef409697f9eb314da51ccdd3aa9fb2"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
@@ -14,212 +14,547 @@
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"attrs": {
|
||||
"hashes": [
|
||||
"sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11",
|
||||
"sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"
|
||||
],
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==25.4.0"
|
||||
},
|
||||
"importlib-metadata": {
|
||||
"hashes": [
|
||||
"sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15",
|
||||
"sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"
|
||||
"sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000",
|
||||
"sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"
|
||||
],
|
||||
"markers": "python_version < '3.8'",
|
||||
"version": "==4.8.1"
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==8.7.0"
|
||||
},
|
||||
"importlib-resources": {
|
||||
"hashes": [
|
||||
"sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2",
|
||||
"sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==6.0.0"
|
||||
},
|
||||
"jinja2": {
|
||||
"hashes": [
|
||||
"sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45",
|
||||
"sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"
|
||||
"sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d",
|
||||
"sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.0.2"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.1.6"
|
||||
},
|
||||
"jsonschema": {
|
||||
"hashes": [
|
||||
"sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326",
|
||||
"sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.10'",
|
||||
"version": "==4.26.0"
|
||||
},
|
||||
"jsonschema-specifications": {
|
||||
"hashes": [
|
||||
"sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe",
|
||||
"sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"
|
||||
],
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==2025.9.1"
|
||||
},
|
||||
"lxml": {
|
||||
"hashes": [
|
||||
"sha256:079f3ae844f38982d156efce585bc540c16a926d4436712cf4baee0cce487a3d",
|
||||
"sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3",
|
||||
"sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2",
|
||||
"sha256:1b38116b6e628118dea5b2186ee6820ab138dbb1e24a13e478490c7db2f326ae",
|
||||
"sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f",
|
||||
"sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927",
|
||||
"sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3",
|
||||
"sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7",
|
||||
"sha256:3082c518be8e97324390614dacd041bb1358c882d77108ca1957ba47738d9d59",
|
||||
"sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f",
|
||||
"sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade",
|
||||
"sha256:36108c73739985979bf302006527cf8a20515ce444ba916281d1c43938b8bb96",
|
||||
"sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468",
|
||||
"sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b",
|
||||
"sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4",
|
||||
"sha256:4c61b3a0db43a1607d6264166b230438f85bfed02e8cff20c22e564d0faff354",
|
||||
"sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83",
|
||||
"sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04",
|
||||
"sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16",
|
||||
"sha256:64812391546a18896adaa86c77c59a4998f33c24788cadc35789e55b727a37f4",
|
||||
"sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791",
|
||||
"sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a",
|
||||
"sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51",
|
||||
"sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1",
|
||||
"sha256:76fa7b1362d19f8fbd3e75fe2fb7c79359b0af8747e6f7141c338f0bee2f871a",
|
||||
"sha256:7728e05c35412ba36d3e9795ae8995e3c86958179c9770e65558ec3fdfd3724f",
|
||||
"sha256:8157dadbb09a34a6bd95a50690595e1fa0af1a99445e2744110e3dca7831c4ee",
|
||||
"sha256:820628b7b3135403540202e60551e741f9b6d3304371712521be939470b454ec",
|
||||
"sha256:884ab9b29feaca361f7f88d811b1eea9bfca36cf3da27768d28ad45c3ee6f969",
|
||||
"sha256:89b8b22a5ff72d89d48d0e62abb14340d9e99fd637d046c27b8b257a01ffbe28",
|
||||
"sha256:92e821e43ad382332eade6812e298dc9701c75fe289f2a2d39c7960b43d1e92a",
|
||||
"sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa",
|
||||
"sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106",
|
||||
"sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d",
|
||||
"sha256:c1a40c06fd5ba37ad39caa0b3144eb3772e813b5fb5b084198a985431c2f1e8d",
|
||||
"sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617",
|
||||
"sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4",
|
||||
"sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92",
|
||||
"sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0",
|
||||
"sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4",
|
||||
"sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24",
|
||||
"sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2",
|
||||
"sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e",
|
||||
"sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0",
|
||||
"sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654",
|
||||
"sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2",
|
||||
"sha256:f8380c03e45cf09f8557bdaa41e1fa7c81f3ae22828e1db470ab2a6c96d8bc23",
|
||||
"sha256:f90ba11136bfdd25cae3951af8da2e95121c9b9b93727b1b896e3fa105b2f586"
|
||||
"sha256:032a0a97eed428bd143c75a11118238546424ceb2fa311cca5f073aa44658dc4",
|
||||
"sha256:05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9",
|
||||
"sha256:0794e04ba343852c6d78e996c58ef4b8e579b4ecc72f8df0d4058bf843b4c96e",
|
||||
"sha256:0ab2467e405e748d93495fb5568e74044802b8d3ff2b2a1607c3f78c6e982de5",
|
||||
"sha256:0bf5a3e397df2ec4258eb5eea4c1ac6cf013ca1abd04a176903bff20a70021fe",
|
||||
"sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc",
|
||||
"sha256:0dee106e9aa97fb00541b1ed7827070564d0549c3d3fba8920e6b20fd980f748",
|
||||
"sha256:0f17d83c48ee9dfd96abae3ac3e2108c76d2fc86ce96355e37b8da9f7f4ecc08",
|
||||
"sha256:0feebef8d0521188d0157f758356072e840173aa61ca45b8b3f87959ac283dd5",
|
||||
"sha256:13a620a3fcc20023f9e6ed5c383e00e826f1c2d5db554df2f67240760f9118e8",
|
||||
"sha256:13d22c0d57355366b393936acf6b98a5e0edeadddd3fccbc6a846c50a76b8741",
|
||||
"sha256:160fcf381f76c3aeac28a756bec44f48942a8f7245a87aa28e3a523b4d90cd87",
|
||||
"sha256:16148acd77ed1d8836a56db883af2f5eed720f9723088110b16a0d08582130a6",
|
||||
"sha256:170773d8a3cdc76259065523ddd978c44f9806e28605f08812e8f86783e44ac6",
|
||||
"sha256:18293f8a8d8b6a8e71ef37706b659e3846a4261232158167b1ddf35f6994f633",
|
||||
"sha256:18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a",
|
||||
"sha256:1a635e837b50a1819bebfedaac5916498ea024120969da8790500148fb0a894d",
|
||||
"sha256:1aeca87830c4fe649dcf93fe2b059525b71c72587f21be4ae4af7103082a79fa",
|
||||
"sha256:1b7c37339d7e75cab9a123a04248e243cefefb302ad6db566ea0c77cbcde421e",
|
||||
"sha256:1beb0f9909b26cee938df9ba56b15252a84429b1fc30ce6fca161390b9789a70",
|
||||
"sha256:20384c2bbcbf87180c8c61eb60869699c1ec0cd09b62cfd13804022d860b0867",
|
||||
"sha256:20428910dae17a1a93152a3ff2c0441d2f4932992c0797d65651dd0561f1792f",
|
||||
"sha256:207dfc3d47cf0e575e643bbc140dacc8863b39abaa1e5307cd64c7f2365b8a12",
|
||||
"sha256:209c3ccbfe35a04ac6d24f0611f9d1cbf8025d49991b14acd935236234d6c156",
|
||||
"sha256:2123e5aa075ac20d23c7af489255efd129cbfe190dbe88fd42598cc9df3199b6",
|
||||
"sha256:21402998e4b78e7cce237d2788841aaa21ac9a4d1574d04dc2d12ee41ae807b5",
|
||||
"sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75",
|
||||
"sha256:22eec57e26c418cde02c051ce9914a365e52a7f135a565c6f0480242aeebab48",
|
||||
"sha256:23c366231259cd75ad06495174701afb3fcb36a92917fa47de2d1f1bd9d95739",
|
||||
"sha256:25f4118c438f96bb466e83108506d03d5c31b1bd2387e83e5b070bda6ded9c37",
|
||||
"sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626",
|
||||
"sha256:290f66b97ede0e552e1cb44a0fd8a74f9753ee635b50830a0b122fb72788d015",
|
||||
"sha256:2b9b1325ca1c2a9a2dbb6eb913ae563313f2082ae60b03210f7e83ee80712274",
|
||||
"sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165",
|
||||
"sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e",
|
||||
"sha256:2e01125896585139453cab8cb235893644d8815d7509520da95ae3ee8d1c1f79",
|
||||
"sha256:2e62c569ec7531b679b184cbfe335c501c1d13c4b363560013019962eb630e6d",
|
||||
"sha256:2f5b2a2b9811b853b39bfa41367c6d78747b8e3e80e07fc5a24aae295c1a4d7d",
|
||||
"sha256:302f72413251c03f671e063c9414bed5dc8c927069e5abb69245521e51a4e81b",
|
||||
"sha256:32a409be3190b088f960ac92bfedfbef2f86c49ff940765e1548177592d20026",
|
||||
"sha256:33cadd956b667997e4de1635fce9541f2e8ede2038fcde8cf55aa14d571d1bad",
|
||||
"sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11",
|
||||
"sha256:3847e71a78cbbc1aff955dbbbaf2fff12153f611d3162c5beaa3395636cbc2f9",
|
||||
"sha256:38fc4e4e4e084e0bd491949482527d406788045c546d4f8789e93fc527b91385",
|
||||
"sha256:3a27ac6c780c8b8a1cd231b58407634cafc1c4cc28cd6c7141362df0f36351e7",
|
||||
"sha256:3a48093cdb058a93af842ede9703520e810b05dcd0fc6d7190a06376c3bfb6bd",
|
||||
"sha256:3e42265103fb385d8642a78672edf376c6f7e1d3598a7a4f9cb1278f2f6b5f6f",
|
||||
"sha256:3e9a00d1c2c30936f7add097c41afc5da6556c580909104aafd382cac92a855c",
|
||||
"sha256:40983eabefd13da003e68170928c7acc011f0d095eefce5871a3c71c9385fb9a",
|
||||
"sha256:40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221",
|
||||
"sha256:41096ec0740a58dad03d3ae0c7486d306d20becefb13ceb1649835ab3eb64167",
|
||||
"sha256:415e3a115c0d510e329020012834d1c0aa1c581ee53a218603e38abbc1dea70a",
|
||||
"sha256:41e2d428110b408e963b6fb18f9bbf1f5c027b56bd4b498d54556476c0aeb1c3",
|
||||
"sha256:424aa5657141d306ba9ad1baab4b2c0a0719040075ee6c66aee9bb2dea2b5054",
|
||||
"sha256:42632b4024ab24a6b488f559ac851312509888b6b80ae2aa11cf29a646a0d245",
|
||||
"sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21",
|
||||
"sha256:4736e6c87e603146d8949d8501da621ad20c31015060d3fcf95ace2859f3e3e6",
|
||||
"sha256:48542c9acba9ff9450bd18d871d2c2c8787fdb283572b623d206f1b927cd7d9e",
|
||||
"sha256:49fbc2682a9306135b7ec49e93f97f9c26689b9b7f96ed2742d8d6497e994d13",
|
||||
"sha256:4a579dfb9c835f8ab47f4b8ed33440cbc75b806b73297208e6ec2a33e903740b",
|
||||
"sha256:4b061064b4a2fe8598a466d723d43dbcd5a610a5d5cfe02fb6226f5c17349f75",
|
||||
"sha256:4e11e885e0704be185867fcf71b904d8f65d7d6877bc121f69870b0d0479ba7b",
|
||||
"sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d",
|
||||
"sha256:527195c188d7d0af748cd48d220ab8cdc5cb99be3d49ac4d9be7324d8abf9bc0",
|
||||
"sha256:53258656846f5c48996b882fb4b135885e088a3ad3d96b4bc0530f95124d1f69",
|
||||
"sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414",
|
||||
"sha256:5609efdb0d3c95499c00046bc53648b3482ec2175b5503d6e611b3f0555dc71d",
|
||||
"sha256:5929d9df5e7e3379183be0e21f7d559618a5b61cb63280df6164019242e337ed",
|
||||
"sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f",
|
||||
"sha256:5a721a98c649855963811b59b55755b30566e7f7fc40bdc9803d66dee9f811cf",
|
||||
"sha256:5cffe18571ccc51d742cd08cbb3f8b756de9311d18c7ea98f5d92f37b8fb60c2",
|
||||
"sha256:5d12669a2c419b0e8dc423d23dea24bb82f6f9cb829f32e04674b0ba40322a7c",
|
||||
"sha256:5d582042c69857c364e8153de6e18e0da9b7b515a6a8113caf69a6ec8e0520f2",
|
||||
"sha256:61116cec57ed69aebc70f37a545eec095339bb829efbdabcfb97c51e9536e158",
|
||||
"sha256:611a51e61c92f62345a50b0035df6fc0d678f9299f33728826d831598862f59d",
|
||||
"sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d",
|
||||
"sha256:6374e9e382e5a98c9c5e66d41b357b470da1c54bce30f17f9dc4bcc58436cc1c",
|
||||
"sha256:66299564c046bc7e0cc5de5106601eae907e9fa5904cd68a323380a8502f7861",
|
||||
"sha256:69cafd61aea04ebb3502c93c2aaa568b12931ca0802231e0b5de76bf8b6e74bd",
|
||||
"sha256:6a406d0b3cb207b0fa460ed4dc93e866f44f105da0169361cb18ff998a44c7f0",
|
||||
"sha256:6ba4fe5bfbef6811a8e49b3719cde373ad399006c0c1ac184b7297116ecbba5d",
|
||||
"sha256:6cd11e7550d89e551a87dcec30f04b1fca32e86b68708aa01a4daa455d8605e5",
|
||||
"sha256:6e1eb8a4cbffd5553680ad96be6680e364710656eced73d1dc90ec489df599a3",
|
||||
"sha256:6ea2f13dce778ca072ccee598bca46a092ce192e8fd907b6c1f0e52c800529a0",
|
||||
"sha256:71532ebf30be0048a45559b4fab15333fbaaf9042f658e878d918ecd0cf09805",
|
||||
"sha256:73fc05988ed20809450474ba760a87c8ad4e455fc09783c02195e56ec634b41a",
|
||||
"sha256:75cc6569e86be5785b6188ef1642670c6adbc984e81ec35e224842ecd9eefcc8",
|
||||
"sha256:773062aec2f2e56b2b22d37054123f0de8a22a4688a0c3376c3fe42685f975cf",
|
||||
"sha256:7ae4949f212a53b007dbc355884fda122545c5764a54256c9217e419a62a6559",
|
||||
"sha256:7b2bb7d703bed7ac893bf7f40d97b5d9279d35d2ce460624ca28929eab0d5a3d",
|
||||
"sha256:7d0f5976aa2701996f759b30172925829867547bb073af0ae67d1307a0f0262c",
|
||||
"sha256:7d5a748d12dd9b535e0a130f60dae9ddf0adafbabe61e7864f55c7436c84547a",
|
||||
"sha256:7dd624c1eaa629ad44b59a1a0145fdf2d67895592dce94c9358b938b3d075e65",
|
||||
"sha256:7f75b9b9fec2a9c6b18095c81865580e795b1441c429e42d22fcc82a77f40039",
|
||||
"sha256:83e3a51e7933db700a0da0db31849db3a24022d9970da9bb73001e1d0326fd92",
|
||||
"sha256:8499d464de86fab0f102313cce32a9bed9ab1f06ec813cf025cb790964fbb765",
|
||||
"sha256:869dfcd4d381cb0ea87085cc4f011b9171b494ef21e76ad8665f6d5e2d1dc8a1",
|
||||
"sha256:8753b8d51dbc86fd335ee31fcf7f3658e9f5c016d4edfb23f76ad295f4b8c9d0",
|
||||
"sha256:887c021d9a977cff89cb273047c1352997b772a8908a25c21836861f69b92be1",
|
||||
"sha256:88e719b9437f148f7e1465df845c758dd1598618cbea3a2fd1e61a715542f2b2",
|
||||
"sha256:8a330c0ee5fa318c7b5cbbaad882baeca3f570357e7eb25ab34bf31008150758",
|
||||
"sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473",
|
||||
"sha256:8e49a646acfab83c68974f4aa1d0a2acca9e88d7d627ae0fc13201b14b76d310",
|
||||
"sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c",
|
||||
"sha256:90f709b9accab6b2e4d14f5c8718203877a0486bcb3afd74d8b539ecd1e961d4",
|
||||
"sha256:92d96586376fb79a33474797186bf993250152ee5c32650b67db78d54b92e6f3",
|
||||
"sha256:93476b6514b373fc6ca67d26c442784f7807c86f00635bfe79f935c3eab2af17",
|
||||
"sha256:97acecb11cbc411473f15b8d780df06d7a9f3a2aad9aca78364f56640c8fb70e",
|
||||
"sha256:97ce49699d87ebf8aad631b55d65b33219a4f1bfefbbf5bff19dc9af160aeaf9",
|
||||
"sha256:9bde9ae026a55b9a192078dfa6e27dd0ca4a050171ab6272e92f97b757dfdf48",
|
||||
"sha256:9e67324961ac9bbe616cce5100514d2e34d88665aeb07071e8b16eac55d06d94",
|
||||
"sha256:9efe56a68179f3adc4de41861c9358931db03837c48dd5e1c78077b84dd07f3a",
|
||||
"sha256:a1932d7ce78a561367512c594fe66eac2b2ec9b9264cfd9b5f950622f4a116e2",
|
||||
"sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55",
|
||||
"sha256:a2e3f70673a1d5b82f38255f777d26cd855bf2092b1436c4867464a7892f9238",
|
||||
"sha256:a43b3bdf11e477dc7770609d3477316f974354dfc8425d596f64f471cc8daf6e",
|
||||
"sha256:a5c18810318303ce9afb3f95e2ddb54834f96fa699a8600433fd5a93dcf44c56",
|
||||
"sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0",
|
||||
"sha256:aa633613ff907ea91b9b0489a1f0da1b8725d8c6ccec6b77e8a1c9c235044bb0",
|
||||
"sha256:aa9fd1ee2a5dacfc41039ed49ffeeacfa75bafbd255b69f3b578e11897a0e623",
|
||||
"sha256:ace1d2c83b2bd24db5940600541140e87a325e119cb32d5fa9ad720d7e76648e",
|
||||
"sha256:b1cc980905221a5d8b3c476330730b3adb40ff80add71ffbdb6215ba055656f1",
|
||||
"sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a",
|
||||
"sha256:b3ff39654f0ce6ebd4db154211136dbe7e8157bcc3bed2344c87f32c7c6ecb6c",
|
||||
"sha256:b477912f42c5c33405a10c759d22f80cf5af043ae02d95b9d8e5e5bc555739ed",
|
||||
"sha256:b49638355ea3bebba70da783ccbc630fd72afa16bc46c54474bfa1f9a915bbc6",
|
||||
"sha256:b4fc6b03b9d9d90557274f571ab30e7fbbfc527955536935d96f98b6817a86e4",
|
||||
"sha256:b50343241eb69fd85f7791cf8bcc7b1c4729826b7d59ba2f6b27db29638fa745",
|
||||
"sha256:bc8dd3d9c93e70c3df974a201ac2958b6d77b465d813c51d1f15fa8e645763ae",
|
||||
"sha256:be5346653c0b0e34be96869ff9dbeba23860156f89a2896a64c64fb419260cb6",
|
||||
"sha256:c00e26288784460885fe76e4d4b293573e0f791f52e6d60e27b42edf005922eb",
|
||||
"sha256:c1b50797ac246bb2942a04b6c0f69af0667aba7cf7535f39bbb1b3208fd5d128",
|
||||
"sha256:c34ca1dc41bd86d9ff830d5bdf4e4a752bba6c54f7d2707027ce0eabd36084c9",
|
||||
"sha256:c55e71a9b1db1f107efb60da49c093689b74c5c31a708e5379e2fd9439d4fbb5",
|
||||
"sha256:c581b1d68b3845fb86c6b2983e755b29bf001461c59fa411d2c26a911b6559a9",
|
||||
"sha256:c59e4265608da6a041f54646ecc0c9ecdbb19aaf14c4c684bb6c2114998cc415",
|
||||
"sha256:c5e7ce578aa8a80910a72a8ca0bbea3baae10100827249001999726a788456d8",
|
||||
"sha256:c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11",
|
||||
"sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8",
|
||||
"sha256:c9389b3784b56c58d933b5e0aecdf28f901b073ff385358d8a7d40907f6e14b2",
|
||||
"sha256:ca0ec532ad2f5ba1e5ec120ac157769c57f01855b3d8bf37213f5d88abd9ba0a",
|
||||
"sha256:cad7617727a96d189bd6f979d0fadf765198c7934e85f4edaba9bf3ad919a300",
|
||||
"sha256:cae82b5ca24b0c2beedb269f6e2a96f466acd926879ab00ae19f1a65cbf9ffb0",
|
||||
"sha256:cc669256d28736f7f3a149df5c380c50ace2692ba3e62203d10656fade4a2145",
|
||||
"sha256:ce1f220114959941170e22b8ad44279f6dee2dcef7591814d01ae805dc058889",
|
||||
"sha256:cfb398886a7eb4c719161c3efcff2a1248febc53a4d8e5072d2d8a87fed84ac9",
|
||||
"sha256:d077f21f4b16f0471353883748f126f62038760397c107bb9fad2ca94dc0dfb7",
|
||||
"sha256:d0c5c362bc94f1929dc7e96e715bbe7bd17037f802e6d8f0d1545df9133c0559",
|
||||
"sha256:d2765c18ce303149ee804b1f3dad11232726dd0a702d73a15cf19179ac8cc962",
|
||||
"sha256:d44442effeb8781f392340c5dc8c6716fba41dbeacb82fd4c0f09026fb5ff682",
|
||||
"sha256:d85dfab42dd672f87a7f76e9de7172962aee69fa12044f0d6e1a23cbd53fb80e",
|
||||
"sha256:d97c5227621af74b111882a290b10f371780a38eef9d9e730408fba2259b52fb",
|
||||
"sha256:d9a0d12846d6ce434fb3857918eef4315ec9b4769deb020c75828798614bfcfd",
|
||||
"sha256:d9b3e7d71bf6acff341233417abbdface29c647e3113892d9aaedc02eb4aa2bc",
|
||||
"sha256:da707f14ea3c35ee463d50acd596d6488e4b2b4ae7cf77a5bf93f55c023d63e8",
|
||||
"sha256:da85db328e507da922d586c3c7416ec360ec22e9cd9e0700691afacde0c81f53",
|
||||
"sha256:dc205732d593118cf701d986f40e9de7801bb2e371cb189ddbda9b7348f4d97e",
|
||||
"sha256:dc3a44689eea43eab836e5c98a8ab015dc2419987d1ea6eafc7c590cdff86bed",
|
||||
"sha256:dd5e90f34cffcfed97f36cf066325773d2b6021c60c29942e53a18b028501b1d",
|
||||
"sha256:ddcf547bea2aee967d6a77779376a45e77e610e8465147a1f3d7e20d539d6e32",
|
||||
"sha256:e477aca0bc0d19f3b4ae9e4f2a1cfd687c31bf772d78734910658186b40b2477",
|
||||
"sha256:e8b17e23df3e827a69d25af70990ca2420e92668aaffaeeb3cd2351d7916a023",
|
||||
"sha256:e99e09ab7741f1281e2677f4c0058c7f5267d182530b09c87e4f6aa26adf3887",
|
||||
"sha256:ea2c01cdb16dc12156e455007c406dfaaece0c89aa4ba0e3b47586779f951d41",
|
||||
"sha256:ea6b1e9105b4b24a34c722432d9fb578f9ed83af21fa1abda639011e0f22bbb6",
|
||||
"sha256:ebd054ad1737a68fb7c5c073d405cef2b88bb824e294de3b4a4e995b47f0e376",
|
||||
"sha256:ec295280f4b37769256da025acf5890370355ac589c27e89caae0b5e9eedc702",
|
||||
"sha256:f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07",
|
||||
"sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5",
|
||||
"sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2",
|
||||
"sha256:f8b9c8ceebae6387d0dc77f7f4dbbfbfc962dba2efbfe6877486075a480726b4",
|
||||
"sha256:fad67b12ffe0f71e02b4932b04883cbc76a9072bbd30731409d3523cf058b011",
|
||||
"sha256:fbfb70ba01355251faf6b293171df49f73a88a1b6494db109ffea85442574458",
|
||||
"sha256:fe91993149523aa59941b9e3c90e2eb45f57ad014697aef6c8b13339a59c019e",
|
||||
"sha256:febd35ef45f603c2d74b74655efdbf45e14f55fc0aef4ac82b663ca829b283e0",
|
||||
"sha256:ff88a92cafde90888511242d1c54afcc1a8adbb6dc0a88fa7f87e29e92400d4a"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.6.3"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==6.1.3"
|
||||
},
|
||||
"markdown": {
|
||||
"hashes": [
|
||||
"sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49",
|
||||
"sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"
|
||||
"sha256:180224db6aed87ba9ce1f2781ebcd5826253de8ff637112090e24b84502bbf9f",
|
||||
"sha256:cd6c89e7eb308c8b332ed673215a52d208a43f8bacc030b1419376129408719e"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.3.4"
|
||||
"markers": "python_version >= '3.11'",
|
||||
"version": "==3.11"
|
||||
},
|
||||
"markupsafe": {
|
||||
"hashes": [
|
||||
"sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298",
|
||||
"sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64",
|
||||
"sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b",
|
||||
"sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194",
|
||||
"sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567",
|
||||
"sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff",
|
||||
"sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724",
|
||||
"sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74",
|
||||
"sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646",
|
||||
"sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35",
|
||||
"sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6",
|
||||
"sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a",
|
||||
"sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6",
|
||||
"sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad",
|
||||
"sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26",
|
||||
"sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38",
|
||||
"sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac",
|
||||
"sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7",
|
||||
"sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6",
|
||||
"sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047",
|
||||
"sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75",
|
||||
"sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f",
|
||||
"sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b",
|
||||
"sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135",
|
||||
"sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8",
|
||||
"sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a",
|
||||
"sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a",
|
||||
"sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1",
|
||||
"sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9",
|
||||
"sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864",
|
||||
"sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914",
|
||||
"sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee",
|
||||
"sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f",
|
||||
"sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18",
|
||||
"sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8",
|
||||
"sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2",
|
||||
"sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d",
|
||||
"sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b",
|
||||
"sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b",
|
||||
"sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86",
|
||||
"sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6",
|
||||
"sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f",
|
||||
"sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb",
|
||||
"sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833",
|
||||
"sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28",
|
||||
"sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e",
|
||||
"sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415",
|
||||
"sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902",
|
||||
"sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f",
|
||||
"sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d",
|
||||
"sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9",
|
||||
"sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d",
|
||||
"sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145",
|
||||
"sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066",
|
||||
"sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c",
|
||||
"sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1",
|
||||
"sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a",
|
||||
"sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207",
|
||||
"sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f",
|
||||
"sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53",
|
||||
"sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd",
|
||||
"sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134",
|
||||
"sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85",
|
||||
"sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9",
|
||||
"sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5",
|
||||
"sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94",
|
||||
"sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509",
|
||||
"sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51",
|
||||
"sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"
|
||||
"sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4",
|
||||
"sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30",
|
||||
"sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0",
|
||||
"sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9",
|
||||
"sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396",
|
||||
"sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13",
|
||||
"sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028",
|
||||
"sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca",
|
||||
"sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557",
|
||||
"sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832",
|
||||
"sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0",
|
||||
"sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b",
|
||||
"sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579",
|
||||
"sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a",
|
||||
"sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c",
|
||||
"sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff",
|
||||
"sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c",
|
||||
"sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22",
|
||||
"sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094",
|
||||
"sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb",
|
||||
"sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e",
|
||||
"sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5",
|
||||
"sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a",
|
||||
"sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d",
|
||||
"sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a",
|
||||
"sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b",
|
||||
"sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8",
|
||||
"sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225",
|
||||
"sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c",
|
||||
"sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144",
|
||||
"sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f",
|
||||
"sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87",
|
||||
"sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d",
|
||||
"sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93",
|
||||
"sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf",
|
||||
"sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158",
|
||||
"sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84",
|
||||
"sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb",
|
||||
"sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48",
|
||||
"sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171",
|
||||
"sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c",
|
||||
"sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6",
|
||||
"sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd",
|
||||
"sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d",
|
||||
"sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1",
|
||||
"sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d",
|
||||
"sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca",
|
||||
"sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a",
|
||||
"sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29",
|
||||
"sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe",
|
||||
"sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798",
|
||||
"sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c",
|
||||
"sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8",
|
||||
"sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f",
|
||||
"sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f",
|
||||
"sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a",
|
||||
"sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178",
|
||||
"sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0",
|
||||
"sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79",
|
||||
"sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430",
|
||||
"sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"
|
||||
],
|
||||
"version": "==2.0.1"
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==3.0.2"
|
||||
},
|
||||
"pkgutil-resolve-name": {
|
||||
"hashes": [
|
||||
"sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174",
|
||||
"sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"
|
||||
],
|
||||
"markers": "python_version < '3.9'",
|
||||
"version": "==1.3.10"
|
||||
},
|
||||
"pyyaml": {
|
||||
"hashes": [
|
||||
"sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293",
|
||||
"sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b",
|
||||
"sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57",
|
||||
"sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b",
|
||||
"sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4",
|
||||
"sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07",
|
||||
"sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba",
|
||||
"sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9",
|
||||
"sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287",
|
||||
"sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513",
|
||||
"sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0",
|
||||
"sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0",
|
||||
"sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92",
|
||||
"sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f",
|
||||
"sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2",
|
||||
"sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc",
|
||||
"sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c",
|
||||
"sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86",
|
||||
"sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4",
|
||||
"sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c",
|
||||
"sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34",
|
||||
"sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b",
|
||||
"sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c",
|
||||
"sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb",
|
||||
"sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737",
|
||||
"sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3",
|
||||
"sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d",
|
||||
"sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53",
|
||||
"sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78",
|
||||
"sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803",
|
||||
"sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a",
|
||||
"sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174",
|
||||
"sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"
|
||||
"sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c",
|
||||
"sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a",
|
||||
"sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3",
|
||||
"sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956",
|
||||
"sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6",
|
||||
"sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c",
|
||||
"sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65",
|
||||
"sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a",
|
||||
"sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0",
|
||||
"sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b",
|
||||
"sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1",
|
||||
"sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6",
|
||||
"sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7",
|
||||
"sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e",
|
||||
"sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007",
|
||||
"sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310",
|
||||
"sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4",
|
||||
"sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9",
|
||||
"sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295",
|
||||
"sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea",
|
||||
"sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0",
|
||||
"sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e",
|
||||
"sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac",
|
||||
"sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9",
|
||||
"sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7",
|
||||
"sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35",
|
||||
"sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb",
|
||||
"sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b",
|
||||
"sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69",
|
||||
"sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5",
|
||||
"sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b",
|
||||
"sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c",
|
||||
"sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369",
|
||||
"sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd",
|
||||
"sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824",
|
||||
"sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198",
|
||||
"sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065",
|
||||
"sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c",
|
||||
"sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c",
|
||||
"sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764",
|
||||
"sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196",
|
||||
"sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b",
|
||||
"sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00",
|
||||
"sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac",
|
||||
"sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8",
|
||||
"sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e",
|
||||
"sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28",
|
||||
"sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3",
|
||||
"sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5",
|
||||
"sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4",
|
||||
"sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b",
|
||||
"sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf",
|
||||
"sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5",
|
||||
"sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702",
|
||||
"sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8",
|
||||
"sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788",
|
||||
"sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da",
|
||||
"sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d",
|
||||
"sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc",
|
||||
"sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c",
|
||||
"sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba",
|
||||
"sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f",
|
||||
"sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917",
|
||||
"sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5",
|
||||
"sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26",
|
||||
"sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f",
|
||||
"sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b",
|
||||
"sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be",
|
||||
"sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c",
|
||||
"sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3",
|
||||
"sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6",
|
||||
"sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926",
|
||||
"sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==6.0"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==6.0.3"
|
||||
},
|
||||
"referencing": {
|
||||
"hashes": [
|
||||
"sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231",
|
||||
"sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"
|
||||
],
|
||||
"markers": "python_version >= '3.10'",
|
||||
"version": "==0.37.0"
|
||||
},
|
||||
"rpds-py": {
|
||||
"hashes": [
|
||||
"sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f",
|
||||
"sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136",
|
||||
"sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3",
|
||||
"sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7",
|
||||
"sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65",
|
||||
"sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4",
|
||||
"sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169",
|
||||
"sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf",
|
||||
"sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4",
|
||||
"sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2",
|
||||
"sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c",
|
||||
"sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4",
|
||||
"sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3",
|
||||
"sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6",
|
||||
"sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7",
|
||||
"sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89",
|
||||
"sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85",
|
||||
"sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6",
|
||||
"sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa",
|
||||
"sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb",
|
||||
"sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6",
|
||||
"sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87",
|
||||
"sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856",
|
||||
"sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4",
|
||||
"sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f",
|
||||
"sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53",
|
||||
"sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229",
|
||||
"sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad",
|
||||
"sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23",
|
||||
"sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db",
|
||||
"sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038",
|
||||
"sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27",
|
||||
"sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00",
|
||||
"sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18",
|
||||
"sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083",
|
||||
"sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c",
|
||||
"sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738",
|
||||
"sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898",
|
||||
"sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e",
|
||||
"sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7",
|
||||
"sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08",
|
||||
"sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6",
|
||||
"sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551",
|
||||
"sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e",
|
||||
"sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288",
|
||||
"sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df",
|
||||
"sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0",
|
||||
"sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2",
|
||||
"sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05",
|
||||
"sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0",
|
||||
"sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464",
|
||||
"sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5",
|
||||
"sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404",
|
||||
"sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7",
|
||||
"sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139",
|
||||
"sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394",
|
||||
"sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb",
|
||||
"sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15",
|
||||
"sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff",
|
||||
"sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed",
|
||||
"sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6",
|
||||
"sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e",
|
||||
"sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95",
|
||||
"sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d",
|
||||
"sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950",
|
||||
"sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3",
|
||||
"sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5",
|
||||
"sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97",
|
||||
"sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e",
|
||||
"sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e",
|
||||
"sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b",
|
||||
"sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd",
|
||||
"sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad",
|
||||
"sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8",
|
||||
"sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425",
|
||||
"sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221",
|
||||
"sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d",
|
||||
"sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825",
|
||||
"sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51",
|
||||
"sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e",
|
||||
"sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f",
|
||||
"sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8",
|
||||
"sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f",
|
||||
"sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d",
|
||||
"sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07",
|
||||
"sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877",
|
||||
"sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31",
|
||||
"sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58",
|
||||
"sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94",
|
||||
"sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28",
|
||||
"sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000",
|
||||
"sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1",
|
||||
"sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1",
|
||||
"sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7",
|
||||
"sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7",
|
||||
"sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40",
|
||||
"sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d",
|
||||
"sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0",
|
||||
"sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84",
|
||||
"sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f",
|
||||
"sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a",
|
||||
"sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7",
|
||||
"sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419",
|
||||
"sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8",
|
||||
"sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a",
|
||||
"sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9",
|
||||
"sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be",
|
||||
"sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed",
|
||||
"sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a",
|
||||
"sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d",
|
||||
"sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324",
|
||||
"sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f",
|
||||
"sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2",
|
||||
"sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f",
|
||||
"sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5"
|
||||
],
|
||||
"markers": "python_version >= '3.10'",
|
||||
"version": "==0.30.0"
|
||||
},
|
||||
"typing-extensions": {
|
||||
"hashes": [
|
||||
"sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e",
|
||||
"sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7",
|
||||
"sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"
|
||||
"sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466",
|
||||
"sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"
|
||||
],
|
||||
"markers": "python_version < '3.8'",
|
||||
"version": "==3.10.0.2"
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==4.15.0"
|
||||
},
|
||||
"zipp": {
|
||||
"hashes": [
|
||||
"sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832",
|
||||
"sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"
|
||||
"sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e",
|
||||
"sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"
|
||||
],
|
||||
"version": "==3.6.0"
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==3.23.0"
|
||||
}
|
||||
},
|
||||
"develop": {}
|
||||
|
||||
+13
-8
@@ -5,16 +5,21 @@ The jq website, manpages and some of the tests are generated from this
|
||||
directory. The manual is a YAML file in `content/manual`.
|
||||
|
||||
To build the documentation (including building the jq manpage), you'll
|
||||
need python3 and pipenv. You can install pipenv like so:
|
||||
need `python3` and `pipenv`. You can install `pipenv` like so:
|
||||
|
||||
pip install pipenv
|
||||
|
||||
Though, you may need to say pip3 instead, depending on your system. Once
|
||||
you have pipenv installed, you can install the dependencies by running
|
||||
`pipenv install` from the `docs` directory.
|
||||
Though, you may need to say `pip3` instead, depending on your system. Once
|
||||
you have `pipenv` installed, you can install the dependencies by running
|
||||
`pipenv sync` from the `docs/` directory.
|
||||
|
||||
Once this is done, rerun `./configure` in the jq root directory and then
|
||||
the Makefile will be able to generate the jq manpage.
|
||||
Also, you may need to run `virtualenv -p /usr/bin/python3 venv/` and
|
||||
then `source venv/bin/activate`, and only then `pipenv sync`.
|
||||
|
||||
To build the website, run `pipenv run ./build_website.py` from inside
|
||||
the `docs` directory.
|
||||
Once this is done, rerun `./configure --enable-docs` in the jq root directory and then
|
||||
the `Makefile` will be able to generate the jq manpage. You can just run
|
||||
`make jq.1` to build the manpage manually, and `make tests/man.test` to
|
||||
update the manual tests.
|
||||
|
||||
To build the website, run `pipenv run python3 build_website.py` in the `docs/` directory.
|
||||
To serve them locally, you can run `python3 -m http.server -d output`.
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
from datetime import date
|
||||
from io import StringIO
|
||||
from lxml import etree
|
||||
import markdown
|
||||
@@ -12,9 +11,9 @@ import yaml
|
||||
# Prevent our markdown parser from trying to help by interpreting things in angle brackets as HTML tags.
|
||||
class EscapeHtml(Extension):
|
||||
|
||||
def extendMarkdown(self, md, md_globals):
|
||||
del md.preprocessors['html_block']
|
||||
del md.inlinePatterns['html']
|
||||
def extendMarkdown(self, md):
|
||||
md.preprocessors.deregister('html_block')
|
||||
md.inlinePatterns.deregister('html')
|
||||
|
||||
|
||||
class RoffWalker(object):
|
||||
@@ -66,8 +65,7 @@ class RoffWalker(object):
|
||||
last_tag = None
|
||||
while root is not None:
|
||||
if root.tag == 'h1':
|
||||
self.__write_cmd('.TH "JQ" "1" "{}" "" ""'.format(
|
||||
date.today().strftime('%B %Y')))
|
||||
self.__write_cmd('.TH "JQ" "1" "" "" ""')
|
||||
self.__write_cmd('.SH "NAME"')
|
||||
# TODO: properly parse this
|
||||
self.__write_raw(r'\fBjq\fR \- Command\-line JSON processor' +
|
||||
@@ -86,6 +84,9 @@ class RoffWalker(object):
|
||||
self.__write_cmd('.P')
|
||||
self._write_element(root, ensure_newline=(parent_tag != 'li'))
|
||||
|
||||
elif root.tag == 'a':
|
||||
self._write_element(root, ensure_newline=(parent_tag != 'li'))
|
||||
|
||||
elif root.tag == 'ul':
|
||||
if self._ul_is_special(root):
|
||||
li = root[0]
|
||||
@@ -206,7 +207,7 @@ def dedent_body(body):
|
||||
|
||||
def convert_manual_to_markdown():
|
||||
f = StringIO()
|
||||
manual = load_yml_file("content/manual/manual.yml")
|
||||
manual = load_yml_file("content/manual/dev/manual.yml")
|
||||
f.write(manual.get('manpage_intro', '\n'))
|
||||
f.write(dedent_body(manual.get('body', '\n')))
|
||||
for section in manual.get('sections', []):
|
||||
@@ -226,7 +227,7 @@ def convert_manual_to_markdown():
|
||||
f.write("jq '{}'\n".format(example.get('program', '')))
|
||||
f.write(" {}\n".format(example.get('input', '')))
|
||||
output = [str(x) for x in example.get('output', [])]
|
||||
f.write("=> {}\n".format(', '.join(output)))
|
||||
f.write("=> {}\n".format('\n '.join(output)))
|
||||
first = False
|
||||
f.write("~~~~\n")
|
||||
f.write('\n')
|
||||
|
||||
+14
-6
@@ -1,13 +1,21 @@
|
||||
#!/usr/bin/env python3
|
||||
import yaml
|
||||
import re
|
||||
|
||||
with open("content/manual/manual.yml") as f:
|
||||
manual = yaml.safe_load(f)
|
||||
regex_program_pattern = re.compile(
|
||||
r'\b(?:test|match|capture|scan|split|splits|sub|gsub)\s*\(')
|
||||
|
||||
with open('content/manual/dev/manual.yml') as source, \
|
||||
open('../tests/man.test', 'w') as man, \
|
||||
open('../tests/manonig.test', 'w') as manonig:
|
||||
manual = yaml.safe_load(source)
|
||||
for section in manual.get('sections', []):
|
||||
for entry in section.get('entries', []):
|
||||
for example in entry.get('examples', []):
|
||||
print(example.get('program', '').replace('\n', ' '))
|
||||
print(example.get('input', ''))
|
||||
program = example.get('program', '').replace('\n', ' ')
|
||||
out = manonig if regex_program_pattern.search(program) else man
|
||||
print(program, file=out)
|
||||
print(example.get('input', ''), file=out)
|
||||
for s in example.get('output', []):
|
||||
print(s)
|
||||
print('')
|
||||
print(s, file=out)
|
||||
print('', file=out)
|
||||
+25
-13
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
import glob
|
||||
import itertools
|
||||
from jinja2 import Environment, FileSystemLoader, Markup, select_autoescape, contextfunction
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape, pass_context
|
||||
from markdown import markdown
|
||||
from markupsafe import Markup
|
||||
import os
|
||||
import os.path
|
||||
import re
|
||||
@@ -20,40 +21,50 @@ def load_yml_file(fn):
|
||||
return yaml.safe_load(f)
|
||||
|
||||
|
||||
env.globals['url'] = 'https://jqlang.org'
|
||||
env.filters['search_id'] = lambda input: input.replace(r'`', '')
|
||||
env.filters['section_id'] = lambda input: re.sub(r"[^a-zA-Z0-9_]", '', input)
|
||||
env.filters['entry_id'] = lambda input: re.sub(r"[ `]", '', input)
|
||||
env.filters['markdownify'] = lambda input: Markup(markdown(input))
|
||||
env.filters['no_paragraph'] = lambda input: Markup(re.sub(r"</?p>", '', input))
|
||||
env.filters['section_id'] = lambda input: re.sub(
|
||||
r'[^-a-zA-Z0-9_]', '', input.replace(' ', '-')).lower()
|
||||
env.filters['entry_id'] = lambda input: re.sub(
|
||||
r'^(split|first-last-nth)$',
|
||||
r'\1' + ('-1' if ';' not in input else '-2'), # avoid id conflict
|
||||
re.sub(
|
||||
r'\b([^-]+)(?:-\1)+\b',
|
||||
r'\1', # e.g. range-range-range -> range
|
||||
re.sub(r' ?/ ?|,? ', '-',
|
||||
re.sub(r'[`;]|: .*|\(.*?\)| \[.+\]', '', input)))).lower()
|
||||
env.filters['markdownify'] = lambda input: Markup(
|
||||
markdown(input, extensions=['md_in_html']))
|
||||
env.filters['no_paragraph'] = lambda input: Markup(re.sub(r'</?p>', '', input))
|
||||
|
||||
env.globals['unique_id'] = contextfunction(
|
||||
env.globals['unique_id'] = pass_context(
|
||||
lambda ctx: str(next(ctx['unique_ctr'])))
|
||||
|
||||
env.globals.update(load_yml_file('site.yml'))
|
||||
|
||||
env.globals['navigation'] = ['tutorial', 'download', 'manual']
|
||||
def raise_handler(message):
|
||||
raise Exception(message)
|
||||
|
||||
|
||||
def generate_file(env, fname='content/1.tutorial/default.yml'):
|
||||
env.globals['raise'] = raise_handler
|
||||
|
||||
|
||||
def generate_file(env, fname):
|
||||
path, base = os.path.split(fname)
|
||||
path = os.path.relpath(path, 'content')
|
||||
if path == '.':
|
||||
path = ''
|
||||
slug = 'index'
|
||||
permalink = ''
|
||||
else:
|
||||
slug = os.path.basename(path)
|
||||
permalink = path + '/'
|
||||
|
||||
output_dir = os.path.join('output', path)
|
||||
output_path = os.path.join(output_dir, 'index.html')
|
||||
|
||||
template_name = re.sub(r".yml$", '.html.j2', base)
|
||||
template_name = re.sub(r'.yml$', '.html.j2', base)
|
||||
|
||||
ctx = load_yml_file(fname)
|
||||
ctx.update(unique_ctr=itertools.count(1),
|
||||
permalink=permalink,
|
||||
slug=slug,
|
||||
navitem=path)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
env.get_template(template_name).stream(ctx).dump(output_path,
|
||||
@@ -71,6 +82,7 @@ def copy_public_files(root=''):
|
||||
shutil.copyfile(f.path, dst)
|
||||
|
||||
|
||||
os.makedirs('output', exist_ok=True)
|
||||
copy_public_files()
|
||||
|
||||
for fn in glob.glob('content/**/*.yml', recursive=True):
|
||||
|
||||
@@ -3,8 +3,9 @@ body:
|
||||
- text: |
|
||||
|
||||
jq is written in C and has no runtime dependencies, so it should be
|
||||
possible to build it for nearly any platform. Prebuilt binaries are
|
||||
available for Linux, macOS and Windows.
|
||||
possible to build it for nearly any platform. The prebuilt files linked
|
||||
below are standalone executables, not archives, and are available for
|
||||
Linux, macOS and Windows.
|
||||
|
||||
The binaries should just run, but on macOS and Linux you may need
|
||||
to make them executable first using `chmod +x jq`.
|
||||
@@ -13,14 +14,14 @@ body:
|
||||
details, read the file `COPYING` in the source distribution.
|
||||
|
||||
jq uses a C library for decimal number support. This is an ICU 1.8.1
|
||||
licensed code obtained from the ICU downloads archive
|
||||
http://download.icu-project.org/files/decNumber/decNumber-icu-368.zip.
|
||||
licensed code obtained from the ICU downloads archive.
|
||||
<https://download.icu-project.org/files/decNumber/decNumber-icu-368.zip>
|
||||
|
||||
|
||||
### Linux
|
||||
|
||||
* jq is in the official [Debian](https://packages.debian.org/jq) and
|
||||
[Ubuntu](http://packages.ubuntu.com/jq) repositories. Install using
|
||||
[Ubuntu](https://packages.ubuntu.com/jq) repositories. Install using
|
||||
`sudo apt-get install jq`.
|
||||
|
||||
* jq is in the official [Fedora](https://src.fedoraproject.org/rpms/jq) repository.
|
||||
@@ -32,49 +33,125 @@ body:
|
||||
* jq is in the official [Arch](https://archlinux.org/packages/?q=jq) repository.
|
||||
Install using `sudo pacman -S jq`.
|
||||
|
||||
* jq 1.6 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64)
|
||||
* jq is in [conda-forge](https://anaconda.org/conda-forge/jq).
|
||||
Install using `conda install -c conda-forge jq`.
|
||||
|
||||
* jq 1.8.2 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-amd64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux32).
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-arm64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-i386).
|
||||
|
||||
<details markdown="1">
|
||||
<summary>Older versions</summary>
|
||||
|
||||
* jq 1.8.1 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-amd64)
|
||||
or
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-arm64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-linux-i386).
|
||||
|
||||
* jq 1.8.0 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-linux-amd64)
|
||||
or
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-linux-arm64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-linux-i386).
|
||||
|
||||
* jq 1.7.1 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64)
|
||||
or
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-arm64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-i386).
|
||||
|
||||
* jq 1.7 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-amd64)
|
||||
or
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-arm64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-linux-i386).
|
||||
|
||||
* jq 1.6 binaries for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux32).
|
||||
|
||||
* jq 1.5 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-linux64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-linux64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-linux32).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-linux32).
|
||||
|
||||
* jq 1.4 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-linux-x86_64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-linux-x86_64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-linux-x86).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-linux-x86).
|
||||
|
||||
* jq 1.3 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-linux-x86_64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-linux-x86_64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-linux-x86).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-linux-x86).
|
||||
|
||||
</details>
|
||||
|
||||
### macOS
|
||||
|
||||
* Use [Homebrew](http://brew.sh/) to install jq with `brew install jq`.
|
||||
* Use [Homebrew](https://brew.sh/) to install jq with `brew install jq`.
|
||||
|
||||
* Use [MacPorts](https://www.macports.org) to install jq with `port install jq`.
|
||||
|
||||
* Use [Fink](https://finkproject.org) to install jq with `fink install jq`.
|
||||
|
||||
* Use [conda-forge](https://anaconda.org/conda-forge/jq) to install jq with
|
||||
`conda install -c conda-forge jq`.
|
||||
|
||||
* jq 1.8.2 binaries for
|
||||
[Apple Silicon](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64)
|
||||
or
|
||||
[Intel Mac](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-amd64).
|
||||
|
||||
<details markdown="1">
|
||||
<summary>Older versions</summary>
|
||||
|
||||
* jq 1.8.1 binaries for
|
||||
[Apple Silicon](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-macos-arm64)
|
||||
or
|
||||
[Intel Mac](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-macos-amd64).
|
||||
|
||||
* jq 1.8.0 binaries for
|
||||
[Apple Silicon](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-macos-arm64)
|
||||
or
|
||||
[Intel Mac](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-macos-amd64).
|
||||
|
||||
* jq 1.7.1 binaries for
|
||||
[Apple Silicon](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-macos-arm64)
|
||||
or
|
||||
[Intel Mac](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-macos-amd64).
|
||||
|
||||
* jq 1.7 binaries for
|
||||
[Apple Silicon](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-macos-arm64)
|
||||
or
|
||||
[Intel Mac](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-macos-amd64).
|
||||
|
||||
* jq 1.6 binary for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-osx-amd64).
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-osx-amd64).
|
||||
|
||||
* jq 1.5 binary for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-osx-amd64).
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-osx-amd64).
|
||||
|
||||
* jq 1.4 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-osx-x86_64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-osx-x86_64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-osx-x86).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-osx-x86).
|
||||
|
||||
* jq 1.3 binaries for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-osx-x86_64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-osx-x86_64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-osx-x86).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-osx-x86).
|
||||
|
||||
</details>
|
||||
|
||||
### FreeBSD
|
||||
|
||||
@@ -92,74 +169,147 @@ body:
|
||||
10+, Sparc and x86.
|
||||
|
||||
* jq 1.4 binaries for Solaris 11
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-solaris11-64)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-solaris11-64)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-solaris11-32).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-solaris11-32).
|
||||
|
||||
### Windows
|
||||
|
||||
* Use [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/)
|
||||
to install jq with `winget install jqlang.jq`.
|
||||
|
||||
* Use [scoop](https://scoop.sh/) to install jq with `scoop install jq`.
|
||||
|
||||
* Use [Chocolatey NuGet](https://chocolatey.org/) to install jq with
|
||||
`chocolatey install jq`.
|
||||
`choco install jq`.
|
||||
|
||||
* jq 1.8.2 executables for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-windows-amd64.exe)
|
||||
or
|
||||
[ARM64](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-windows-arm64.exe)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-windows-i386.exe).
|
||||
|
||||
<details markdown="1">
|
||||
<summary>Older versions</summary>
|
||||
|
||||
* jq 1.8.1 executables for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-windows-amd64.exe)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-windows-i386.exe).
|
||||
|
||||
* jq 1.8.0 executables for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-windows-amd64.exe)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-windows-i386.exe).
|
||||
|
||||
* jq 1.7.1 executables for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-windows-amd64.exe)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-windows-i386.exe).
|
||||
|
||||
* jq 1.7 executables for
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-windows-amd64.exe)
|
||||
or
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-windows-i386.exe).
|
||||
|
||||
* jq 1.6 executables for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-win64.exe)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-win64.exe)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-win32.exe).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-win32.exe).
|
||||
|
||||
* jq 1.5 executables for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-win64.exe)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-win64.exe)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-win32.exe).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-win32.exe).
|
||||
|
||||
* jq 1.4 executables for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-win64.exe)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-win64.exe)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-win32.exe).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.4/jq-win32.exe).
|
||||
|
||||
* jq 1.3 executables for
|
||||
[64-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-win64.exe)
|
||||
[AMD64](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-win64.exe)
|
||||
or
|
||||
[32-bit](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-win32.exe).
|
||||
[i386](https://github.com/jqlang/jq/releases/download/jq-1.3/jq-win32.exe).
|
||||
|
||||
</details>
|
||||
|
||||
### Checksums and signatures
|
||||
|
||||
SHA-256 checksums are provided for all release and pre-release binaries.
|
||||
They can be found under
|
||||
[sig/v1.x/sha256sum.txt](https://github.com/jqlang/jq/tree/master/sig).
|
||||
The checksums for jq 1.6 are in
|
||||
[sig/v1.6/sha256sum.txt](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.6/sha256sum.txt).
|
||||
The checksums for jq 1.5 are in
|
||||
[sig/v1.5/sha256sum.txt](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.5/sha256sum.txt).
|
||||
|
||||
Additionally, all binaries are signed by the
|
||||
[jq Package Signing Key](https://raw.githubusercontent.com/jqlang/jq/master/sig/jq-release.key).
|
||||
The signatures can be found under
|
||||
[sig/v1.x/\*.asc](https://github.com/jqlang/jq/tree/master/sig).
|
||||
The signatures for jq 1.6 are in
|
||||
[sig/v1.5/\*.asc](https://github.com/jqlang/jq/tree/master/sig/v1.6).
|
||||
The signatures for jq 1.5 are in
|
||||
[sig/v1.5/\*.asc](https://github.com/jqlang/jq/tree/master/sig/v1.5).
|
||||
SHA-256 checksums are provided for all release and pre-release binaries,
|
||||
and all release artifacts are signed by a jq release key. We have two release keys,
|
||||
[one for 1.6 and older releases](https://raw.githubusercontent.com/jqlang/jq/master/sig/jq-release-old.key),
|
||||
and
|
||||
[one for 1.7 and newer releases](https://raw.githubusercontent.com/jqlang/jq/master/sig/jq-release-new.key).
|
||||
You can use [GnuPG](https://gnupg.org/) to verify a signature by downloading
|
||||
the signature and running `gpg --verify signature.asc`.
|
||||
|
||||
* jq 1.8.2
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.8.2/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.8.2).
|
||||
|
||||
<details markdown="1">
|
||||
<summary>Older versions</summary>
|
||||
|
||||
* jq 1.8.1
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.8.1/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.8.1).
|
||||
|
||||
* jq 1.8.0
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.8.0/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.8.0).
|
||||
|
||||
* jq 1.7.1
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.7.1/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.7.1).
|
||||
|
||||
* jq 1.7
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.7/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.7).
|
||||
|
||||
* jq 1.6
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.6/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.6).
|
||||
|
||||
* jq 1.5
|
||||
[checksums](https://raw.githubusercontent.com/jqlang/jq/master/sig/v1.5/sha256sum.txt)
|
||||
and
|
||||
[signatures](https://github.com/jqlang/jq/tree/master/sig/v1.5).
|
||||
|
||||
</details>
|
||||
|
||||
### From source on Linux, macOS, Cygwin, and other POSIX-like operating systems
|
||||
|
||||
* [Source tarball for jq 1.8.2](https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-1.8.2.tar.gz)
|
||||
|
||||
<details markdown="1">
|
||||
<summary>Older versions</summary>
|
||||
|
||||
* [Source tarball for jq 1.8.1](https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-1.8.1.tar.gz)
|
||||
* [Source tarball for jq 1.8.0](https://github.com/jqlang/jq/releases/download/jq-1.8.0/jq-1.8.0.tar.gz)
|
||||
* [Source tarball for jq 1.7.1](https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-1.7.1.tar.gz)
|
||||
* [Source tarball for jq 1.7](https://github.com/jqlang/jq/releases/download/jq-1.7/jq-1.7.tar.gz)
|
||||
* [Source tarball for jq 1.6](https://github.com/jqlang/jq/releases/download/jq-1.6/jq-1.6.tar.gz)
|
||||
* [Source tarball for jq 1.5](https://github.com/jqlang/jq/releases/download/jq-1.5/jq-1.5.tar.gz)
|
||||
|
||||
</details>
|
||||
|
||||
You can build it using the usual `./configure && make && sudo
|
||||
make install` rigmarole.
|
||||
|
||||
If you're interested in using the lastest development version, try:
|
||||
If you're interested in using the latest development version, try:
|
||||
|
||||
git clone --recursive https://github.com/jqlang/jq.git
|
||||
cd jq
|
||||
autoreconf -i
|
||||
./configure --disable-maintainer-mode
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
|
||||
@@ -177,21 +327,27 @@ body:
|
||||
On macOS, these are all included in Apple's command line tools, which can
|
||||
be installed from [Xcode](https://developer.apple.com/xcode/). However,
|
||||
you may find that you need a newer version of Bison than the one provided
|
||||
by Apple. This can be found in [Homebrew](http://brew.sh) or
|
||||
by Apple. This can be found in [Homebrew](https://brew.sh/) or
|
||||
[MacPorts](https://macports.org/).
|
||||
|
||||
The `--disable-maintainer-mode` flag says to use the pre-generated lexer
|
||||
and parser that come with the code. To compile the lexer and parser also
|
||||
from source, leave out this flag. You will need to install
|
||||
If you want to generate the lexer and parser from source you can use the
|
||||
`--enable-maintainer-mode` configure flag. This requires bison to be installed.
|
||||
[Flex](https://github.com/westes/flex) and
|
||||
[Bison](https://www.gnu.org/software/bison/).
|
||||
|
||||
### Docker
|
||||
|
||||
Docker image is available from
|
||||
[GitHub Container Registry](https://github.com/jqlang/jq/pkgs/container/jq).
|
||||
|
||||
docker run -i --rm ghcr.io/jqlang/jq -n 'range(3)'
|
||||
|
||||
#### Building the documentation
|
||||
|
||||
jq's documentation is compiled into static HTML using Python.
|
||||
To build the docs, run `pipenv run python3 build_website.py` from
|
||||
the docs/ subdirectory. To serve them locally, you can run
|
||||
`python3 -m SimpleHTTPServer`. You'll need a few Python dependencies,
|
||||
To build the docs, run `pipenv run python3 build_website.py`
|
||||
in the `docs/` directory. To serve them locally, you can run
|
||||
`python3 -m http.server -d output`. You'll need a few Python dependencies,
|
||||
which can be installed by following the instructions in `docs/README.md`.
|
||||
|
||||
The man page is built by `make jq.1`, or just `make`, also from
|
||||
|
||||
+38
-15
@@ -24,29 +24,53 @@ body3: |
|
||||
|
||||
tail: |
|
||||
|
||||
Go read the [tutorial](/jq/tutorial/) for more, or the [manual](/jq/manual/)
|
||||
Go read the [tutorial](./tutorial/) for more, or the [manual](./manual/)
|
||||
for *way* more.
|
||||
|
||||
Ask questions on [stackoverflow](https://stackoverflow.com/) using the [jq
|
||||
tag](https://stackoverflow.com/questions/tagged/jq), or on the
|
||||
[#jq](https://web.libera.chat/#jq) channel on [Libera.Chat](https://libera.chat/).
|
||||
Have a question related to jq? You can seek answers on [Stack Overflow](https://stackoverflow.com/)
|
||||
by using the [jq tag](https://stackoverflow.com/questions/tagged/jq), or in the [#jq channel](https://web.libera.chat/#jq)
|
||||
on [Libera.Chat](https://libera.chat/). For more interactive discussions, feel free to join our [Discord server](https://discord.gg/yg6yjNmgAC).
|
||||
|
||||
news:
|
||||
- date: 20 June 2026
|
||||
body: |
|
||||
jq 1.8.2 released. See [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.8.2) for details.
|
||||
|
||||
- date: 1 July 2025
|
||||
body: |
|
||||
jq 1.8.1 released. See [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.8.1) for details.
|
||||
|
||||
- date: 1 June 2025
|
||||
body: |
|
||||
jq 1.8.0 released. See [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.8.0) for details.
|
||||
|
||||
- date: 13 December 2023
|
||||
body: |
|
||||
jq 1.7.1 released. Security (CVE-2023-50246, CVE-2023-50268) and bug fixes.
|
||||
See [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.7.1) for details.
|
||||
|
||||
- date: 7 September 2023
|
||||
body: |
|
||||
After a five-year hiatus, we've returned with a revitalized [GitHub organization](https://github.com/jqlang)
|
||||
and a much-anticipated 1.7 release, thanks to our new admins and maintainers.
|
||||
Check out the [download](./download/) page for installation options and see the
|
||||
[release notes](https://github.com/jqlang/jq/releases/tag/jq-1.7) for details.
|
||||
|
||||
- date: 1 November 2018
|
||||
body: |
|
||||
jq 1.6 released. See installation options on the [download](/jq/download/)
|
||||
page, and the [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.6)
|
||||
for details.
|
||||
jq 1.6 released. See installation options on the [download](./download/)
|
||||
page, and the [release notes](https://github.com/jqlang/jq/releases/tag/jq-1.6)
|
||||
for details.
|
||||
|
||||
- date: 15 August 2015
|
||||
body: |
|
||||
|
||||
jq 1.5 released, including new datetime, math, and regexp functions,
|
||||
try/catch syntax, array and object destructuring, a streaming parser,
|
||||
and a module system. See installation options on the
|
||||
[download](/jq/download/) page, and the
|
||||
[release notes](https://github.com/jqlang/jq/releases/tag/jq-1.5)
|
||||
for details.
|
||||
jq 1.5 released, including new datetime, math, and regexp functions,
|
||||
try/catch syntax, array and object destructuring, a streaming parser,
|
||||
and a module system. See installation options on the
|
||||
[download](./download/) page, and the
|
||||
[release notes](https://github.com/jqlang/jq/releases/tag/jq-1.5)
|
||||
for details.
|
||||
|
||||
- date: 26 July 2015
|
||||
body: |
|
||||
@@ -63,10 +87,9 @@ news:
|
||||
- date: 09 June 2014
|
||||
body: |
|
||||
|
||||
jq 1.4 (finally) released! Get it on the [download](/jq/download/) page.
|
||||
jq 1.4 (finally) released! Get it on the [download](./download/) page.
|
||||
|
||||
- date: 19 May 2013
|
||||
body: |
|
||||
|
||||
jq 1.3 released.
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Symlink
+1
@@ -0,0 +1 @@
|
||||
v1.8/manual.yml
|
||||
@@ -1,11 +1,6 @@
|
||||
---
|
||||
headline: jq 1.3 Manual
|
||||
|
||||
history: |
|
||||
|
||||
*The manual for the development version of jq can be found
|
||||
[here](/jq/manual).*
|
||||
|
||||
body: |
|
||||
|
||||
A jq program is a "filter": it takes an input, and produces an
|
||||
@@ -76,30 +71,30 @@ sections:
|
||||
jq filters run on a stream of JSON data. The input to jq is
|
||||
parsed as a sequence of whitespace-separated JSON values which
|
||||
are passed through the provided filter one at a time. The
|
||||
output(s) of the filter are written to standard out, again as a
|
||||
sequence of whitespace-separated JSON data.
|
||||
output(s) of the filter are written to standard output, as a
|
||||
sequence of newline-separated JSON data.
|
||||
|
||||
You can affect how jq reads and writes its input and output
|
||||
using some command-line options:
|
||||
|
||||
* `--slurp`/`-s`:
|
||||
* `--null-input` / `-n`:
|
||||
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
Don't read any input at all. Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
|
||||
* `--raw-input`/`-R`:
|
||||
* `--raw-input` / `-R`:
|
||||
|
||||
Don't parse the input as JSON. Instead, each line of text is
|
||||
passed to the filter as a string. If combined with `--slurp`,
|
||||
then the entire input is passed to the filter as a single long
|
||||
string.
|
||||
|
||||
* `--null-input`/`-n`:
|
||||
* `--slurp` / `-s`:
|
||||
|
||||
Don't read any input at all! Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--compact-output` / `-c`:
|
||||
|
||||
@@ -107,11 +102,12 @@ sections:
|
||||
will result in more compact output by instead putting each
|
||||
JSON object on a single line.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
* `--raw-output` / `-r`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
With this option, if the filter's result is a string then it
|
||||
will be written directly to standard output rather than being
|
||||
formatted as a JSON string with quotes. This can be useful for
|
||||
making jq filters talk to non-JSON-based systems.
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
@@ -121,12 +117,11 @@ sections:
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--raw-output` / `-r`:
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
With this option, if the filter's result is a string then it
|
||||
will be written directly to standard output rather than being
|
||||
formatted as a JSON string with quotes. This can be useful for
|
||||
making jq filters talk to non-JSON-based systems.
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
* `--arg name value`:
|
||||
|
||||
@@ -162,7 +157,7 @@ sections:
|
||||
examples:
|
||||
- program: '.foo'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
@@ -172,9 +167,8 @@ sections:
|
||||
|
||||
You can also look up fields of an object using syntax like
|
||||
`.["foo"]` (`.foo` above is a shorthand version of this). This
|
||||
one works for arrays as well, if the key is an
|
||||
integer. Arrays are zero-based (like javascript), so `.[2]`
|
||||
returns the third element of the array.
|
||||
one works for arrays as well, if the key is an integer. Arrays
|
||||
are zero-based, so `.[2]` returns the third element of the array.
|
||||
|
||||
The `.[10:15]` syntax can be used to return a subarray of an
|
||||
array. The array returned by `.[10:15]` will be of length 5,
|
||||
@@ -279,7 +273,7 @@ sections:
|
||||
hashes with only string keys), and "null".
|
||||
|
||||
Booleans, null, strings and numbers are written the same way as
|
||||
in javascript. Just like everything else in jq, these simple
|
||||
in JSON. Just like everything else in jq, these simple
|
||||
values take an input and produce an output - `42` is a valid jq
|
||||
expression that takes an input, ignores it, and returns 42
|
||||
instead.
|
||||
@@ -438,8 +432,8 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '10 / . * 3'
|
||||
input: 5
|
||||
output: [6]
|
||||
input: '5'
|
||||
output: ['6']
|
||||
|
||||
- title: '`length`'
|
||||
body: |
|
||||
@@ -460,7 +454,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | length'
|
||||
input: '[[1,2], "string", {"a":2}, null]'
|
||||
output: [2, 6, 1, 0]
|
||||
output: ['2', '6', '1', '0']
|
||||
|
||||
- title: '`keys`'
|
||||
body: |
|
||||
@@ -554,7 +548,7 @@ sections:
|
||||
examples:
|
||||
- program: '1, empty, 2'
|
||||
input: 'null'
|
||||
output: [1, 2]
|
||||
output: ['1', '2']
|
||||
- program: '[1,2,empty,3]'
|
||||
input: 'null'
|
||||
output: ['[1,2,3]']
|
||||
@@ -591,7 +585,7 @@ sections:
|
||||
output: ['"abc"']
|
||||
- program: add
|
||||
input: '[1, 2, 3]'
|
||||
output: [6]
|
||||
output: ['6']
|
||||
- program: add
|
||||
input: '[]'
|
||||
output: ["null"]
|
||||
@@ -622,7 +616,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | tonumber'
|
||||
input: '[1, "1"]'
|
||||
output: [1, 1]
|
||||
output: ['1', '1']
|
||||
|
||||
- title: '`tostring`'
|
||||
body: |
|
||||
@@ -907,7 +901,7 @@ sections:
|
||||
means that you'll sometimes have to be more explicit about
|
||||
the condition you want: you can't test whether, e.g. a
|
||||
string is empty using `if .name then A else B end`, you'll
|
||||
need something more like `if (.name | count) > 0 then A else
|
||||
need something more like `if (.name | length) > 0 then A else
|
||||
B end` instead.
|
||||
|
||||
If the condition `A` produces multiple results, then `B` is evaluated
|
||||
@@ -925,7 +919,7 @@ sections:
|
||||
else
|
||||
"many"
|
||||
end
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['"many"']
|
||||
|
||||
- title: "`>`, `>=`, `<=`, `<`"
|
||||
@@ -940,7 +934,7 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '. < 5'
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['true']
|
||||
|
||||
- title: "`and`, `or`, `not`"
|
||||
@@ -996,10 +990,10 @@ sections:
|
||||
examples:
|
||||
- program: '.foo // 42'
|
||||
input: '{"foo": 19}'
|
||||
output: [19]
|
||||
output: ['19']
|
||||
- program: '.foo // 42'
|
||||
input: '{}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: Advanced features
|
||||
body: |
|
||||
@@ -1014,7 +1008,7 @@ sections:
|
||||
which to place the data.
|
||||
|
||||
It is also possible to define functions in jq, although this is
|
||||
is a feature whose biggest use is defining jq's standard library
|
||||
a feature whose biggest use is defining jq's standard library
|
||||
(many jq functions such as `map` and `select` are in fact written
|
||||
in jq).
|
||||
|
||||
@@ -1040,7 +1034,7 @@ sections:
|
||||
produces its sum, and the `length` expression is given the array and
|
||||
produces its length.
|
||||
|
||||
So, there's generally a cleaner way to solve most problems in jq that
|
||||
So, there's generally a cleaner way to solve most problems in jq than
|
||||
defining variables. Still, sometimes they do make things easier, so jq
|
||||
lets you define variables using `expression as $variable`. All
|
||||
variable names start with `$`. Here's a slightly uglier version of the
|
||||
@@ -1128,29 +1122,29 @@ sections:
|
||||
input: '[[1,2],[10,20]]'
|
||||
output: ['[[1,2,1,2], [10,20,1,2]]']
|
||||
|
||||
- title: Reduce
|
||||
- title: "`reduce`"
|
||||
body: |
|
||||
|
||||
The `reduce` syntax in jq allows you to combine all of the
|
||||
results of an expression by accumulating them into a single
|
||||
answer. As an example, we'll pass `[3,2,1]` to this expression:
|
||||
The `reduce` syntax allows you to combine all of the results of
|
||||
an expression by accumulating them into a single answer.
|
||||
The form is `reduce EXP as $var (INIT; UPDATE)`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0. In this
|
||||
example, `.[]` produces the results 3, 2, and 1, so the
|
||||
effect is similar to running something like this:
|
||||
accumulate a running total, starting from 0 as the input value.
|
||||
In this example, `.[]` produces the results `1`, `2`, and `3`,
|
||||
so the effect is similar to running something like this:
|
||||
|
||||
0 | (3 as $item | . + $item) |
|
||||
(2 as $item | . + $item) |
|
||||
(1 as $item | . + $item)
|
||||
0 | 1 as $item | . + $item |
|
||||
2 as $item | . + $item |
|
||||
3 as $item | . + $item
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[10,2,5,3]'
|
||||
output: ['20']
|
||||
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['15']
|
||||
|
||||
- title: Assignment
|
||||
body: |
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
---
|
||||
headline: jq 1.4 Manual
|
||||
|
||||
history: |
|
||||
|
||||
*The manual for the development version of jq can be found
|
||||
[here](/jq/manual).*
|
||||
|
||||
body: |
|
||||
|
||||
A jq program is a "filter": it takes an input, and produces an
|
||||
@@ -76,8 +71,8 @@ sections:
|
||||
jq filters run on a stream of JSON data. The input to jq is
|
||||
parsed as a sequence of whitespace-separated JSON values which
|
||||
are passed through the provided filter one at a time. The
|
||||
output(s) of the filter are written to standard out, again as a
|
||||
sequence of whitespace-separated JSON data.
|
||||
output(s) of the filter are written to standard output, as a
|
||||
sequence of newline-separated JSON data.
|
||||
|
||||
Note: it is important to mind the shell's quoting rules. As a
|
||||
general rule it's best to always quote (with single-quote
|
||||
@@ -93,34 +88,30 @@ sections:
|
||||
You can affect how jq reads and writes its input and output
|
||||
using some command-line options:
|
||||
|
||||
* `--version`:
|
||||
* `--null-input` / `-n`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
Don't read any input at all. Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
|
||||
* `--slurp`/`-s`:
|
||||
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--online-input`/`-I`:
|
||||
|
||||
When the top-level input value is an array produce its elements
|
||||
instead of the array. This allows on-line processing of
|
||||
potentially very large top-level arrays' elements.
|
||||
|
||||
* `--raw-input`/`-R`:
|
||||
* `--raw-input` / `-R`:
|
||||
|
||||
Don't parse the input as JSON. Instead, each line of text is
|
||||
passed to the filter as a string. If combined with `--slurp`,
|
||||
then the entire input is passed to the filter as a single long
|
||||
string.
|
||||
|
||||
* `--null-input`/`-n`:
|
||||
* `--slurp` / `-s`:
|
||||
|
||||
Don't read any input at all! Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--online-input` / `-I`:
|
||||
|
||||
When the top-level input value is an array produce its elements
|
||||
instead of the array. This allows on-line processing of
|
||||
potentially very large top-level arrays' elements.
|
||||
|
||||
* `--compact-output` / `-c`:
|
||||
|
||||
@@ -128,11 +119,12 @@ sections:
|
||||
will result in more compact output by instead putting each
|
||||
JSON object on a single line.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
* `--raw-output` / `-r`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
With this option, if the filter's result is a string then it
|
||||
will be written directly to standard output rather than being
|
||||
formatted as a JSON string with quotes. This can be useful for
|
||||
making jq filters talk to non-JSON-based systems.
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
@@ -142,37 +134,27 @@ sections:
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
* `--unbuffered`:
|
||||
|
||||
Flush the output after each JSON object is printed (useful if
|
||||
you're piping a slow data source into jq and piping jq's
|
||||
output elsewhere).
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--raw-output` / `-r`:
|
||||
|
||||
With this option, if the filter's result is a string then it
|
||||
will be written directly to standard output rather than being
|
||||
formatted as a JSON string with quotes. This can be useful for
|
||||
making jq filters talk to non-JSON-based systems.
|
||||
|
||||
* `-f filename` / `--from-file filename`:
|
||||
|
||||
Read filter from the file rather than from a command line, like
|
||||
awk's -f option. You can also use '#' to make comments.
|
||||
|
||||
* `-e` / `--exit-status`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
* `--arg name value`:
|
||||
|
||||
This option passes a value to the jq program as a predefined
|
||||
@@ -187,6 +169,23 @@ sections:
|
||||
program and has the value resulting from parsing the content of
|
||||
the file named `bar`.
|
||||
|
||||
* `--exit-status` / `-e`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
* `--version` / `-V`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
|
||||
* `--help` / `-h`:
|
||||
|
||||
Output the jq help and exit with zero.
|
||||
|
||||
- title: Basic filters
|
||||
entries:
|
||||
- title: "`.`"
|
||||
@@ -220,13 +219,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: "`.foo?`"
|
||||
body: |
|
||||
@@ -237,13 +236,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo?'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo?'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]?'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '[.foo?]'
|
||||
input: '[1,2]'
|
||||
output: ['[]']
|
||||
@@ -253,9 +252,8 @@ sections:
|
||||
|
||||
You can also look up fields of an object using syntax like
|
||||
`.["foo"]` (`.foo` above is a shorthand version of this). This
|
||||
one works for arrays as well, if the key is an
|
||||
integer. Arrays are zero-based (like javascript), so `.[2]`
|
||||
returns the third element of the array.
|
||||
one works for arrays as well, if the key is an integer. Arrays
|
||||
are zero-based, so `.[2]` returns the third element of the array.
|
||||
|
||||
The `.[10:15]` syntax can be used to return a subarray of an
|
||||
array or substring of a string. The array returned by
|
||||
@@ -263,7 +261,7 @@ sections:
|
||||
index 10 (inclusive) to index 15 (exclusive). Either index may
|
||||
be negative (in which case it counts backwards from the end of
|
||||
the array), or omitted (in which case it refers to the start
|
||||
or end of the array).
|
||||
or end of the array). Indices are zero-based.
|
||||
|
||||
The `?` "operator" can also be used with the slice operator,
|
||||
as in `.[10:15]?`, which outputs values where the inputs are
|
||||
@@ -375,7 +373,7 @@ sections:
|
||||
hashes with only string keys), and "null".
|
||||
|
||||
Booleans, null, strings and numbers are written the same way as
|
||||
in javascript. Just like everything else in jq, these simple
|
||||
in JSON. Just like everything else in jq, these simple
|
||||
values take an input and produce an output - `42` is a valid jq
|
||||
expression that takes an input, ignores it, and returns 42
|
||||
instead.
|
||||
@@ -546,8 +544,8 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '10 / . * 3'
|
||||
input: 5
|
||||
output: [6]
|
||||
input: '5'
|
||||
output: ['6']
|
||||
- program: '. / ", "'
|
||||
input: '"a, b,c,d, e"'
|
||||
output: ['["a","b,c,d","e"]']
|
||||
@@ -574,7 +572,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | length'
|
||||
input: '[[1,2], "string", {"a":2}, null]'
|
||||
output: [2, 6, 1, 0]
|
||||
output: ['2', '6', '1', '0']
|
||||
|
||||
- title: "`keys`"
|
||||
body: |
|
||||
@@ -695,7 +693,7 @@ sections:
|
||||
examples:
|
||||
- program: '1, empty, 2'
|
||||
input: 'null'
|
||||
output: [1, 2]
|
||||
output: ['1', '2']
|
||||
- program: '[1,2,empty,3]'
|
||||
input: 'null'
|
||||
output: ['[1,2,3]']
|
||||
@@ -758,7 +756,7 @@ sections:
|
||||
output: ['"abc"']
|
||||
- program: add
|
||||
input: '[1, 2, 3]'
|
||||
output: [6]
|
||||
output: ['6']
|
||||
- program: add
|
||||
input: '[]'
|
||||
output: ["null"]
|
||||
@@ -849,7 +847,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | tonumber'
|
||||
input: '[1, "1"]'
|
||||
output: [1, 1]
|
||||
output: ['1', '1']
|
||||
|
||||
- title: "`tostring`"
|
||||
body: |
|
||||
@@ -1327,7 +1325,7 @@ sections:
|
||||
else
|
||||
"many"
|
||||
end
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['"many"']
|
||||
|
||||
- title: "`>`, `>=`, `<=`, `<`"
|
||||
@@ -1342,7 +1340,7 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '. < 5'
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['true']
|
||||
|
||||
- title: "`and`, `or`, `not`"
|
||||
@@ -1398,10 +1396,10 @@ sections:
|
||||
examples:
|
||||
- program: '.foo // 42'
|
||||
input: '{"foo": 19}'
|
||||
output: [19]
|
||||
output: ['19']
|
||||
- program: '.foo // 42'
|
||||
input: '{}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: Advanced features
|
||||
body: |
|
||||
@@ -1416,7 +1414,7 @@ sections:
|
||||
which to place the data.
|
||||
|
||||
It is also possible to define functions in jq, although this is
|
||||
is a feature whose biggest use is defining jq's standard library
|
||||
a feature whose biggest use is defining jq's standard library
|
||||
(many jq functions such as `map` and `select` are in fact written
|
||||
in jq).
|
||||
|
||||
@@ -1530,29 +1528,29 @@ sections:
|
||||
input: '[[1,2],[10,20]]'
|
||||
output: ['[[1,2,1,2], [10,20,1,2]]']
|
||||
|
||||
- title: Reduce
|
||||
- title: "`reduce`"
|
||||
body: |
|
||||
|
||||
The `reduce` syntax in jq allows you to combine all of the
|
||||
results of an expression by accumulating them into a single
|
||||
answer. As an example, we'll pass `[3,2,1]` to this expression:
|
||||
The `reduce` syntax allows you to combine all of the results of
|
||||
an expression by accumulating them into a single answer.
|
||||
The form is `reduce EXP as $var (INIT; UPDATE)`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0. In this
|
||||
example, `.[]` produces the results 3, 2, and 1, so the
|
||||
effect is similar to running something like this:
|
||||
accumulate a running total, starting from 0 as the input value.
|
||||
In this example, `.[]` produces the results `1`, `2`, and `3`,
|
||||
so the effect is similar to running something like this:
|
||||
|
||||
0 | (3 as $item | . + $item) |
|
||||
(2 as $item | . + $item) |
|
||||
(1 as $item | . + $item)
|
||||
0 | 1 as $item | . + $item |
|
||||
2 as $item | . + $item |
|
||||
3 as $item | . + $item
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[10,2,5,3]'
|
||||
output: ['20']
|
||||
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['15']
|
||||
|
||||
- title: Assignment
|
||||
body: |
|
||||
|
||||
+247
-191
@@ -1,11 +1,6 @@
|
||||
---
|
||||
headline: jq 1.5 Manual
|
||||
|
||||
history: |
|
||||
|
||||
*The manual for the development version of jq can be found
|
||||
[here](/jq/manual).*
|
||||
|
||||
body: |
|
||||
|
||||
A jq program is a "filter": it takes an input, and produces an
|
||||
@@ -78,8 +73,8 @@ sections:
|
||||
jq filters run on a stream of JSON data. The input to jq is
|
||||
parsed as a sequence of whitespace-separated JSON values which
|
||||
are passed through the provided filter one at a time. The
|
||||
output(s) of the filter are written to standard out, again as a
|
||||
sequence of whitespace-separated JSON data.
|
||||
output(s) of the filter are written to standard output, as a
|
||||
sequence of newline-separated JSON data.
|
||||
|
||||
Note: it is important to mind the shell's quoting rules. As a
|
||||
general rule it's best to always quote (with single-quote
|
||||
@@ -95,50 +90,24 @@ sections:
|
||||
You can affect how jq reads and writes its input and output
|
||||
using some command-line options:
|
||||
|
||||
* `--version`:
|
||||
* `--null-input` / `-n`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
Don't read any input at all. Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
|
||||
* `--seq`:
|
||||
|
||||
Use the `application/json-seq` MIME type scheme for separating
|
||||
JSON texts in jq's input and output. This means that an ASCII
|
||||
RS (record separator) character is printed before each value on
|
||||
output and an ASCII LF (line feed) is printed after every
|
||||
output. Input JSON texts that fail to parse are ignored (but
|
||||
warned about), discarding all subsequent input until the next
|
||||
RS. This mode also parses the output of jq without the `--seq`
|
||||
option.
|
||||
|
||||
* `--stream`:
|
||||
|
||||
Parse the input in streaming fashion, outputting arrays of path
|
||||
and leaf values (scalars and empty arrays or empty objects).
|
||||
For example, `"a"` becomes `[[],"a"]`, and `[[],"a",["b"]]`
|
||||
becomes `[[0],[]]`, `[[1],"a"]`, and `[[2,0],"b"]`.
|
||||
|
||||
This is useful for processing very large inputs. Use this in
|
||||
conjunction with filtering and the `reduce` and `foreach` syntax
|
||||
to reduce large inputs incrementally.
|
||||
|
||||
* `--slurp`/`-s`:
|
||||
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--raw-input`/`-R`:
|
||||
* `--raw-input` / `-R`:
|
||||
|
||||
Don't parse the input as JSON. Instead, each line of text is
|
||||
passed to the filter as a string. If combined with `--slurp`,
|
||||
then the entire input is passed to the filter as a single long
|
||||
string.
|
||||
|
||||
* `--null-input`/`-n`:
|
||||
* `--slurp` / `-s`:
|
||||
|
||||
Don't read any input at all! Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--compact-output` / `-c`:
|
||||
|
||||
@@ -146,38 +115,6 @@ sections:
|
||||
will result in more compact output by instead putting each
|
||||
JSON object on a single line.
|
||||
|
||||
* `--tab`:
|
||||
|
||||
Use a tab for each indentation level instead of two spaces.
|
||||
|
||||
* `--indent n`:
|
||||
|
||||
Use the given number of spaces (no more than 7) for indentation.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
jq usually outputs non-ASCII Unicode codepoints as UTF-8, even
|
||||
if the input specified them as escape sequences (like
|
||||
"\u03bc"). Using this option, you can force jq to produce pure
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--unbuffered`:
|
||||
|
||||
Flush the output after each JSON object is printed (useful if
|
||||
you're piping a slow data source into jq and piping jq's
|
||||
output elsewhere).
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--raw-output` / `-r`:
|
||||
|
||||
With this option, if the filter's result is a string then it
|
||||
@@ -189,26 +126,71 @@ sections:
|
||||
|
||||
Like `-r` but jq won't print a newline after each output.
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
jq usually outputs non-ASCII Unicode codepoints as UTF-8, even
|
||||
if the input specified them as escape sequences (like
|
||||
"\u03bc"). Using this option, you can force jq to produce pure
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
* `--tab`:
|
||||
|
||||
Use a tab for each indentation level instead of two spaces.
|
||||
|
||||
* `--indent n`:
|
||||
|
||||
Use the given number of spaces (no more than 7) for indentation.
|
||||
|
||||
* `--unbuffered`:
|
||||
|
||||
Flush the output after each JSON object is printed (useful if
|
||||
you're piping a slow data source into jq and piping jq's
|
||||
output elsewhere).
|
||||
|
||||
* `--stream`:
|
||||
|
||||
Parse the input in streaming fashion, outputting arrays of path
|
||||
and leaf values (scalars and empty arrays or empty objects).
|
||||
For example, `"a"` becomes `[[],"a"]`, and `[[],"a",["b"]]`
|
||||
becomes `[[0],[]]`, `[[1],"a"]`, and `[[2,0],"b"]`.
|
||||
|
||||
This is useful for processing very large inputs. Use this in
|
||||
conjunction with filtering and the `reduce` and `foreach` syntax
|
||||
to reduce large inputs incrementally.
|
||||
|
||||
* `--seq`:
|
||||
|
||||
Use the `application/json-seq` MIME type scheme for separating
|
||||
JSON texts in jq's input and output. This means that an ASCII
|
||||
RS (record separator) character is printed before each value on
|
||||
output and an ASCII LF (line feed) is printed after every
|
||||
output. Input JSON texts that fail to parse are ignored (but
|
||||
warned about), discarding all subsequent input until the next
|
||||
RS. This mode also parses the output of jq without the `--seq`
|
||||
option.
|
||||
|
||||
* `-f filename` / `--from-file filename`:
|
||||
|
||||
Read filter from the file rather than from a command line, like
|
||||
awk's -f option. You can also use '#' to make comments.
|
||||
|
||||
* `-Ldirectory` / `-L directory`:
|
||||
* `-L directory`:
|
||||
|
||||
Prepend `directory` to the search list for modules. If this
|
||||
option is used then no builtin search list is used. See the
|
||||
section on modules below.
|
||||
|
||||
* `-e` / `--exit-status`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
* `--arg name value`:
|
||||
|
||||
This option passes a value to the jq program as a predefined
|
||||
@@ -227,7 +209,7 @@ sections:
|
||||
|
||||
This option reads all the JSON texts in the named file and binds
|
||||
an array of the parsed JSON values to the given global variable.
|
||||
If you run jq with `--argfile foo bar`, then `$foo` is available
|
||||
If you run jq with `--slurpfile foo bar`, then `$foo` is available
|
||||
in the program and has an array whose elements correspond to the
|
||||
texts in the file named `bar`.
|
||||
|
||||
@@ -239,6 +221,23 @@ sections:
|
||||
one text, then that is used, else an array of texts is used as
|
||||
in `--slurpfile`.)
|
||||
|
||||
* `--exit-status` / `-e`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
* `--version` / `-V`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
|
||||
* `--help` / `-h`:
|
||||
|
||||
Output the jq help and exit with zero.
|
||||
|
||||
* `--run-tests [filename]`:
|
||||
|
||||
Runs the tests in the given file or standard input. This must
|
||||
@@ -247,7 +246,7 @@ sections:
|
||||
program lines followed by one input line, as many lines of
|
||||
output as are expected (one per output), and a terminating empty
|
||||
line. Compilation failure tests start with a line containing
|
||||
only "%%FAIL", then a line containing the program to compile,
|
||||
only `%%FAIL`, then a line containing the program to compile,
|
||||
then a line containing an error message to compare to the
|
||||
actual.
|
||||
|
||||
@@ -286,13 +285,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: "`.foo?`"
|
||||
body: |
|
||||
@@ -303,13 +302,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo?'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo?'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]?'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '[.foo?]'
|
||||
input: '[1,2]'
|
||||
output: ['[]']
|
||||
@@ -319,9 +318,8 @@ sections:
|
||||
|
||||
You can also look up fields of an object using syntax like
|
||||
`.["foo"]` (`.foo` above is a shorthand version of this). This
|
||||
one works for arrays as well, if the key is an
|
||||
integer. Arrays are zero-based (like javascript), so `.[2]`
|
||||
returns the third element of the array.
|
||||
one works for arrays as well, if the key is an integer. Arrays
|
||||
are zero-based, so `.[2]` returns the third element of the array.
|
||||
|
||||
The `.[10:15]` syntax can be used to return a subarray of an
|
||||
array or substring of a string. The array returned by
|
||||
@@ -329,7 +327,7 @@ sections:
|
||||
index 10 (inclusive) to index 15 (exclusive). Either index may
|
||||
be negative (in which case it counts backwards from the end of
|
||||
the array), or omitted (in which case it refers to the start
|
||||
or end of the array).
|
||||
or end of the array). Indices are zero-based.
|
||||
|
||||
The `.[2]` syntax can be used to return the element at the
|
||||
given index. Negative indices are allowed, with -1 referring
|
||||
@@ -382,7 +380,8 @@ sections:
|
||||
entirely, it will return *all* of the elements of an
|
||||
array. Running `.[]` with the input `[1,2,3]` will produce the
|
||||
numbers as three separate results, rather than as a single
|
||||
array.
|
||||
array. A filter of the form `.foo[]` is equivalent to
|
||||
`.foo | .[]`.
|
||||
|
||||
You can also use this on an object, and it will return all
|
||||
the values of the object.
|
||||
@@ -398,6 +397,10 @@ sections:
|
||||
input: '[]'
|
||||
output: []
|
||||
|
||||
- program: '.foo[]'
|
||||
input: '{"foo":[1,2,3]}'
|
||||
output: ['1','2','3']
|
||||
|
||||
- program: '.[]'
|
||||
input: '{"a": 1, "b": 1}'
|
||||
output: ['1', '1']
|
||||
@@ -406,7 +409,8 @@ sections:
|
||||
body: |
|
||||
|
||||
Like `.[]`, but no errors will be output if . is not an array
|
||||
or object.
|
||||
or object. A filter of the form `.foo[]?` is equivalent to
|
||||
`.foo | .[]?`.
|
||||
|
||||
- title: "`,`"
|
||||
body: |
|
||||
@@ -456,7 +460,7 @@ sections:
|
||||
hashes with only string keys), and "null".
|
||||
|
||||
Booleans, null, strings and numbers are written the same way as
|
||||
in javascript. Just like everything else in jq, these simple
|
||||
in JSON. Just like everything else in jq, these simple
|
||||
values take an input and produce an output - `42` is a valid jq
|
||||
expression that takes an input, ignores it, and returns 42
|
||||
instead.
|
||||
@@ -628,8 +632,8 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '10 / . * 3'
|
||||
input: 5
|
||||
output: [6]
|
||||
input: '5'
|
||||
output: ['6']
|
||||
- program: '. / ", "'
|
||||
input: '"a, b,c,d, e"'
|
||||
output: ['["a","b,c,d","e"]']
|
||||
@@ -660,7 +664,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | length'
|
||||
input: '[[1,2], "string", {"a":2}, null]'
|
||||
output: [2, 6, 1, 0]
|
||||
output: ['2', '6', '1', '0']
|
||||
|
||||
- title: "`keys`, `keys_unsorted`"
|
||||
body: |
|
||||
@@ -838,17 +842,30 @@ sections:
|
||||
examples:
|
||||
- program: '1, empty, 2'
|
||||
input: 'null'
|
||||
output: [1, 2]
|
||||
output: ['1', '2']
|
||||
- program: '[1,2,empty,3]'
|
||||
input: 'null'
|
||||
output: ['[1,2,3]']
|
||||
|
||||
- title: "`error(message)`"
|
||||
- title: "`error`, `error(message)`"
|
||||
body: |
|
||||
|
||||
Produces an error, just like `.a` applied to values other than
|
||||
null and objects would, but with the given message as the
|
||||
error's value.
|
||||
Produces an error with the input value, or with the message
|
||||
given as the argument. Errors can be caught with try/catch;
|
||||
see below.
|
||||
|
||||
When the error value is `null`, it produces nothing and works
|
||||
just like `empty`. So `[null | error]` and `[error(null)]` both
|
||||
emit `[]`.
|
||||
|
||||
examples:
|
||||
- program: 'try error catch .'
|
||||
input: '"error message"'
|
||||
output: ['"error message"']
|
||||
|
||||
- program: 'try error("invalid value: \(.)") catch .'
|
||||
input: '42'
|
||||
output: ['"invalid value: 42"']
|
||||
|
||||
- title: "`$__loc__`"
|
||||
body: |
|
||||
@@ -923,7 +940,7 @@ sections:
|
||||
output: ['"abc"']
|
||||
- program: add
|
||||
input: '[1, 2, 3]'
|
||||
output: [6]
|
||||
output: ['6']
|
||||
- program: add
|
||||
input: '[]'
|
||||
output: ["null"]
|
||||
@@ -1005,7 +1022,7 @@ sections:
|
||||
input: '[{"foo": "bar"}, [{"foo": "baz"}]]'
|
||||
output: ['[{"foo": "bar"}, {"foo": "baz"}]']
|
||||
|
||||
- title: "`range(upto)`, `range(from; upto)` `range(from; upto; by)`"
|
||||
- title: "`range(upto)`, `range(from; upto)`, `range(from; upto; by)`"
|
||||
body: |
|
||||
|
||||
The `range` function produces a range of numbers. `range(4; 10)`
|
||||
@@ -1072,7 +1089,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | tonumber'
|
||||
input: '[1, "1"]'
|
||||
output: [1, 1]
|
||||
output: ['1', '1']
|
||||
|
||||
- title: "`tostring`"
|
||||
body: |
|
||||
@@ -1141,19 +1158,25 @@ sections:
|
||||
sorted order), and if their keys are equal then the values
|
||||
are compared key by key.
|
||||
|
||||
`sort` may be used to sort by a particular field of an
|
||||
object, or by applying any jq filter.
|
||||
|
||||
`sort_by(f)` compares two elements by comparing the result of
|
||||
`f` on each element.
|
||||
`sort_by` may be used to sort by a particular field of an
|
||||
object, or by applying any jq filter. `sort_by(f)` compares
|
||||
two elements by comparing the result of `f` on each element.
|
||||
When `f` produces multiple values, it firstly compares the
|
||||
first values, and the second values if the first values are
|
||||
equal, and so on.
|
||||
|
||||
examples:
|
||||
- program: 'sort'
|
||||
input: '[8,3,null,6]'
|
||||
output: ['[null,3,6,8]']
|
||||
|
||||
- program: 'sort_by(.foo)'
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":100}, {"foo":2, "bar":1}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":100}, {"foo":4, "bar":10}]']
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":10}, {"foo":2, "bar":1}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":10}, {"foo":4, "bar":10}]']
|
||||
|
||||
- program: 'sort_by(.foo, .bar)'
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":20}, {"foo":2, "bar":1}, {"foo":3, "bar":10}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":10}, {"foo":3, "bar":20}, {"foo":4, "bar":10}]']
|
||||
|
||||
- title: "`group_by(path_expression)`"
|
||||
body: |
|
||||
@@ -1280,9 +1303,21 @@ sections:
|
||||
- program: 'index(", ")'
|
||||
input: '"a,b, cd, efg, hijk"'
|
||||
output: ['3']
|
||||
- program: 'index(1)'
|
||||
input: '[0,1,2,1,3,1,4]'
|
||||
output: ['1']
|
||||
- program: 'index([1,2])'
|
||||
input: '[0,1,2,3,1,4,2,5,1,2,6,7]'
|
||||
output: ['1']
|
||||
- program: 'rindex(", ")'
|
||||
input: '"a,b, cd, efg, hijk"'
|
||||
output: ['12']
|
||||
- program: 'rindex(1)'
|
||||
input: '[0,1,2,1,3,1,4]'
|
||||
output: ['5']
|
||||
- program: 'rindex([1,2])'
|
||||
input: '[0,1,2,3,1,4,2,5,1,2,6,7]'
|
||||
output: ['8']
|
||||
|
||||
- title: "`inside`"
|
||||
body: |
|
||||
@@ -1416,10 +1451,10 @@ sections:
|
||||
Emit a copy of the input string with its alphabetic characters (a-z and A-Z)
|
||||
converted to the specified case.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'ascii_upcase'
|
||||
input: '"useful but not for é"'
|
||||
output: '"USEFUL BUT NOT FOR é"'
|
||||
output: ['"USEFUL BUT NOT FOR é"']
|
||||
|
||||
- title: "`while(cond; update)`"
|
||||
body: |
|
||||
@@ -1516,11 +1551,8 @@ sections:
|
||||
- '1'
|
||||
|
||||
- program: 'recurse(. * .; . < 20)'
|
||||
input: 2
|
||||
output:
|
||||
- 2
|
||||
- 4
|
||||
- 16
|
||||
input: '2'
|
||||
output: ['2', '4', '16']
|
||||
|
||||
- title: "`..`"
|
||||
body: |
|
||||
@@ -1731,7 +1763,7 @@ sections:
|
||||
|
||||
The `strptime(fmt)` builtin parses input strings matching the
|
||||
`fmt` argument. The output is in the "broken down time"
|
||||
representation consumed by `gmtime` and output by `mktime`.
|
||||
representation consumed by `mktime` and output by `gmtime`.
|
||||
|
||||
The `strftime(fmt)` builtin formats a time with the given
|
||||
format.
|
||||
@@ -1805,7 +1837,7 @@ sections:
|
||||
else
|
||||
"many"
|
||||
end
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['"many"']
|
||||
|
||||
- title: "`>`, `>=`, `<=`, `<`"
|
||||
@@ -1820,7 +1852,7 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '. < 5'
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['true']
|
||||
|
||||
- title: "`and`, `or`, `not`"
|
||||
@@ -1876,10 +1908,10 @@ sections:
|
||||
examples:
|
||||
- program: '.foo // 42'
|
||||
input: '{"foo": 19}'
|
||||
output: [19]
|
||||
output: ['19']
|
||||
- program: '.foo // 42'
|
||||
input: '{}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: try-catch
|
||||
body: |
|
||||
@@ -1921,7 +1953,7 @@ sections:
|
||||
label $out | ... break $out ...
|
||||
|
||||
The `break $label_name` expression will cause the program to
|
||||
to act as though the nearest (to the left) `label $label_name`
|
||||
act as though the nearest (to the left) `label $label_name`
|
||||
produced `empty`.
|
||||
|
||||
The relationship between the `break` and corresponding `label`
|
||||
@@ -2047,7 +2079,7 @@ sections:
|
||||
|
||||
- program: '[ match("."; "g")] | length'
|
||||
input: '"abc"'
|
||||
output: [3]
|
||||
output: ['3']
|
||||
|
||||
|
||||
- title: "`capture(val)`, `capture(regex; flags)`"
|
||||
@@ -2071,24 +2103,20 @@ sections:
|
||||
To capture all the matches for each input string, use the idiom
|
||||
`[ expr ]`, e.g. `[ scan(regex) ]`.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'scan("c")'
|
||||
input: '"abcdefabc"'
|
||||
output: ['"c"', '"c"']
|
||||
|
||||
- program: 'scan("b")'
|
||||
input: ("", "")
|
||||
output: ['[]', '[]']
|
||||
|
||||
- title: "`split(regex; flags)`"
|
||||
body: |
|
||||
|
||||
For backwards compatibility, `split` splits on a string, not a regex.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'split(", *"; null)'
|
||||
input: '"ab,cd, ef"'
|
||||
output: ['"ab","cd","ef"']
|
||||
output: ['["ab","cd","ef"]']
|
||||
|
||||
|
||||
- title: "`splits(regex)`, `splits(regex; flags)`"
|
||||
@@ -2097,10 +2125,10 @@ sections:
|
||||
These provide the same results as their `split` counterparts,
|
||||
but as a stream instead of an array.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'splits(", *")'
|
||||
input: '("ab,cd", "ef, gh")'
|
||||
output: ['"ab"', '"cd"', '"ef"', '"gh"']
|
||||
input: '"ab,cd, ef, gh"'
|
||||
output: ['"ab"','"cd"','"ef"','"gh"']
|
||||
|
||||
- title: "`sub(regex; tostring)` `sub(regex; string; flags)`"
|
||||
body: |
|
||||
@@ -2112,10 +2140,10 @@ sections:
|
||||
constructed by `capture`) to `tostring`, so a reference to a captured
|
||||
variable named "x" would take the form: `"\(.x)"`.
|
||||
|
||||
example:
|
||||
- program: 'sub("^[^a-z]*(?<x>[a-z]*).*")'
|
||||
input: '"123abc456"'
|
||||
output: '"ZabcZabc"'
|
||||
examples:
|
||||
- program: 'sub("[^a-z]*(?<x>[a-z]+)"; "Z\(.x)"; "g")'
|
||||
input: '"123abc456def"'
|
||||
output: ['"ZabcZdef"']
|
||||
|
||||
|
||||
- title: "`gsub(regex; string)`, `gsub(regex; string; flags)`"
|
||||
@@ -2124,10 +2152,10 @@ sections:
|
||||
`gsub` is like `sub` but all the non-overlapping occurrences of the regex are
|
||||
replaced by the string, after interpolation.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'gsub("(?<x>.)[^a]*"; "+\(.x)-")'
|
||||
input: '"Abcabc"'
|
||||
output: '"+A-+a-"'
|
||||
output: ['"+A-+a-"']
|
||||
|
||||
|
||||
- title: Advanced features
|
||||
@@ -2143,7 +2171,7 @@ sections:
|
||||
which to place the data.
|
||||
|
||||
It is also possible to define functions in jq, although this is
|
||||
is a feature whose biggest use is defining jq's standard library
|
||||
a feature whose biggest use is defining jq's standard library
|
||||
(many jq functions such as `map` and `select` are in fact written
|
||||
in jq).
|
||||
|
||||
@@ -2225,7 +2253,7 @@ sections:
|
||||
. as {realnames: $names, posts: [$first, $second]} | ...
|
||||
|
||||
The variable declarations in array patterns (e.g., `. as
|
||||
[$first, $second]`) bind to the elements of the array in from
|
||||
[$first, $second]`) bind to the elements of the array from
|
||||
the element at index zero on up, in order. When there is no
|
||||
value at the index for an array pattern element, `null` is
|
||||
bound to that variable.
|
||||
@@ -2315,29 +2343,6 @@ sections:
|
||||
input: '[[1,2],[10,20]]'
|
||||
output: ['[[1,2,1,2], [10,20,1,2]]']
|
||||
|
||||
- title: Reduce
|
||||
body: |
|
||||
|
||||
The `reduce` syntax in jq allows you to combine all of the
|
||||
results of an expression by accumulating them into a single
|
||||
answer. As an example, we'll pass `[3,2,1]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0. In this
|
||||
example, `.[]` produces the results 3, 2, and 1, so the
|
||||
effect is similar to running something like this:
|
||||
|
||||
0 | (3 as $item | . + $item) |
|
||||
(2 as $item | . + $item) |
|
||||
(1 as $item | . + $item)
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[10,2,5,3]'
|
||||
output: ['20']
|
||||
|
||||
- title: "`limit(n; exp)`"
|
||||
body: |
|
||||
|
||||
@@ -2377,32 +2382,79 @@ sections:
|
||||
input: '10'
|
||||
output: ['[0,9,5]']
|
||||
|
||||
- title: "`reduce`"
|
||||
body: |
|
||||
|
||||
The `reduce` syntax allows you to combine all of the results of
|
||||
an expression by accumulating them into a single answer.
|
||||
The form is `reduce EXP as $var (INIT; UPDATE)`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0 as the input value.
|
||||
In this example, `.[]` produces the results `1`, `2`, and `3`,
|
||||
so the effect is similar to running something like this:
|
||||
|
||||
0 | 1 as $item | . + $item |
|
||||
2 as $item | . + $item |
|
||||
3 as $item | . + $item
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['15']
|
||||
|
||||
- program: 'reduce .[] as [$i,$j] (0; . + $i * $j)'
|
||||
input: '[[1,2],[3,4],[5,6]]'
|
||||
output: ['44']
|
||||
|
||||
- program: 'reduce .[] as {$x,$y} (null; .x += $x | .y += [$y])'
|
||||
input: '[{"x":"a","y":1},{"x":"b","y":2},{"x":"c","y":3}]'
|
||||
output: ['{"x":"abc","y":[1,2,3]}']
|
||||
|
||||
- title: "`foreach`"
|
||||
body: |
|
||||
|
||||
The `foreach` syntax is similar to `reduce`, but intended to
|
||||
allow the construction of `limit` and reducers that produce
|
||||
intermediate results (see example).
|
||||
intermediate results.
|
||||
|
||||
The form is `foreach EXP as $var (INIT; UPDATE; EXTRACT)`.
|
||||
Like `reduce`, `INIT` is evaluated once to produce a state
|
||||
value, then each output of `EXP` is bound to `$var`, `UPDATE`
|
||||
is evaluated for each output of `EXP` with the current state
|
||||
and with `$var` visible. Each value output by `UPDATE`
|
||||
replaces the previous state. Finally, `EXTRACT` is evaluated
|
||||
for each new state to extract an output of `foreach`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
This is mostly useful only for constructing `reduce`- and
|
||||
`limit`-like functions. But it is much more general, as it
|
||||
allows for partial reductions (see the example below).
|
||||
foreach .[] as $item (0; . + $item; [$item, . * 2])
|
||||
|
||||
Like the `reduce` syntax, `. + $item` is run for each result
|
||||
that `.[]` produces, but `[$item, . * 2]` is run for each
|
||||
intermediate values. In this example, since the intermediate
|
||||
values are `1`, `3`, and `6`, the `foreach` expression produces
|
||||
`[1,2]`, `[2,6]`, and `[3,12]`. So the effect is similar
|
||||
to running something like this:
|
||||
|
||||
0 | 1 as $item | . + $item | [$item, . * 2],
|
||||
2 as $item | . + $item | [$item, . * 2],
|
||||
3 as $item | . + $item | [$item, . * 2]
|
||||
|
||||
When `EXTRACT` is omitted, the identity filter is used.
|
||||
That is, it outputs the intermediate values as they are.
|
||||
|
||||
examples:
|
||||
- program: '[foreach .[] as $item
|
||||
([[],[]];
|
||||
if $item == null then [[],.[0]] else [(.[0] + [$item]),[]] end;
|
||||
if $item == null then .[1] else empty end)]'
|
||||
input: '[1,2,3,4,null,"a","b",null]'
|
||||
output: ['[[1,2,3,4],["a","b"]]']
|
||||
- program: 'foreach .[] as $item (0; . + $item)'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['1','3','6','10','15']
|
||||
|
||||
- program: 'foreach .[] as $item (0; . + $item; [$item, . * 2])'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['[1,2]','[2,6]','[3,12]','[4,20]','[5,30]']
|
||||
|
||||
- program: 'foreach .[] as $item (0; . + 1; {index: ., $item})'
|
||||
input: '["foo", "bar", "baz"]'
|
||||
output:
|
||||
- '{"index":1,"item":"foo"}'
|
||||
- '{"index":2,"item":"bar"}'
|
||||
- '{"index":3,"item":"baz"}'
|
||||
|
||||
- title: Recursion
|
||||
body: |
|
||||
@@ -2518,6 +2570,8 @@ sections:
|
||||
|
||||
Outputs one new input.
|
||||
|
||||
echo 1 2 3 4 | jq '[., input]' # [1,2] [3,4]
|
||||
|
||||
- title: "`inputs`"
|
||||
body: |
|
||||
|
||||
@@ -2526,6 +2580,8 @@ sections:
|
||||
This is primarily useful for reductions over a program's
|
||||
inputs.
|
||||
|
||||
echo 1 2 3 | jq -n 'reduce inputs as $i (0; . + $i)' # 6
|
||||
|
||||
- title: "`debug`"
|
||||
body: |
|
||||
|
||||
@@ -2566,8 +2622,8 @@ sections:
|
||||
Streaming forms include `[<path>, <leaf-value>]` (to indicate any
|
||||
scalar value, empty array, or empty object), and `[<path>]` (to
|
||||
indicate the end of an array or object). Future versions of jq
|
||||
run with `--stream` and `-seq` may output additional forms such as
|
||||
`["error message"]` when an input text fails to parse.
|
||||
run with `--stream` and `--seq` may output additional forms such
|
||||
as `["error message"]` when an input text fails to parse.
|
||||
|
||||
entries:
|
||||
- title: "`truncate_stream(stream_expression)`"
|
||||
@@ -2578,9 +2634,9 @@ sections:
|
||||
given streaming expression.
|
||||
|
||||
examples:
|
||||
- program: '[1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]'
|
||||
- program: 'truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])'
|
||||
input: '1'
|
||||
output: ['[[[0],2],[[0]]]']
|
||||
output: ['[[0],2]', '[[0]]']
|
||||
|
||||
- title: "`fromstream(stream_expression)`"
|
||||
body: |
|
||||
@@ -2760,7 +2816,7 @@ sections:
|
||||
path (see below). The `import` and `include` directives allow the
|
||||
importer to alter this path.
|
||||
|
||||
Paths in the a search path are subject to various substitutions.
|
||||
Paths in the search path are subject to various substitutions.
|
||||
|
||||
For paths starting with "~/", the user's home directory is
|
||||
substituted for "~".
|
||||
|
||||
+267
-201
@@ -1,11 +1,6 @@
|
||||
---
|
||||
headline: jq 1.6 Manual
|
||||
|
||||
history: |
|
||||
|
||||
*The manual for the development version of jq can be found
|
||||
[here](/jq/manual).*
|
||||
|
||||
body: |
|
||||
|
||||
A jq program is a "filter": it takes an input, and produces an
|
||||
@@ -78,8 +73,8 @@ sections:
|
||||
jq filters run on a stream of JSON data. The input to jq is
|
||||
parsed as a sequence of whitespace-separated JSON values which
|
||||
are passed through the provided filter one at a time. The
|
||||
output(s) of the filter are written to standard out, again as a
|
||||
sequence of whitespace-separated JSON data.
|
||||
output(s) of the filter are written to standard output, as a
|
||||
sequence of newline-separated JSON data.
|
||||
|
||||
Note: it is important to mind the shell's quoting rules. As a
|
||||
general rule it's best to always quote (with single-quote
|
||||
@@ -103,50 +98,24 @@ sections:
|
||||
You can affect how jq reads and writes its input and output
|
||||
using some command-line options:
|
||||
|
||||
* `--version`:
|
||||
* `--null-input` / `-n`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
Don't read any input at all. Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
|
||||
* `--seq`:
|
||||
|
||||
Use the `application/json-seq` MIME type scheme for separating
|
||||
JSON texts in jq's input and output. This means that an ASCII
|
||||
RS (record separator) character is printed before each value on
|
||||
output and an ASCII LF (line feed) is printed after every
|
||||
output. Input JSON texts that fail to parse are ignored (but
|
||||
warned about), discarding all subsequent input until the next
|
||||
RS. This mode also parses the output of jq without the `--seq`
|
||||
option.
|
||||
|
||||
* `--stream`:
|
||||
|
||||
Parse the input in streaming fashion, outputting arrays of path
|
||||
and leaf values (scalars and empty arrays or empty objects).
|
||||
For example, `"a"` becomes `[[],"a"]`, and `[[],"a",["b"]]`
|
||||
becomes `[[0],[]]`, `[[1],"a"]`, and `[[2,0],"b"]`.
|
||||
|
||||
This is useful for processing very large inputs. Use this in
|
||||
conjunction with filtering and the `reduce` and `foreach` syntax
|
||||
to reduce large inputs incrementally.
|
||||
|
||||
* `--slurp`/`-s`:
|
||||
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--raw-input`/`-R`:
|
||||
* `--raw-input` / `-R`:
|
||||
|
||||
Don't parse the input as JSON. Instead, each line of text is
|
||||
passed to the filter as a string. If combined with `--slurp`,
|
||||
then the entire input is passed to the filter as a single long
|
||||
string.
|
||||
|
||||
* `--null-input`/`-n`:
|
||||
* `--slurp` / `-s`:
|
||||
|
||||
Don't read any input at all! Instead, the filter is run once
|
||||
using `null` as the input. This is useful when using jq as a
|
||||
simple calculator or to construct JSON data from scratch.
|
||||
Instead of running the filter for each JSON object in the
|
||||
input, read the entire input stream into a large array and run
|
||||
the filter just once.
|
||||
|
||||
* `--compact-output` / `-c`:
|
||||
|
||||
@@ -154,41 +123,6 @@ sections:
|
||||
will result in more compact output by instead putting each
|
||||
JSON object on a single line.
|
||||
|
||||
* `--tab`:
|
||||
|
||||
Use a tab for each indentation level instead of two spaces.
|
||||
|
||||
* `--indent n`:
|
||||
|
||||
Use the given number of spaces (no more than 7) for indentation.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
Colors can be configured with the `JQ_COLORS` environment
|
||||
variable (see below).
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
jq usually outputs non-ASCII Unicode codepoints as UTF-8, even
|
||||
if the input specified them as escape sequences (like
|
||||
"\u03bc"). Using this option, you can force jq to produce pure
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--unbuffered`:
|
||||
|
||||
Flush the output after each JSON object is printed (useful if
|
||||
you're piping a slow data source into jq and piping jq's
|
||||
output elsewhere).
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--raw-output` / `-r`:
|
||||
|
||||
With this option, if the filter's result is a string then it
|
||||
@@ -200,29 +134,74 @@ sections:
|
||||
|
||||
Like `-r` but jq won't print a newline after each output.
|
||||
|
||||
* `--ascii-output` / `-a`:
|
||||
|
||||
jq usually outputs non-ASCII Unicode codepoints as UTF-8, even
|
||||
if the input specified them as escape sequences (like
|
||||
"\u03bc"). Using this option, you can force jq to produce pure
|
||||
ASCII output with every non-ASCII character replaced with the
|
||||
equivalent escape sequence.
|
||||
|
||||
* `--sort-keys` / `-S`:
|
||||
|
||||
Output the fields of each object with the keys in sorted order.
|
||||
|
||||
* `--color-output` / `-C` and `--monochrome-output` / `-M`:
|
||||
|
||||
By default, jq outputs colored JSON if writing to a
|
||||
terminal. You can force it to produce color even if writing to
|
||||
a pipe or a file using `-C`, and disable color with `-M`.
|
||||
|
||||
Colors can be configured with the `JQ_COLORS` environment
|
||||
variable (see below).
|
||||
|
||||
* `--tab`:
|
||||
|
||||
Use a tab for each indentation level instead of two spaces.
|
||||
|
||||
* `--indent n`:
|
||||
|
||||
Use the given number of spaces (no more than 7) for indentation.
|
||||
|
||||
* `--unbuffered`:
|
||||
|
||||
Flush the output after each JSON object is printed (useful if
|
||||
you're piping a slow data source into jq and piping jq's
|
||||
output elsewhere).
|
||||
|
||||
* `--stream`:
|
||||
|
||||
Parse the input in streaming fashion, outputting arrays of path
|
||||
and leaf values (scalars and empty arrays or empty objects).
|
||||
For example, `"a"` becomes `[[],"a"]`, and `[[],"a",["b"]]`
|
||||
becomes `[[0],[]]`, `[[1],"a"]`, and `[[2,0],"b"]`.
|
||||
|
||||
This is useful for processing very large inputs. Use this in
|
||||
conjunction with filtering and the `reduce` and `foreach` syntax
|
||||
to reduce large inputs incrementally.
|
||||
|
||||
* `--seq`:
|
||||
|
||||
Use the `application/json-seq` MIME type scheme for separating
|
||||
JSON texts in jq's input and output. This means that an ASCII
|
||||
RS (record separator) character is printed before each value on
|
||||
output and an ASCII LF (line feed) is printed after every
|
||||
output. Input JSON texts that fail to parse are ignored (but
|
||||
warned about), discarding all subsequent input until the next
|
||||
RS. This mode also parses the output of jq without the `--seq`
|
||||
option.
|
||||
|
||||
* `-f filename` / `--from-file filename`:
|
||||
|
||||
Read filter from the file rather than from a command line, like
|
||||
awk's -f option. You can also use '#' to make comments.
|
||||
|
||||
* `-Ldirectory` / `-L directory`:
|
||||
* `-L directory`:
|
||||
|
||||
Prepend `directory` to the search list for modules. If this
|
||||
option is used then no builtin search list is used. See the
|
||||
section on modules below.
|
||||
|
||||
* `-e` / `--exit-status`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
Another way to set the exit status is with the `halt_error`
|
||||
builtin function.
|
||||
|
||||
* `--arg name value`:
|
||||
|
||||
This option passes a value to the jq program as a predefined
|
||||
@@ -250,9 +229,9 @@ sections:
|
||||
|
||||
* `--rawfile variable-name filename`:
|
||||
|
||||
This option reads in the named file and binds its contents to the given
|
||||
This option reads in the named file and binds its content to the given
|
||||
global variable. If you run jq with `--rawfile foo bar`, then `$foo` is
|
||||
available in the program and has a string whose contents are to the texts
|
||||
available in the program and has a string whose content is set to the text
|
||||
in the file named `bar`.
|
||||
|
||||
* `--argfile variable-name filename`:
|
||||
@@ -273,6 +252,26 @@ sections:
|
||||
Remaining arguments are positional JSON text arguments. These
|
||||
are available to the jq program as `$ARGS.positional[]`.
|
||||
|
||||
* `--exit-status` / `-e`:
|
||||
|
||||
Sets the exit status of jq to 0 if the last output value was
|
||||
neither `false` nor `null`, 1 if the last output value was
|
||||
either `false` or `null`, or 4 if no valid result was ever
|
||||
produced. Normally jq exits with 2 if there was any usage
|
||||
problem or system error, 3 if there was a jq program compile
|
||||
error, or 0 if the jq program ran.
|
||||
|
||||
Another way to set the exit status is with the `halt_error`
|
||||
builtin function.
|
||||
|
||||
* `--version` / `-V`:
|
||||
|
||||
Output the jq version and exit with zero.
|
||||
|
||||
* `--help` / `-h`:
|
||||
|
||||
Output the jq help and exit with zero.
|
||||
|
||||
* `--run-tests [filename]`:
|
||||
|
||||
Runs the tests in the given file or standard input. This must
|
||||
@@ -281,7 +280,7 @@ sections:
|
||||
program lines followed by one input line, as many lines of
|
||||
output as are expected (one per output), and a terminating empty
|
||||
line. Compilation failure tests start with a line containing
|
||||
only "%%FAIL", then a line containing the program to compile,
|
||||
only `%%FAIL`, then a line containing the program to compile,
|
||||
then a line containing an error message to compare to the
|
||||
actual.
|
||||
|
||||
@@ -329,13 +328,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: "Optional Object Identifier-Index: `.foo?`"
|
||||
body: |
|
||||
@@ -346,13 +345,13 @@ sections:
|
||||
examples:
|
||||
- program: '.foo?'
|
||||
input: '{"foo": 42, "bar": "less interesting data"}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '.foo?'
|
||||
input: '{"notfoo": true, "alsonotfoo": false}'
|
||||
output: ['null']
|
||||
- program: '.["foo"]?'
|
||||
input: '{"foo": 42}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
- program: '[.foo?]'
|
||||
input: '[1,2]'
|
||||
output: ['[]']
|
||||
@@ -397,6 +396,7 @@ sections:
|
||||
Either index may be negative (in which case it counts
|
||||
backwards from the end of the array), or omitted (in which
|
||||
case it refers to the start or end of the array).
|
||||
Indices are zero-based.
|
||||
|
||||
examples:
|
||||
- program: '.[2:4]'
|
||||
@@ -422,7 +422,8 @@ sections:
|
||||
entirely, it will return *all* of the elements of an
|
||||
array. Running `.[]` with the input `[1,2,3]` will produce the
|
||||
numbers as three separate results, rather than as a single
|
||||
array.
|
||||
array. A filter of the form `.foo[]` is equivalent to
|
||||
`.foo | .[]`.
|
||||
|
||||
You can also use this on an object, and it will return all
|
||||
the values of the object.
|
||||
@@ -438,6 +439,10 @@ sections:
|
||||
input: '[]'
|
||||
output: []
|
||||
|
||||
- program: '.foo[]'
|
||||
input: '{"foo":[1,2,3]}'
|
||||
output: ['1','2','3']
|
||||
|
||||
- program: '.[]'
|
||||
input: '{"a": 1, "b": 1}'
|
||||
output: ['1', '1']
|
||||
@@ -446,7 +451,8 @@ sections:
|
||||
body: |
|
||||
|
||||
Like `.[]`, but no errors will be output if . is not an array
|
||||
or object.
|
||||
or object. A filter of the form `.foo[]?` is equivalent to
|
||||
`.foo | .[]?`.
|
||||
|
||||
- title: "Comma: `,`"
|
||||
body: |
|
||||
@@ -506,7 +512,7 @@ sections:
|
||||
examples:
|
||||
- program: '(. + 2) * 5'
|
||||
input: '1'
|
||||
output: [15]
|
||||
output: ['15']
|
||||
|
||||
- title: Types and Values
|
||||
body: |
|
||||
@@ -516,7 +522,7 @@ sections:
|
||||
hashes with only string keys), and "null".
|
||||
|
||||
Booleans, null, strings and numbers are written the same way as
|
||||
in javascript. Just like everything else in jq, these simple
|
||||
in JSON. Just like everything else in jq, these simple
|
||||
values take an input and produce an output - `42` is a valid jq
|
||||
expression that takes an input, ignores it, and returns 42
|
||||
instead.
|
||||
@@ -618,15 +624,15 @@ sections:
|
||||
Recursively descends `.`, producing every value. This is the
|
||||
same as the zero-argument `recurse` builtin (see below). This
|
||||
is intended to resemble the XPath `//` operator. Note that
|
||||
`..a` does not work; use `..|.a` instead. In the example
|
||||
below we use `..|.a?` to find all the values of object keys
|
||||
`..a` does not work; use `.. | .a` instead. In the example
|
||||
below we use `.. | .a?` to find all the values of object keys
|
||||
"a" in any object found "below" `.`.
|
||||
|
||||
This is particularly useful in conjunction with `path(EXP)`
|
||||
(also see below) and the `?` operator.
|
||||
|
||||
examples:
|
||||
- program: '..|.a?'
|
||||
- program: '.. | .a?'
|
||||
input: '[[{"a":1}]]'
|
||||
output: ['1']
|
||||
|
||||
@@ -713,8 +719,8 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '10 / . * 3'
|
||||
input: 5
|
||||
output: [6]
|
||||
input: '5'
|
||||
output: ['6']
|
||||
- program: '. / ", "'
|
||||
input: '"a, b,c,d, e"'
|
||||
output: ['["a","b,c,d","e"]']
|
||||
@@ -749,7 +755,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | length'
|
||||
input: '[[1,2], "string", {"a":2}, null, -5]'
|
||||
output: [2, 6, 1, 0, 5]
|
||||
output: ['2', '6', '1', '0', '5']
|
||||
|
||||
|
||||
- title: "`utf8bytelength`"
|
||||
@@ -761,7 +767,7 @@ sections:
|
||||
examples:
|
||||
- program: 'utf8bytelength'
|
||||
input: '"\u03bc"'
|
||||
output: [2]
|
||||
output: ['2']
|
||||
|
||||
- title: "`keys`, `keys_unsorted`"
|
||||
body: |
|
||||
@@ -1003,17 +1009,30 @@ sections:
|
||||
examples:
|
||||
- program: '1, empty, 2'
|
||||
input: 'null'
|
||||
output: [1, 2]
|
||||
output: ['1', '2']
|
||||
- program: '[1,2,empty,3]'
|
||||
input: 'null'
|
||||
output: ['[1,2,3]']
|
||||
|
||||
- title: "`error(message)`"
|
||||
- title: "`error`, `error(message)`"
|
||||
body: |
|
||||
|
||||
Produces an error, just like `.a` applied to values other than
|
||||
null and objects would, but with the given message as the
|
||||
error's value. Errors can be caught with try/catch; see below.
|
||||
Produces an error with the input value, or with the message
|
||||
given as the argument. Errors can be caught with try/catch;
|
||||
see below.
|
||||
|
||||
When the error value is `null`, it produces nothing and works
|
||||
just like `empty`. So `[null | error]` and `[error(null)]` both
|
||||
emit `[]`.
|
||||
|
||||
examples:
|
||||
- program: 'try error catch .'
|
||||
input: '"error message"'
|
||||
output: ['"error message"']
|
||||
|
||||
- program: 'try error("invalid value: \(.)") catch .'
|
||||
input: '42'
|
||||
output: ['"invalid value: 42"']
|
||||
|
||||
- title: "`halt`"
|
||||
body: |
|
||||
@@ -1084,7 +1103,7 @@ sections:
|
||||
output: ['"abc"']
|
||||
- program: add
|
||||
input: '[1, 2, 3]'
|
||||
output: [6]
|
||||
output: ['6']
|
||||
- program: add
|
||||
input: '[]'
|
||||
output: ["null"]
|
||||
@@ -1233,7 +1252,7 @@ sections:
|
||||
examples:
|
||||
- program: '.[] | tonumber'
|
||||
input: '[1, "1"]'
|
||||
output: [1, 1]
|
||||
output: ['1', '1']
|
||||
|
||||
- title: "`tostring`"
|
||||
body: |
|
||||
@@ -1302,19 +1321,25 @@ sections:
|
||||
sorted order), and if their keys are equal then the values
|
||||
are compared key by key.
|
||||
|
||||
`sort` may be used to sort by a particular field of an
|
||||
object, or by applying any jq filter.
|
||||
|
||||
`sort_by(f)` compares two elements by comparing the result of
|
||||
`f` on each element.
|
||||
`sort_by` may be used to sort by a particular field of an
|
||||
object, or by applying any jq filter. `sort_by(f)` compares
|
||||
two elements by comparing the result of `f` on each element.
|
||||
When `f` produces multiple values, it firstly compares the
|
||||
first values, and the second values if the first values are
|
||||
equal, and so on.
|
||||
|
||||
examples:
|
||||
- program: 'sort'
|
||||
input: '[8,3,null,6]'
|
||||
output: ['[null,3,6,8]']
|
||||
|
||||
- program: 'sort_by(.foo)'
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":100}, {"foo":2, "bar":1}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":100}, {"foo":4, "bar":10}]']
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":10}, {"foo":2, "bar":1}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":10}, {"foo":4, "bar":10}]']
|
||||
|
||||
- program: 'sort_by(.foo, .bar)'
|
||||
input: '[{"foo":4, "bar":10}, {"foo":3, "bar":20}, {"foo":2, "bar":1}, {"foo":3, "bar":10}]'
|
||||
output: ['[{"foo":2, "bar":1}, {"foo":3, "bar":10}, {"foo":3, "bar":20}, {"foo":4, "bar":10}]']
|
||||
|
||||
- title: "`group_by(path_expression)`"
|
||||
body: |
|
||||
@@ -1441,9 +1466,21 @@ sections:
|
||||
- program: 'index(", ")'
|
||||
input: '"a,b, cd, efg, hijk"'
|
||||
output: ['3']
|
||||
- program: 'index(1)'
|
||||
input: '[0,1,2,1,3,1,4]'
|
||||
output: ['1']
|
||||
- program: 'index([1,2])'
|
||||
input: '[0,1,2,3,1,4,2,5,1,2,6,7]'
|
||||
output: ['1']
|
||||
- program: 'rindex(", ")'
|
||||
input: '"a,b, cd, efg, hijk"'
|
||||
output: ['12']
|
||||
- program: 'rindex(1)'
|
||||
input: '[0,1,2,1,3,1,4]'
|
||||
output: ['5']
|
||||
- program: 'rindex([1,2])'
|
||||
input: '[0,1,2,3,1,4,2,5,1,2,6,7]'
|
||||
output: ['8']
|
||||
|
||||
- title: "`inside`"
|
||||
body: |
|
||||
@@ -1583,10 +1620,10 @@ sections:
|
||||
Emit a copy of the input string with its alphabetic characters (a-z and A-Z)
|
||||
converted to the specified case.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'ascii_upcase'
|
||||
input: '"useful but not for é"'
|
||||
output: '"USEFUL BUT NOT FOR é"'
|
||||
output: ['"USEFUL BUT NOT FOR é"']
|
||||
|
||||
- title: "`while(cond; update)`"
|
||||
body: |
|
||||
@@ -1648,7 +1685,7 @@ sections:
|
||||
When called without an argument, `recurse` is equivalent to
|
||||
`recurse(.[]?)`.
|
||||
|
||||
`recurse(f)` is identical to `recurse(f; . != null)` and can be
|
||||
`recurse(f)` is identical to `recurse(f; true)` and can be
|
||||
used without concerns about recursion depth.
|
||||
|
||||
`recurse(f; condition)` is a generator which begins by
|
||||
@@ -1683,11 +1720,8 @@ sections:
|
||||
- '1'
|
||||
|
||||
- program: 'recurse(. * .; . < 20)'
|
||||
input: 2
|
||||
output:
|
||||
- 2
|
||||
- 4
|
||||
- 16
|
||||
input: '2'
|
||||
output: ['2', '4', '16']
|
||||
|
||||
- title: "`walk(f)`"
|
||||
body: |
|
||||
@@ -1939,7 +1973,7 @@ sections:
|
||||
|
||||
The `strptime(fmt)` builtin parses input strings matching the
|
||||
`fmt` argument. The output is in the "broken down time"
|
||||
representation consumed by `gmtime` and output by `mktime`.
|
||||
representation consumed by `mktime` and output by `gmtime`.
|
||||
|
||||
The `strftime(fmt)` builtin formats a time (GMT) with the
|
||||
given format. The `strflocaltime` does the same, but using
|
||||
@@ -2062,7 +2096,7 @@ sections:
|
||||
else
|
||||
"many"
|
||||
end
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['"many"']
|
||||
|
||||
- title: "`>`, `>=`, `<=`, `<`"
|
||||
@@ -2077,7 +2111,7 @@ sections:
|
||||
|
||||
examples:
|
||||
- program: '. < 5'
|
||||
input: 2
|
||||
input: '2'
|
||||
output: ['true']
|
||||
|
||||
- title: "`and`, `or`, `not`"
|
||||
@@ -2133,10 +2167,10 @@ sections:
|
||||
examples:
|
||||
- program: '.foo // 42'
|
||||
input: '{"foo": 19}'
|
||||
output: [19]
|
||||
output: ['19']
|
||||
- program: '.foo // 42'
|
||||
input: '{}'
|
||||
output: [42]
|
||||
output: ['42']
|
||||
|
||||
- title: try-catch
|
||||
body: |
|
||||
@@ -2178,7 +2212,7 @@ sections:
|
||||
label $out | ... break $out ...
|
||||
|
||||
The `break $label_name` expression will cause the program to
|
||||
to act as though the nearest (to the left) `label $label_name`
|
||||
act as though the nearest (to the left) `label $label_name`
|
||||
produced `empty`.
|
||||
|
||||
The relationship between the `break` and corresponding `label`
|
||||
@@ -2306,7 +2340,7 @@ sections:
|
||||
|
||||
- program: '[ match("."; "g")] | length'
|
||||
input: '"abc"'
|
||||
output: [3]
|
||||
output: ['3']
|
||||
|
||||
|
||||
- title: "`capture(val)`, `capture(regex; flags)`"
|
||||
@@ -2330,24 +2364,20 @@ sections:
|
||||
To capture all the matches for each input string, use the idiom
|
||||
`[ expr ]`, e.g. `[ scan(regex) ]`.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'scan("c")'
|
||||
input: '"abcdefabc"'
|
||||
output: ['"c"', '"c"']
|
||||
|
||||
- program: 'scan("b")'
|
||||
input: ("", "")
|
||||
output: ['[]', '[]']
|
||||
|
||||
- title: "`split(regex; flags)`"
|
||||
body: |
|
||||
|
||||
For backwards compatibility, `split` splits on a string, not a regex.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'split(", *"; null)'
|
||||
input: '"ab,cd, ef"'
|
||||
output: ['"ab","cd","ef"']
|
||||
output: ['["ab","cd","ef"]']
|
||||
|
||||
|
||||
- title: "`splits(regex)`, `splits(regex; flags)`"
|
||||
@@ -2356,10 +2386,10 @@ sections:
|
||||
These provide the same results as their `split` counterparts,
|
||||
but as a stream instead of an array.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'splits(", *")'
|
||||
input: '("ab,cd", "ef, gh")'
|
||||
output: ['"ab"', '"cd"', '"ef"', '"gh"']
|
||||
input: '"ab,cd, ef, gh"'
|
||||
output: ['"ab"','"cd"','"ef"','"gh"']
|
||||
|
||||
- title: "`sub(regex; tostring)`, `sub(regex; string; flags)`"
|
||||
body: |
|
||||
@@ -2371,10 +2401,10 @@ sections:
|
||||
constructed by `capture`) to `tostring`, so a reference to a captured
|
||||
variable named "x" would take the form: `"\(.x)"`.
|
||||
|
||||
example:
|
||||
- program: 'sub("^[^a-z]*(?<x>[a-z]*).*")'
|
||||
input: '"123abc456"'
|
||||
output: '"ZabcZabc"'
|
||||
examples:
|
||||
- program: 'sub("[^a-z]*(?<x>[a-z]+)"; "Z\(.x)"; "g")'
|
||||
input: '"123abc456def"'
|
||||
output: ['"ZabcZdef"']
|
||||
|
||||
|
||||
- title: "`gsub(regex; string)`, `gsub(regex; string; flags)`"
|
||||
@@ -2383,10 +2413,10 @@ sections:
|
||||
`gsub` is like `sub` but all the non-overlapping occurrences of the regex are
|
||||
replaced by the string, after interpolation.
|
||||
|
||||
example:
|
||||
examples:
|
||||
- program: 'gsub("(?<x>.)[^a]*"; "+\(.x)-")'
|
||||
input: '"Abcabc"'
|
||||
output: '"+A-+a-"'
|
||||
output: ['"+A-+a-"']
|
||||
|
||||
|
||||
- title: Advanced features
|
||||
@@ -2402,7 +2432,7 @@ sections:
|
||||
which to place the data.
|
||||
|
||||
It is also possible to define functions in jq, although this is
|
||||
is a feature whose biggest use is defining jq's standard library
|
||||
a feature whose biggest use is defining jq's standard library
|
||||
(many jq functions such as `map` and `select` are in fact written
|
||||
in jq).
|
||||
|
||||
@@ -2484,7 +2514,7 @@ sections:
|
||||
. as {realnames: $names, posts: [$first, $second]} | ...
|
||||
|
||||
The variable declarations in array patterns (e.g., `. as
|
||||
[$first, $second]`) bind to the elements of the array in from
|
||||
[$first, $second]`) bind to the elements of the array from
|
||||
the element at index zero on up, in order. When there is no
|
||||
value at the index for an array pattern element, `null` is
|
||||
bound to that variable.
|
||||
@@ -2641,29 +2671,6 @@ sections:
|
||||
$times_three | [. + $times_three]) | ...`: here the binding
|
||||
`$times_three` is _not_ visible past the closing parenthesis.
|
||||
|
||||
- title: Reduce
|
||||
body: |
|
||||
|
||||
The `reduce` syntax in jq allows you to combine all of the
|
||||
results of an expression by accumulating them into a single
|
||||
answer. As an example, we'll pass `[3,2,1]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0. In this
|
||||
example, `.[]` produces the results 3, 2, and 1, so the
|
||||
effect is similar to running something like this:
|
||||
|
||||
0 | (3 as $item | . + $item) |
|
||||
(2 as $item | . + $item) |
|
||||
(1 as $item | . + $item)
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[10,2,5,3]'
|
||||
output: ['20']
|
||||
|
||||
- title: "`isempty(exp)`"
|
||||
body: |
|
||||
|
||||
@@ -2674,6 +2681,14 @@ sections:
|
||||
input: 'null'
|
||||
output: ['true']
|
||||
|
||||
- program: 'isempty(.[])'
|
||||
input: '[]'
|
||||
output: ['true']
|
||||
|
||||
- program: 'isempty(.[])'
|
||||
input: '[1,2,3]'
|
||||
output: ['false']
|
||||
|
||||
- title: "`limit(n; exp)`"
|
||||
body: |
|
||||
|
||||
@@ -2713,32 +2728,79 @@ sections:
|
||||
input: '10'
|
||||
output: ['[0,9,5]']
|
||||
|
||||
- title: "`reduce`"
|
||||
body: |
|
||||
|
||||
The `reduce` syntax allows you to combine all of the results of
|
||||
an expression by accumulating them into a single answer.
|
||||
The form is `reduce EXP as $var (INIT; UPDATE)`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
reduce .[] as $item (0; . + $item)
|
||||
|
||||
For each result that `.[]` produces, `. + $item` is run to
|
||||
accumulate a running total, starting from 0 as the input value.
|
||||
In this example, `.[]` produces the results `1`, `2`, and `3`,
|
||||
so the effect is similar to running something like this:
|
||||
|
||||
0 | 1 as $item | . + $item |
|
||||
2 as $item | . + $item |
|
||||
3 as $item | . + $item
|
||||
|
||||
examples:
|
||||
- program: 'reduce .[] as $item (0; . + $item)'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['15']
|
||||
|
||||
- program: 'reduce .[] as [$i,$j] (0; . + $i * $j)'
|
||||
input: '[[1,2],[3,4],[5,6]]'
|
||||
output: ['44']
|
||||
|
||||
- program: 'reduce .[] as {$x,$y} (null; .x += $x | .y += [$y])'
|
||||
input: '[{"x":"a","y":1},{"x":"b","y":2},{"x":"c","y":3}]'
|
||||
output: ['{"x":"abc","y":[1,2,3]}']
|
||||
|
||||
- title: "`foreach`"
|
||||
body: |
|
||||
|
||||
The `foreach` syntax is similar to `reduce`, but intended to
|
||||
allow the construction of `limit` and reducers that produce
|
||||
intermediate results (see example).
|
||||
intermediate results.
|
||||
|
||||
The form is `foreach EXP as $var (INIT; UPDATE; EXTRACT)`.
|
||||
Like `reduce`, `INIT` is evaluated once to produce a state
|
||||
value, then each output of `EXP` is bound to `$var`, `UPDATE`
|
||||
is evaluated for each output of `EXP` with the current state
|
||||
and with `$var` visible. Each value output by `UPDATE`
|
||||
replaces the previous state. Finally, `EXTRACT` is evaluated
|
||||
for each new state to extract an output of `foreach`.
|
||||
As an example, we'll pass `[1,2,3]` to this expression:
|
||||
|
||||
This is mostly useful only for constructing `reduce`- and
|
||||
`limit`-like functions. But it is much more general, as it
|
||||
allows for partial reductions (see the example below).
|
||||
foreach .[] as $item (0; . + $item; [$item, . * 2])
|
||||
|
||||
Like the `reduce` syntax, `. + $item` is run for each result
|
||||
that `.[]` produces, but `[$item, . * 2]` is run for each
|
||||
intermediate values. In this example, since the intermediate
|
||||
values are `1`, `3`, and `6`, the `foreach` expression produces
|
||||
`[1,2]`, `[2,6]`, and `[3,12]`. So the effect is similar
|
||||
to running something like this:
|
||||
|
||||
0 | 1 as $item | . + $item | [$item, . * 2],
|
||||
2 as $item | . + $item | [$item, . * 2],
|
||||
3 as $item | . + $item | [$item, . * 2]
|
||||
|
||||
When `EXTRACT` is omitted, the identity filter is used.
|
||||
That is, it outputs the intermediate values as they are.
|
||||
|
||||
examples:
|
||||
- program: '[foreach .[] as $item
|
||||
([[],[]];
|
||||
if $item == null then [[],.[0]] else [(.[0] + [$item]),[]] end;
|
||||
if $item == null then .[1] else empty end)]'
|
||||
input: '[1,2,3,4,null,"a","b",null]'
|
||||
output: ['[[1,2,3,4],["a","b"]]']
|
||||
- program: 'foreach .[] as $item (0; . + $item)'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['1','3','6','10','15']
|
||||
|
||||
- program: 'foreach .[] as $item (0; . + $item; [$item, . * 2])'
|
||||
input: '[1,2,3,4,5]'
|
||||
output: ['[1,2]','[2,6]','[3,12]','[4,20]','[5,30]']
|
||||
|
||||
- program: 'foreach .[] as $item (0; . + 1; {index: ., $item})'
|
||||
input: '["foo", "bar", "baz"]'
|
||||
output:
|
||||
- '{"index":1,"item":"foo"}'
|
||||
- '{"index":2,"item":"bar"}'
|
||||
- '{"index":3,"item":"baz"}'
|
||||
|
||||
- title: Recursion
|
||||
body: |
|
||||
@@ -2864,7 +2926,7 @@ sections:
|
||||
output as JSON texts on `stdout`.) The `debug` builtin can have
|
||||
application-specific behavior, such as for executables that use
|
||||
the libjq C API but aren't the jq executable itself. The `stderr`
|
||||
builtin outputs its input in raw mode to stder with no additional
|
||||
builtin outputs its input in raw mode to stderr with no additional
|
||||
decoration, not even a newline.
|
||||
|
||||
Most jq builtins are referentially transparent, and yield constant
|
||||
@@ -2877,6 +2939,8 @@ sections:
|
||||
|
||||
Outputs one new input.
|
||||
|
||||
echo 1 2 3 4 | jq '[., input]' # [1,2] [3,4]
|
||||
|
||||
- title: "`inputs`"
|
||||
body: |
|
||||
|
||||
@@ -2885,6 +2949,8 @@ sections:
|
||||
This is primarily useful for reductions over a program's
|
||||
inputs.
|
||||
|
||||
echo 1 2 3 | jq -n 'reduce inputs as $i (0; . + $i)' # 6
|
||||
|
||||
- title: "`debug`"
|
||||
body: |
|
||||
|
||||
@@ -2931,8 +2997,8 @@ sections:
|
||||
Streaming forms include `[<path>, <leaf-value>]` (to indicate any
|
||||
scalar value, empty array, or empty object), and `[<path>]` (to
|
||||
indicate the end of an array or object). Future versions of jq
|
||||
run with `--stream` and `-seq` may output additional forms such as
|
||||
`["error message"]` when an input text fails to parse.
|
||||
run with `--stream` and `--seq` may output additional forms such
|
||||
as `["error message"]` when an input text fails to parse.
|
||||
|
||||
entries:
|
||||
- title: "`truncate_stream(stream_expression)`"
|
||||
@@ -2943,9 +3009,9 @@ sections:
|
||||
given streaming expression.
|
||||
|
||||
examples:
|
||||
- program: '[1|truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]'
|
||||
- program: 'truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])'
|
||||
input: '1'
|
||||
output: ['[[[0],2],[[0]]]']
|
||||
output: ['[[0],2]', '[[0]]']
|
||||
|
||||
- title: "`fromstream(stream_expression)`"
|
||||
body: |
|
||||
@@ -3145,7 +3211,7 @@ sections:
|
||||
path (see below). The `import` and `include` directives allow the
|
||||
importer to alter this path.
|
||||
|
||||
Paths in the a search path are subject to various substitutions.
|
||||
Paths in the search path are subject to various substitutions.
|
||||
|
||||
For paths starting with "~/", the user's home directory is
|
||||
substituted for "~".
|
||||
@@ -3272,7 +3338,7 @@ sections:
|
||||
- color for objects
|
||||
|
||||
The default color scheme is the same as setting
|
||||
`"JQ_COLORS=1;30:0;37:0;37:0;37:0;32:1;37:1;37"`.
|
||||
`"JQ_COLORS=1;30:0;39:0;39:0;39:0;32:1;39:1;39"`.
|
||||
|
||||
This is not a manual for VT100/ANSI escapes. However, each of
|
||||
these color specifications should consist of two numbers separated
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+709
-279
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,60 @@
|
||||
type: object
|
||||
required:
|
||||
- headline
|
||||
- body
|
||||
- manpage_intro
|
||||
- manpage_epilogue
|
||||
- sections
|
||||
additionalProperties: false
|
||||
properties:
|
||||
headline:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
manpage_intro:
|
||||
type: string
|
||||
manpage_epilogue:
|
||||
type: string
|
||||
sections:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- title
|
||||
additionalProperties: false
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
entries:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- title
|
||||
- body
|
||||
additionalProperties: false
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
examples:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- program
|
||||
- input
|
||||
- output
|
||||
additionalProperties: false
|
||||
properties:
|
||||
program:
|
||||
type: string
|
||||
input:
|
||||
type: string
|
||||
output:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
@@ -0,0 +1 @@
|
||||
jqlang.org
|
||||
@@ -1,173 +0,0 @@
|
||||
body {
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 970px;
|
||||
}
|
||||
|
||||
/* index.liquid *******************************************/
|
||||
#blurb {
|
||||
padding-top: 40px;
|
||||
}
|
||||
#blurb p {
|
||||
font-size: 1.9em;
|
||||
}
|
||||
#blurb .btn-group {
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
#multiblurb {
|
||||
line-height: 1.7;
|
||||
text-align: center;
|
||||
font-size: 12pt;
|
||||
}
|
||||
#multiblurb code {
|
||||
border: 0;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
#news {
|
||||
font-size: 12pt;
|
||||
}
|
||||
#news .date {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* default.liquid *****************************************/
|
||||
.tutorial-example {
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.tutorial-example pre {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.tutorial-example a {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
padding: 15px 8px;
|
||||
color: #777777;
|
||||
font-weight: bold;
|
||||
line-height: 10px;
|
||||
font-size: 12px;
|
||||
border-left: 1px solid #DDDDDD;
|
||||
display: block;
|
||||
}
|
||||
.tutorial-example .accordion-body pre {
|
||||
margin: 0 4px;
|
||||
border-top: 0;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.tutorial-example a {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
/* manual.liquid ******************************************/
|
||||
section {
|
||||
padding-top: 24px;
|
||||
}
|
||||
|
||||
h3 code {
|
||||
border: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
#navcolumn {
|
||||
/* Put nav column above manual content */
|
||||
position: relative !important;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
#manualcontent {
|
||||
/* Put nav column left of manual content */
|
||||
padding-left: 280px;
|
||||
}
|
||||
}
|
||||
.nav-pills {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.nav-pills li a {
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
.manual-example table {
|
||||
border-top: 1px solid #E5E5E5;
|
||||
}
|
||||
.manual-example table td {
|
||||
white-space: pre-wrap;
|
||||
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||
}
|
||||
.manual-example table td.jqprogram {
|
||||
font-weight: bold;
|
||||
}
|
||||
.manual-example table th {
|
||||
text-align: right;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
#navcolumn {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.manual-example {
|
||||
display: block !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.jqplay-btn {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
/* shared/_footer.liquid **********************************/
|
||||
footer {
|
||||
background-color: #F5F5F5;
|
||||
padding: 20px 0;
|
||||
margin-top: 40px;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
}
|
||||
footer p {
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
/* typeahead **********************************************/
|
||||
.twitter-typeahead {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tt-menu {
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
padding: 8px 0;
|
||||
border: 1px solid #ccc;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
-webkit-border-radius: 8px;
|
||||
-moz-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.tt-suggestion {
|
||||
padding: 3px 20px;
|
||||
}
|
||||
.tt-suggestion:hover {
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-color: #446e9b;
|
||||
}
|
||||
.tt-suggestion.tt-cursor {
|
||||
color: #fff;
|
||||
background-color: #446e9b;
|
||||
}
|
||||
.tt-suggestion p {
|
||||
margin: 0;
|
||||
}
|
||||
@@ -1,181 +0,0 @@
|
||||
@charset "utf-8";
|
||||
body {
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 970px;
|
||||
}
|
||||
|
||||
/* index.liquid *******************************************/
|
||||
|
||||
#blurb {
|
||||
padding-top: 40px;
|
||||
p {
|
||||
font-size: 1.9em;
|
||||
}
|
||||
.btn-group {
|
||||
margin: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
#multiblurb {
|
||||
line-height: 1.7;
|
||||
text-align: center;
|
||||
font-size: 12pt;
|
||||
code {
|
||||
border: 0;
|
||||
font-size: 12pt;
|
||||
}
|
||||
}
|
||||
|
||||
#news {
|
||||
font-size: 12pt;
|
||||
.date {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
/* default.liquid *****************************************/
|
||||
|
||||
.tutorial-example {
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
pre {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
a {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
padding: 15px 8px;
|
||||
color: #777777;
|
||||
font-weight: bold;
|
||||
line-height: 10px;
|
||||
font-size: 12px;
|
||||
border-left: 1px solid #DDDDDD;
|
||||
display: block;
|
||||
}
|
||||
.accordion-body pre {
|
||||
margin: 0 4px;
|
||||
border-top: 0;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.tutorial-example a {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* manual.liquid ******************************************/
|
||||
|
||||
section {
|
||||
padding-top: 24px;
|
||||
}
|
||||
|
||||
h3 code {
|
||||
border: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
@media(max-width: 991px){
|
||||
#navcolumn {
|
||||
/* Put nav column above manual content */
|
||||
position: relative !important;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
@media(min-width: 992px) {
|
||||
#manualcontent {
|
||||
/* Put nav column left of manual content */
|
||||
padding-left: 280px;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-pills {
|
||||
li a {
|
||||
padding: 8px 12px;
|
||||
}
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.manual-example table {
|
||||
border-top: 1px solid #E5E5E5;
|
||||
td {
|
||||
white-space: pre-wrap;
|
||||
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||
}
|
||||
td.jqprogram {
|
||||
font-weight: bold;
|
||||
}
|
||||
th {
|
||||
text-align: right;
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
#navcolumn {
|
||||
display: none !important;
|
||||
}
|
||||
.manual-example {
|
||||
display: block !important;
|
||||
height: auto !important;
|
||||
}
|
||||
.jqplay-btn {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* shared/_footer.liquid **********************************/
|
||||
|
||||
footer {
|
||||
background-color: #F5F5F5;
|
||||
padding: 20px 0;
|
||||
margin-top: 40px;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
p {
|
||||
margin: 8px 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* typeahead **********************************************/
|
||||
|
||||
.twitter-typeahead {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tt-menu {
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
padding: 8px 0;
|
||||
border: 1px solid #ccc;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
-webkit-border-radius: 8px;
|
||||
-moz-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
}
|
||||
|
||||
.tt-suggestion {
|
||||
padding: 3px 20px;
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
color: #fff;
|
||||
background-color: #446e9b;
|
||||
}
|
||||
&.tt-cursor {
|
||||
color: #fff;
|
||||
background-color: #446e9b;
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
main {
|
||||
padding: 1rem;
|
||||
|
||||
& * {
|
||||
scroll-margin-top: 4rem;
|
||||
}
|
||||
|
||||
@media print {
|
||||
width: 100%!important;
|
||||
--bs-code-color: --bs-body-color;
|
||||
}
|
||||
}
|
||||
|
||||
header {
|
||||
z-index: 1050!important; /* higher than #contents */
|
||||
}
|
||||
|
||||
section[id] {
|
||||
display: flow-root;
|
||||
|
||||
> :first-child {
|
||||
.icon-link {
|
||||
opacity: 0;
|
||||
|
||||
&:focus {
|
||||
opacity: .8;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover .icon-link {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.offcanvas[aria-modal=true] .nav-link {
|
||||
padding: .7rem;
|
||||
}
|
||||
.offcanvas-md {
|
||||
--bs-offcanvas-width: auto;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
details {
|
||||
margin-bottom: 1rem;
|
||||
padding-left: 1rem;
|
||||
|
||||
& summary {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
& ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 0 .5rem 1rem;
|
||||
padding: .5rem 1rem;
|
||||
background-color: var(--bs-secondary-bg-subtle);
|
||||
border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
||||
}
|
||||
|
||||
button {
|
||||
&[aria-expanded=false] {
|
||||
.bi-chevron-down, .hide-result-text {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&[aria-expanded=true] {
|
||||
.bi-chevron-right, .show-result-text {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.container-searchbox {
|
||||
position: relative;
|
||||
|
||||
& input:focus ~ kbd {
|
||||
display: none;
|
||||
}
|
||||
|
||||
& ul {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: 100%;
|
||||
padding: 0;
|
||||
background-color: var(--bs-body-bg);
|
||||
border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
||||
}
|
||||
|
||||
& li {
|
||||
padding: .3em .6em;
|
||||
white-space: nowrap;
|
||||
overflow-x: hidden;
|
||||
|
||||
&[aria-selected=true] {
|
||||
background-color: var(--bs-secondary-bg);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
background-color: var(--bs-secondary-bg-subtle);
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="48" height="48" version="1.0" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><style>@media(prefers-color-scheme:dark){g[fill]{filter:invert(1)}}</style><g transform="matrix(.011 0 0 .011 1.94 12)"><g fill="#444"><circle cx="220" cy="1570" r="190"/><path d="m1330 312c-30 41-698 1492-710 1528s25 66 100 101c77 36 102 34 124 3s701-1477 716-1525c15-47-20-73-84-104s-116-44-146-3z"/></g><g fill="#111"><circle cx="2410" cy="200" r="190"/><path d="m1830 655c0 129 0 130 70 130h360v423c0 246-5 474-10 506-19 112-88 176-190 176-59 0-120-27-147-66-51-73-65-84-99-84-31 0-40 8-104 93-84 111-86 129-32 189 227 252 692 187 836-118 53-112 56-153 56-795v-514c0-64-30-100-100-100h-490c-149 0-150 0-150 160zM2867 1233c30 302 250 499 438 527 144 19 244 0 375-90v410c0 81 0 100 150 100 136 0 150-20 150-150v-1420c0-99-19-100-150-100s-139 15-139 82c-103-89-351-149-523-49s-342 278-301 690zm803-107c0 292-105 356-237 356-178 0-249-147-273-296-27-168 25-420 262-420 171 0 248 89 248 360z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1006 B |
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="400" height="220" version="1.0" viewBox="0 0 400 220" xmlns="http://www.w3.org/2000/svg"><style>@media (prefers-color-scheme:dark){g[fill]{filter:invert(1);stroke:none}}</style><g transform="scale(.1)" stroke="#fff" stroke-width="10"><g fill="#444"><circle cx="220" cy="1570" r="190"/><path d="m1330 312c-30 41-698 1492-710 1528s25 66 100 101c77 36 102 34 124 3s701-1477 716-1525c15-47-20-73-84-104s-116-44-146-3z"/></g><g fill="#111"><circle cx="2410" cy="200" r="190"/><path d="m1830 655c0 129 0 130 70 130h360v423c0 246-5 474-10 506-19 112-88 176-190 176-59 0-120-27-147-66-51-73-65-84-99-84-31 0-40 8-104 93-84 111-86 129-32 189 227 252 692 187 836-118 53-112 56-153 56-795v-514c0-64-30-100-100-100h-490c-149 0-150 0-150 160zM2867 1233c30 302 250 499 438 527 144 19 244 0 375-90v410c0 81 0 100 150 100 136 0 150-20 150-150v-1420c0-99-19-100-150-100s-139 15-139 82c-103-89-351-149-523-49s-342 278-301 690zm803-107c0 292-105 356-237 356-178 0-249-147-273-296-27-168 25-420 262-420 171 0 248 89 248 360z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -1,52 +1,34 @@
|
||||
var section_names = function(q) {
|
||||
if (!q) {
|
||||
return [];
|
||||
}
|
||||
var matches = [];
|
||||
q = q.toLowerCase();
|
||||
$.each(section_map, function(k, v) {
|
||||
if (k.toLowerCase().indexOf(q) != -1) {
|
||||
matches.push(k);
|
||||
(() => {
|
||||
const searchInput = document.querySelector('input#searchbox');
|
||||
const sectionIDs = JSON.parse(document.querySelector('#section-ids').innerText);
|
||||
const sanitize = (string) => string.replaceAll('<', '<').replaceAll('>', '>');
|
||||
new autoComplete({
|
||||
selector: `#${searchInput.id}`,
|
||||
wrapper: false,
|
||||
data: {
|
||||
src: Object.keys(sectionIDs),
|
||||
filter: (list) => list.sort((x, y) =>
|
||||
x.match.indexOf('<') - y.match.indexOf('<') || x.value.length - y.value.length),
|
||||
},
|
||||
searchEngine: (query, value) => {
|
||||
const index = value.toLowerCase().indexOf(query.toLowerCase());
|
||||
if (index >= 0) {
|
||||
return sanitize(value.substring(0, index)) +
|
||||
`<mark>${sanitize(value.substring(index, index + query.length))}</mark>` +
|
||||
sanitize(value.substring(index + query.length));
|
||||
}
|
||||
},
|
||||
});
|
||||
searchInput.addEventListener('selection', (event) => {
|
||||
event.target.value = event.detail.selection.value;
|
||||
location.hash = `#${sectionIDs[event.detail.selection.value]}`;
|
||||
});
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if (event.code === 'Slash' && !event.altKey && !event.ctrlKey && !event.metaKey
|
||||
&& !event.shiftKey && !/^(INPUT|TEXTAREA)$/.test(event.target.nodeName)) {
|
||||
searchInput.focus();
|
||||
searchInput.select();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
matches.sort(function(a, b) {
|
||||
// shortest to longest
|
||||
return a.length - b.length;
|
||||
});
|
||||
return matches;
|
||||
}
|
||||
var section_names_cb = function(q, cb) {
|
||||
cb(section_names(q));
|
||||
}
|
||||
var go_to_section = function() {
|
||||
query = $('#searchbox').val();
|
||||
results = section_names(query);
|
||||
if (results.length == 0) {
|
||||
return;
|
||||
}
|
||||
result = results[0];
|
||||
location.hash = '#' + section_map[result];
|
||||
if (result != query) {
|
||||
$('#searchbox').val(result);
|
||||
}
|
||||
}
|
||||
$(function(){
|
||||
$('#searchbox').typeahead(
|
||||
{hint: false, highlight: true, minLength: 1},
|
||||
{name: "contents", source: section_names_cb, limit: 6}
|
||||
).on('typeahead:selected', function(e, data) {
|
||||
go_to_section();
|
||||
});
|
||||
$('#searchbox').change(go_to_section);
|
||||
});
|
||||
// add "Run" button to execute examples on jqplay.org
|
||||
$(function() {
|
||||
$.each($('.manual-example table'), function(index, value) {
|
||||
$value = $(value)
|
||||
var j = $value.find('tr:nth-child(2) td:first').text();
|
||||
var q = $value.find('.jqprogram').text().replace(/^jq /, '').replace(/(\r\n|\n|\r)/gm," ").replace(/^'(.+)'$/, '$1');
|
||||
var url = 'https://jqplay.org/jq?q=' + encodeURIComponent(q) +'&j=' + encodeURIComponent(j)
|
||||
var $last_tr = $value.find('tr:last');
|
||||
$last_tr.after('<tr class="jqplay-btn"><th><a href="' + url + '" class="btn btn-primary btn-sm">Run</a></th><th></th></tr><tr><th></th><th></th></tr>');
|
||||
});
|
||||
});
|
||||
})();
|
||||
@@ -1,9 +0,0 @@
|
||||
# The key value pairs found below are available within the templates.
|
||||
|
||||
url: https://jqlang.github.io/jq
|
||||
|
||||
# This line is modified by the Makefile. To change the version number,
|
||||
# edit the Autoconf version number at the top of configure.ac
|
||||
jq_version: "1.6-159-gcff5336-dirty"
|
||||
|
||||
root: '/jq'
|
||||
Vendored
+19
-22
@@ -2,32 +2,29 @@
|
||||
<html lang="en">
|
||||
{% include "shared/_head.html.j2" %}
|
||||
|
||||
<body id="{{slug}}">
|
||||
<body>
|
||||
{% include "shared/_navbar.html.j2" %}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<h1>{{headline}}</h1>
|
||||
{% for item in body %}
|
||||
{% if item.text %}
|
||||
{{ item.text | replace('$JQ_VERSION', jq_version) | markdownify }}
|
||||
{% endif %}
|
||||
<main id="main" class="container-lg">
|
||||
<h1>{{ headline }}</h1>
|
||||
{%- for item in body %}
|
||||
{%- if item.text %}
|
||||
{{ item.text | markdownify }}
|
||||
{%- endif %}
|
||||
|
||||
{% if item.command %}
|
||||
{% set resultID = unique_id() %}
|
||||
<div class="tutorial-example">
|
||||
<div class="accordion-heading">
|
||||
<pre>{{item.command}}</pre>
|
||||
<a data-toggle="collapse" href="#result{{resultID}}">Show result</a>
|
||||
</div>
|
||||
<div id="result{{resultID}}" class="accordion-body collapse">
|
||||
<pre>{{item.result}}</pre>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{%- if item.command %}
|
||||
{%- set resultID = unique_id() %}
|
||||
<div class="tutorial-example mb-3">
|
||||
<div class="d-flex accordion-heading me-2">
|
||||
<pre class="flex-grow-1 me-0 mb-0" tabindex="0">{{ item.command }}</pre>
|
||||
<button type="button" class="btn btn-sm btn-secondary text-body-secondary bg-secondary-subtle link-body-emphasis flex-shrink-0 d-flex align-items-center border border-start-0 d-print-none"
|
||||
data-bs-toggle="collapse" data-bs-target="#result{{ resultID }}" aria-expanded="false" aria-controls="result{{ resultID }}"><span class="show-result-text">Show result</span><span class="hide-result-text">Hide result</span></button>
|
||||
</div>
|
||||
<pre id="result{{ resultID }}" class="accordion-body collapse p-3 border-top-0 d-print-block" tabindex="0">{{ item.result }}</pre>
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endfor %}
|
||||
</main>
|
||||
|
||||
{% include "shared/_footer.html.j2" %}
|
||||
</body>
|
||||
|
||||
Vendored
+39
-54
@@ -2,71 +2,56 @@
|
||||
<html lang="en">
|
||||
{% include "shared/_head.html.j2" %}
|
||||
|
||||
<body id="{{ slug }}">
|
||||
<body>
|
||||
{% include "shared/_navbar.html.j2" %}
|
||||
|
||||
<div class="container">
|
||||
<main id="main" class="container-lg">
|
||||
<div class="row">
|
||||
<div class="jumbotron">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<img src="{{root}}/jq.png" class="img-responsive" alt="jq logo"
|
||||
width="400" height="220">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div id="blurb">
|
||||
{{blurb | markdownify}}
|
||||
|
||||
<div class="btn-toolbar" role="toolbar">
|
||||
<div class="btn-group" role="group">
|
||||
<a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
Download jq 1.6
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64">Linux (64-bit)</a></li>
|
||||
<li><a href="https://github.com/jqlang/jq/releases/download/jq-1.6/jq-osx-amd64">macOS (64-bit)</a></li>
|
||||
<li><a href="https://github.com/jqlang/jq/releases/download/jq-1.6/jq-win64.exe">Windows (64-bit)</a></li>
|
||||
<li><a href="{{root}}/download/">Other platforms, older versions, and source</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-primary" href="https://jqplay.org">
|
||||
Try online at jqplay.org!
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-center p-3">
|
||||
<h1><img src="/jq.svg" class="img-fluid" alt="jq" width="400" height="220"></h1>
|
||||
</div>
|
||||
<div class="col-md-6 d-flex flex-column justify-content-center text-center align-items-center">
|
||||
<h2 class="px-1" style="width:16em">{{ blurb }}</h2>
|
||||
<div class="btn-group d-print-none" role="group">
|
||||
<button type="button" class="btn btn-primary dropdown-toggle text-nowrap" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
Download jq 1.8.2
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" href="https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-amd64" aria-label="Link to download executable: Linux (AMD64)"><span class="bi bi-download me-2" aria-hidden="true"></span>Linux (AMD64)</a></li>
|
||||
<li><a class="dropdown-item" href="https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-arm64" aria-label="Link to download executable: Linux (ARM64)"><span class="bi bi-download me-2" aria-hidden="true"></span>Linux (ARM64)</a></li>
|
||||
<li><a class="dropdown-item" href="https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64" aria-label="Link to download executable: macOS (Apple Silicon)"><span class="bi bi-download me-2" aria-hidden="true"></span>macOS (Apple Silicon)</a></li>
|
||||
<li><a class="dropdown-item" href="https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-amd64" aria-label="Link to download executable: macOS (Intel Mac)"><span class="bi bi-download me-2" aria-hidden="true"></span>macOS (Intel Mac)</a></li>
|
||||
<li><a class="dropdown-item" href="https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-windows-amd64.exe" aria-label="Link to download executable: Windows (AMD64)"><span class="bi bi-download me-2" aria-hidden="true"></span>Windows (AMD64)</a></li>
|
||||
<li><a class="dropdown-item" href="/download/">Other platforms, older versions, and source</a></li>
|
||||
</ul>
|
||||
<a class="btn btn-primary text-nowrap" href="https://play.jqlang.org" rel="noopener">
|
||||
Try online!
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="multiblurb">
|
||||
<div class="col-sm-4">{{body1 | markdownify}}</div>
|
||||
<div class="col-sm-4">{{body2 | markdownify}}</div>
|
||||
<div class="col-sm-4">{{body3 | markdownify}}</div>
|
||||
<div class="row my-3">
|
||||
<div class="col-md-4">{{ body1 | markdownify }}</div>
|
||||
<div class="col-md-4">{{ body2 | markdownify }}</div>
|
||||
<div class="col-md-4">{{ body3 | markdownify }}</div>
|
||||
</div>
|
||||
|
||||
<div class="row" style="text-align:center; margin-top: 30px">
|
||||
{{tail | markdownify}}
|
||||
<div class="text-center my-3">
|
||||
{{ tail | markdownify }}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<h2>News</h2>
|
||||
<div id="news">
|
||||
<ul>
|
||||
{% for item in news %}
|
||||
<li>
|
||||
<span class="date">{{item.date}}</span>
|
||||
{{item.body | markdownify}}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>News</h2>
|
||||
<ul>
|
||||
{%- for item in news %}
|
||||
<li>
|
||||
<span class="fst-italic">{{ item.date }}</span>
|
||||
{{ item.body | markdownify }}
|
||||
</li>
|
||||
{%- endfor %}
|
||||
</ul>
|
||||
</main>
|
||||
|
||||
{% include "shared/_footer.html.j2" %}
|
||||
</body>
|
||||
|
||||
Vendored
+106
-84
@@ -2,98 +2,120 @@
|
||||
<html lang="en">
|
||||
{% include "shared/_head.html.j2" %}
|
||||
|
||||
<body id="{{slug}}" data-spy="scroll" data-target="#navcolumn" data-offset="100">
|
||||
<body>
|
||||
{% include "shared/_navbar.html.j2" %}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="affix" id="navcolumn">
|
||||
<div class="container-lg row align-items-start mx-auto p-3">
|
||||
|
||||
<button type="button" class="d-md-none w-auto position-fixed bottom-0 end-0 p-2 m-3 bg-body-secondary border-0 text-body d-print-none"
|
||||
data-bs-toggle="offcanvas" data-bs-target="#contents" aria-controls="contents" aria-expanded="false" aria-label="Toggle table of contents">
|
||||
<span class="bi bi-list" aria-hidden="true"></span>
|
||||
</button>
|
||||
<nav id="contents" class="col-md-3 sticky-md-top p-3 overflow-y-auto offcanvas-md offcanvas-end d-print-none" style="top:4.5rem; height:calc(100dvh - 5.5rem);" aria-label="Table of contents">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h4>Contents</h4>
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
{% for section in sections %}
|
||||
<li>
|
||||
<a href="#{{section.title | section_id}}">{{section.title}}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<form class="form-group" onsubmit="go_to_section(); return false;">
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
placeholder="Search"
|
||||
autocomplete="off"
|
||||
id="searchbox">
|
||||
</form>
|
||||
<button type="button" class="btn-close d-md-none" data-bs-dismiss="offcanvas" data-bs-target="#contents" aria-label="Close table of contents"></button>
|
||||
</div>
|
||||
<ul class="offcanvas-md-body nav nav-pills flex-column">
|
||||
{%- for section in sections %}
|
||||
<li class="nav-item" data-bs-dismiss="offcanvas" data-bs-target="#contents">
|
||||
<a class="nav-link" href="#{{ section.title | section_id }}">{{ section.title }}</a>
|
||||
</li>
|
||||
{%- endfor %}
|
||||
</ul>
|
||||
</nav>
|
||||
{%- set section_ids = {} %}
|
||||
{%- macro check_section_id(id) -%}
|
||||
{%- if section_ids.__contains__(id) %}
|
||||
{{- raise('Duplicate section id: ' ~ id) }}
|
||||
{%- endif %}
|
||||
{%- set _ = section_ids.__setitem__(id, true) %}
|
||||
{%- endmacro %}
|
||||
<main id="main" class="col-md-9" data-bs-spy="scroll" data-bs-target="#contents" data-bs-threshold="0,1" data-bs-root-margin="-30% 0% -70%">
|
||||
<h1>{{ headline }}</h1>
|
||||
<p>
|
||||
<em>
|
||||
For other versions, see
|
||||
<a href="/manual/v1.8/">1.8</a>,
|
||||
<a href="/manual/v1.7/">1.7</a>,
|
||||
<a href="/manual/v1.6/">1.6</a>,
|
||||
<a href="/manual/v1.5/">1.5</a>,
|
||||
<a href="/manual/v1.4/">1.4</a>,
|
||||
<a href="/manual/v1.3/">1.3</a> or
|
||||
<a href="/manual/dev/">development version</a>.
|
||||
</em>
|
||||
</p>
|
||||
{{ body | markdownify }}
|
||||
{%- for section in sections %}
|
||||
<section id="{{ section.title | section_id }}">{{ check_section_id(section.title | section_id) }}
|
||||
<h2>{{ section.title }} <a href="#{{ section.title | section_id }}" class="icon-link" aria-label="Link to this section: {{ section.title }}"><span class="bi bi-link-45deg" aria-hidden="true"></span></a></h2>
|
||||
{{ section.body | markdownify if section.body }}
|
||||
{%- for entry in section.entries %}
|
||||
<section id="{{ entry.title | entry_id }}">{{ check_section_id(entry.title | entry_id) }}
|
||||
<h3>
|
||||
{{ entry.title | markdownify | no_paragraph }}
|
||||
<a href="#{{ entry.title | entry_id }}" class="icon-link" aria-label="Link to this section: {{ entry.title }}"><span class="bi bi-link-45deg" aria-hidden="true"></span></a>
|
||||
</h3>
|
||||
{{ entry.body | markdownify }}
|
||||
{%- if entry.examples %}
|
||||
<div class="pb-3">
|
||||
{%- set exampleID = unique_id() %}
|
||||
<button type="button" class="btn btn-sm btn-secondary text-body-secondary bg-transparent link-body-emphasis border-0" data-bs-toggle="collapse" data-bs-target="#example{{ exampleID }}" aria-expanded="false" aria-controls="example{{ exampleID }}">
|
||||
<span class="me-1 d-print-none" aria-hidden="true"><span class="bi bi-chevron-right"></span><span class="bi bi-chevron-down"></span></span>Example{% if entry.examples | length > 1 %}s{% endif %}
|
||||
</button>
|
||||
<div id="example{{ exampleID }}" class="collapse mx-3 small d-print-block">
|
||||
{%- for example in entry.examples %}
|
||||
<table class="table table-borderless table-sm w-auto">
|
||||
<tr>
|
||||
<th class="pe-3">Command</th>
|
||||
<td class="font-monospace">jq '{{ example.program }}'</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Input</th>
|
||||
<td class="font-monospace">{{ example.input }}</td>
|
||||
</tr>
|
||||
{%- if not example.output[0] %}
|
||||
<tr>
|
||||
<th>Output</th>
|
||||
<td class="fst-italic">none</td>
|
||||
</tr>
|
||||
{%- endif %}
|
||||
{%- for output in example.output %}
|
||||
<tr>
|
||||
<th>{% if loop.first %}Output{% endif %}</th>
|
||||
<td class="font-monospace">{{ output }}</td>
|
||||
</tr>
|
||||
{%- endfor %}
|
||||
<tr class="d-print-none">
|
||||
<th><a href="https://play.jqlang.org/?q={{ example.program | urlencode }}&j={{ example.input | urlencode }}" class="btn btn-outline-primary btn-sm" target="_blank" rel="noopener">Run<span class="bi bi-box-arrow-up-right ms-2" aria-hidden="true"></span></a></th>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
</section>
|
||||
{%- endfor %}
|
||||
</section>
|
||||
{%- endfor %}
|
||||
</main>
|
||||
|
||||
<div id="manualcontent">
|
||||
<h1>{{headline}}</h1>
|
||||
{{ history | markdownify }}
|
||||
{{ body | markdownify }}
|
||||
{% for section in sections %}
|
||||
<section id="{{section.title | section_id}}">
|
||||
<h2>{{section.title}}</h2>
|
||||
{{ (section.body | markdownify) if section.body }}
|
||||
{% for entry in section.entries %}
|
||||
<section id="{{entry.title | entry_id}}">
|
||||
<h3>
|
||||
{{entry.title | markdownify | no_paragraph }}
|
||||
{% if entry.subtitle %}<small>{{entry.subtitle}}</small>{% endif %}
|
||||
</h3>
|
||||
{{entry.body | markdownify}}
|
||||
|
||||
{% if entry.examples %}
|
||||
<div>
|
||||
{% set exampleID = unique_id() %}
|
||||
<a data-toggle="collapse" href="#example{{exampleID}}">
|
||||
<i class="glyphicon glyphicon-chevron-right"></i>
|
||||
{% if entry.examples | length > 1 %}Examples{%else%}Example{%endif%}
|
||||
</a>
|
||||
<div id="example{{exampleID}}" class="manual-example collapse">
|
||||
{% for example in entry.examples %}
|
||||
<table>
|
||||
<tr><th></th><td class="jqprogram">jq '{{ example.program }}'</td></tr>
|
||||
<tr><th>Input</th><td>{{ example.input }}</td></tr>
|
||||
{% if not example.output[0] %}
|
||||
<tr>
|
||||
<th>Output</th>
|
||||
<td><i>none</i></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% for output in example.output %}
|
||||
<tr>
|
||||
{% if loop.first %}
|
||||
<th>Output</th>
|
||||
{% else %}
|
||||
<th></th>
|
||||
{% endif %}
|
||||
<td>{{ output }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</section>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "shared/_footer.html.j2" %}
|
||||
<script>
|
||||
var section_map = {
|
||||
{% for section in sections %}
|
||||
{% for entry in section.entries %}
|
||||
{{entry.title | search_id | tojson }} : {{entry.title | entry_id | tojson }},
|
||||
{% endfor %}
|
||||
{{section.title | search_id | tojson }} : {{section.title | section_id | tojson }}
|
||||
{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
};
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/autoComplete.min.js"
|
||||
integrity="sha384-xbzjoN6H5XHmAqoSSR42hZVRninPGx85y+XZQGlWxVu2y91lTmr/oD80i5cjeUBv" crossorigin="anonymous"></script>
|
||||
<script id="section-ids" type="application/json">
|
||||
{
|
||||
{%- for section in sections %}
|
||||
{%- for entry in section.entries %}
|
||||
{{ entry.title | search_id | tojson }}: {{ entry.title | entry_id | tojson }},
|
||||
{%- endfor %}
|
||||
{{ section.title | search_id | tojson }}: {{ section.title | section_id | tojson }}{{ "," if not loop.last }}
|
||||
{%- endfor %}
|
||||
}
|
||||
</script>
|
||||
<script src="{{root}}/js/manual-search.js"></script>
|
||||
<script src="/js/manual-search.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
+12
-8
@@ -1,10 +1,14 @@
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>This website is made with <a href="http://getbootstrap.com">Bootstrap</a>, themed with <a href="https://bootswatch.com">Bootswatch</a>.</p>
|
||||
<p>jq is licensed under the MIT license (code) and the <a href="https://creativecommons.org/licenses/by/3.0/">CC-BY-3.0</a> license (docs).</p>
|
||||
<footer class="bd-footer bg-body-tertiary">
|
||||
<div class="py-3 text-center">
|
||||
<p>
|
||||
This website is made with <a href="https://getbootstrap.com" target="_blank" rel="noopener">Bootstrap</a>,
|
||||
themed with <a href="https://bootswatch.com" target="_blank" rel="noopener">Bootswatch</a>.
|
||||
</p>
|
||||
<p>
|
||||
jq is licensed under the MIT license (code) and the
|
||||
<a href="https://creativecommons.org/licenses/by/3.0/" target="_blank" rel="noopener">CC-BY-3.0</a> license (docs).
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" integrity="sha256-Sk3nkD6mLTMOF0EOpNtsIry+s1CsaqQC1rVLTAy+0yc= sha512-K1qjQ+NcF2TYO/eI3M6v8EiNYZfA95pQumfvcVrTHtwQVDG+aHRqLi/ETn2uB+1JqwYqVG3LIvdm9lj6imS/pQ==" crossorigin="anonymous"></script>
|
||||
<script src="https://twitter.github.io/typeahead.js/releases/0.11.1/typeahead.bundle.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"
|
||||
integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
|
||||
Vendored
+24
-13
@@ -1,17 +1,28 @@
|
||||
<head>
|
||||
<script>
|
||||
if ((window.location.host == "jqlang.github.io") && (window.location.protocol != "https:"))
|
||||
window.location.protocol = "https";
|
||||
</script>
|
||||
<meta charset="utf-8">
|
||||
<title>{{headline}}</title>
|
||||
<title>{{ headline }}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<link rel="canonical" href="{{ url }}/{{ permalink }}" />
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.5/spacelab/bootstrap.min.css" rel="stylesheet" integrity="sha256-j7Dtnd7ZjexEiPNbscbopFn9+Cs0b3TLipKsWAPHZIM= sha512-RFhfi6P8zWMAJrEGU+CPjuxPh3r/UUBGqQ+/o6WKPIVZmQqeOipGotH2ihRULuQ8wsMBoK15TSZqc/7VYWyuIw==" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="{{ root }}/css/base.css" type="text/css">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<meta property="og:title" content="{{ headline }}">
|
||||
<meta property="og:description" content="jq is a lightweight and flexible command-line JSON processor">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="{{ url }}/icon.png">
|
||||
<meta property="og:url" content="{{ url }}/{{ permalink }}">
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="/icon.png" type="image/png">
|
||||
<link rel="canonical" href="{{ url }}/{{ permalink }}">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@5.3.1/dist/cosmo/bootstrap.min.css"
|
||||
integrity="sha384-dulfW0vmzZ638jigSgZXvDxMmd70GCnIv6oa+riKq6Kk4E0MKf7qmBfwP02wltv5" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css"
|
||||
integrity="sha384-Ay26V7L8bsJTsX9Sxclnvsn+hkdiwRnrjZJXqKmkIDobPgIIWBOVguEcQQLDuhfN" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="/css/style.css" type="text/css">
|
||||
<script>
|
||||
(function() {
|
||||
function setTheme(mediaQuery) {
|
||||
document.documentElement.setAttribute('data-bs-theme',
|
||||
document.documentElement.style.colorScheme = mediaQuery.matches ? 'dark' : 'light');
|
||||
}
|
||||
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
setTheme(mediaQuery); mediaQuery.addEventListener('change', setTheme);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
+39
-25
@@ -1,27 +1,41 @@
|
||||
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{{root}}/">jq</a>
|
||||
</div>
|
||||
|
||||
<div class="navbar-collapse collapse" id="nav-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
{% for item in navigation %}
|
||||
<li {% if item == navitem %} class="active" {% endif %}>
|
||||
<a href="{{root}}/{{item}}/">{{item | capitalize}}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
<li><a href="https://github.com/jqlang/jq/issues">Issues</a></li>
|
||||
<li><a href="https://github.com/jqlang/jq">Source</a></li>
|
||||
<li><a href="https://jqplay.org">Try online!</a></li>
|
||||
<li><a href="https://raw.githubusercontent.com/jqlang/jq/master/NEWS">News</a></li>
|
||||
<div class="container visually-hidden-focusable">
|
||||
<a class="d-inline-flex p-2" href="#main">Skip to main content</a>
|
||||
{%- if navitem.startswith('manual') %}
|
||||
<a class="d-inline-flex p-2 m-1" href="#contents">Skip to table of contents</a>
|
||||
{%- endif %}
|
||||
</div>
|
||||
<header class="navbar navbar-expand-md sticky-top bg-body-tertiary d-print-none">
|
||||
<nav class="container-lg" aria-label="Page navigation">
|
||||
<button type="button" class="navbar-toggler" data-bs-toggle="offcanvas" data-bs-target="#navbar-collapse"
|
||||
aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle page navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/" aria-label="Top page"><img src="/jq.svg" alt="jq logo" style="height:1.5rem"></a>
|
||||
<div id="navbar-collapse" class="offcanvas offcanvas-start navbar-collapse w-auto" aria-labelledby="navbar-title">
|
||||
<div class="offcanvas-header">
|
||||
<h3 id="navbar-title" class="me-3">jq</h3>
|
||||
<button type="button" class="d-md-none btn-close" data-bs-dismiss="offcanvas" aria-label="Close page navigation"></button>
|
||||
</div>
|
||||
<ul class="offcanvas-body navbar-nav me-auto text-nowrap">
|
||||
<li class="nav-item d-md-none"><a class="nav-link{% if not navitem %} active{% endif %}"{% if not navitem %} aria-current="page"{% endif %} href="/">Top page</a></li>
|
||||
{%- for item in ['tutorial', 'download', 'manual'] %}
|
||||
<li class="nav-item"><a class="nav-link{% if item == navitem %} active{% endif %}"{% if item == navitem %} aria-current="page"{% endif %} href="/{{ item }}/">{{ item | capitalize }}</a></li>
|
||||
{%- endfor %}
|
||||
<li class="nav-item"><a class="nav-link" href="https://github.com/jqlang/jq" target="_blank" rel="noopener">GitHub</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://github.com/jqlang/jq/issues" target="_blank" rel="noopener">Issues</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://play.jqlang.org" rel="noopener">Try online!</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://raw.githubusercontent.com/jqlang/jq/master/NEWS.md" target="_blank" rel="noopener">News</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="https://github.com/jqlang/jq/wiki" target="_blank" rel="noopener">Wiki</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{%- if navitem.startswith('manual') %}
|
||||
<div class="container-searchbox form-control p-0 d-none d-md-flex d-print-none border" style="width:16rem">
|
||||
<span class="bi bi-search my-auto ms-2 me-1" aria-hidden="true"></span>
|
||||
<input type="text" id="searchbox" class="form-control border-0 px-1" placeholder="Search manual" role="combobox"
|
||||
aria-label="Search manual" aria-keyshortcuts="/" aria-expanded="false" autocomplete="off" spellcheck="false">
|
||||
<kbd class="mx-1 my-auto text-body bg-body rounded border" style="padding:.1rem .2rem" aria-hidden="true">/</kbd>
|
||||
</div>
|
||||
{%- endif %}
|
||||
<a class="d-md-none bi bi-github fs-4 text-body" href="https://github.com/jqlang/jq" target="_blank" rel="noopener" aria-label="GitHub"></a>
|
||||
</nav>
|
||||
</header>
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env python3
|
||||
import jsonschema
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
sys.exit("Usage: {} MANUAL_FILE ...".format(sys.argv[0]))
|
||||
|
||||
with open("manual_schema.yml", "r") as schema_file:
|
||||
manual_schema = yaml.safe_load(schema_file)
|
||||
|
||||
for path in sys.argv[1:]:
|
||||
with open(path, "r") as manual_file:
|
||||
manual_data = yaml.safe_load(manual_file)
|
||||
try:
|
||||
jsonschema.validate(instance=manual_data, schema=manual_schema)
|
||||
except jsonschema.exceptions.ValidationError as e:
|
||||
print("Failed to validate:", path, file=sys.stderr)
|
||||
sys.exit(e)
|
||||
Generated
+1143
-352
File diff suppressed because it is too large.
Load diff
@@ -5,8 +5,8 @@ Name: jq
|
||||
Version: %{myver}
|
||||
Release: %{myrel}%{?dist}
|
||||
Source0: jq-%{myver}.tar.gz
|
||||
URL: https://jqlang.github.io/jq
|
||||
License: BSD
|
||||
URL: https://jqlang.org
|
||||
License: MIT AND ICU AND CC-BY-3.0
|
||||
AutoReqProv: no
|
||||
#BuildPrereq: autoconf, libtool, automake, flex, bison, python
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: libjq
|
||||
URL: https://jqlang.github.io/jq/
|
||||
URL: https://jqlang.org/
|
||||
Description: Library to process JSON using a query language
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -ljq
|
||||
|
||||
+22
-7
@@ -14,20 +14,24 @@
|
||||
# flags that are needed. (The user can also force certain compiler
|
||||
# flags/libs to be tested by setting these environment variables.)
|
||||
#
|
||||
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||
# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is
|
||||
# needed for multi-threaded programs (defaults to the value of CC
|
||||
# respectively CXX otherwise). (This is necessary on e.g. AIX to use the
|
||||
# special cc_r/CC_r compiler alias.)
|
||||
#
|
||||
# NOTE: You are assumed to not only compile your program with these flags,
|
||||
# but also to link with them as well. For example, you might link with
|
||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
#
|
||||
# If you are only building threaded programs, you may wish to use these
|
||||
# variables in your default LIBS, CFLAGS, and CC:
|
||||
#
|
||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
|
||||
# CC="$PTHREAD_CC"
|
||||
# CXX="$PTHREAD_CXX"
|
||||
#
|
||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
|
||||
@@ -83,7 +87,7 @@
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 27
|
||||
#serial 31
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
@@ -105,6 +109,7 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
|
||||
AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"])
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
|
||||
@@ -386,7 +391,7 @@ if test "x$ax_pthread_clang" = "xyes"; then
|
||||
# step
|
||||
ax_pthread_save_ac_link="$ac_link"
|
||||
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
|
||||
ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
|
||||
ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"`
|
||||
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
|
||||
@@ -482,18 +487,28 @@ if test "x$ax_pthread_ok" = "xyes"; then
|
||||
[#handle absolute path differently from PATH based program lookup
|
||||
AS_CASE(["x$CC"],
|
||||
[x/*],
|
||||
[AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
|
||||
[AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
|
||||
[
|
||||
AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])
|
||||
AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])])
|
||||
],
|
||||
[
|
||||
AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])
|
||||
AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])])
|
||||
]
|
||||
)
|
||||
])
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
||||
test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
|
||||
|
||||
AC_SUBST([PTHREAD_LIBS])
|
||||
AC_SUBST([PTHREAD_CFLAGS])
|
||||
AC_SUBST([PTHREAD_CC])
|
||||
AC_SUBST([PTHREAD_CXX])
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
|
||||
Submodule modules/oniguruma deleted from 660f097dff.
@@ -1,30 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script builds the website from the docs directory of
|
||||
# the current branch and copies it over to the gh-pages
|
||||
# branch.
|
||||
|
||||
set -eux
|
||||
shopt -s dotglob
|
||||
|
||||
# build website
|
||||
scriptdir=$(dirname "$0")
|
||||
cd "$scriptdir"/../docs
|
||||
rm -rf output
|
||||
mkdir output
|
||||
pipenv run python3 build_website.py
|
||||
cd ..
|
||||
|
||||
# copy to /tmp
|
||||
tmpdir=$(mktemp -d -t jq.website.XXXXXXXXXX)
|
||||
cp -r docs/output/* "$tmpdir"
|
||||
cp .gitignore "$tmpdir"
|
||||
|
||||
# copy to gh-pages
|
||||
git checkout gh-pages
|
||||
cp -r "$tmpdir"/* .
|
||||
cp "$tmpdir"/.gitignore .
|
||||
|
||||
# clean up
|
||||
rm -rf "$tmpdir"
|
||||
echo SUCCESS
|
||||
+3
-1
@@ -1,7 +1,9 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
cd "$(dirname "$0")/../"
|
||||
test -e .git || exit 1
|
||||
|
||||
if git describe --tags --match 'jq-*' >/dev/null 2>&1; then
|
||||
git describe --tags --match 'jq-*' --dirty | sed 's/^jq-//'
|
||||
else
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBGiLapUBEADQOs2nBPkTE+kvvYlBwLo87W1sfMmj6Vf/HCzdCiQs3oye26d2
|
||||
3rLHvgpr3Tyst3bp1VpZGATV97PxjZMOkxHfIkW+T1VubiWN6c1veBP6T0BycfLN
|
||||
l2PbY+7FWY6pJPcKSrxMGyHqJYLs196JrGWyVJt2xHg6V8V8bEeVTXVyJsz175+a
|
||||
zGPbXMeM6F6v3vwMBHD0EzgS2hE4NFbiqprgo11vOV1+/WOQ3GkyonEDyWchocNY
|
||||
TZ9pIxUPnuBJKvf2vmOyYh6nr6PbN2aNA4JPCWGa3CwpWcsW0tTjLW5fIfWj5idH
|
||||
jzDEdrG4tDUxxUVAElFun85T6p1JNzSwuMRkKbnkfvH6maNAhlp+XCXko7mo5jsh
|
||||
ms9eysg9jnarvwwilh84q6ZHyf3qn/U9eEstiSCGuJ4OvqlYxY81rLEmNpL+FZ9r
|
||||
IzwMVY1O2WOnRuqpVjZiI4dy4TUcAdaVKCsI3GrDBH/hJJUjg/JybM6nEURy4w95
|
||||
O7g2LEn2DL4XjYhOXTbjaEdJaxCSYBX8CfZTlkzmPG1ea4IeXjXBmlMavMQGix5b
|
||||
a3XAPUYB+IQALneQ00ME1KphJn0uCkH5a2GzPyW0uyliJye4F+g2KIo1gQgIIItt
|
||||
nptxby/AwrAd955DkAYXYWza5WwsRZ/bmHNmAgIFJfIclo89glQ/Za/z2QARAQAB
|
||||
tDdqcSBSZWxlYXNlIFNpZ25pbmcgS2V5IDxuby1zZW5kLWVtYWlsQGpxbGFuZy5n
|
||||
aXRodWIuaW8+iQJRBBMBCAA7FiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLapUC
|
||||
GwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQsNpg+0VLrxjPjRAAgvHv
|
||||
AR4FPiOOSIFOEIvrbq++5Q9IeCuS/gVBb54l28nqXYtXwYs9wZEenA2A3dg5Q7eK
|
||||
2x0pD6QACNeQSIoDk3Ve0qgi1mNKJd+bzgfY4028aLF4ayG5Bsmcf0mNkBl3visU
|
||||
pNcc20icPdzfnSRa6Fqz4CQDs7LX1nhjtBnSa0oT4gy8l924/TsPDU7tr31+DlNx
|
||||
VeKS/6Guwz209bcDKhLrVv7p+XaCjHUAq0obUVPPrIr2zaI7b3M7zAypHGByLA/g
|
||||
VfTeZiiY5j/o7L731owfDv5lZKRpnjsd8KmMu4SNvKOxu8CU2OetFvjiP/PxT7gP
|
||||
SgZyEakrn9titv77xhbHumZ5xTTphLYPfPDmzS94pJxU7aXBUMUI2wgdWrA3HYNf
|
||||
rTq9q70Jr2UCKZeCsNiIhtL3i2jBJBDfilxk82NU+/yAUDfLf6qKsMk8eoXIlcEO
|
||||
BbSiyXpJSApfA4paKd3O6wSjJy+F+tChWf5hjVKu+jvUhWgQTnUGCcnx500CfE47
|
||||
byaoN6287g+i4eeiSCPdpUR2H8kIT0wIOhKzylc92QfgIzGJ3lMzvkQszuSDEnt8
|
||||
hp/rJnBVLR34KHki82pFcn7cpyLux5t7Bcg7oatwC1sUn4eYSRJMLdJabI7HJ0Qn
|
||||
g9GbGqeoBEcnT/0K+CONrveDt0JbgAeQbNZOHOa5Ag0EaItqlQEQALruvRDFVmEz
|
||||
jBmSOJbVqEQTeuQCB6f60zIkA8IcCt87+X45AqqWQUweHAkIxynZksp0uOySCrYb
|
||||
3GxI2CpjEqMN87hCI0VhUExD6ZJrtlV0+ZdpZHZUqKxBUjRj3R92IQgcUlhrTjsd
|
||||
aI+loBxpWk2upUNQeVBhHvJexV/Ccvgl1e1hmzmmEBXJwXAk3Dy7YRceTk4c7dbi
|
||||
fIIqCvxCS/4QAyTKVJK1Ilz/DgqTFN9mSq9FT5qwtgYKz2U5/Lq8lEqNEAfvrra3
|
||||
94JOvfN9b5PQiKsDQyfUNgAnrKKLnaxB5QSBMHZrTomAntsiH+3tWytYav43OEn9
|
||||
Ti7jkx7cKn61DxxINSb/5a127xF8zVYy9w8Mxpp+KxiR5QfAh1DkJI89gJE8C7G4
|
||||
vzIogrcksFjPRH+4Iz5FI8+CjTnqw3T+qjFGxDhSpb2RBTxZxGHRO8gW3y6s4CUb
|
||||
7Ir+7s5+lyjJpcQa6x22rFuf35lBuWMvifG63TmeCw42oL5XtU3oiqHjwIZkQgxY
|
||||
B58iN66eYIVlAOv7AVH5a5OHEUDbMem+M5jQJOqGBl/0cXkevtFENSX72eUideHO
|
||||
XX7+TBmXz8eqt7NkDz50fKArRL9eQIuobBglSLiE8Edmgh4hzzagPD0rbNEQHiPS
|
||||
TYnmUuGVJkHQrz1JRfCyB8KtVeHAygNvABEBAAGJAjYEGAEIACAWIQSTB5qVEe/A
|
||||
t9bNv7Ww2mD7RUuvGAUCaItqlQIbDAAKCRCw2mD7RUuvGEI6D/9S5o3qZ+hAJUWM
|
||||
8CymSYzv/ysAqnyBHZuYyDMV/xonpTdxX2NVm07dOc8dcWkF07WmML7sCUfHBNwS
|
||||
uXl3rBoextcX7gGRtURnsRNqaW7M0q6ZckQiyanVs4+uAAfOYSWJ7uZvRQbEY0oN
|
||||
JQJjrgRqcuNwQKkZGT0D7Bd5cnzCBuTYWRrO5oa4BQP5bKJO4BhFOmdVpMSQAiRx
|
||||
9U/7sb/C2DKkrWapxRBSAiJ3myfDs0WIvqw8zfqUoqfLKqzpg81ix302Q2UAzFAI
|
||||
Nq0JrStKDxzyBKsOd0YCp1MfL3Vy9VXZc1drkr6y1Pa6ieqoxFiDlbzkjkct65fW
|
||||
HckG+/zms6qqIcEg1KkrYQlI20/S475iv4Q4uHCt8Jm3LkNIcSRyr2EvHBmjp39/
|
||||
+L2cEa87g1GNku9ItB1AeUBmyYGYbS+Xpz9+q2Jgaw8iFudWuC57XBK1xwxO2XWa
|
||||
3gDIQW+4Jwx4JwX+l0NLO9VxiNrORHWXwwF/DXjQ3mw0+rL9hxu7rozpvNZq2S+a
|
||||
r9t7tM3jVErxQ6jlWADj0nkn1mQnxvWyL+TId4Ivj+7ThtGpbZDznMyittx7WZlS
|
||||
iARYZRdTNrMaxmklbxQ1jCHyU6cds6JE2Ktsvylf6GJd9PID+ANXhVhy84yxiQmj
|
||||
r+DHc9qnr7PlZcfurBj94kxeWHLxiA==
|
||||
=22V4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
File renamed without changes.
@@ -1,3 +1,4 @@
|
||||
998c41babeb57b4304e65b4eb73094279b3ab1e63801b6b4bddd487ce009b39d jq-1.4.tar.gz
|
||||
1dee4bd2516f699723f373b2629c9173ce123b92c3a72520d0e25fcd8e3df45c jq-linux-x86
|
||||
b9b63aa4b3cc85df8bdca884effb69d66e9ebd717454a9e212d9423ffe3e955f jq-linux-x86_64
|
||||
6ab184edfa04d6f662a696d8594f19532ed78bc6fd05acf4cf506e789914300f jq-osx-x86
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
c4d2bfec6436341113419debf479d833692cc5cdab7eb0326b5a4d4fbe9f493c jq-1.5.tar.gz
|
||||
77c2e4dd9e92c58a662582a24109330a8a94562c50c52f837f59122a951b4ffd jq-1.5.zip
|
||||
264118228c08abf4db8d9e907b9638914f3eadb5cd50dc1471a84463f7991be0 jq-linux32
|
||||
c6b3a7d7d3e7b70c6f51b706a3b90bd01833846c54d32ca32f0027f00226ff6d jq-linux64
|
||||
386e92c982a56fe4851468d7a931dfca29560cee306a0e66c6a1bd4065d3dac5 jq-osx-amd64
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
5c33ac16152344893f596d2c9f256b6cee6e925e53718c94d24049b640ea955f jq-1.5rc1.tar.gz
|
||||
dfbb2d073d2df9ee0bec44b60bd81e213b7881b27fc38d7438daee9eded2b75e jq-linux-x86_64-static
|
||||
bc370e22a11c85c525ba1965760faa5273aa3cd0ae69b030de4091fc776538b2 jq-win32.exe
|
||||
6fb6f39d847df57b481d36941216c770ccf5f97c36e5373a0c93e63b5506c9f8 jq-win64.exe
|
||||
@@ -1,3 +1,5 @@
|
||||
2fd209ca34d0891499bd32f59ec332b0b3048c449c388d428e5c5e8132a13e81 jq-1.5rc2.tar.gz
|
||||
fb7c57cbce7073ec18f669a313e956864dfafc58bb0c1a158881335ad7daeb58 jq-1.5rc2.zip
|
||||
7ece904edef3f951ca0c6f68cdb14e782d52aa46624fe2de9cfabfbd98fe5797 jq-linux-x86
|
||||
cced974e1f2c50d6203e09c2e3ede44075c4f35601233378deaf7bfedb2b4aa9 jq-linux-x86_64
|
||||
25f930463c94414fbff1ba5d76a9547259073e8acb19f709880e913ab58586e1 jq-osx-x86_64
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
5de8c8e29aaa3fb9cc6b47bb27299f271354ebb72514e3accadc7d38b5bbaa72 jq-1.6.tar.gz
|
||||
e33f9219cd8c3851b411215dbac51d7fcca4a2b157964bfcfa56a1d718e2de14 jq-1.6.zip
|
||||
319af6123aaccb174f768a1a89fb586d471e891ba217fe518f81ef05af51edd9 jq-linux32
|
||||
af986793a515d500ab2d35f8d2aecd656e764504b789b66d7e1a0b727a124c44 jq-linux64
|
||||
5c0a0a3ea600f302ee458b30317425dd9632d1ad8882259fcaf4e9b868b2b1ef jq-osx-amd64
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd4ACgkQsNpg+0VL
|
||||
rxhEhQ//Y2Eeo5cOdVdpd1TXFAKNuihry0Y6l9OcZy41yysHfAj6iEhzjuIMeCBO
|
||||
KtoZU354/5FH0Ndevk+gpPoU96T4qREsrZlDyjieXgkCucYG+oNpW4k497DPX+g+
|
||||
GjEUtOVtMh7sCHx6CBDdTKKzhTZA/Bk2IexKGr66wKo+8eF+GQF2ZwZ+sgd78DYm
|
||||
CBqlh9FJhAQVzCCrK1CnmAFct+N5k1oasFKjUPxdzS5wj4XetWWfj1rFHaexxC+n
|
||||
r5TCvq9YepiK2IgTQO+zo6bzbiIliRME3Jj9+C7fLR8wqpsWsGpfx+HY8Ie6OAiQ
|
||||
161FyzQIk9U2MuN7rGTgyRkNLO/Zd9mBZZkhMgVEC8sFOUQJhey/Pk7ClwsJYppU
|
||||
tSVKrt4oO/URozk1xhGhaZAGw0vKCLLCDqjpKXrPEUTR5zqQjVnqjT4oBESI5Lvr
|
||||
/zG8Mw0ontK48D3cKNxuKzzUII1SStV+vd3vBXAglvB9/JTLgJlmiLoMGrnq9L4V
|
||||
KOMD852i8QFabFo/CsRdA2oh3yp3q7Fac+qu7D9fJMJtsCY7ge+q49mc4Tc+BBAd
|
||||
7kkZ3OBZtTaUzE8hdAzrJTiXm9DprqtSA75UJ9Yl5uDYux4V7LVkBTslo6sbrYfR
|
||||
yEFIv6yULElJPwkGunooAwCMhJ9tb4r1JUvfJYSYAa+jt9i20Vs=
|
||||
=BKS6
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd4ACgkQsNpg+0VL
|
||||
rxjSxxAAxez+Ag1zwobaMD0QyplI8GgXNmX0JaSOfHJjp6zC9qxEpjNIDslrINsY
|
||||
JZqSyOIc9Wt/gyVGQNlSuI2Xnd859Z6PhftQ96KFKxkUbWmIUJErIomL91nq1mPV
|
||||
prI5yVcs18xVI1WVZSlibx5G8HUwR2ZgNb6VDLvhtqJMjD2HPjjMcKUOdUbgF4U1
|
||||
v+XMKaztiBV30/nDrLjJRq6Mwq+qVIn+FAyPP8hUvTDnNwhFmRIEofgKTMSUToMN
|
||||
eAgmNLwlBXiVO5iVJJVmQaGG6VKA73iCk5DTxSDaFj2o4yik5jVsuMincu+eVpqw
|
||||
GEqR+sUkJ1iSJuGRXGzJtakp5uOS7g9bdRQa8EbXFDm1AX6bgE/kfvWs8auv3+Cy
|
||||
N/YIedUna8UfZdltjJDdFDOPYd89HYkAUmL1OoQguOsM5gYL5wFGnNwxnIj50guH
|
||||
+8mjT0gphhuBKygf8qZxOyK3NFr6y6/rhFkrtHTIvAgWzmjSqFTWcq+8m99RRDbq
|
||||
V5OB2MSJeT1cp0LBtVTzP1zrXY6gQ0hNOorrxirzAEERd3wXBgqlgCQZ+tH1Es8D
|
||||
VGsbQGjal5sIFxtA00D4l50uPbfWnXBW4lbC4/yBLvA6+A2MC9WSkb0tL2Grkvks
|
||||
4nIyW40kSaV8a0WvQk07567XDnJwZLJTATcMqtYu7RWiefCq/UE=
|
||||
=3DP0
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd4ACgkQsNpg+0VL
|
||||
rxiHhw//TBEUiVj7hRN2sgAoot98X+iLpFY/mbChem01klE7FE/5GQ3rCuAuIxJB
|
||||
MjzfTb36yrQeeqH8xrHQtsjyyMcZ0GLJjkQxusrLtQ+xzfyRESFfVCXHialsmrqI
|
||||
0OtI/L3y7ERKu09Iqo3ijeCa3RNAjZx2fQh/WOKB+mboX0bG8ZG8G+rwrqGazhix
|
||||
cdimaTcuONJ+87jUsxRDgP68LBKZL4w1h4iHl0GhGrc7rHAvDglmKeLfO/66qnMu
|
||||
FkZeyTmL4pVgsgQ2t2aEgTvLFKDqJUtUiEqUUmqwE+dn02/+nLLN3aCo7sw7zLjH
|
||||
2k/7P7VDV7oZsrr2JQdshWSlpMjx3mxeLKuED5WM8fXwKUvktBlGPvlP0VmcG5CB
|
||||
4eeAycj/iv+eSxt5HBYU5FtzbOtNWwrtt14AbN4RqFVaVGH2y/avjlPUKbA8Toz5
|
||||
bnZ0rrC5IVD19tP3m4DETepCGJKis611myN2hJ+qCgm61UsBTttjx6zafNOpo2jb
|
||||
xl7TPpEfmIIGA7hu8y12rdOc/30RaTtTFxwa2k8oy0ma1IrP9A9k2Hy1AuOjLRal
|
||||
kRHE3H6PuYU+n6TcP8XgoCJtL913/M9iH5T6EVm8gGFJxJA3E8s7Ybv+Qc6UGk8r
|
||||
2fF+WoKVyc6hdsasHS+VByPiuYdNWhts6jIiGGBybfb4GFhwFbE=
|
||||
=r9zR
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIyBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd4ACgkQsNpg+0VL
|
||||
rxi9PQ/3UjtaLAq4pQUQt1NeripPHXHyIvmy0US03V9jh23l4zjJlnysfjm1GjmR
|
||||
8HzSlpdofXdsIdomoUGx/QeheJMA/jUf4Re53qM89Uae5L0t9FoXP1XuvdFc6xKH
|
||||
+F06AyT5qQHrM9RFkTk/XUQquWR2ILfY0hPE6F+uYpRjoXqDLIIfTXLWGZIAxxO9
|
||||
jvT0YS0z6K2pM0ourhD5K+Co+PE9eajhPa7AyZm7NAciLNA5q4OzUqOva4VK1r01
|
||||
wUzy68w8s5mOTUt4iATpgfn9aMcRloG6COJZd/CVeZRGQzNTjsstbXKlFzcx2G79
|
||||
IHNgDnXFF+Kh4lG645TuboPFRp1xZlG7upKU09bM2rHDRZTO0nzHsOo0sGJY98ot
|
||||
KW3HtrHzwTftlsg9m4F9qVVqPIdjcu/ap3okEo9ADe4QJmc1VIq8XxVlXvhw6PnZ
|
||||
uvbkJbTGiHAn/Mrh2+A586j4/YTZSSej0TRnx5vreMg8YswEy+rw5oUsHaYpswKG
|
||||
oBYm2FPRhPFE+L3OyoR19h05N2RcBkuKRU80hLi7a73e/jX9N/5NfkOOiNV0p6pz
|
||||
GjJi/pWV9t1Tmr4l3kcn7SkViLr+P+bNY7XAhaOQNgHlKGjPjeT4xbvOQitCheyq
|
||||
vqp7sIDn1XrcEG5CsliMmC2sjYIB6e03QmPYSj5dyJ1eql+lXQ==
|
||||
=388h
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd4ACgkQsNpg+0VL
|
||||
rxh9bA//feLBpnr8Qi62Jy4q2DHyzys9x7etjLF/eMG1ZoQoWXhQxYu7eRwabWhs
|
||||
zdDOzLlpM7Xtv7yvYeigIP+cUlkhxeaak1D3Xwyj1/2Yf/iufhbDOnKekHglGnuo
|
||||
NCAuUhjGsCFcpL75Gbb+IcSUuPaB36mB/S6C/EeVbGmArvA4lpo7KCYTg+05FyQC
|
||||
8/lcnmNHVu32rJ22ojk+z9nZORRUFpIHIK2Pk77Vui+JM0M3nv2EDu3oXDZLRMia
|
||||
L7bUyP4GgTGlXHSIws+RVRiXlk/UMAJBptBi+vxhAWTrVmfcLjzYqAjFBf5AB4uu
|
||||
7IVr3VcW/07UJ1Mmn6W03MgZtnvwCqgLRrmTiZDxu++WLDyQrpL3kuffg81cvD8f
|
||||
sGhv+AROwOo1V5gUoYVRA/kP16ph5Zhh+6HMJt7049yKpkAkZQes4Q7fVpGVapVm
|
||||
+mA3FCrIIrzumJCdb6J6arYnZHib+VG/vDnjRafR6HNn9R/Xl6aWuYcSVUlPmJp1
|
||||
SJbzeFJEUFbv+TsutQLmkClGR91nOnFiUsyJZtASKjdyBRzNbWZeBiwQCRv7ckPU
|
||||
5OoQFtEFXuMOY5HzPI/dI5CIXCXAMKJON0aDupNmNQ4EPDtEkRjnWIdy+M5OaJoE
|
||||
WySfSwHalmNuABjGhgdUZVROqs0qbSGte1XzoNkVp36oLvksP/8=
|
||||
=7S87
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxgZDBAAioN1WXgi3onDx6SdbVaUnNp6C1BifwXXI2tQFFR5fAYfsjVxcZmM/kGV
|
||||
U85ITOs9tduggML2ZXWeNBiJcyuXHFA+BadvjDUgQWK/ZYInpaGMzdBs/tO/nnRR
|
||||
uMLuXbcPMiUmUIplxFelAUsjXkZrhomyRnCrIHB1IKcE0xYY/W/bWKzbUnx92jp7
|
||||
w6qq7amivKtONyvoiN17NlWXhKkRr+ylwAm88mwKK6xkPVgN2no0fXJUVrhtA4lW
|
||||
yrC3Ff8Xw3XeBHvKy2WFoLVsZlOg8l8dYdR+vMct43D9p9v7rKPqGmbjKvdOC4jt
|
||||
Jf5tQ35lX2Up+/z06anIa0yoW9ywEiUNrmxNU9c11/VdoBRVX4MYz9UygAQDozje
|
||||
1exr6hUv9H16+A7gsbmptRxzrJsvAGDaJEG45is3eSFtBoX63FkuDRw87DpEZwDT
|
||||
/ojNrbu4KsYIHMXqZLNyfDPCSGIARSMxkyey8M28sw/AWAZnTEfusKcRpn1zYxjX
|
||||
TUSWwPS+NLJFGQ43Re0FmxZsX1aNXfT5gia2WUm3IyxLgyyj79O6pTa3y/GbBXN8
|
||||
2C4hiVPnrByvhLEq5WcgHDIYVYdwxTNR4YG6bYwkh1oCLedtkKwniKNGH/7yASuX
|
||||
cJvJQnwp/2oCNqeYV8heOhZlwIRCC7rZQbUkgC5uAZ/Xx2FTYGo=
|
||||
=KM7S
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxiUfg//RIvFDrv+ie8dzd3P8DEBxQA1A3Z49czZcK+LwXmy2PJUivJgvnOXv/8k
|
||||
LnYXnURMtu9NwtpYXf1QD4Jz4q7I6X0LInaODYvGAV47boscSO287+xXVhulm6dN
|
||||
u0xLsuc6Mt/TikdWx3Q9WSOkB+1ZsbHFQ289S4Xp0zSQ1F4mpfWqBfEPqVaJPL1M
|
||||
PGr7j8IlWJ2GvVSf01t1aeHc+ijYZHdDm2YcHJ6vxbeHrqwFGXiTpllvauRkCj2o
|
||||
JgNVK2ilwKg3wUUBJXeAUxhaqoMmhX/6OhnolFBxkF25ir4jI0rzLAfr65Sfciyq
|
||||
Yz6dI7c1po04D9HA6j3QcyLI32QRUKa+nUMuNMf+XrP/jC0rsnOM+l04YneNGnIK
|
||||
RaBQqQN9J1NhTFClka+o6PcSaAMxypGbWNDQ4KTyKiXId5iG4Csq2RXEn+mLMDOH
|
||||
u5mlZp4ERp1xzSZAL6E0QxVatNCnB7wIZWHAh7bpNnt3tgvF7KCjLKcl6E3PLY7j
|
||||
iRKEDdrDhiV6hiniHPQk4dqYNxN4/E60vy4zdDNG/tHyyKHIjZsBUosqIAXRALia
|
||||
3WsXu6Qka0X9t1OO8kznFo2UUhFS7x0NGaNTcOBCleP81JIfdpF50UD2AEEWwhMV
|
||||
89yyN51bz2v9pumebu2NrhE94jLmOgEOQaUe5BzbwYLQfzE7jJ4=
|
||||
=y+Wi
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxgcGRAAwEp2asToQT7ejK/dxWJ9RnWVT6i9O4HHA+77WU/8bp4qNbXKYOkmAVKl
|
||||
PyiFQxkJPq/fezEmRo4nURinHJiOnWRnznFeqhk5iIT3D4lubVwpQmVmJQvgamsD
|
||||
hS0YmSKgfG/4Ub43qug57uqw7F89foDGq6UastyDT2/z3emZxvT6gpMz1CuZji12
|
||||
uZFHnK0JJMpK9a4yrs8quJe9K+lyQg8BLT2Ee/UX9TeqhdR5arYKNEWGtzSD0pDE
|
||||
FCDY+QgWxSIlfyGTM5dwOL/Xo4t93z9cDADb+d2q+4bIfUK+JoUT+hACDJYm5i9w
|
||||
M+FP9lKk5d7w3wkOoWKMnKdRVnCm/BMpeRHUhXct9QHGtAQlM8X1S2wgMeh3RSL4
|
||||
uJxhb9n/jpVrCafValXCYKHISa00GfJFf35arZ50zrfrj+NSVa92fyvC/SNR7RXQ
|
||||
KK/e/MAUa82nU2DVJb5VO+GUMtWXK9zQZgJ64O4p+LTcV6hm55e/h11BkLeVGI5u
|
||||
C7PySgMttXbUVny8zXOCVtKw/yx4Kd9PKZUNhBkTocxPe3eQklFcdQLsrEEF+IIS
|
||||
pEXFpXDMzG0opctSMpp03rIQDYj3INScaQ2HxsetBwDqI2CkJH87s4V8dCVcpWU8
|
||||
UQzp/emVyg8b1nkPyc91vn7rAiN19BRkYX3/VihPk2StcQbUZ84=
|
||||
=/4sS
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxgCFw//Rsxw9x76y+iOqgoDYsBmDCH4v40OjljBtDyC66zOwU9vR95CWhM6iTr3
|
||||
dHsIqScDeAtMrY3aN1aOoPjC7JwYc3HljFNIB6m1uBAuRtaEFXfV+/z9rYK4vTFg
|
||||
kw/M7m+gKJY3AF3fz/W6i8oug211e2S3eeZeOUW2ISllrCc3LHCkLuGoqIlWty2v
|
||||
BQvvoEtYJRZ02KKTIZwWIh5ku+IFrTkc5+hxB9PGcEHS4qUnfhW0cRMP9/RwoBa7
|
||||
7HxjXVHG6LNlUXASP+d+CtOrRtxlDwaGKZzYq2pzmBzm73wP7RBUrmxuKL3U+U3l
|
||||
p4cnKHBIvDdE/a+1QOLhL6zHZAE4WFfpKFu8cyyDhGOI5mxXPs7xDCPnF5GATETv
|
||||
WJ3BCPoWrfDGZpyTzonzx2XWDnIlc9weQ4aKKJ7Gbwb8Y3hHfSNgQlcIG9txgdFt
|
||||
ds5X/ouwcRzzB3zrGTk6Jvwpf+rhdmHnRiuzkpp4SefIQAvigiQ5VRhjxGKjah+b
|
||||
43M+2wyc6539uV1oUbKGMQo11tWhyTSMYfUoJ9F5iH1za30xGQsz+TmrPZvwJdOI
|
||||
eOMifiamfYAyQnB/zmSkgiK8F7uOjJt23EB/F9ydJ1zgPC+fzzgwsIWKL5Nymgsu
|
||||
vobkSfQNdA131IUwDyCMLBgJgLi5nZ2YwhdFoPGf7NtISzk8FRU=
|
||||
=qIDo
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxh5cA//c4nMQ2cFJWWbiZ8EWLZAtpzoXYEfjsHwKjT58xXs5WO2n/DNgr2jCuWw
|
||||
fZaqv1rav/aRXX9FPLaW+uYExY98axq9XxyCAGVmqaJyorXExJKOFzxeIH5ypZkt
|
||||
aWFeR3SPv4wTxW99bXy5Ut537l01quKPo2xUx+agdxPYGCl02HtOdFOyshNsbjxD
|
||||
4LNDusboIY48shNRjeOIoX2174M1o07Bg3Kpvp4B8a3y/I9wZfLHGYYAcbXJR0uN
|
||||
0Ey9ucslel7m70ibaHaTlr8Epzn7YFl5/XI4vJF8Dl68z1M9WkHRbiO8pSor5ckv
|
||||
uhXPdrbs16pyn/Qo/8/PFnA/jdTadaMzI4NuvVcvOp8YLFbe3UGAqlRjTpEs0cDg
|
||||
F/nfKF+PFfL1sb9zYkhjgCiRerhpGzdO96IuP7nzF78zEzfFT4/c2C/SBaLpwdN8
|
||||
ax8YwsU9FRmu9Dp/aMy3y9H2QWmCz/vmBfwUGqD4qzNJesmk9J7HHgZqJ5e8SjdD
|
||||
nA+UlL9eVbXBJU2aD3x3+fX6L06irCR6JDeP/FiL+/25FZ8X4PZnL4LBTS3Ggh0S
|
||||
4CPT7IUp7dsNvdQoKH8HlpUuBskzIfnZpwP7dumz76s3hxPHZEdvAWQGcEtSe/BW
|
||||
QvWSEqok9wTePG4P2n0AYKOmvUDpQPzhWPigiPIU9PRXpXBng1o=
|
||||
=wQpv
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxhB7g//UwWwAWCzjIIHrjCCzw0odLyEFWklrXhIvfwclCw5c9MQemR/qfuwzAQE
|
||||
+oRMN+DEs33SFRNokkGbhJc16BMqEX6l1msHFlqHc/HBX86HLwLmeEIwzVZEhWjp
|
||||
Lsa4HeBaXEZmLkxnT8P9sNvPmVbFUb/kdIFd8qXPEmMYfIZ04tUjGIL2iVLBhjgU
|
||||
rzjaIdadmi3VRMs1HF4lbu6BqB6XNX4F8E1mA0NJ8cRo+5La5sA8hUVIxXPv30E0
|
||||
ndEOnZYx1LN5bXAv6dwZrjD1LIskWzY19ep898jM/2/8KpS7oYP+w7E6QKWq6aL+
|
||||
E2pgjEAXSfQ/0HFCh89+b5m6TL2H2rmKhflHbZRgVuLi1k9CP85dIV4rpgpIw52I
|
||||
jSPws7QkdVZhtWS/wDdknFZkyloWwLpxoCBW87EfjAfjDGJqQmNAhriDFJhsJGih
|
||||
TwhwASvmCpaJksizoWxJriTwcLCbofyN6qtjmU4+TD2/PJ6UeO6IsL+Z0vdcxttn
|
||||
QujEKBnTD1jCU+PrTOdc99knflr8Hn88O7wD9Bem8gMWGz97U8uwmb/NuOFylvp+
|
||||
4jAWrokM+s56naBkgtFyGaRlLv1Gh/s7NhmiYALnZr6SRNSieRacLyPvu6NBkx+6
|
||||
mvB4261OqZal0D66dGZf6l8OFOrghr8kXu9+45BQZK7UxPfAwxA=
|
||||
=sQMd
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxi3fQ/+OFDEzY2396qJS9gK7Grxs6Ul0/wM7KZIFftzcc6cVShooMJTYWwiYlEh
|
||||
AwZsi4pqI/47zhQZKhjRebkw4okLmKX8tOrjyBC33tKRu/MfxxHQW73I96JvOfxF
|
||||
knO5OMB/XBHSH0H3g0IRHqFzv/y6P2spUZhY8/VR/Bzz5SfSID20IYYDACbSAUCA
|
||||
onsJcq7fqNK+ygfthB50nKj99WOWFar5SED6bn/uPgvxBD0JnF9eTC9IT7EVjNZI
|
||||
VtivR3nFQHuSUgFDJyWhKYFlpzRRij9KcPdsRSlRxFNZpVqOopI3lNJ2y/AHAeHh
|
||||
FHNQ6LVKBm5uJCyXttAgXTglTm97qKZaRkuHjRyAuiCDlGaKfZJYwMff6/e/YaXO
|
||||
0rMu0k1ArXUNPOGnOnGequAltDbu4vqJcKbhF/EPVA36t65B3Piyh4P8tQMWWMg/
|
||||
RFD41ZSARphbRct+BAXCQijwDt2M/jFhwjCPcD+UKYR4k0RkRfkDMQ+XCqmP/+5G
|
||||
b14+6OKk9yULXBrWlVPbT+rRoVas/a88P/R/l96FRc9KtSq8SbVJhuiwiSf/Q8P/
|
||||
Oqqu9qY5pOWPdfndpAmaqD+wR1LCVT8AZvLA/cIX2Vr8urMJIgnf+tSq25UX6wYH
|
||||
ZMwiUoZAFUyZVGh4AB6R9M+wiz2HByHbX87OFZxuoPRK+etpX4M=
|
||||
=RPjm
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLcd8ACgkQsNpg+0VL
|
||||
rxjp/hAAgwlPF0DYTZPquduWvTeUDBT5lz3uQvibB7lGQ74GlHEspyC63Sd1nXi9
|
||||
pfCSwIEkUgpRbdkDhNPZbDa7cInO1VFKCZnjgWdeJAIaTRYuFcPg5Uik8lhg9Uu+
|
||||
AGFrR1atjX3tePhcA3NjbZUKNOneQgibBoqJX199UxF6Q0o1O1EuZG5KVZbGb1up
|
||||
alQ2+iB78qLKGUmqwE4q01S0XxlSTMqtTKFjvRWNKJb90ZwQ3hdwIHpduEMgQ2nU
|
||||
Vjz/6w0nGRXpw4+zVKQt7wJfbUKWsoKlElmrBw5otXoAmhff0ZltGR1d+50xZ7Yg
|
||||
NQecoVl84BhkChEIuUrYeH4XlRle01SZvtJJvroinrGEyeNuouVITq1+zftTmRbE
|
||||
FLAqabLWc+ChK9uQHo7DVg6GELKZbVcT+h0MrI4PBo0upjON/P1SqRxLEm44H7ME
|
||||
huG1a88rCLa0b6qz8U331JuJhIch3Le2KA3HYDQycYoF+J+juPfyAsRGPdi1IASh
|
||||
ImO0i1rotRlZP24UG8rAIKIqfBjUMKsltg8mVJ+QYikrFn9oQzGNxwMAH8M17hXY
|
||||
SNSev+mRr8u7zNvfHnCWRbjOiI664gMpllLhDspTM6PDzEuafKrlLpBZF4Q/ymht
|
||||
Ua8olKOn1/K4E8ZcRl5ZrSJIP3E5p63reyVE21WOaBMHd/cyV3w=
|
||||
=yLDy
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxiWKg//TpJChosdrGdCiEFohHTNoHMIBvF1C25ohMTLRbBsgBPYS4dP/YaDWeT3
|
||||
gjc1lMn/JYFj7lqxAukS4aA8H4lSkwltXG25oE4mZxDfwCl1cYZ4A1480Ee1Ubc1
|
||||
t/6ypGc7VotiAxRCywRDd2h6Cb80RUczy1IyWXhS9OMbzBACUwYJhBKXdfWtxKGU
|
||||
1SwR3oxLUMrKkKSyXwy/5+bjSX+E1ZmJFcUI5VN8kwERv/3v/1go0oqxeLDagM/z
|
||||
vtmcyvMdMEuzdIROtfCSr+CcBSh4Vy8bNrJiPD1needlE+5pgNL238P+zPuqRl0H
|
||||
EsYFrUod052zoHWwaHOUN3tknaFKzTjN+1UmRRwV8go+bJd4XxIwB/g+MsB95Ewe
|
||||
jbVyOWuOcMm2zWYSFSMeL3m78D3uHmHsFfnaeV3y6bjUnM5dQLQbt+N0kUiW7tzJ
|
||||
1tNc964lUeGJcHMBUSNbOlZDHlxPmfWsNufFxCxAr/D1Pm8zk/DPNWeC6HGGWdB0
|
||||
4rFeZFmvSAPQPdN0ChXYH50vzS4mQgP6jgrXsNo3JuHOK6bl3nUO1QllwOsgiCKl
|
||||
ZMBB/iuZWwcMFAJSundeuEvPyE0Q78GmlxbOB6UWMAH9Q1Q5fMTGW5YAy4WvHhoa
|
||||
bTeZOZ9CSzb3hgxxO+mujrSe0ucaUChPeghaLUJVly43Jc1xLh8=
|
||||
=yC09
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxgpxQ//R+95Bn2kKcghpgJnrsT2DXFwg6pq8+fB5ikhjfRPps79QLtPdsS62I1o
|
||||
f8chDHA82IBPh21VDHo2l4Y5WeGmvRvidH+IQQ+SE9zoIG51quEWUX+slYWvTcV/
|
||||
lhcxQz0Z9pFSGy/+FAGUJX8BGLiyB6yKyHco/44F9vBNCL3WLRqEZsXI9E1yswcV
|
||||
wmERlOdQA6uNhTqdOKGfYtK9BZqODYosBWgE+FDZbqyYM58aBjTWcMBvtsuXDfAm
|
||||
nI5bG5umdtOjSeLclhEoQInD3971XI9sbWQRTh7gMwsZ1CKpXvR5b/+p78nhPbha
|
||||
Yxk6x8smJ6WBSQ6X5yc/ZH4dHuYObBtbpiIHSCoVNbwzI7rQUng9fmAcrwcLDmlH
|
||||
+MEJzxXQ1bB2rqPSlf5TE/cwcthWNAPggwPMjdC3++OswzQ5DjtG9au+MgesX7nu
|
||||
rDYxnDS61ZPn34lDqgLjmYXNhZ6LNRHNu1QxBwd6e6adBfkygOB/FOnvVxcTMgTd
|
||||
Gg8Y27UUe3iSizpCIiKTAkquM/gbFVVTze1vDswkFii6CkTkIztm9D3v4gWR61PH
|
||||
IQd+4E8yeY5OL2xggME0yg/0j4lzz++wze4XaQo1E3fNQcpYE/WaQuJmykDpsCnh
|
||||
hfkOmEd+Q8Ver3woit7RpXQO8uGrU1OW2dRDhQpYj/XZ2wF0sgg=
|
||||
=NopQ
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxiXVw/9F2CgcLQKF74V3KEOrg0cn6YjAIszrgTRGULbTye9jiKHoieS+Yo19ucB
|
||||
tp3iDjttP0a6jPr7jfPBc/I6ae+sjdQ6rDflJbzY+8ezFjtpCZhyeNz3cByzCsMS
|
||||
aqojhS2IL1BB/ux+DpjUVecr5z1XXPJV/R+VYnKyN0CTrp8mh3MR6CjEmHGwuoJV
|
||||
VGFJe/oMMC+C2eS+Qn9yxuPAyotnVuhmlRsvKO5+5ec5yFnIJY2rF/s9Bss5cwyK
|
||||
tSB6EoRMND0uJSGtDfsHbgiJQTiHXTeFluvwyJQvFUAaThE4BPdgbfwN+XAVI+nm
|
||||
XAPVvg1vwgmzr2GHTJu+N8liRSVdzgHTYQj5RiAJEOjZEPjNRdHSU+Dd9PNTp4T2
|
||||
lcuavOOja+4bXWz9EL7vgeFcD+giUIW7QG3CYlL+TAWrxOLa5ZVwEgDc4zW6qZPR
|
||||
Z+O5ppOLdusDXt0U7uNiSeLrw+UiuFtMBes80uZqvmBI4AvuUjRzERISKlrT9b2n
|
||||
6/bD+IcwdigdRdnLQHXXRbnjFo35TajDptgdPMnG+l3LDIP8NYYtRWgHavYoBR0X
|
||||
tRcTSZF3QdKPSVzYwQ7uK1P+TFdsHqXtWKaHzUyhaOlRLmSjl3yCPVbRIwnLYIgs
|
||||
hSTJhsFhDo35w+/zoCm7IDgCf/ZHnRp/zgc3HpSHjWgWGPKD1ps=
|
||||
=FQz0
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxjAaw/9HtCptIOmxpfbz29e1eqt1MW5yt2kRNZ+Pl/Xw1SILvhMtwHKCwrJKSrI
|
||||
yqOY7wQkfptemmReTN1xV+lNwjfc5l6GHQQpX5kzHjSFk87Cqo76ji2k7riQJ1FS
|
||||
RTy2i0cXkOW0IgHLIV/mdm7Yc/6Cay0xOzx2zr7C/azxNpVn2/3PXxkySWhfNUAo
|
||||
6T7K6tmRmUT6Gp9Q28LZIVJcsr4sw9TXlCvfe99G4jFgLPuqP4J0p6EzuZkgZOzD
|
||||
8brmWEo/fszjnD6Xdagb0UCZDW4FumcRwptS2uV9fu39BOIIzTlGJj5cQ08zsQlO
|
||||
2xRvwuOQzAyv1CzGBIIh1c36T0zkL+I8ATvBS6FFjMSLBBp8bDXtDKad2qrZHASi
|
||||
fML1pbscqenGkHEuLUer0kwcJ3ndi3WVNgErqPTmLB2g8TMCS4pbkaHy1StTnxsn
|
||||
NQO9fMBgF9Df6PyaPi7xfmGlBEJiW9/CYckltsoTEaWnpChkZGPiVgKcvh6W2amf
|
||||
Y/evImn7NRrV/NE6NXzMnxCJABs9ozmoEgQWrqKEKQJ0nXGUakeDk0FTTFiQxVa9
|
||||
5NV7s4ISJOI4qDevYnS/8jDtjEe41l3yyL50BVmwnX+63rWXwU9R+VBeWgUKXMWy
|
||||
pRYsZ9tNneL3GXoy4ERYZ8C8XFTE25P+qH8MyT5M4yaA0AJFZjM=
|
||||
=H6MW
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxhxCw//TRcytUiUuQ4yjdCPzGP8DkXR8hFpwCVaZliH4dRd5ZF0Td1QS48cSM0E
|
||||
3kbzAXd8L2KmJdzNmZCY8F0p1k6q0/HYdf9bj/qaXncS/6/JhwR0MSewIUgeUG2d
|
||||
nT45eUkKoDXERibK/HAxG517umnzXAeoowLqMhYjc2PaZn9rqFluSDs6CuZ2Uq7m
|
||||
DsZF2cjYHBXLDKxkjOEqY1uo4E28VlRAkm2N/xQ8HJnvJSZ021M0tvy2PrSTF52+
|
||||
H2KC5JlpCGLTce9JD5EFmQ8KYLCkJ0fBY0M0CKvBK7aKXGPc8e6iCHP7yMtYPXJZ
|
||||
KyzE5jThiCo87A+GiWao3VNy2HMTBxs1RMJJ+raJF5VDSycMTkg5+QG2qaf1h0ER
|
||||
rxN3Rh2CTCkXQ+7GTECYGjcsmbR7XIHKk8oxmh46VEfVpsXBJSQ9eUzZeoWwdTT0
|
||||
2JnudjVs5EUk3tzzNGDjoo/EVESXSoJHoZFLPFsrm0BfvWkEF2933Hl/hQGTxcg1
|
||||
JZPlbbk+csraGiixdZCTWvRFNHCQjixGUEODR1Fo9j2vtnpVFjqQMNXpLTCfsejb
|
||||
UrIOXsYqh8+RjzSuYzhGbp6NmUKZMBRyPrBr9i747O5fqrv0lunIDiP9eXh4DKI2
|
||||
HV+v/hMiUv5anCMihmTTKP99VOpAfBdmG0jFjfEd8xlUcNLDzpU=
|
||||
=6jT7
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxiDcA//ecc7FbMqqVhrICDLCVu1h3/sNy6hsuOFz9n1A1IWB1/vlGXkYaxsONf5
|
||||
AkDcBRHkt9Gt3PXxbLyhLo0zb0NWbIkIt62IfHX/NU4bEpk+95DugWMKiZ7Jnyo/
|
||||
2bsiUz51IxGlsMubTn+VOOjfdFrob93NupQI7Uob6FMI2M7347vA3qBwFgmt3CU/
|
||||
WrCRR4o8sZCmjIKWo8oIZJ/7kw9fhoi2mvN3lxs0uodd4/V/t9dQgpx6vXQ13CF+
|
||||
B4UwtfYKCMURDkpxM+6OAQsQWHdFCrpv8wnxx8M5uNmqxkfKAu9S8nYP5/jM/9gF
|
||||
nQ4A4viwc69HGPxh0hOLWXXdP4kLGYA88zDzBrPjyQhWOaGXJwUadmojAahXLfrI
|
||||
Yd7mUQ4wZKZsAYK4hT0NJAsp/Da5N4bXYoyvDPT3e5grYab66WBxGpvsaCZhxy/z
|
||||
k9Ur58eSmD2ClHiUdmELfiwK/jehh+3uHDg4uAUhxcybz9bSgxATwGUkbYND8HCC
|
||||
scRRmeyY8QtlXdtQVd0zhJB4uV8RJJx1D0LzeGqOyrn8HX+iHmbnRBVRrNlWirKE
|
||||
Q8LeFFCD449rDn86Ss03S5uwilDmtkyZ1w2DWV960ApULsi8UMTLGLEVlBU3IbUU
|
||||
OOB6RlPfv8pZZG40R4xrldjiQdwUD88hg6OkvUYHcrkII5xYdU0=
|
||||
=v+tG
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxhBkxAAj9b99EVI4eIbHthB5LehqOXsmRCqcxh0ygfquG7KzqApMaYuqcuVULLq
|
||||
cyVh0NzmMLalzf2Wb30BRshSJgUHBFIbilw8vHshQ5Wr/wLOr7ZJNP6IvS+iKsR0
|
||||
lkk6qM106ZmYxN/Y0AHUBjh449gjFjIvDD8ROWlC/2BA9Hq7d6fJQj6S6SmM0P9n
|
||||
OKF/GxjmBuIKSPgOP++If8WfbjqBf29I/irXOVFX/8f6KsCuPRBFNUW3GwcvgEEu
|
||||
WCUdnAnbBDjgKFhcXZK2fL0B1PS/9JZlKX9qNfmuiR+oCDp/MJoa7D4ilyUPZdzx
|
||||
LqzeMC//aWbJx99GtOUJGbE2ZYRzYc1/5s7fwE/i953F+Qg7U3xIdMpabLkHFn3V
|
||||
W5PNZvKnzKg5LGWZbHXjnadP51Sgi2mosMfq3noSLOd3tNoYh9sCR1hFMAUY9wwz
|
||||
ssqDrpd9kycDasJ6Q/eVs/ZGnByG74K1J+z8ES96d9MG0oiezUx2pqBWWrjANJZw
|
||||
6fKI2rYyfztknT4/2oyDmzEYkrfX0liJSYA4mVDl6UxC/qq2aexjKEepFJf7zO0J
|
||||
pUxRTvamjU5dNVTy4DpBgZesgVx8SiaktyH60WnphyUL9CWlttgmwDXjxwiVqVZ+
|
||||
XEUprAlN9SLMVgD78Hl8RZ8xMb0ZeiL7cb66H04IkEnf5XWZZ4U=
|
||||
=yRmS
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxg3xQ//Z2VE6wRM6rIHWnT9OzadzGcmJjEqCzCN7krdkvUMpO7OjTfl05rARnqw
|
||||
in98seJez4GydIpBOTlwm0MU7zM6lQ5AFsTLcR29XqKxJZF9cYZZqe0wPbDWxZuh
|
||||
/4sEP9cQ+Os85q1USbxOrnO0rcGDPfuBc28IZv8NOHj76DUg867d+ApTxzqkkicy
|
||||
Zd3oBN9Ohrs1TFN3VlEmBOlUKWxhGJTVZOzF4YzGrxh/toEfYTTlDNppNt2EEDbN
|
||||
HCvn5z5pxJtzc3338a1tAEoTxhdFn9fr7uAdZyxm+SZGTB9V+wfFUcKXicx04Bf7
|
||||
Hn1zmS8yGEGeXa4pA33fR1MsSnO67T4OyMx18ZmlbkknJiV4GvaCmco6wlyj+AtH
|
||||
C5pHm4Fhf9p9IQXO+I6xcJa/allChEjv67/bZGl1QlRWrzD/Ut6SetqMHEOFyU2T
|
||||
eD1oImg+zlpFNeV1pEWBALqLhDLFkd0XXjSy77RxcBsN+w2VwHEb0PHbWPZ1+Etm
|
||||
8i/7NPuty5eAUG4vH+hskqEFLFi0L11j6L9eLcAutjNCbR2BAOACxHkfT15bVwj4
|
||||
rUFCH0Xy/jL5qr/8ondT52MthOQjUF/bw6nB9Pd2JJWa4oDihbYKC/6fzvFhLtOC
|
||||
tDuM4E1YBQnfQA+vPP+qEItOa5sFO/Fx2NiNAYXp54li5BSSkkw=
|
||||
=jB0s
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceAACgkQsNpg+0VL
|
||||
rxgxvg//X+TyO3SdT94jlBn0JHBmztCtiKur1nm1XlbvA4cibfwN0hK03SPzL4d6
|
||||
f6lX49JP76CtN4sGPYhOCim1CUTYRQHsCzTM/5oA9RSC5ssgg4rcoO4GK0PmaDt+
|
||||
PEgiP9Qzi1aTubjcgmfkuK1+oiERYtRTDdt4LnuBBFL/mLsU6zrR9WcDTQSDo1CQ
|
||||
gqyn+Pvpr00UeVGS0l2JHyE+4ZgNOODqlz9tE/7Ab4iHKYF9ahPuCUoMySRA4WOk
|
||||
cYphD2CWWd+mJ2Oi3ryvnRo7mlJLzxusWmrkFv4ei+skttrQXFcxCOJxvqruBN2d
|
||||
IrR71/Ydy+ozIGwWsLAFQ/yS4KcrPJiHcmfybwx6XgXp/qyNeel+B1Sb8aO1uSjj
|
||||
Q0j2MBltS4DOLvAEvhFVrHzKf5zmAJETwpK4vcYqYALnLMW9O0kfV/PDpN1r0eJP
|
||||
cyFtu+kjuLsg1M8Hpz5y/uVoXnNBSFtCBEkoE9Dh58r7vyVp3/2BHbXvAxWQuE17
|
||||
F+TwEFHX5AbRRNQEmG0uhuAaSDU6wcInepgR1Nn4F5+wtT4s+iSMe5MKK8OEV26Q
|
||||
q88sbJ8AJI97C1dEzD7bPYoqBxwOklhNISBI6K5rnC1Y4YnBHVNY1M9bgT02TzHz
|
||||
q5wrEHlo0dAzUSoCZCJvWWKjKD30yGXqybBL8mogU/dAhcJbZPQ=
|
||||
=3Kro
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceEACgkQsNpg+0VL
|
||||
rxjqlxAAsKcs/5wnGUfL3DBueHA7giwZXd7Od5sXGPSahQpezsYF8S46t5OEN3y4
|
||||
fyj1JvXfdMFSBi8Pcw+LQ5iXv+AtmRksF0UmewibVrq4ETVVF926n/tcm9eouVOF
|
||||
I3VKZVKm+UULhRy8XVjkMMCbqb/AZW8HZGuOnpWg4UlQgPX3FpiAYBZJdT8TLv4O
|
||||
UHqp8hMCp/qwCRSshTcKBqCEbdITm5OI35hqfotpoA9F0SUVTBIbu+xgvksrW5X/
|
||||
6Yy+OVvS01RFgF1F6KeJmxrfxo4K4/eNSuCbYJTHfTNB3vK5RBwki9ufqY7GOhqe
|
||||
RcHC9q1PSK/FUlp52MhwIwLGp+fdKcJjOpXcgZec1kHlPGENcAi8zE5WrCGaEtQa
|
||||
XK9DtNedbu873UuJJKA3uoeWFQLsG0GKIK+ESgG5lZWQvP57XyG2rQx2opTLVasd
|
||||
EA1ctJFi5IIeP8vpyF4/WI6tgy3sgULucxFlpsdxNHEm80tpa61p0A3YVRuVxAre
|
||||
4GetVrb21dkgg0kfEmhHKrntaRDMI7DYwHr9YNCfxUPapgkcaYfzLM+VouFbYUiK
|
||||
JDnPwRYV0ti5V30nfnbQzCcVCk2za5XFhbH4kXMwbYB9XCT21hk/xlCCPG4FxFQN
|
||||
Gm1iNL8USJjQXtdTDq8W1aO1kah8FJO6lfZsEcJEuUpvQbbhXe0=
|
||||
=rNMh
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceEACgkQsNpg+0VL
|
||||
rxiYtw/9FETxa8Nx91lb6WKS5GknbWaaiaCIXpN4GqZORUnrMnoPqF35PyqEYPZX
|
||||
XXn+jvZ5fvsvyWsyWrE7+AMLZ+bS/0WQnryVg7pxfo/4RBW4eqcagBQgaORbShKd
|
||||
JO3F4I9nuR17QPKk86KtjvJlntxnJK0wxJvIWiFZge8gvymaLL0ot1tyak3HhD4K
|
||||
BPeRRl31Jgnuw/pIjgUuNPYU6DaEzPw613e8Se1SrpgA6fA4CYzO4nRl1ah0Mxws
|
||||
wRSVDakGKz/yRtVj9uGFSpGWfgezkU8py+5fr8PcmcLt2tVj6rFzW7siCBCMHQDu
|
||||
UnSuVaXtfXxc0YZV2Ih8iMP/Ehy9RDQ8CPwvo9GHPz0FZuy8lc25DB+IeRYK+qhZ
|
||||
z0upYYeRJyp8d4t66ReiF3JxADF1uEfN34ZSHznS6BpVHDtaAi0kDjy3c2VEDTLV
|
||||
Qa3zx248cT+qHMVOa+6i7AhWAWuAsSzM5xwiuOmb2RDBzoYy3maqBME5VL3u/qWt
|
||||
QyPHkJKpXg6OifbsyerOTPSvWUIH08lv7UKjHQJYRrlpHjwyCq8W8VlR9ceX6ee4
|
||||
4IRlbZwZpv3f8T5RzCIhx28t3K5i2rPcsblFit0t8xIa+F/ZiW/0uQXyebcyFllq
|
||||
Gq/KMxdGAbPh4P06Dh979MMhmgr5e+FjY2W4bkeAG6N0stZ/bdg=
|
||||
=/bLq
|
||||
-----END PGP SIGNATURE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEkwealRHvwLfWzb+1sNpg+0VLrxgFAmiLceEACgkQsNpg+0VL
|
||||
rxiYtw/9FETxa8Nx91lb6WKS5GknbWaaiaCIXpN4GqZORUnrMnoPqF35PyqEYPZX
|
||||
XXn+jvZ5fvsvyWsyWrE7+AMLZ+bS/0WQnryVg7pxfo/4RBW4eqcagBQgaORbShKd
|
||||
JO3F4I9nuR17QPKk86KtjvJlntxnJK0wxJvIWiFZge8gvymaLL0ot1tyak3HhD4K
|
||||
BPeRRl31Jgnuw/pIjgUuNPYU6DaEzPw613e8Se1SrpgA6fA4CYzO4nRl1ah0Mxws
|
||||
wRSVDakGKz/yRtVj9uGFSpGWfgezkU8py+5fr8PcmcLt2tVj6rFzW7siCBCMHQDu
|
||||
UnSuVaXtfXxc0YZV2Ih8iMP/Ehy9RDQ8CPwvo9GHPz0FZuy8lc25DB+IeRYK+qhZ
|
||||
z0upYYeRJyp8d4t66ReiF3JxADF1uEfN34ZSHznS6BpVHDtaAi0kDjy3c2VEDTLV
|
||||
Qa3zx248cT+qHMVOa+6i7AhWAWuAsSzM5xwiuOmb2RDBzoYy3maqBME5VL3u/qWt
|
||||
QyPHkJKpXg6OifbsyerOTPSvWUIH08lv7UKjHQJYRrlpHjwyCq8W8VlR9ceX6ee4
|
||||
4IRlbZwZpv3f8T5RzCIhx28t3K5i2rPcsblFit0t8xIa+F/ZiW/0uQXyebcyFllq
|
||||
Gq/KMxdGAbPh4P06Dh979MMhmgr5e+FjY2W4bkeAG6N0stZ/bdg=
|
||||
=/bLq
|
||||
-----END PGP SIGNATURE-----
|
||||
Loaded 100 of 367 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user