mirror of
https://github.com/diced/zipline.git
synced 2025-12-08 13:50:46 -08:00
Compare commits
574 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe50bebeba | ||
|
|
1f61c56f83 | ||
|
|
cabf932ca0 | ||
|
|
f6b995c28d | ||
|
|
13a19ccd2b | ||
|
|
d1dea0cd92 | ||
|
|
b39507b9a8 | ||
|
|
633dfd4712 | ||
|
|
e6ed7a36d5 | ||
|
|
93cb9eec4c | ||
|
|
4849cd8221 | ||
|
|
89c58044a3 | ||
|
|
40fb11256f | ||
|
|
d112c3a509 | ||
|
|
23af36563f | ||
|
|
28db15eb77 | ||
|
|
e9054bd3e5 | ||
|
|
713f857e28 | ||
|
|
5d6768029f | ||
|
|
72e24a8b86 | ||
|
|
86c3e780d1 | ||
|
|
5102620953 | ||
|
|
4d728f9f8b | ||
|
|
faf5098357 | ||
|
|
c4066fc851 | ||
|
|
22633b8601 | ||
|
|
b873f99d46 | ||
|
|
a60d9c58b8 | ||
|
|
a2562c5ea2 | ||
|
|
1c674d3d9f | ||
|
|
fb32e9f38e | ||
|
|
6babf73e07 | ||
|
|
d0eb442fdf | ||
|
|
d3cb9118ce | ||
|
|
7ec6d566b8 | ||
|
|
d695211030 | ||
|
|
907e43c860 | ||
|
|
d9fd771233 | ||
|
|
61c87aecdc | ||
|
|
5ef6c7a6de | ||
|
|
0e7dde2500 | ||
|
|
3ab3202b92 | ||
|
|
b02adca6db | ||
|
|
4a254c55c8 | ||
|
|
226d946ec8 | ||
|
|
a1bc2db336 | ||
|
|
86277a091c | ||
|
|
30dbfdaac5 | ||
|
|
5c424a2c6d | ||
|
|
f40d65a9f7 | ||
|
|
a2c085719a | ||
|
|
60d7b22dca | ||
|
|
d111b0811f | ||
|
|
b46e7b8ba2 | ||
|
|
39a8d52353 | ||
|
|
ec09458ad3 | ||
|
|
a7ad58b196 | ||
|
|
1ddd351242 | ||
|
|
24b06c76fb | ||
|
|
0a34b0cc21 | ||
|
|
ce26a414ac | ||
|
|
f71aab2cde | ||
|
|
5f76e9d383 | ||
|
|
4a46f15833 | ||
|
|
d6ce64ae21 | ||
|
|
7cbf828f3b | ||
|
|
3ff215366a | ||
|
|
d238e24f62 | ||
|
|
fd2746c2d0 | ||
|
|
61b2eff6a4 | ||
|
|
89a28bf50b | ||
|
|
5ded128263 | ||
|
|
eedeb89c7d | ||
|
|
bf40fa9cd2 | ||
|
|
bc58c1b56e | ||
|
|
c57a6e1700 | ||
|
|
8649a489d8 | ||
|
|
40f29907c7 | ||
|
|
34005ece43 | ||
|
|
8e6fc1e8a3 | ||
|
|
065f44b145 | ||
|
|
e5a07f568d | ||
|
|
a728d71da1 | ||
|
|
91e468791e | ||
|
|
169a2ea562 | ||
|
|
f9060f8ae7 | ||
|
|
d379bf8b1c | ||
|
|
67b71ceffe | ||
|
|
eb6929b889 | ||
|
|
d7299f8220 | ||
|
|
1ed267ad94 | ||
|
|
40a0cce3e8 | ||
|
|
556aafaad3 | ||
|
|
fdc7901eff | ||
|
|
9632399f5d | ||
|
|
cc8a5411ab | ||
|
|
12bb804e6a | ||
|
|
3a27f31a03 | ||
|
|
37e7ad840c | ||
|
|
c57a1ea326 | ||
|
|
12d5d5f08f | ||
|
|
e7cf44e8e9 | ||
|
|
a81f797266 | ||
|
|
6ada79017a | ||
|
|
bdf34bbbbf | ||
|
|
c0d1b3d887 | ||
|
|
1b505d463c | ||
|
|
25606a80ec | ||
|
|
8b540bff62 | ||
|
|
8a2064e09d | ||
|
|
1f0fb32b9b | ||
|
|
3cbc345c00 | ||
|
|
3c66c18c77 | ||
|
|
bcc816ea55 | ||
|
|
eb2713bc23 | ||
|
|
bcd68ae98b | ||
|
|
d1a486ac1f | ||
|
|
0d36f5f091 | ||
|
|
3d5cdf50e6 | ||
|
|
1e81822c11 | ||
|
|
f8cd847588 | ||
|
|
5b9b454330 | ||
|
|
9c5b3f60d5 | ||
|
|
d83c255382 | ||
|
|
656b900256 | ||
|
|
a16b516163 | ||
|
|
6d8e66478c | ||
|
|
4428555762 | ||
|
|
463e91c3bd | ||
|
|
1e37f06ab6 | ||
|
|
3af3ba69f5 | ||
|
|
0adc07ac38 | ||
|
|
4fe4faa202 | ||
|
|
4912a872e0 | ||
|
|
ac05d82e3a | ||
|
|
6583f1114c | ||
|
|
e2673fa9e1 | ||
|
|
bc4b528ac6 | ||
|
|
986858345e | ||
|
|
912e439645 | ||
|
|
8e44b71614 | ||
|
|
11bca28ef5 | ||
|
|
4ef0c6021a | ||
|
|
4fbbd58ae9 | ||
|
|
81dea6cf90 | ||
|
|
9b57fb280b | ||
|
|
e804d0b31e | ||
|
|
76845fc7e4 | ||
|
|
decd7f7918 | ||
|
|
8c5ff4f230 | ||
|
|
0848702f65 | ||
|
|
5379374135 | ||
|
|
b7772128d7 | ||
|
|
95a1c7f92c | ||
|
|
2d69cd580a | ||
|
|
34552926d1 | ||
|
|
739f584921 | ||
|
|
04d8b6421a | ||
|
|
fdcd1f3d28 | ||
|
|
fc02dc02e8 | ||
|
|
6955d83b0c | ||
|
|
1b3d3a867b | ||
|
|
83718d7b31 | ||
|
|
e80627a3c3 | ||
|
|
e1003d4bb6 | ||
|
|
2ef4a52be0 | ||
|
|
93a63d3714 | ||
|
|
a8d9d98cf2 | ||
|
|
d70ddd1f53 | ||
|
|
283c7c5a26 | ||
|
|
fb5f50d5bd | ||
|
|
06e84b41aa | ||
|
|
e3f262322a | ||
|
|
70c2fa8ef4 | ||
|
|
9f534e18c8 | ||
|
|
55bd72aef8 | ||
|
|
c1a23faf1f | ||
|
|
3588c297f8 | ||
|
|
04d03cbc8f | ||
|
|
4e27efb6a1 | ||
|
|
59b3e5bb24 | ||
|
|
d8eee3d81a | ||
|
|
c8926682b2 | ||
|
|
9117a9d779 | ||
|
|
4ea1775f2c | ||
|
|
a8020ecebe | ||
|
|
2ace076fce | ||
|
|
45e897d475 | ||
|
|
98676f0573 | ||
|
|
c966ab9a52 | ||
|
|
ebaf11ad10 | ||
|
|
19c7ba03c6 | ||
|
|
894b5c5c6c | ||
|
|
516e93cee2 | ||
|
|
cc0ffc6e60 | ||
|
|
a97ace6e73 | ||
|
|
6d49463dad | ||
|
|
81e6e4e5f2 | ||
|
|
2adb355183 | ||
|
|
5e6c53432b | ||
|
|
873f77bc43 | ||
|
|
9bf098a93a | ||
|
|
388713a3c6 | ||
|
|
e94dd58542 | ||
|
|
d985a1c588 | ||
|
|
dbac6e8918 | ||
|
|
a481c0ee5e | ||
|
|
eef6fdaeb3 | ||
|
|
b8b1a5bba6 | ||
|
|
f06f52fce7 | ||
|
|
4a332bb77b | ||
|
|
eb1b202566 | ||
|
|
658f3a1a09 | ||
|
|
55eba480ac | ||
|
|
bbeea5b0ec | ||
|
|
ad454a94ef | ||
|
|
268215ff5f | ||
|
|
4e70daa4d8 | ||
|
|
bb28f49cf5 | ||
|
|
d85211a145 | ||
|
|
a7291d374d | ||
|
|
5c9b558ac2 | ||
|
|
36ede22d45 | ||
|
|
6528ec4056 | ||
|
|
56ee494c7d | ||
|
|
b21995a0b9 | ||
|
|
3c00575ecd | ||
|
|
27ccbcb54a | ||
|
|
fecbf394c1 | ||
|
|
91341e2d21 | ||
|
|
6349503b00 | ||
|
|
58e8c103b7 | ||
|
|
5d115afa71 | ||
|
|
d8b308a18c | ||
|
|
76267c00d5 | ||
|
|
9648856052 | ||
|
|
d87e465a8e | ||
|
|
2c07d6719e | ||
|
|
4c633eb60d | ||
|
|
ba6580e4ef | ||
|
|
c21d8f837e | ||
|
|
eadfa09570 | ||
|
|
ea1a0b7fc8 | ||
|
|
9f797613d2 | ||
|
|
b728ff33ec | ||
|
|
7dc036c6e4 | ||
|
|
78135aac02 | ||
|
|
950018673f | ||
|
|
cfdcf05135 | ||
|
|
ace474eb2c | ||
|
|
285ed8d56e | ||
|
|
738e25feda | ||
|
|
6d2d071293 | ||
|
|
725ce50608 | ||
|
|
78e884e97e | ||
|
|
cb123cb575 | ||
|
|
6f3081cb8e | ||
|
|
231f734fd5 | ||
|
|
fce7325a24 | ||
|
|
2bec45411f | ||
|
|
577195b578 | ||
|
|
a402227c4f | ||
|
|
a75b790654 | ||
|
|
f07cbeac52 | ||
|
|
dcfcce7803 | ||
|
|
659868181d | ||
|
|
d76e6444e0 | ||
|
|
0dbbf4840c | ||
|
|
1b6af9fc08 | ||
|
|
8e1541ea56 | ||
|
|
fd9908833a | ||
|
|
24f8300b2c | ||
|
|
8d510f5d90 | ||
|
|
6457680065 | ||
|
|
3175911105 | ||
|
|
00f26bdc75 | ||
|
|
9db95bb772 | ||
|
|
e1ba96784c | ||
|
|
f67d1d41cb | ||
|
|
bb7367615d | ||
|
|
f8be8fb583 | ||
|
|
e00393936f | ||
|
|
3c782de64d | ||
|
|
678dc9ef6b | ||
|
|
67bb9cd4a5 | ||
|
|
51cfb9062a | ||
|
|
1ecf979721 | ||
|
|
642b0fdc95 | ||
|
|
bc64d6886a | ||
|
|
81399c59f7 | ||
|
|
69d10ef429 | ||
|
|
3c616f4f6f | ||
|
|
988b61e459 | ||
|
|
3d4e0b8fc0 | ||
|
|
564fcfca61 | ||
|
|
709e1da768 | ||
|
|
a1f281d8b4 | ||
|
|
d2f3999cf1 | ||
|
|
87fc9f2fb9 | ||
|
|
8c9064fd93 | ||
|
|
561849ae5b | ||
|
|
0847802ce4 | ||
|
|
d5a8b3f1fb | ||
|
|
e6cebd8c46 | ||
|
|
f2be036bac | ||
|
|
f14448d40d | ||
|
|
bf719808f2 | ||
|
|
9dd82c91d7 | ||
|
|
535f84064a | ||
|
|
0c0a55d766 | ||
|
|
6e3ee29eb4 | ||
|
|
6a7a5dc7a3 | ||
|
|
e78d2d79d0 | ||
|
|
451027eaf3 | ||
|
|
e4491610fb | ||
|
|
f30e10f235 | ||
|
|
f9249b1380 | ||
|
|
3df94526b0 | ||
|
|
b30b7b1bd3 | ||
|
|
a9defd67d6 | ||
|
|
68d346e69d | ||
|
|
e2fd27cbba | ||
|
|
4c0532006c | ||
|
|
7ac574b230 | ||
|
|
7eb855de8f | ||
|
|
d5984f4141 | ||
|
|
b7c0c85639 | ||
|
|
84ba166aea | ||
|
|
bd79858681 | ||
|
|
0f10fa3991 | ||
|
|
74b1799d21 | ||
|
|
4552643ff8 | ||
|
|
d432b388f6 | ||
|
|
a8475602c7 | ||
|
|
f58d33af9e | ||
|
|
0150ea5e70 | ||
|
|
3bf43f1606 | ||
|
|
b8729a6ec7 | ||
|
|
1f44aa7e85 | ||
|
|
2bd5352fc5 | ||
|
|
a90130e8bf | ||
|
|
642e8796f0 | ||
|
|
615cbddc89 | ||
|
|
4ef82bdff4 | ||
|
|
dafde04c2c | ||
|
|
1be61b8d89 | ||
|
|
c3215c7425 | ||
|
|
af0cd26ea0 | ||
|
|
cb7dacd089 | ||
|
|
8c04971094 | ||
|
|
3a4802f09a | ||
|
|
d78db306c5 | ||
|
|
3f8790ece1 | ||
|
|
f9e6158144 | ||
|
|
05de3fed15 | ||
|
|
38cba9cb39 | ||
|
|
a4af980e11 | ||
|
|
940b844857 | ||
|
|
41b766216e | ||
|
|
402987baba | ||
|
|
3cb08c73d3 | ||
|
|
4cb92a7257 | ||
|
|
a095768eae | ||
|
|
1a5925d7e8 | ||
|
|
9147847710 | ||
|
|
05fe8bcaca | ||
|
|
b0c3c6f45a | ||
|
|
0f641aa852 | ||
|
|
2651bbe50c | ||
|
|
d31371eb6c | ||
|
|
ec0e7e5ec7 | ||
|
|
feb75a8a42 | ||
|
|
d4369d2503 | ||
|
|
d236589644 | ||
|
|
8044b7f623 | ||
|
|
9f0697dd34 | ||
|
|
78a6f3122d | ||
|
|
b460da74dd | ||
|
|
75a8bb7962 | ||
|
|
9ac876e30a | ||
|
|
26cb4ea034 | ||
|
|
0d65ee1a32 | ||
|
|
4a753376b7 | ||
|
|
dc926e9f5a | ||
|
|
722372c7f6 | ||
|
|
4589c6ee0a | ||
|
|
67ff93e640 | ||
|
|
bd055d704b | ||
|
|
2e8bee931c | ||
|
|
a454a4f4a8 | ||
|
|
45541a3cdd | ||
|
|
1d42d922bd | ||
|
|
4f631fbd0e | ||
|
|
e911db4c1a | ||
|
|
9b60147e11 | ||
|
|
acd0cabdff | ||
|
|
d41f6058f7 | ||
|
|
8f835eec4e | ||
|
|
ecab525ffd | ||
|
|
7c887e8ec1 | ||
|
|
f3a23a528b | ||
|
|
cdcb31130b | ||
|
|
3ea24ddf0c | ||
|
|
12baadd563 | ||
|
|
f5ae36d4e7 | ||
|
|
04ca738fb1 | ||
|
|
95e09e51e1 | ||
|
|
2f0af385c7 | ||
|
|
786e6d5799 | ||
|
|
61c5df750a | ||
|
|
eb30afcb83 | ||
|
|
cdf0f6e96c | ||
|
|
54158c5dbe | ||
|
|
56ff86db44 | ||
|
|
b7560c80aa | ||
|
|
03379943de | ||
|
|
2376fd8968 | ||
|
|
2f90193d7e | ||
|
|
964199f8a9 | ||
|
|
678ea20004 | ||
|
|
ea27fd8a45 | ||
|
|
38eef3f0ad | ||
|
|
22615e9ce9 | ||
|
|
a999abfbf8 | ||
|
|
20c1d3ef08 | ||
|
|
b06c8e4918 | ||
|
|
6edfdcefcc | ||
|
|
10b145b006 | ||
|
|
0ba9a9659d | ||
|
|
2dfa1b6b14 | ||
|
|
7a3f9f1fa4 | ||
|
|
f276fdc6a0 | ||
|
|
7963bdd1e4 | ||
|
|
195c57edc3 | ||
|
|
4442c85dc1 | ||
|
|
5bcac2a2b0 | ||
|
|
5303b67d11 | ||
|
|
af59e9abb8 | ||
|
|
fb098c9147 | ||
|
|
739974bef4 | ||
|
|
d21e48a1a3 | ||
|
|
8fea0cbe77 | ||
|
|
1e2b8efb13 | ||
|
|
8495963094 | ||
|
|
06d1c0bc3b | ||
|
|
5965c2e237 | ||
|
|
fb34dfadb0 | ||
|
|
13b0ac737b | ||
|
|
300430b3ec | ||
|
|
cf6f154e6e | ||
|
|
2ddf8c0cdb | ||
|
|
2a402f77b5 | ||
|
|
7b2c31658a | ||
|
|
7a91a60af9 | ||
|
|
bfa6c70bf3 | ||
|
|
73eff05180 | ||
|
|
74f3b3f13d | ||
|
|
181833d768 | ||
|
|
be9523304a | ||
|
|
b26fef3ad4 | ||
|
|
9f86674bbe | ||
|
|
095e57a037 | ||
|
|
66a8e3bb79 | ||
|
|
473137abdf | ||
|
|
740f1605e7 | ||
|
|
0922ec020e | ||
|
|
dbe8291f55 | ||
|
|
9dcc16277e | ||
|
|
aa611fa6ba | ||
|
|
083040e300 | ||
|
|
99e92e4594 | ||
|
|
870f6e88b1 | ||
|
|
16d2014bfb | ||
|
|
4d9a22e82c | ||
|
|
42d77e445b | ||
|
|
6506846207 | ||
|
|
2b9af0e0de | ||
|
|
762d2927f7 | ||
|
|
d9561f3b12 | ||
|
|
dde24848d4 | ||
|
|
e786482902 | ||
|
|
4e64922b70 | ||
|
|
15042b16d1 | ||
|
|
5e4c4fc6c9 | ||
|
|
7194c53891 | ||
|
|
7eff77ccc4 | ||
|
|
1b78ffaa91 | ||
|
|
8e8bfd68d1 | ||
|
|
b029505cdd | ||
|
|
c5c862bee3 | ||
|
|
3c38d008f1 | ||
|
|
dc52b00a00 | ||
|
|
b5d2e7040e | ||
|
|
5818440721 | ||
|
|
f1c46da47d | ||
|
|
212c69d303 | ||
|
|
9e4152e298 | ||
|
|
307f023e47 | ||
|
|
3451bd8762 | ||
|
|
a9d0be8aae | ||
|
|
d83f720631 | ||
|
|
1f3d396296 | ||
|
|
48f771f344 | ||
|
|
555bc6aa26 | ||
|
|
8bd0eaac1e | ||
|
|
3280c77002 | ||
|
|
b39743a53a | ||
|
|
9a73da56e9 | ||
|
|
c9b0d2664f | ||
|
|
6063c9efac | ||
|
|
dd6f192d4a | ||
|
|
d956f4ed3d | ||
|
|
4728258750 | ||
|
|
ece3e16459 | ||
|
|
9208dbe2f3 | ||
|
|
636de18642 | ||
|
|
ee48456291 | ||
|
|
a06d5ffaed | ||
|
|
606821a2c0 | ||
|
|
5c980c21e5 | ||
|
|
771cc380df | ||
|
|
38217870fe | ||
|
|
5b82c96a43 | ||
|
|
6f5f9869ad | ||
|
|
b29bfeb8b1 | ||
|
|
cb40559e49 | ||
|
|
90c72f7ffe | ||
|
|
002bd2e6f7 | ||
|
|
7b44f17a64 | ||
|
|
b5c83f92e3 | ||
|
|
51b4d64a93 | ||
|
|
62c9e0a22f | ||
|
|
3daac34d3e | ||
|
|
d80d5d1632 | ||
|
|
912f716362 | ||
|
|
16ecdf41af | ||
|
|
f0bb6b08fa | ||
|
|
efb4e2ce9a | ||
|
|
03238d10bf | ||
|
|
e71590b9fb | ||
|
|
4728f1cc46 | ||
|
|
794778dee2 | ||
|
|
b5e882f07e | ||
|
|
e7c58a4847 | ||
|
|
bdb44db25e | ||
|
|
e8b82ffe62 | ||
|
|
53c53c009e | ||
|
|
7e8cda4605 | ||
|
|
dfa0419a0a | ||
|
|
aeb2638d1e | ||
|
|
c5cef56e2a | ||
|
|
b9c9d98252 | ||
|
|
30083b6705 | ||
|
|
47db6cf1bd | ||
|
|
f929f6ad7d | ||
|
|
7e16e0f30c | ||
|
|
b2be4e51cc | ||
|
|
2c871be8c5 | ||
|
|
8c03e74979 | ||
|
|
d5c0355fd4 | ||
|
|
386cad0474 | ||
|
|
474024ea55 | ||
|
|
dacf13e46d | ||
|
|
f37b4bb2ee | ||
|
|
034398e9fb | ||
|
|
2c605cb176 | ||
|
|
9a6673fe6d | ||
|
|
6733c9adba | ||
|
|
9d3443ceac | ||
|
|
d628424b35 | ||
|
|
dab444040e | ||
|
|
ecef854d23 | ||
|
|
166087e33c | ||
|
|
e9e30c4c46 |
20
.babelrc
20
.babelrc
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"presets": [
|
|
||||||
"next/babel"
|
|
||||||
],
|
|
||||||
"plugins": [
|
|
||||||
[
|
|
||||||
"babel-plugin-transform-imports",
|
|
||||||
{
|
|
||||||
"@material-ui/core": {
|
|
||||||
"transform": "@material-ui/core/${member}",
|
|
||||||
"preventFullImport": true
|
|
||||||
},
|
|
||||||
"@material-ui/icons": {
|
|
||||||
"transform": "@material-ui/icons/${member}",
|
|
||||||
"preventFullImport": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
10
.devcontainer/Dockerfile
Normal file
10
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-18
|
||||||
|
|
||||||
|
RUN usermod -l zipline node \
|
||||||
|
&& groupmod -n zipline node \
|
||||||
|
&& usermod -d /home/zipline zipline \
|
||||||
|
&& echo "zipline ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/zipline \
|
||||||
|
&& chmod 0440 /etc/sudoers.d/zipline \
|
||||||
|
&& sudo apt-get update && apt-get install gnupg2 -y
|
||||||
|
|
||||||
|
USER zipline
|
||||||
56
.devcontainer/devcontainer.json
Normal file
56
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"name": "Zipline Codespace",
|
||||||
|
"dockerComposeFile": "docker-compose.yml",
|
||||||
|
"service": "app",
|
||||||
|
"workspaceFolder": "/zipline",
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/common-utils:2": {
|
||||||
|
"username": "zipline"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/docker-in-docker:1": {
|
||||||
|
"dockerDashComposeVersion": "v2",
|
||||||
|
"installDockerBuildx": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"files.autoSave": "afterDelay",
|
||||||
|
"terminal.integrated.persistentSessionReviveProcess": "never",
|
||||||
|
"terminal.integrated.defaultProfile.linux": "zsh",
|
||||||
|
"terminal.integrated.profiles.linux": {
|
||||||
|
"zsh": {
|
||||||
|
"path": "/bin/zsh",
|
||||||
|
"env": {
|
||||||
|
"ZSH_THEME": "devcontainers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extensions": ["prisma.prisma", "esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"remoteUser": "zipline",
|
||||||
|
"updateRemoteUserUID": true,
|
||||||
|
"remoteEnv": {
|
||||||
|
"CORE_DATABASE_URL": "postgres://postgres:postgres@localhost/zip10"
|
||||||
|
},
|
||||||
|
"portsAttributes": {
|
||||||
|
"3000": {
|
||||||
|
"label": "Zipline",
|
||||||
|
"onAutoForward": "openBrowser"
|
||||||
|
},
|
||||||
|
"5432": {
|
||||||
|
"label": "Postgres"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postCreateCommand": "sudo chown -R zipline:zipline /zipline && yarn install"
|
||||||
|
}
|
||||||
25
.devcontainer/docker-compose.yml
Normal file
25
.devcontainer/docker-compose.yml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
volumes:
|
||||||
|
- ../:/zipline:cached
|
||||||
|
- uploads:/zipline/uploads
|
||||||
|
- node_modules:/zipline/node_modules
|
||||||
|
command: sleep infinity
|
||||||
|
db:
|
||||||
|
image: postgres:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=postgres
|
||||||
|
- POSTGRES_PASSWORD=postgres
|
||||||
|
- POSTGRES_DATABASE=postgres
|
||||||
|
volumes:
|
||||||
|
- pg_data:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pg_data:
|
||||||
|
uploads:
|
||||||
|
node_modules:
|
||||||
7
.dockerignore
Normal file
7
.dockerignore
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
node_modules/
|
||||||
|
.next/
|
||||||
|
uploads/
|
||||||
|
.git/
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/plugins
|
||||||
50
.env.local.example
Normal file
50
.env.local.example
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# every field in here is optional except, CORE_SECRET and CORE_DATABASE_URL.
|
||||||
|
# if CORE_SECRET is still "changethis" then zipline will exit and tell you to change it.
|
||||||
|
|
||||||
|
# if using s3/supabase make sure to uncomment or comment out the correct lines needed.
|
||||||
|
|
||||||
|
CORE_RETURN_HTTPS=true
|
||||||
|
CORE_SECRET="changethis"
|
||||||
|
CORE_HOST=0.0.0.0
|
||||||
|
CORE_PORT=3000
|
||||||
|
CORE_DATABASE_URL="postgres://postgres:postgres@localhost/zip10"
|
||||||
|
CORE_LOGGER=false
|
||||||
|
CORE_STATS_INTERVAL=1800
|
||||||
|
CORE_INVITES_INTERVAL=1800
|
||||||
|
CORE_THUMBNAILS_INTERVAL=600
|
||||||
|
|
||||||
|
# default
|
||||||
|
DATASOURCE_TYPE=local
|
||||||
|
DATASOURCE_LOCAL_DIRECTORY=./uploads
|
||||||
|
|
||||||
|
# or you can choose to use s3
|
||||||
|
# DATASOURCE_TYPE=s3
|
||||||
|
# DATASOURCE_S3_ACCESS_KEY_ID=key
|
||||||
|
# DATASOURCE_S3_SECRET_ACCESS_KEY=secret
|
||||||
|
# DATASOURCE_S3_BUCKET=bucket
|
||||||
|
# DATASOURCE_S3_ENDPOINT=s3.amazonaws.com
|
||||||
|
# DATASOURCE_S3_REGION=us-west-2
|
||||||
|
# DATASOURCE_S3_FORCE_S3_PATH=false
|
||||||
|
# DATASOURCE_S3_USE_SSL=false
|
||||||
|
|
||||||
|
# or supabase
|
||||||
|
# DATASOURCE_TYPE=supabase
|
||||||
|
# DATASOURCE_SUPABASE_KEY=xxx
|
||||||
|
# remember: no leading slash
|
||||||
|
# DATASOURCE_SUPABASE_URL=https://something.supabase.co
|
||||||
|
# DATASOURCE_SUPABASE_BUCKET=zipline
|
||||||
|
|
||||||
|
UPLOADER_DEFAULT_FORMAT=RANDOM
|
||||||
|
UPLOADER_ROUTE=/u
|
||||||
|
UPLOADER_LENGTH=6
|
||||||
|
UPLOADER_ADMIN_LIMIT=104900000
|
||||||
|
UPLOADER_USER_LIMIT=104900000
|
||||||
|
UPLOADER_DISABLED_EXTENSIONS=someext,anotherext
|
||||||
|
|
||||||
|
URLS_ROUTE=/go
|
||||||
|
URLS_LENGTH=6
|
||||||
|
|
||||||
|
RATELIMIT_USER=5
|
||||||
|
RATELIMIT_ADMIN=3
|
||||||
|
|
||||||
|
# for more variables checkout the docs
|
||||||
7
.eslintignore
Normal file
7
.eslintignore
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
.yarn
|
||||||
|
.devcontainer
|
||||||
|
.github
|
||||||
|
.next
|
||||||
|
.vscode
|
||||||
24
.eslintrc.js
24
.eslintrc.js
@@ -1,24 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
'extends': ['next', 'next/core-web-vitals'],
|
|
||||||
'rules': {
|
|
||||||
'indent': ['error', 2],
|
|
||||||
'linebreak-style': ['error', 'unix'],
|
|
||||||
'quotes': ['error', 'single'],
|
|
||||||
'semi': ['error', 'always'],
|
|
||||||
'jsx-quotes': ['error', 'prefer-single'],
|
|
||||||
'react/prop-types': 'off',
|
|
||||||
'react-hooks/rules-of-hooks': 'off',
|
|
||||||
'react-hooks/exhaustive-deps': 'off',
|
|
||||||
'react/jsx-uses-react': 'warn',
|
|
||||||
'react/jsx-uses-vars': 'warn',
|
|
||||||
'react/no-danger-with-children': 'warn',
|
|
||||||
'react/no-deprecated': 'warn',
|
|
||||||
'react/no-direct-mutation-state': 'warn',
|
|
||||||
'react/no-is-mounted': 'warn',
|
|
||||||
'react/no-typos': 'error',
|
|
||||||
'react/react-in-jsx-scope': 'error',
|
|
||||||
'react/require-render-return': 'error',
|
|
||||||
'react/style-prop-object': 'warn',
|
|
||||||
'@next/next/no-img-element': 'off'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
49
.eslintrc.json
Normal file
49
.eslintrc.json
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"extends": [
|
||||||
|
"next",
|
||||||
|
"next/core-web-vitals",
|
||||||
|
"plugin:prettier/recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended"
|
||||||
|
],
|
||||||
|
"plugins": ["unused-imports", "@typescript-eslint"],
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"rules": {
|
||||||
|
"linebreak-style": ["error", "unix"],
|
||||||
|
"quotes": [
|
||||||
|
"error",
|
||||||
|
"single",
|
||||||
|
{
|
||||||
|
"avoidEscape": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"semi": ["error", "always"],
|
||||||
|
"comma-dangle": ["error", "always-multiline"],
|
||||||
|
"jsx-quotes": ["error", "prefer-single"],
|
||||||
|
"indent": "off",
|
||||||
|
"react/prop-types": "off",
|
||||||
|
"react-hooks/rules-of-hooks": "off",
|
||||||
|
"react-hooks/exhaustive-deps": "off",
|
||||||
|
"react/jsx-uses-react": "warn",
|
||||||
|
"react/jsx-uses-vars": "warn",
|
||||||
|
"react/no-danger-with-children": "warn",
|
||||||
|
"react/no-deprecated": "warn",
|
||||||
|
"react/no-direct-mutation-state": "warn",
|
||||||
|
"react/no-is-mounted": "warn",
|
||||||
|
"react/no-typos": "error",
|
||||||
|
"react/react-in-jsx-scope": "off",
|
||||||
|
"react/require-render-return": "error",
|
||||||
|
"react/style-prop-object": "warn",
|
||||||
|
"@next/next/no-img-element": "off",
|
||||||
|
"jsx-a11y/alt-text": "off",
|
||||||
|
"react/display-name": "off",
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
|
"unused-imports/no-unused-imports": "error",
|
||||||
|
"unused-imports/no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{ "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" }
|
||||||
|
],
|
||||||
|
"@typescript-eslint/ban-ts-comment": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
14
.gitattributes
vendored
Normal file
14
.gitattributes
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||||
|
* text eol=lf
|
||||||
|
|
||||||
|
# Explicitly declare text files you want to always be normalized and converted
|
||||||
|
# to native line endings on checkout.
|
||||||
|
*.c text
|
||||||
|
*.h text
|
||||||
|
|
||||||
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
|
*.sln text eol=crlf
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: diced
|
||||||
52
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
52
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
name: Bug
|
||||||
|
description: File a bug report
|
||||||
|
title: 'Bug: '
|
||||||
|
labels: ['bug']
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: what-happened
|
||||||
|
attributes:
|
||||||
|
label: What happened?
|
||||||
|
description: Provide steps to reproduce the bug, and some context.
|
||||||
|
value: 'A bug happened!'
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version
|
||||||
|
description: What version (or docker image) of Zipline are you using?
|
||||||
|
options:
|
||||||
|
- latest (ghcr.io/diced/zipline or ghcr.io/diced/zipline:latest)
|
||||||
|
- upstream (ghcr.io/diced/zipline:trunk)
|
||||||
|
- other (provide version in additional info)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: browsers
|
||||||
|
attributes:
|
||||||
|
label: What browser(s) are you seeing the problem on?
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- Firefox
|
||||||
|
- Chromium-based (Chrome, Edge, Brave, Opera, mobile chrome/chromium based, etc)
|
||||||
|
- Safari
|
||||||
|
- Firefox Mobile
|
||||||
|
- Safari Mobile
|
||||||
|
- type: textarea
|
||||||
|
id: zipline-logs
|
||||||
|
attributes:
|
||||||
|
label: Zipline Logs
|
||||||
|
description: Please copy and paste any relevant log output. Not seeing anything interesting? Try adding the `DEBUG=true` environment variable to see more logs, make sure to review the output and remove any sensitive information as it can be VERY verbose at times.
|
||||||
|
render: shell
|
||||||
|
- type: textarea
|
||||||
|
id: browser-logs
|
||||||
|
attributes:
|
||||||
|
label: Browser Logs
|
||||||
|
description: Please copy and paste any relevant log output.
|
||||||
|
render: shell
|
||||||
|
- type: textarea
|
||||||
|
id: additional-info
|
||||||
|
attributes:
|
||||||
|
label: Additional Info
|
||||||
|
description: Anything else that could be used to narrow down the issue, like your config.
|
||||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
11
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Feature Request
|
||||||
|
url: https://github.com/diced/zipline/discussions/new?category=ideas&title=Your%20brief%20description%20here&labels=feature
|
||||||
|
about: Ask for a new feature
|
||||||
|
- name: Zipline Discord
|
||||||
|
url: https://discord.gg/EAhCRfGxCF
|
||||||
|
about: Ask for help with anything related to Zipline!
|
||||||
|
- name: Zipline Docs
|
||||||
|
url: https://zipline.diced.sh
|
||||||
|
about: Maybe take a look a the docs?
|
||||||
28
.github/workflows/build.yml
vendored
28
.github/workflows/build.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: 'CI: Build'
|
name: 'Build'
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -11,24 +11,28 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-node@v1
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '16.x'
|
node-version: '18.x'
|
||||||
|
|
||||||
- name: 'Restore dependency cache'
|
- name: 'Restore dependency cache'
|
||||||
id: cache-restore
|
id: cache-restore
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: node_modules
|
path: |
|
||||||
key: ${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/yarn.lock') }}
|
node_modules
|
||||||
|
${{ github.workspace }}/.next/cache
|
||||||
|
key: ${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/yarn.lock') }}-
|
||||||
|
|
||||||
|
|
||||||
- name: Create mock config
|
|
||||||
run: echo -e "[uploader]\nroute = '/u'\nembed_route = '/a'\nlength = 6\ndirectory = './uploads'" > config.toml
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: steps.cache-restore.outputs.cache-hit != 'true'
|
if: steps.cache-restore.outputs.cache-hit != 'true'
|
||||||
run: yarn install
|
run: yarn install
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: yarn build
|
run: yarn build
|
||||||
|
env:
|
||||||
|
ZIPLINE_DOCKER_BUILD: true
|
||||||
51
.github/workflows/docker-release.yml
vendored
Normal file
51
.github/workflows/docker-release.yml
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
name: 'Push Release Docker Images'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*.*.*'
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'server/**'
|
||||||
|
- 'prisma/**'
|
||||||
|
- '.github/**'
|
||||||
|
- 'Dockerfile'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push_to_ghcr:
|
||||||
|
name: Push Release Image to GitHub Packages
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Get version
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
echo "zipline_version=$(jq .version package.json -r)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Setup QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login to Github Packages
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build Docker Image
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
push: true
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
tags: |
|
||||||
|
ghcr.io/diced/zipline:latest
|
||||||
|
ghcr.io/diced/zipline:${{ steps.version.outputs.zipline_version }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
54
.github/workflows/docker.yml
vendored
54
.github/workflows/docker.yml
vendored
@@ -1,8 +1,14 @@
|
|||||||
name: 'CD: Push Docker Images'
|
name: 'Push Docker Images'
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ trunk ]
|
branches: [ trunk ]
|
||||||
|
paths:
|
||||||
|
- 'src/**'
|
||||||
|
- 'server/**'
|
||||||
|
- 'prisma/**'
|
||||||
|
- '.github/**'
|
||||||
|
- 'Dockerfile'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -11,30 +17,34 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Push to GitHub Packages
|
- name: Get version
|
||||||
uses: docker/build-push-action@v1
|
id: version
|
||||||
|
run: |
|
||||||
|
echo "zipline_version=$(jq .version package.json -r)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Setup QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login to Github Packages
|
||||||
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
registry: docker.pkg.github.com
|
|
||||||
repository: diced/zipline/zipline
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
tag_with_ref: true
|
|
||||||
|
|
||||||
push_to_dockerhub:
|
- name: Build Docker Image
|
||||||
name: Push Image to Docker Hub
|
uses: docker/build-push-action@v3
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check out the repo
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Push to Docker Hub
|
|
||||||
uses: docker/build-push-action@v1
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
push: true
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
platforms: linux/amd64,linux/arm64
|
||||||
repository: diced/zipline
|
tags: |
|
||||||
dockerfile: Dockerfile
|
ghcr.io/diced/zipline:trunk
|
||||||
tag_with_ref: true
|
ghcr.io/diced/zipline:trunk-${{ steps.version.outputs.zipline_version }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
31
.github/workflows/milestone.yml
vendored
Normal file
31
.github/workflows/milestone.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: 'Issue/PR Milestones'
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, reopened]
|
||||||
|
issues:
|
||||||
|
types: [opened, reopened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
checks: write
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
set:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/github-script@v6
|
||||||
|
with:
|
||||||
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
const milestone = 3
|
||||||
|
github.rest.issues.update({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
milestone
|
||||||
|
})
|
||||||
12
.gitignore
vendored
12
.gitignore
vendored
@@ -5,6 +5,11 @@
|
|||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
.yarn/*
|
||||||
|
!.yarn/releases
|
||||||
|
!.yarn/plugins
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
|
||||||
@@ -18,6 +23,7 @@
|
|||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.pem
|
*.pem
|
||||||
|
.idea
|
||||||
|
|
||||||
# debug
|
# debug
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
@@ -35,7 +41,5 @@ yarn-error.log*
|
|||||||
|
|
||||||
# zipline
|
# zipline
|
||||||
config.toml
|
config.toml
|
||||||
uploads/
|
uploads*/
|
||||||
prisma/schema.prisma
|
dist/
|
||||||
data.db*
|
|
||||||
migrations/
|
|
||||||
1
.husky/.gitignore
vendored
1
.husky/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
_
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
yarn commitlint --edit $1
|
|
||||||
5
.prettierrc.json
Normal file
5
.prettierrc.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"jsxSingleQuote": true,
|
||||||
|
"printWidth": 110
|
||||||
|
}
|
||||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"editor.tabSize": 2,
|
||||||
|
"files.eol": "\n",
|
||||||
|
"typescript.tsdk": "node_modules/typescript/lib"
|
||||||
|
}
|
||||||
546
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
546
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
28
.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
vendored
Normal file
28
.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
823
.yarn/releases/yarn-3.3.1.cjs
vendored
Normal file
823
.yarn/releases/yarn-3.3.1.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.yarnrc.yml
Normal file
11
.yarnrc.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
checksumBehavior: update
|
||||||
|
|
||||||
|
nodeLinker: node-modules
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||||
|
spec: "@yarnpkg/plugin-interactive-tools"
|
||||||
|
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
||||||
|
spec: "@yarnpkg/plugin-workspace-tools"
|
||||||
|
|
||||||
|
yarnPath: .yarn/releases/yarn-3.3.1.cjs
|
||||||
23
CONTRIBUTING.md
Normal file
23
CONTRIBUTING.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
## Bug reports
|
||||||
|
|
||||||
|
Create an issue on GitHub, please include the following (if one of them is not applicable to the issue then it's not needed):
|
||||||
|
|
||||||
|
- The steps to reproduce the bug
|
||||||
|
- Logs of Zipline
|
||||||
|
- The version of Zipline
|
||||||
|
- Your OS & Browser including server OS
|
||||||
|
- What you were expecting to see
|
||||||
|
|
||||||
|
## Feature requests
|
||||||
|
|
||||||
|
Create an discussion on GitHub, please include the following:
|
||||||
|
|
||||||
|
- Brief explanation of the feature in the title (very brief please)
|
||||||
|
- How it would work (detailed, but optional)
|
||||||
|
|
||||||
|
## Pull Requests (contributions to the codebase)
|
||||||
|
|
||||||
|
Create a pull request on GitHub. If your PR does not pass the action checks, then please fix the errors. If your PR was submitted before a release, and I have pushed a new release, please make sure to update your PR to reflect any changes, usually this is handled by GitHub.
|
||||||
|
Please make sure your code also reflects the style of the rest of the code.
|
||||||
96
Dockerfile
96
Dockerfile
@@ -1,30 +1,78 @@
|
|||||||
FROM node:16-alpine3.11 AS builder
|
# Use the Prisma binaries image as the first stage
|
||||||
WORKDIR /build
|
FROM ghcr.io/diced/prisma-binaries:4.10.x as prisma
|
||||||
|
|
||||||
COPY src ./src
|
# Use Alpine Linux as the second stage
|
||||||
COPY server ./server
|
FROM node:18-alpine3.16 as base
|
||||||
COPY scripts ./scripts
|
|
||||||
COPY prisma/schema.shared.prisma ./prisma/schema.shared.prisma
|
|
||||||
|
|
||||||
COPY package.json yarn.lock next.config.js next-env.d.ts tsconfig.json ./
|
# Set the working directory
|
||||||
|
|
||||||
RUN yarn install
|
|
||||||
|
|
||||||
# create a mock config.toml to spoof next build!
|
|
||||||
RUN echo -e "[uploader]\nroute = '/u'\nembed_route = '/a'\nlength = 6\ndirectory = './uploads'" > config.toml
|
|
||||||
|
|
||||||
RUN yarn build
|
|
||||||
|
|
||||||
FROM node:16-alpine3.11 AS runner
|
|
||||||
WORKDIR /zipline
|
WORKDIR /zipline
|
||||||
|
|
||||||
COPY --from=builder /build/node_modules ./node_modules
|
# Copy the necessary files from the project
|
||||||
|
COPY prisma ./prisma
|
||||||
|
|
||||||
COPY --from=builder /build/src ./src
|
COPY .yarn ./.yarn
|
||||||
COPY --from=builder /build/server ./server
|
COPY package*.json ./
|
||||||
COPY --from=builder /build/scripts ./scripts
|
COPY yarn*.lock ./
|
||||||
COPY --from=builder /build/.next ./.next
|
COPY .yarnrc.yml ./
|
||||||
COPY --from=builder /build/tsconfig.json ./tsconfig.json
|
|
||||||
COPY --from=builder /build/package.json ./package.json
|
|
||||||
|
|
||||||
CMD ["node", "server"]
|
# Copy the prisma binaries from prisma stage
|
||||||
|
COPY --from=prisma /prisma-engines /prisma-engines
|
||||||
|
ENV PRISMA_QUERY_ENGINE_BINARY=/prisma-engines/query-engine \
|
||||||
|
PRISMA_MIGRATION_ENGINE_BINARY=/prisma-engines/migration-engine \
|
||||||
|
PRISMA_INTROSPECTION_ENGINE_BINARY=/prisma-engines/introspection-engine \
|
||||||
|
PRISMA_FMT_BINARY=/prisma-engines/prisma-fmt \
|
||||||
|
PRISMA_CLI_QUERY_ENGINE_TYPE=binary \
|
||||||
|
PRISMA_CLIENT_ENGINE_TYPE=binary \
|
||||||
|
ZIPLINE_DOCKER_BUILD=true \
|
||||||
|
NEXT_TELEMETRY_DISABLED=1
|
||||||
|
|
||||||
|
# Install the dependencies
|
||||||
|
RUN yarn install --immutable
|
||||||
|
|
||||||
|
FROM base as builder
|
||||||
|
|
||||||
|
COPY src ./src
|
||||||
|
COPY next.config.js ./next.config.js
|
||||||
|
COPY tsup.config.ts ./tsup.config.ts
|
||||||
|
COPY tsconfig.json ./tsconfig.json
|
||||||
|
COPY mimes.json ./mimes.json
|
||||||
|
COPY public ./public
|
||||||
|
|
||||||
|
# Run the build
|
||||||
|
RUN yarn build
|
||||||
|
|
||||||
|
# Use Alpine Linux as the final image
|
||||||
|
FROM base
|
||||||
|
|
||||||
|
# Install the necessary packages
|
||||||
|
RUN apk add --no-cache perl procps tini
|
||||||
|
|
||||||
|
COPY --from=builder /prisma-engines /prisma-engines
|
||||||
|
ENV PRISMA_QUERY_ENGINE_BINARY=/prisma-engines/query-engine \
|
||||||
|
PRISMA_MIGRATION_ENGINE_BINARY=/prisma-engines/migration-engine \
|
||||||
|
PRISMA_INTROSPECTION_ENGINE_BINARY=/prisma-engines/introspection-engine \
|
||||||
|
PRISMA_FMT_BINARY=/prisma-engines/prisma-fmt \
|
||||||
|
PRISMA_CLI_QUERY_ENGINE_TYPE=binary \
|
||||||
|
PRISMA_CLIENT_ENGINE_TYPE=binary \
|
||||||
|
NEXT_TELEMETRY_DISABLED=1
|
||||||
|
|
||||||
|
# Copy only the necessary files from the previous stage
|
||||||
|
COPY --from=builder /zipline/dist ./dist
|
||||||
|
COPY --from=builder /zipline/.next ./.next
|
||||||
|
|
||||||
|
COPY --from=builder /zipline/mimes.json ./mimes.json
|
||||||
|
COPY --from=builder /zipline/next.config.js ./next.config.js
|
||||||
|
COPY --from=builder /zipline/public ./public
|
||||||
|
|
||||||
|
# Copy Startup Script
|
||||||
|
COPY docker-entrypoint.sh /zipline
|
||||||
|
|
||||||
|
# Make Startup Script Executable
|
||||||
|
RUN chmod a+x /zipline/docker-entrypoint.sh && rm -rf /zipline/src
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
RUN rm -rf /tmp/* /root/*
|
||||||
|
RUN yarn cache clean --all
|
||||||
|
|
||||||
|
# Set the entrypoint to the startup script
|
||||||
|
ENTRYPOINT ["tini", "--", "/zipline/docker-entrypoint.sh"]
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
prisma/migrations
|
|
||||||
node_modules
|
|
||||||
.next
|
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 dicedtomato
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
176
README.md
176
README.md
@@ -1,26 +1,172 @@
|
|||||||
<p align="center"><img src="https://raw.githubusercontent.com/diced/zipline/trunk/public/zipline_small.png"/></p>
|
<div align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/diced/zipline/trunk/public/zipline_small.png"/>
|
||||||
|
|
||||||

|
A ShareX/file upload server that is easy to use, packed with features, and with an easy setup!
|
||||||

|
|
||||||
[](https://discord.gg/AtTSecwqeV)
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
<br>
|
|
||||||
|
|
||||||
# Zipline
|

|
||||||
|

|
||||||
|

|
||||||
|
[](https://discord.gg/EAhCRfGxCF)
|
||||||
|
|
||||||
Fast & lightweight file uploading.
|

|
||||||
|
[](https://github.com/diced/zipline/pkgs/container/zipline/?tag=trunk)
|
||||||
|
[](https://github.com/diced/zipline/pkgs/container/zipline/?tag=latest)
|
||||||
|
|
||||||
# Features
|
</div>
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
- Configurable
|
- Configurable
|
||||||
- Fast
|
- Fast
|
||||||
- Built with Next.js & React
|
- Built with Next.js & React
|
||||||
- Support for **multible database types**
|
|
||||||
- Token protected uploading
|
- Token protected uploading
|
||||||
- Easy setup instructions on [docs](https://zipline.diced.me)
|
- Image uploading
|
||||||
|
- Image compression
|
||||||
|
- Password Protected Uploads
|
||||||
|
- URL shortening
|
||||||
|
- Text uploading
|
||||||
|
- URL Formats (uuid, dates, random alphanumeric, original name, zws, gfycat -> [animals](https://assets.gfycat.com/animals) [adjectives](https://assets.gfycat.com/adjectives))
|
||||||
|
- Discord embeds (OG metadata)
|
||||||
|
- Gallery viewer, and multiple file format support
|
||||||
|
- Code highlighting
|
||||||
|
- Fully customizable Discord webhook notifications
|
||||||
|
- OAuth2 registration (Discord and GitHub)
|
||||||
|
- Two-Factor authentication with Google Authenticator, Authy, etc (totp services).
|
||||||
|
- User invites
|
||||||
|
- File Chunking (for large files)
|
||||||
|
- File deletion once it reaches a certain amount of views
|
||||||
|
- Automatic video thumbnail generation
|
||||||
|
- Easy setup instructions on [docs](https://zipl.vercel.app/) (One command install `docker compose up -d`)
|
||||||
|
|
||||||
# Installing
|
<details>
|
||||||
|
<summary><h2>Screenshots (click)</h2></summary>
|
||||||
|
|
||||||
|
View full album at [imgur](https://imgur.com/a/GzyowZ7)
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
</details>
|
||||||
|
|
||||||
[See how to install here](https://zipline.diced.me/docs/getting-started)
|
# Usage
|
||||||
|
|
||||||
|
## Install & run with Docker
|
||||||
|
|
||||||
|
This section requires [Docker](https://docs.docker.com/get-docker/) and [docker compose](https://docs.docker.com/compose/install/).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/diced/zipline
|
||||||
|
cd zipline
|
||||||
|
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### After installing
|
||||||
|
|
||||||
|
After installing, please edit the `docker-compose.yml` file and find the line that says `SECRET=changethis` and replace `changethis` with a random string.
|
||||||
|
Ways you could generate the string could be from a password managers generator, or you could just slam your keyboard and hope for the best.
|
||||||
|
|
||||||
|
## Building & running from source
|
||||||
|
|
||||||
|
This section requires [nodejs](https://nodejs.org), [yarn](https://yarnpkg.com/).
|
||||||
|
|
||||||
|
It is recommended to not use npm, as it can cause issues with the build process.
|
||||||
|
|
||||||
|
Before you run `yarn build`, you might want to configure Zipline, as when building from source Zipline will need to read some sort of configuration. The only two variables needed are `CORE_SECRET` and `CORE_DATABASE_URL`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/diced/zipline
|
||||||
|
cd zipline
|
||||||
|
|
||||||
|
yarn install
|
||||||
|
yarn build
|
||||||
|
yarn start
|
||||||
|
```
|
||||||
|
|
||||||
|
# NGINX Proxy
|
||||||
|
|
||||||
|
This section requires [NGINX](https://nginx.org/).
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
client_max_body_size 100M;
|
||||||
|
server_name <your domain (optional)>;
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:3000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Website
|
||||||
|
|
||||||
|
The default port is `3000`, once you have accessed it you can see a login screen. The default credentials are "administrator" and "password". Once you login please immediately change the details to something more secure. You can do this by clicking on the top right corner where it says "administrator" with a gear icon and clicking Manage Account.
|
||||||
|
|
||||||
|
# ShareX (Windows)
|
||||||
|
|
||||||
|
This section requires [ShareX](https://www.getsharex.com/).
|
||||||
|
|
||||||
|
After navigating to Zipline, click on the top right corner where it says your username and click Manage Account. Scroll down to see "ShareX Config", select the one you would prefer using. After this you can import the .sxcu into sharex. [More information here](https://zipl.vercel.app/docs/guides/uploaders/sharex)
|
||||||
|
|
||||||
|
# Flameshot (Linux(Xorg/Wayland) and macOS)
|
||||||
|
|
||||||
|
This section requires [Flameshot](https://www.flameshot.org/), [jq](https://stedolan.github.io/jq/), and [xsel](https://github.com/kfish/xsel).
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Wayland instructions</summary>
|
||||||
|
|
||||||
|
If using wayland you will need to have [wl-clipboard](https://github.com/bugaevc/wl-clipboard) installed, for the `wl-copy` command.
|
||||||
|
|
||||||
|
If you are not using GNOME/KDE/Qtile/Sway, and are using something like a wlroots-based compositor (ex. [Hyprland](https://github.com/hyprwm/Hyprland/), [River](https://github.com/riverwm/river), etc), you will need to set the `XDG_CURRENT_DESKTOP` environment variable to `sway`, which will just override it for this script. Adding `export XDG_CURRENT_DESKTOP=sway` to the start of the script will work.
|
||||||
|
|
||||||
|
After this, replace the `xsel -ib` with `wl-copy` in the script.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Mac instructions</summary>
|
||||||
|
|
||||||
|
If using macOS, you can replace the `xsel -ib` with `pbcopy` in the script.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
You can either use the script below, or generate one directly from Zipline (just like how you can generate a ShareX config).
|
||||||
|
To upload files using flameshot we will use a script. Replace $TOKEN and $HOST with your own values, you probably know how to do this if you use linux.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
DATE=$(date '+%h_%Y_%d_%I_%m_%S.png');
|
||||||
|
flameshot gui -r > ~/Pictures/$DATE;
|
||||||
|
|
||||||
|
curl -H "Content-Type: multipart/form-data" -H "authorization: $TOKEN" -F file=@$1 $HOST/api/upload | jq -r 'files[0].url' | xsel -ib
|
||||||
|
```
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
## Bug reports
|
||||||
|
|
||||||
|
Create an issue on GitHub and use the template, please include the following (if one of them is not applicable to the issue then it's not needed):
|
||||||
|
|
||||||
|
- The steps to reproduce the bug
|
||||||
|
- Logs of Zipline
|
||||||
|
- The version of Zipline
|
||||||
|
- Your OS & Browser including server OS
|
||||||
|
- What you were expecting to see
|
||||||
|
|
||||||
|
## Feature requests
|
||||||
|
|
||||||
|
Create a discussion on GitHub, please include the following:
|
||||||
|
|
||||||
|
- Brief explanation of the feature in the title (very brief please)
|
||||||
|
- How it would work (Be detailed!)
|
||||||
|
|
||||||
|
## Pull Requests (contributions to the codebase)
|
||||||
|
|
||||||
|
Create a pull request on GitHub. If your PR does not pass the action checks, then please fix the errors. If your PR was submitted before a release, and I have pushed a new release, please make sure to update your PR to reflect any changes, usually this is handled by GitHub.
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
Documentation source code is located in [diced/zipline-docs](https://github.com/diced/zipline-docs), and can be accessed [here](https://zipl.vercel.app).
|
||||||
13
SECURITY.md
Normal file
13
SECURITY.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 3.6.x | :white_check_mark: |
|
||||||
|
| < 3 | :x: |
|
||||||
|
| < 2 | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
Report a Vulnerability by issuing a bug report, with exact details with how the vulnerability happened, what "exploits" can happen, and possible fixes (optional). Vulnerability reports are treated with high priority and will be resolved most of the time quickly.
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
parserPreset: 'conventional-changelog-conventionalcommits',
|
|
||||||
rules: {
|
|
||||||
'body-leading-blank': [1, 'always'],
|
|
||||||
'body-max-line-length': [2, 'always', 100],
|
|
||||||
'footer-leading-blank': [1, 'always'],
|
|
||||||
'footer-max-line-length': [2, 'always', 100],
|
|
||||||
'header-max-length': [2, 'always', 100],
|
|
||||||
'subject-case': [
|
|
||||||
2,
|
|
||||||
'never',
|
|
||||||
['sentence-case', 'start-case', 'pascal-case', 'upper-case'],
|
|
||||||
],
|
|
||||||
'subject-empty': [2, 'never'],
|
|
||||||
'subject-full-stop': [2, 'never', '.'],
|
|
||||||
'type-case': [2, 'always', 'lower-case'],
|
|
||||||
'type-empty': [2, 'never'],
|
|
||||||
'type-enum': [
|
|
||||||
2,
|
|
||||||
'always',
|
|
||||||
[
|
|
||||||
'build',
|
|
||||||
'chore',
|
|
||||||
'ci',
|
|
||||||
'docs',
|
|
||||||
'feat',
|
|
||||||
'fix',
|
|
||||||
'perf',
|
|
||||||
'refactor',
|
|
||||||
'revert',
|
|
||||||
'style',
|
|
||||||
'test',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'scope-enum': [
|
|
||||||
1,
|
|
||||||
'always',
|
|
||||||
[
|
|
||||||
'prisma',
|
|
||||||
'scripts',
|
|
||||||
'server',
|
|
||||||
'pages',
|
|
||||||
'api',
|
|
||||||
'hooks',
|
|
||||||
'components',
|
|
||||||
'middleware',
|
|
||||||
'redux',
|
|
||||||
'themes',
|
|
||||||
'lib'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
[core]
|
|
||||||
secure = true
|
|
||||||
secret = 'some secret'
|
|
||||||
host = '0.0.0.0'
|
|
||||||
port = 3000
|
|
||||||
|
|
||||||
[database]
|
|
||||||
# postgresql
|
|
||||||
type = 'psql'
|
|
||||||
url = 'postgres://postgres:postgres@postgres/postgres'
|
|
||||||
|
|
||||||
# mysql
|
|
||||||
# type = 'mysql'
|
|
||||||
# url = 'mysql://postgres:postgres@mysql/mysql'
|
|
||||||
|
|
||||||
# sqlite
|
|
||||||
# type = 'sqlite'
|
|
||||||
# url = 'file:sqlite.db'
|
|
||||||
|
|
||||||
[uploader]
|
|
||||||
route = '/u'
|
|
||||||
embed_route = '/a'
|
|
||||||
length = 6
|
|
||||||
directory = './uploads'
|
|
||||||
32
docker-compose.dev.yml
Normal file
32
docker-compose.dev.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:15
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=postgres
|
||||||
|
- POSTGRES_PASSWORD=postgres
|
||||||
|
- POSTGRES_DATABASE=postgres
|
||||||
|
volumes:
|
||||||
|
- pg_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
zipline:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
ports:
|
||||||
|
- '3000:3000'
|
||||||
|
env_file:
|
||||||
|
- .env.local
|
||||||
|
volumes:
|
||||||
|
- './uploads:/zipline/uploads'
|
||||||
|
- './public:/zipline/public'
|
||||||
|
depends_on:
|
||||||
|
- 'postgres'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pg_data:
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres
|
image: postgres:15
|
||||||
environment:
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
- POSTGRES_USER=postgres
|
- POSTGRES_USER=postgres
|
||||||
- POSTGRES_PASSWORD=postgres
|
- POSTGRES_PASSWORD=postgres
|
||||||
- POSTGRES_DATABASE=postgres
|
- POSTGRES_DATABASE=postgres
|
||||||
volumes:
|
volumes:
|
||||||
- pg_data:/var/lib/postgresql/data
|
- pg_data:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
||||||
@@ -15,29 +16,22 @@ services:
|
|||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
zipline:
|
zipline:
|
||||||
build:
|
image: ghcr.io/diced/zipline
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
ports:
|
ports:
|
||||||
- '3000:3000'
|
- '3000:3000'
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- SECURE=false
|
- CORE_RETURN_HTTPS=false
|
||||||
- SECRET=changethis
|
- CORE_SECRET=changethis
|
||||||
- HOST=0.0.0.0
|
- CORE_HOST=0.0.0.0
|
||||||
- PORT=3000
|
- CORE_PORT=3000
|
||||||
- DATABASE_TYPE=psql
|
- CORE_DATABASE_URL=postgres://postgres:postgres@postgres/postgres
|
||||||
- DATABASE_URL=postgresql://postgres:postgres@postgres/postgres/
|
- CORE_LOGGER=true
|
||||||
- UPLOADER_ROUTE=/u
|
|
||||||
- UPLOADER_EMBED_ROUTE=/a
|
|
||||||
- UPLOADER_LENGTH=6
|
|
||||||
- UPLOADER_DIRECTORY=./uploads
|
|
||||||
volumes:
|
volumes:
|
||||||
- '$PWD/uploads:/zipline/uploads'
|
- './uploads:/zipline/uploads'
|
||||||
- '$PWD/prisma:/zipline/prisma'
|
- './public:/zipline/public'
|
||||||
- '$PWD/public:/zipline/public'
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- 'postgres'
|
- 'postgres'
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pg_data:
|
pg_data:
|
||||||
|
|||||||
7
docker-entrypoint.sh
Normal file
7
docker-entrypoint.sh
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
unset ZIPLINE_DOCKER_BUILD
|
||||||
|
|
||||||
|
node --enable-source-maps dist/index.js
|
||||||
1384
mimes.json
Normal file
1384
mimes.json
Normal file
File diff suppressed because it is too large
Load Diff
15
next-env.d.ts
vendored
15
next-env.d.ts
vendored
@@ -1,14 +1,5 @@
|
|||||||
/// <reference types="next" />
|
/// <reference types="next" />
|
||||||
/// <reference types="next/types/global" />
|
/// <reference types="next/image-types/global" />
|
||||||
|
|
||||||
import type { PrismaClient } from '@prisma/client';
|
// NOTE: This file should not be edited
|
||||||
import type { Config } from './src/lib/types';
|
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||||
|
|
||||||
declare global {
|
|
||||||
namespace NodeJS {
|
|
||||||
interface Global {
|
|
||||||
prisma: PrismaClient;
|
|
||||||
config: Config
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* @type {import('next').NextConfig}
|
||||||
|
**/
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
images: {
|
||||||
|
domains: [
|
||||||
|
// For sharex icon in manage user
|
||||||
|
'getsharex.com',
|
||||||
|
// For flameshot icon, and maybe in the future other stuff from github
|
||||||
|
'raw.githubusercontent.com',
|
||||||
|
// Google Icon
|
||||||
|
'madeby.google.com',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
poweredByHeader: false,
|
||||||
reactStrictMode: true,
|
reactStrictMode: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
142
package.json
142
package.json
@@ -1,64 +1,104 @@
|
|||||||
{
|
{
|
||||||
"name": "zip3",
|
"name": "zipline",
|
||||||
"version": "3.0.0",
|
"version": "3.7.6",
|
||||||
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "husky install",
|
"dev": "npm-run-all build:server dev:run",
|
||||||
"dev": "NODE_ENV=development node server",
|
"dev:run": "cross-env DEBUG=true REACT_EDITOR=code NODE_ENV=development RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false node --enable-source-maps dist",
|
||||||
"build": "npm-run-all build:schema build:next",
|
"build": "npm-run-all build:server build:schema build:next",
|
||||||
|
"build-ci": "cross-env ZIPLINE_DOCKER_BUILD=1 npm-run-all build:server build:schema build:next",
|
||||||
|
"build:server": "tsup",
|
||||||
"build:next": "next build",
|
"build:next": "next build",
|
||||||
"build:schema": "prisma generate --schema=prisma/schema.shared.prisma",
|
"build:schema": "prisma generate --schema=prisma/schema.prisma",
|
||||||
"start": "node server",
|
"format": "prettier --write ./src/**/*.{ts,tsx} ./*.{md,js,json,yml}",
|
||||||
|
"migrate:dev": "prisma migrate dev --create-only",
|
||||||
|
"start": "node dist",
|
||||||
"lint": "next lint",
|
"lint": "next lint",
|
||||||
"ts-node": "./node_modules/.bin/ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only",
|
"compose:up": "docker compose up",
|
||||||
"create-all-migrations": "node scripts/create-migrations",
|
"compose:down": "docker compose down",
|
||||||
"semantic-release": "semantic-release"
|
"compose:build-dev": "docker compose --file docker-compose.dev.yml up --build",
|
||||||
|
"compose:up-dev": "docker compose --file docker-compose.dev.yml up",
|
||||||
|
"compose:down-dev": "docker compose --file docker-compose.dev.yml down",
|
||||||
|
"scripts:read-config": "node --enable-source-maps dist/scripts/read-config",
|
||||||
|
"scripts:import-dir": "node --enable-source-maps dist/scripts/import-dir",
|
||||||
|
"scripts:list-users": "node --enable-source-maps dist/scripts/list-users",
|
||||||
|
"scripts:set-user": "node --enable-source-maps dist/scripts/set-user",
|
||||||
|
"scripts:clear-zero-byte": "node --enable-source-maps dist/scripts/clear-zero-byte",
|
||||||
|
"scripts:query-size": "node --enable-source-maps dist/scripts/query-size",
|
||||||
|
"scripts:clear-temp": "node --enable-source-maps dist/scripts/clear-temp"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.4.0",
|
"@emotion/react": "^11.11.1",
|
||||||
"@emotion/styled": "^11.3.0",
|
"@emotion/server": "^11.11.0",
|
||||||
"@iarna/toml": "2.2.5",
|
"@mantine/core": "^6.0.21",
|
||||||
"@material-ui/core": "^5.0.0-alpha.37",
|
"@mantine/dropzone": "^6.0.21",
|
||||||
"@material-ui/data-grid": "^4.0.0-alpha.32",
|
"@mantine/form": "^6.0.21",
|
||||||
"@material-ui/icons": "^5.0.0-alpha.37",
|
"@mantine/hooks": "^6.0.21",
|
||||||
"@material-ui/styles": "^5.0.0-alpha.35",
|
"@mantine/modals": "^6.0.21",
|
||||||
"@prisma/client": "2.25.0",
|
"@mantine/next": "^6.0.21",
|
||||||
"@reduxjs/toolkit": "^1.6.0",
|
"@mantine/notifications": "^6.0.21",
|
||||||
"argon2": "^0.28.2",
|
"@mantine/prism": "^6.0.21",
|
||||||
"busboy": "^0.3.1",
|
"@mantine/spotlight": "^6.0.21",
|
||||||
"colorette": "^1.2.2",
|
"@prisma/client": "^4.16.2",
|
||||||
"cookie": "^0.4.1",
|
"@prisma/internals": "^4.16.2",
|
||||||
"copy-to-clipboard": "^3.3.1",
|
"@prisma/migrate": "^4.16.2",
|
||||||
"fecha": "^4.2.1",
|
"@sapphire/shapeshift": "^3.9.3",
|
||||||
"formik": "^2.2.9",
|
"@tabler/icons-react": "^2.41.0",
|
||||||
"next": "11.0.0",
|
"@tanstack/react-query": "^4.28.0",
|
||||||
"prisma": "2.25.0",
|
"argon2": "^0.31.2",
|
||||||
"react": "17.0.2",
|
"cookie": "^0.6.0",
|
||||||
"react-dom": "17.0.2",
|
"dayjs": "^1.11.10",
|
||||||
"react-dropzone": "^11.3.2",
|
"dotenv": "^16.3.1",
|
||||||
"react-redux": "^7.2.4",
|
"dotenv-expand": "^10.0.0",
|
||||||
"redux": "^4.1.0",
|
"exiftool-vendored": "^23.4.0",
|
||||||
"redux-thunk": "^2.3.0",
|
"fastify": "^4.24.3",
|
||||||
"rimraf": "^3.0.2",
|
"fastify-plugin": "^4.5.1",
|
||||||
"yup": "^0.32.9"
|
"fflate": "^0.8.1",
|
||||||
|
"ffmpeg-static": "^5.2.0",
|
||||||
|
"find-my-way": "^7.7.0",
|
||||||
|
"katex": "^0.16.9",
|
||||||
|
"mantine-datatable": "^2.9.14",
|
||||||
|
"minio": "^7.1.3",
|
||||||
|
"ms": "canary",
|
||||||
|
"multer": "^1.4.5-lts.1",
|
||||||
|
"next": "^14.0.3",
|
||||||
|
"otplib": "^12.0.1",
|
||||||
|
"prisma": "^4.16.2",
|
||||||
|
"prismjs": "^1.29.0",
|
||||||
|
"qrcode": "^1.5.3",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0",
|
||||||
|
"react-markdown": "^8.0.6",
|
||||||
|
"recharts": "^2.10.1",
|
||||||
|
"recoil": "^0.7.7",
|
||||||
|
"remark-gfm": "^4.0.0",
|
||||||
|
"sharp": "^0.32.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^12.1.4",
|
"@types/cookie": "^0.5.4",
|
||||||
"@commitlint/config-conventional": "^12.1.4",
|
"@types/katex": "^0.16.6",
|
||||||
"@types/bcryptjs": "^2.4.2",
|
"@types/minio": "^7.1.1",
|
||||||
"@types/busboy": "^0.2.3",
|
"@types/multer": "^1.4.10",
|
||||||
"@types/cookie": "^0.4.0",
|
"@types/node": "^18.18.10",
|
||||||
"@types/node": "^15.12.2",
|
"@types/qrcode": "^1.5.5",
|
||||||
"babel-plugin-transform-imports": "^2.0.0",
|
"@types/react": "^18.2.37",
|
||||||
"eslint": "7.28.0",
|
"@types/sharp": "^0.32.0",
|
||||||
"eslint-config-next": "11.0.0",
|
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||||
"husky": "^6.0.0",
|
"@typescript-eslint/parser": "^6.11.0",
|
||||||
|
"cross-env": "^7.0.3",
|
||||||
|
"eslint": "^8.54.0",
|
||||||
|
"eslint-config-next": "^14.0.3",
|
||||||
|
"eslint-config-prettier": "^9.0.0",
|
||||||
|
"eslint-plugin-prettier": "^5.0.1",
|
||||||
|
"eslint-plugin-unused-imports": "^3.0.0",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"release": "^6.3.0",
|
"prettier": "^3.1.0",
|
||||||
"ts-node": "^10.0.0",
|
"tsup": "^8.0.0",
|
||||||
"typescript": "^4.3.2"
|
"typescript": "^5.2.2"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/diced/workflow-testing.git"
|
"url": "https://github.com/diced/zipline.git"
|
||||||
}
|
},
|
||||||
|
"packageManager": "yarn@3.3.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,12 +40,24 @@ CREATE TABLE "Url" (
|
|||||||
PRIMARY KEY ("id")
|
PRIMARY KEY ("id")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "InvisibleUrl" (
|
||||||
|
"id" INTEGER NOT NULL,
|
||||||
|
"invis" TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
-- CreateIndex
|
-- CreateIndex
|
||||||
CREATE UNIQUE INDEX "InvisibleImage.invis_unique" ON "InvisibleImage"("invis");
|
CREATE UNIQUE INDEX "InvisibleImage.invis_unique" ON "InvisibleImage"("invis");
|
||||||
|
|
||||||
-- CreateIndex
|
-- CreateIndex
|
||||||
CREATE UNIQUE INDEX "InvisibleImage_id_unique" ON "InvisibleImage"("id");
|
CREATE UNIQUE INDEX "InvisibleImage_id_unique" ON "InvisibleImage"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "InvisibleUrl.invis_unique" ON "InvisibleUrl"("invis");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "InvisibleUrl_id_unique" ON "InvisibleUrl"("id");
|
||||||
|
|
||||||
-- AddForeignKey
|
-- AddForeignKey
|
||||||
ALTER TABLE "Image" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
ALTER TABLE "Image" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
@@ -54,3 +66,6 @@ ALTER TABLE "InvisibleImage" ADD FOREIGN KEY ("id") REFERENCES "Image"("id") ON
|
|||||||
|
|
||||||
-- AddForeignKey
|
-- AddForeignKey
|
||||||
ALTER TABLE "Url" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
ALTER TABLE "Url" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleUrl" ADD FOREIGN KEY ("id") REFERENCES "Url"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
25
prisma/migrations/20210826034827_custom_themes/migration.sql
Normal file
25
prisma/migrations/20210826034827_custom_themes/migration.sql
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "systemTheme" TEXT NOT NULL DEFAULT E'dark_blue';
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Theme" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"type" TEXT NOT NULL,
|
||||||
|
"primary" TEXT NOT NULL,
|
||||||
|
"secondary" TEXT NOT NULL,
|
||||||
|
"error" TEXT NOT NULL,
|
||||||
|
"warning" TEXT NOT NULL,
|
||||||
|
"info" TEXT NOT NULL,
|
||||||
|
"border" TEXT NOT NULL,
|
||||||
|
"mainBackground" TEXT NOT NULL,
|
||||||
|
"paperBackground" TEXT NOT NULL,
|
||||||
|
"userId" INTEGER NOT NULL,
|
||||||
|
|
||||||
|
PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Theme_userId_unique" ON "Theme"("userId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Theme" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
2
prisma/migrations/20210827202147_favorite/migration.sql
Normal file
2
prisma/migrations/20210827202147_favorite/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "favorite" BOOLEAN NOT NULL DEFAULT false;
|
||||||
25
prisma/migrations/20210830210159_zws/migration.sql
Normal file
25
prisma/migrations/20210830210159_zws/migration.sql
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- A unique constraint covering the columns `[imageId]` on the table `InvisibleImage` will be added. If there are existing duplicate values, this will fail.
|
||||||
|
- Added the required column `imageId` to the `InvisibleImage` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" DROP CONSTRAINT "InvisibleImage_id_fkey";
|
||||||
|
|
||||||
|
-- DropIndex
|
||||||
|
DROP INDEX "InvisibleImage_id_unique";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
CREATE SEQUENCE "invisibleimage_id_seq";
|
||||||
|
ALTER TABLE "InvisibleImage" ADD COLUMN "imageId" INTEGER NOT NULL,
|
||||||
|
ALTER COLUMN "id" SET DEFAULT nextval('invisibleimage_id_seq'),
|
||||||
|
ADD PRIMARY KEY ("id");
|
||||||
|
ALTER SEQUENCE "invisibleimage_id_seq" OWNED BY "InvisibleImage"."id";
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "InvisibleImage_imageId_unique" ON "InvisibleImage"("imageId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" ADD FOREIGN KEY ("imageId") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "embed" BOOLEAN NOT NULL DEFAULT false;
|
||||||
39
prisma/migrations/20210924045900_delete_url/migration.sql
Normal file
39
prisma/migrations/20210924045900_delete_url/migration.sql
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the `InvisibleUrl` table. If the table is not empty, all the data it contains will be lost.
|
||||||
|
- You are about to drop the `Url` table. If the table is not empty, all the data it contains will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Image" DROP CONSTRAINT "Image_userId_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" DROP CONSTRAINT "InvisibleImage_imageId_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "InvisibleUrl" DROP CONSTRAINT "InvisibleUrl_id_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Theme" DROP CONSTRAINT "Theme_userId_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Url" DROP CONSTRAINT "Url_userId_fkey";
|
||||||
|
|
||||||
|
-- DropTable
|
||||||
|
DROP TABLE "InvisibleUrl";
|
||||||
|
|
||||||
|
-- DropTable
|
||||||
|
DROP TABLE "Url";
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Theme" ADD CONSTRAINT "Theme_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Image" ADD CONSTRAINT "Image_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" ADD CONSTRAINT "InvisibleImage_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "Image"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- RenameIndex
|
||||||
|
ALTER INDEX "InvisibleImage.invis_unique" RENAME TO "InvisibleImage_invis_key";
|
||||||
34
prisma/migrations/20210924050753_new_url/migration.sql
Normal file
34
prisma/migrations/20210924050753_new_url/migration.sql
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Url" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"destination" TEXT NOT NULL,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"views" INTEGER NOT NULL DEFAULT 0,
|
||||||
|
"userId" INTEGER NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Url_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "InvisibleUrl" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"invis" TEXT NOT NULL,
|
||||||
|
"urlId" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "InvisibleUrl_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Url_id_key" ON "Url"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "InvisibleUrl_invis_key" ON "InvisibleUrl"("invis");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "InvisibleUrl_urlId_unique" ON "InvisibleUrl"("urlId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Url" ADD CONSTRAINT "Url_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleUrl" ADD CONSTRAINT "InvisibleUrl_urlId_fkey" FOREIGN KEY ("urlId") REFERENCES "Url"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Url" ADD COLUMN "vanity" TEXT;
|
||||||
2
prisma/migrations/20211003022626_site_name/migration.sql
Normal file
2
prisma/migrations/20211003022626_site_name/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "embedSiteName" TEXT DEFAULT E'{image.file} • {user.name}';
|
||||||
11
prisma/migrations/20211128031800_ratelimit/migration.sql
Normal file
11
prisma/migrations/20211128031800_ratelimit/migration.sql
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "ratelimited" BOOLEAN NOT NULL DEFAULT false;
|
||||||
|
|
||||||
|
-- RenameIndex
|
||||||
|
ALTER INDEX "InvisibleImage_imageId_unique" RENAME TO "InvisibleImage_imageId_key";
|
||||||
|
|
||||||
|
-- RenameIndex
|
||||||
|
ALTER INDEX "InvisibleUrl_urlId_unique" RENAME TO "InvisibleUrl_urlId_key";
|
||||||
|
|
||||||
|
-- RenameIndex
|
||||||
|
ALTER INDEX "Theme_userId_unique" RENAME TO "Theme_userId_key";
|
||||||
8
prisma/migrations/20220103232702_stats/migration.sql
Normal file
8
prisma/migrations/20220103232702_stats/migration.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Stats" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"data" JSONB NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Stats_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
5
prisma/migrations/20220221053815_format/migration.sql
Normal file
5
prisma/migrations/20220221053815_format/migration.sql
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "ImageFormat" AS ENUM ('UUID', 'DATE', 'RANDOM');
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "format" "ImageFormat" NOT NULL DEFAULT E'RANDOM';
|
||||||
2
prisma/migrations/20220221055817_name/migration.sql
Normal file
2
prisma/migrations/20220221055817_name/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterEnum
|
||||||
|
ALTER TYPE "ImageFormat" ADD VALUE 'NAME';
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
- You are about to drop the `Theme` table. If the table is not empty, all the data it contains will be lost.
|
||||||
|
*/
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Theme" DROP CONSTRAINT "Theme_userId_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ALTER COLUMN "systemTheme" SET DEFAULT E'system';
|
||||||
|
|
||||||
|
-- DropTable
|
||||||
|
DROP TABLE "Theme";
|
||||||
2
prisma/migrations/20220304004623_domains/migration.sql
Normal file
2
prisma/migrations/20220304004623_domains/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "domains" TEXT[];
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "password" TEXT;
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `ratelimited` on the `User` table. All the data in the column will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" DROP COLUMN "ratelimited",
|
||||||
|
ADD COLUMN "ratelimit" TIMESTAMP(3);
|
||||||
17
prisma/migrations/20220713164531_invites/migration.sql
Normal file
17
prisma/migrations/20220713164531_invites/migration.sql
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Invite" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"code" TEXT NOT NULL,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"expires_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"used" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"createdById" INTEGER NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Invite_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Invite_code_key" ON "Invite"("code");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Invite" ADD CONSTRAINT "Invite_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Invite" ALTER COLUMN "expires_at" DROP NOT NULL,
|
||||||
|
ALTER COLUMN "expires_at" DROP DEFAULT;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "expires_at" TIMESTAMP(3);
|
||||||
2
prisma/migrations/20220816212407_avatar/migration.sql
Normal file
2
prisma/migrations/20220816212407_avatar/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "avatar" TEXT;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "oauth" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
ADD COLUMN "oauthProvider" TEXT,
|
||||||
|
ALTER COLUMN "password" DROP NOT NULL;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "oauthAccessToken" TEXT;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "superAdmin" BOOLEAN NOT NULL DEFAULT false;
|
||||||
2
prisma/migrations/20221028005627_max_views/migration.sql
Normal file
2
prisma/migrations/20221028005627_max_views/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ADD COLUMN "maxViews" INTEGER;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Url" ADD COLUMN "maxViews" INTEGER;
|
||||||
31
prisma/migrations/20221030222208_oauth_reform/migration.sql
Normal file
31
prisma/migrations/20221030222208_oauth_reform/migration.sql
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `oauth` on the `User` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the column `oauthAccessToken` on the `User` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the column `oauthProvider` on the `User` table. All the data in the column will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "OauthProviders" AS ENUM ('DISCORD', 'GITHUB');
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" DROP COLUMN "oauth",
|
||||||
|
DROP COLUMN "oauthAccessToken",
|
||||||
|
DROP COLUMN "oauthProvider";
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "OAuth" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"provider" "OauthProviders" NOT NULL,
|
||||||
|
"userId" INTEGER NOT NULL,
|
||||||
|
"token" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "OAuth_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "OAuth_provider_key" ON "OAuth"("provider");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "OAuth" ADD CONSTRAINT "OAuth_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-- DropIndex
|
||||||
|
DROP INDEX "OAuth_provider_key";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "OAuth" ADD COLUMN "refresh" TEXT;
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Image" DROP CONSTRAINT "Image_userId_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" ALTER COLUMN "userId" DROP NOT NULL;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Image" ADD CONSTRAINT "Image_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterEnum
|
||||||
|
ALTER TYPE "OauthProviders" ADD VALUE 'GOOGLE';
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- Added the required column `username` to the `OAuth` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "OAuth" ADD COLUMN "username" TEXT NOT NULL;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "totpSecret" TEXT;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" DROP CONSTRAINT "InvisibleImage_imageId_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "InvisibleUrl" DROP CONSTRAINT "InvisibleUrl_urlId_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Invite" DROP CONSTRAINT "Invite_createdById_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Url" DROP CONSTRAINT "Url_userId_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Url" ALTER COLUMN "userId" DROP NOT NULL;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleImage" ADD CONSTRAINT "InvisibleImage_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Url" ADD CONSTRAINT "Url_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "InvisibleUrl" ADD CONSTRAINT "InvisibleUrl_urlId_fkey" FOREIGN KEY ("urlId") REFERENCES "Url"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Invite" ADD CONSTRAINT "Invite_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- A unique constraint covering the columns `[provider,oauthId]` on the table `OAuth` will be added. If there are existing duplicate values, this will fail.
|
||||||
|
- Added the required column `oauthId` to the `OAuth` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "OAuth" ADD COLUMN "oauthId" TEXT;
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "OAuth_provider_oauthId_key" ON "OAuth"("provider", "oauthId");
|
||||||
13
prisma/migrations/20230111055303_embed/migration.sql
Normal file
13
prisma/migrations/20230111055303_embed/migration.sql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `embedColor` on the `User` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the column `embedSiteName` on the `User` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the column `embedTitle` on the `User` table. All the data in the column will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" DROP COLUMN "embedColor",
|
||||||
|
DROP COLUMN "embedSiteName",
|
||||||
|
DROP COLUMN "embedTitle",
|
||||||
|
ADD COLUMN "embed" JSONB NOT NULL DEFAULT '{}';
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" RENAME COLUMN "created_at" TO "createdAt";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" RENAME COLUMN "expires_at" TO "expiresAt";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" RENAME COLUMN "file" TO "name";
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Url" RENAME COLUMN "created_at" TO "createdAt";
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Stats" RENAME COLUMN "created_at" TO "createdAt";
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Invite" RENAME COLUMN "created_at" TO "createdAt";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Invite" RENAME COLUMN "expires_at" TO "expiresAt";
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
-- AlterEnum
|
||||||
|
ALTER TYPE "ImageFormat" RENAME TO "FileNameFormat";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Image" RENAME TO "File";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "InvisibleImage" RENAME TO "InvisibleFile";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "InvisibleFile" RENAME COLUMN "imageId" TO "fileId";
|
||||||
|
|
||||||
|
-- AlterForeignKey
|
||||||
|
ALTER TABLE "InvisibleFile" RENAME CONSTRAINT "InvisibleImage_imageId_fkey" TO "InvisibleFile_fileId_fkey";
|
||||||
|
ALTER INDEX "InvisibleImage_imageId_key" RENAME TO "InvisibleFile_fileId_key";
|
||||||
|
|
||||||
|
-- AlterForeignKey
|
||||||
|
ALTER TABLE "InvisibleFile" RENAME CONSTRAINT "InvisibleImage_pkey" TO "InvisibleFile_pkey";
|
||||||
|
ALTER TABLE "File" RENAME CONSTRAINT "Image_pkey" TO "File_pkey";
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "File" ADD COLUMN "originalName" TEXT;
|
||||||
|
|
||||||
|
-- RenameForeignKey
|
||||||
|
ALTER TABLE "File" RENAME CONSTRAINT "Image_userId_fkey" TO "File_userId_fkey";
|
||||||
|
|
||||||
|
-- RenameIndex
|
||||||
|
ALTER INDEX "InvisibleImage_invis_key" RENAME TO "InvisibleFile_invis_key";
|
||||||
19
prisma/migrations/20230128183334_folders/migration.sql
Normal file
19
prisma/migrations/20230128183334_folders/migration.sql
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "File" ADD COLUMN "folderId" INTEGER;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Folder" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
"userId" INTEGER NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Folder_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Folder" ADD CONSTRAINT "Folder_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "File" ADD CONSTRAINT "File_folderId_fkey" FOREIGN KEY ("folderId") REFERENCES "Folder"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Folder" ADD COLUMN "public" BOOLEAN NOT NULL DEFAULT false;
|
||||||
2
prisma/migrations/20230226051016_file_size/migration.sql
Normal file
2
prisma/migrations/20230226051016_file_size/migration.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "File" ADD COLUMN "size" INTEGER NOT NULL DEFAULT 0;
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `format` on the `File` table. All the data in the column will be lost.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "File" DROP COLUMN "format";
|
||||||
|
|
||||||
|
-- DropEnum
|
||||||
|
DROP TYPE "FileNameFormat";
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "ProcessingStatus" AS ENUM ('PENDING', 'PROCESSING', 'COMPLETE');
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "IncompleteFile" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"status" "ProcessingStatus" NOT NULL,
|
||||||
|
"chunks" INTEGER NOT NULL,
|
||||||
|
"chunksComplete" INTEGER NOT NULL,
|
||||||
|
"userId" INTEGER NOT NULL,
|
||||||
|
"data" JSONB NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "IncompleteFile_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "IncompleteFile" ADD CONSTRAINT "IncompleteFile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
53
prisma/migrations/20230405024416_user_uuid/migration.sql
Normal file
53
prisma/migrations/20230405024416_user_uuid/migration.sql
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- A unique constraint covering the columns `[uuid]` on the table `User` will be added. If there are existing duplicate values, this will fail.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- PRISMA GENERATED BELOW
|
||||||
|
-- -- DropForeignKey
|
||||||
|
-- ALTER TABLE "OAuth" DROP CONSTRAINT "OAuth_userId_fkey";
|
||||||
|
--
|
||||||
|
-- -- AlterTable
|
||||||
|
-- ALTER TABLE "OAuth" ALTER COLUMN "userId" SET DATA TYPE TEXT;
|
||||||
|
--
|
||||||
|
-- -- AlterTable
|
||||||
|
-- ALTER TABLE "User" ADD COLUMN "uuid" UUID NOT NULL DEFAULT gen_random_uuid();
|
||||||
|
--
|
||||||
|
-- -- CreateIndex
|
||||||
|
-- CREATE UNIQUE INDEX "User_uuid_key" ON "User"("uuid");
|
||||||
|
--
|
||||||
|
-- -- AddForeignKey
|
||||||
|
-- ALTER TABLE "OAuth" ADD CONSTRAINT "OAuth_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- User made changes below
|
||||||
|
|
||||||
|
-- Rename old foreign key
|
||||||
|
ALTER TABLE "OAuth" RENAME CONSTRAINT "OAuth_userId_fkey" TO "OAuth_userId_old_fkey";
|
||||||
|
|
||||||
|
-- Rename old column
|
||||||
|
ALTER TABLE "OAuth" RENAME COLUMN "userId" TO "userId_old";
|
||||||
|
|
||||||
|
-- Add new column
|
||||||
|
ALTER TABLE "OAuth" ADD COLUMN "userId" UUID;
|
||||||
|
|
||||||
|
-- Add user uuid
|
||||||
|
ALTER TABLE "User" ADD COLUMN "uuid" UUID NOT NULL DEFAULT gen_random_uuid();
|
||||||
|
|
||||||
|
-- Update table "OAuth" with uuid
|
||||||
|
UPDATE "OAuth" SET "userId" = "User"."uuid" FROM "User" WHERE "OAuth"."userId_old" = "User"."id";
|
||||||
|
|
||||||
|
-- Alter table "OAuth" to make "userId" required
|
||||||
|
ALTER TABLE "OAuth" ALTER COLUMN "userId" SET NOT NULL;
|
||||||
|
|
||||||
|
-- Create index
|
||||||
|
CREATE UNIQUE INDEX "User_uuid_key" ON "User"("uuid");
|
||||||
|
|
||||||
|
-- Add new foreign key
|
||||||
|
ALTER TABLE "OAuth" ADD CONSTRAINT "OAuth_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- Drop old foreign key
|
||||||
|
ALTER TABLE "OAuth" DROP CONSTRAINT "OAuth_userId_old_fkey";
|
||||||
|
|
||||||
|
-- Drop old column
|
||||||
|
ALTER TABLE "OAuth" DROP COLUMN "userId_old";
|
||||||
16
prisma/migrations/20230523025656_thumbnails/migration.sql
Normal file
16
prisma/migrations/20230523025656_thumbnails/migration.sql
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Thumbnail" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"fileId" INTEGER NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Thumbnail_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Thumbnail_fileId_key" ON "Thumbnail"("fileId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Thumbnail" ADD CONSTRAINT "Thumbnail_fileId_fkey" FOREIGN KEY ("fileId") REFERENCES "File"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "File" ALTER COLUMN "size" SET DATA TYPE BIGINT;
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Please do not edit this file manually
|
|
||||||
# It should be added in your version-control system (i.e. Git)
|
|
||||||
provider = "mysql"
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-- CreateTable
|
|
||||||
CREATE TABLE `User` (
|
|
||||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
|
||||||
`username` VARCHAR(191) NOT NULL,
|
|
||||||
`password` VARCHAR(191) NOT NULL,
|
|
||||||
`token` VARCHAR(191) NOT NULL,
|
|
||||||
`administrator` BOOLEAN NOT NULL DEFAULT false,
|
|
||||||
`embedTitle` VARCHAR(191),
|
|
||||||
`embedColor` VARCHAR(191) NOT NULL DEFAULT '#2f3136',
|
|
||||||
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE `Image` (
|
|
||||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
|
||||||
`file` VARCHAR(191) NOT NULL,
|
|
||||||
`mimetype` VARCHAR(191) NOT NULL DEFAULT 'image/png',
|
|
||||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
||||||
`views` INTEGER NOT NULL DEFAULT 0,
|
|
||||||
`userId` INTEGER NOT NULL,
|
|
||||||
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE `InvisibleImage` (
|
|
||||||
`id` INTEGER NOT NULL,
|
|
||||||
`invis` VARCHAR(191) NOT NULL,
|
|
||||||
|
|
||||||
UNIQUE INDEX `InvisibleImage.invis_unique`(`invis`),
|
|
||||||
UNIQUE INDEX `InvisibleImage_id_unique`(`id`)
|
|
||||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE `Url` (
|
|
||||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
|
||||||
`to` VARCHAR(191) NOT NULL,
|
|
||||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
||||||
`views` INTEGER NOT NULL DEFAULT 0,
|
|
||||||
`userId` INTEGER NOT NULL,
|
|
||||||
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE `Image` ADD FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE `InvisibleImage` ADD FOREIGN KEY (`id`) REFERENCES `Image`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE `Url` ADD FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Please do not edit this file manually
|
|
||||||
# It should be added in your version-control system (i.e. Git)
|
|
||||||
provider = "sqlite"
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
-- CreateTable
|
|
||||||
CREATE TABLE "User" (
|
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"username" TEXT NOT NULL,
|
|
||||||
"password" TEXT NOT NULL,
|
|
||||||
"token" TEXT NOT NULL,
|
|
||||||
"administrator" BOOLEAN NOT NULL DEFAULT false,
|
|
||||||
"embedTitle" TEXT,
|
|
||||||
"embedColor" TEXT NOT NULL DEFAULT '#2f3136'
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Image" (
|
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"file" TEXT NOT NULL,
|
|
||||||
"mimetype" TEXT NOT NULL DEFAULT 'image/png',
|
|
||||||
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"views" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"userId" INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "InvisibleImage" (
|
|
||||||
"id" INTEGER NOT NULL,
|
|
||||||
"invis" TEXT NOT NULL,
|
|
||||||
FOREIGN KEY ("id") REFERENCES "Image" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Url" (
|
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"to" TEXT NOT NULL,
|
|
||||||
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"views" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"userId" INTEGER NOT NULL,
|
|
||||||
FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "InvisibleImage.invis_unique" ON "InvisibleImage"("invis");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "InvisibleImage_id_unique" ON "InvisibleImage"("id");
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
datasource db {
|
|
||||||
provider = "mysql"
|
|
||||||
url = env("DATABASE_URL")
|
|
||||||
}
|
|
||||||
|
|
||||||
generator client {
|
|
||||||
provider = "prisma-client-js"
|
|
||||||
}
|
|
||||||
|
|
||||||
model User {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
username String
|
|
||||||
password String
|
|
||||||
token String
|
|
||||||
administrator Boolean @default(false)
|
|
||||||
embedTitle String?
|
|
||||||
embedColor String @default("#2f3136")
|
|
||||||
images Image[]
|
|
||||||
urls Url[]
|
|
||||||
}
|
|
||||||
|
|
||||||
model Image {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
file String
|
|
||||||
mimetype String @default("image/png")
|
|
||||||
created_at DateTime @default(now())
|
|
||||||
views Int @default(0)
|
|
||||||
invisible InvisibleImage?
|
|
||||||
user User @relation(fields: [userId], references: [id])
|
|
||||||
userId Int
|
|
||||||
}
|
|
||||||
|
|
||||||
model InvisibleImage {
|
|
||||||
id Int
|
|
||||||
image Image @relation(fields: [id], references: [id])
|
|
||||||
|
|
||||||
invis String @unique
|
|
||||||
}
|
|
||||||
|
|
||||||
model Url {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
to String
|
|
||||||
created_at DateTime @default(now())
|
|
||||||
views Int @default(0)
|
|
||||||
invisible InvisibleUrl?
|
|
||||||
user User @relation(fields: [userId], references: [id])
|
|
||||||
userId Int
|
|
||||||
}
|
|
||||||
|
|
||||||
model InvisibleUrl {
|
|
||||||
id Int
|
|
||||||
url Url @relation(fields: [id], references: [id])
|
|
||||||
|
|
||||||
invis String @unique
|
|
||||||
}
|
|
||||||
161
prisma/schema.prisma
Normal file
161
prisma/schema.prisma
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
datasource db {
|
||||||
|
provider = "postgresql"
|
||||||
|
url = env("DATABASE_URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
generator client {
|
||||||
|
provider = "prisma-client-js"
|
||||||
|
}
|
||||||
|
|
||||||
|
model User {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
uuid String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid
|
||||||
|
username String
|
||||||
|
password String?
|
||||||
|
avatar String?
|
||||||
|
token String
|
||||||
|
administrator Boolean @default(false)
|
||||||
|
superAdmin Boolean @default(false)
|
||||||
|
systemTheme String @default("system")
|
||||||
|
embed Json @default("{}")
|
||||||
|
ratelimit DateTime?
|
||||||
|
totpSecret String?
|
||||||
|
domains String[]
|
||||||
|
oauth OAuth[]
|
||||||
|
files File[]
|
||||||
|
urls Url[]
|
||||||
|
Invite Invite[]
|
||||||
|
Folder Folder[]
|
||||||
|
IncompleteFile IncompleteFile[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model Folder {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
name String
|
||||||
|
public Boolean @default(false)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
userId Int
|
||||||
|
|
||||||
|
files File[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model File {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
name String
|
||||||
|
originalName String?
|
||||||
|
mimetype String @default("image/png")
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
size BigInt @default(0)
|
||||||
|
expiresAt DateTime?
|
||||||
|
maxViews Int?
|
||||||
|
views Int @default(0)
|
||||||
|
favorite Boolean @default(false)
|
||||||
|
embed Boolean @default(false)
|
||||||
|
password String?
|
||||||
|
invisible InvisibleFile?
|
||||||
|
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||||
|
userId Int?
|
||||||
|
|
||||||
|
folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)
|
||||||
|
folderId Int?
|
||||||
|
|
||||||
|
thumbnail Thumbnail?
|
||||||
|
}
|
||||||
|
|
||||||
|
model Thumbnail {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
name String
|
||||||
|
|
||||||
|
fileId Int @unique
|
||||||
|
file File @relation(fields: [fileId], references: [id], onDelete: Cascade)
|
||||||
|
}
|
||||||
|
|
||||||
|
model InvisibleFile {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
invis String @unique
|
||||||
|
|
||||||
|
fileId Int @unique
|
||||||
|
file File @relation(fields: [fileId], references: [id], onDelete: Cascade)
|
||||||
|
}
|
||||||
|
|
||||||
|
model Url {
|
||||||
|
id String @id @unique
|
||||||
|
destination String
|
||||||
|
vanity String?
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
maxViews Int?
|
||||||
|
views Int @default(0)
|
||||||
|
invisible InvisibleUrl?
|
||||||
|
|
||||||
|
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||||
|
userId Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
model InvisibleUrl {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
invis String @unique
|
||||||
|
|
||||||
|
urlId String @unique
|
||||||
|
url Url @relation(fields: [urlId], references: [id], onDelete: Cascade)
|
||||||
|
}
|
||||||
|
|
||||||
|
model Stats {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
data Json
|
||||||
|
}
|
||||||
|
|
||||||
|
model Invite {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
code String @unique
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
expiresAt DateTime?
|
||||||
|
used Boolean @default(false)
|
||||||
|
|
||||||
|
createdBy User @relation(fields: [createdById], references: [id], onDelete: Cascade)
|
||||||
|
createdById Int
|
||||||
|
}
|
||||||
|
|
||||||
|
model OAuth {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
provider OauthProviders
|
||||||
|
user User @relation(fields: [userId], references: [uuid], onDelete: Cascade)
|
||||||
|
userId String @db.Uuid
|
||||||
|
username String
|
||||||
|
oauthId String?
|
||||||
|
token String
|
||||||
|
refresh String?
|
||||||
|
|
||||||
|
@@unique([provider, oauthId])
|
||||||
|
}
|
||||||
|
|
||||||
|
enum OauthProviders {
|
||||||
|
DISCORD
|
||||||
|
GITHUB
|
||||||
|
GOOGLE
|
||||||
|
}
|
||||||
|
|
||||||
|
model IncompleteFile {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
|
||||||
|
status ProcessingStatus
|
||||||
|
chunks Int
|
||||||
|
chunksComplete Int
|
||||||
|
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
userId Int
|
||||||
|
|
||||||
|
data Json
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ProcessingStatus {
|
||||||
|
PENDING
|
||||||
|
PROCESSING
|
||||||
|
COMPLETE
|
||||||
|
}
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
datasource db {
|
|
||||||
provider = "postgresql"
|
|
||||||
url = env("DATABASE_URL")
|
|
||||||
}
|
|
||||||
|
|
||||||
generator client {
|
|
||||||
provider = "prisma-client-js"
|
|
||||||
}
|
|
||||||
|
|
||||||
model User {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
username String
|
|
||||||
password String
|
|
||||||
token String
|
|
||||||
administrator Boolean @default(false)
|
|
||||||
embedTitle String?
|
|
||||||
embedColor String @default("#2f3136")
|
|
||||||
images Image[]
|
|
||||||
urls Url[]
|
|
||||||
}
|
|
||||||
|
|
||||||
model Image {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
file String
|
|
||||||
mimetype String @default("image/png")
|
|
||||||
created_at DateTime @default(now())
|
|
||||||
views Int @default(0)
|
|
||||||
invisible InvisibleImage?
|
|
||||||
user User @relation(fields: [userId], references: [id])
|
|
||||||
userId Int
|
|
||||||
}
|
|
||||||
|
|
||||||
model InvisibleImage {
|
|
||||||
id Int
|
|
||||||
image Image @relation(fields: [id], references: [id])
|
|
||||||
|
|
||||||
invis String @unique
|
|
||||||
}
|
|
||||||
|
|
||||||
model Url {
|
|
||||||
id Int @id @default(autoincrement())
|
|
||||||
to String
|
|
||||||
created_at DateTime @default(now())
|
|
||||||
views Int @default(0)
|
|
||||||
invisible InvisibleUrl?
|
|
||||||
user User @relation(fields: [userId], references: [id])
|
|
||||||
userId Int
|
|
||||||
}
|
|
||||||
|
|
||||||
model InvisibleUrl {
|
|
||||||
id Int
|
|
||||||
url Url @relation(fields: [id], references: [id])
|
|
||||||
|
|
||||||
invis String @unique
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user