Compare commits
567 Commits
richtext-l
...
v3.0.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67e9306f7a | ||
|
|
2f6b0861d9 | ||
|
|
c83eeefeb2 | ||
|
|
807227911a | ||
|
|
db71c89e35 | ||
|
|
8b29723317 | ||
|
|
bef3ebf9cc | ||
|
|
061e021cd4 | ||
|
|
55728fe332 | ||
|
|
b1b04c7e35 | ||
|
|
5b86a8d7c9 | ||
|
|
44a7a5e692 | ||
|
|
da33c80735 | ||
|
|
25935abf3a | ||
|
|
93e7914a86 | ||
|
|
36231b88db | ||
|
|
14c1ecd515 | ||
|
|
dd38e11a5d | ||
|
|
9572bdcbf9 | ||
|
|
9ad0efd85b | ||
|
|
399b799002 | ||
|
|
48fbedd8ee | ||
|
|
a85dba8b49 | ||
|
|
64240bf70a | ||
|
|
cd06011b5e | ||
|
|
4d29b74c29 | ||
|
|
e5a12ade90 | ||
|
|
981fb7f330 | ||
|
|
7851cb81bb | ||
|
|
4e586bf31f | ||
|
|
9860f1eb68 | ||
|
|
9397f38929 | ||
|
|
540943109b | ||
|
|
73dee79a4c | ||
|
|
894f8b8c77 | ||
|
|
056e24a653 | ||
|
|
4045bbb1bc | ||
|
|
2634557def | ||
|
|
2af3d5b8b1 | ||
|
|
a9ea1b84cc | ||
|
|
10fc2495cd | ||
|
|
e9f5e593ce | ||
|
|
eec98c9674 | ||
|
|
0fddeebbc6 | ||
|
|
125e9312c1 | ||
|
|
e6a305026d | ||
|
|
f5cf7c0ca7 | ||
|
|
4a903371ac | ||
|
|
13777c8773 | ||
|
|
b38b749438 | ||
|
|
ff68a9f508 | ||
|
|
4767ba6b9c | ||
|
|
d7467d9b8e | ||
|
|
ab11081276 | ||
|
|
1e280928d8 | ||
|
|
e245689b85 | ||
|
|
bd31694850 | ||
|
|
97437838f8 | ||
|
|
2c226a9c83 | ||
|
|
7a06721e16 | ||
|
|
ae0dd7b9c0 | ||
|
|
28d83c1e11 | ||
|
|
589d49af30 | ||
|
|
9283e367b1 | ||
|
|
37fa2f8431 | ||
|
|
a3ffb80344 | ||
|
|
5c0ffae67a | ||
|
|
a216af40dc | ||
|
|
51e2fffe7e | ||
|
|
b6af5dcb3a | ||
|
|
2aa943bef2 | ||
|
|
27ea4f76f0 | ||
|
|
1a4b6a66ae | ||
|
|
cf14b32355 | ||
|
|
707c5cba41 | ||
|
|
c803f92104 | ||
|
|
96d5d025dc | ||
|
|
91061235d8 | ||
|
|
105ce757d0 | ||
|
|
031b3a9f51 | ||
|
|
1fa9ea7a0e | ||
|
|
641ede20f3 | ||
|
|
b5051008e3 | ||
|
|
4eabb97821 | ||
|
|
76bf1bde87 | ||
|
|
dfe5591822 | ||
|
|
b27d86c1a5 | ||
|
|
c7b064c751 | ||
|
|
06a3d0e500 | ||
|
|
1ffe3c4813 | ||
|
|
a8c99d7594 | ||
|
|
144e13245a | ||
|
|
4ea0c7e875 | ||
|
|
d38bbd9603 | ||
|
|
881a502cbc | ||
|
|
cbecd918fc | ||
|
|
ff0044229a | ||
|
|
175924d705 | ||
|
|
26c138908a | ||
|
|
fd93a10376 | ||
|
|
486b3a1f44 | ||
|
|
cd63722e5e | ||
|
|
e75917a4d3 | ||
|
|
b288bcbc18 | ||
|
|
5b2b104e37 | ||
|
|
e9f2216f84 | ||
|
|
7d7d098efa | ||
|
|
59494833b7 | ||
|
|
ddc059713d | ||
|
|
009703fabe | ||
|
|
b3b5f1b584 | ||
|
|
7771f30270 | ||
|
|
8a26dddd08 | ||
|
|
98b4c1388e | ||
|
|
6d89f2160d | ||
|
|
3e8859b8dd | ||
|
|
27babe6677 | ||
|
|
2a6a3e624d | ||
|
|
6ff42d1627 | ||
|
|
7188cfe85a | ||
|
|
cccdba57fe | ||
|
|
b3bd502028 | ||
|
|
423b33e088 | ||
|
|
edb63380ed | ||
|
|
7175bb7b47 | ||
|
|
c817916e0f | ||
|
|
426b48bd13 | ||
|
|
88ba714b59 | ||
|
|
795fdd477c | ||
|
|
6f021049ab | ||
|
|
bbdc137f64 | ||
|
|
843974d810 | ||
|
|
b97f025ea7 | ||
|
|
670a32271a | ||
|
|
71a33f2f02 | ||
|
|
f477a215cf | ||
|
|
12b09cf963 | ||
|
|
bedd7b6f41 | ||
|
|
ee5ae22779 | ||
|
|
316f0722d8 | ||
|
|
34cb30bb39 | ||
|
|
84ec05a257 | ||
|
|
78bdfefc66 | ||
|
|
33899405ba | ||
|
|
b3fd720668 | ||
|
|
dc7a447baf | ||
|
|
138b56a429 | ||
|
|
4699a37b4b | ||
|
|
940e21e74f | ||
|
|
b6f330cc91 | ||
|
|
f388a46484 | ||
|
|
a66d023f84 | ||
|
|
188cad3a67 | ||
|
|
4d5bdf6b6f | ||
|
|
96810788fc | ||
|
|
2f356fe26d | ||
|
|
ab9e2729cd | ||
|
|
203f105974 | ||
|
|
972b8e110f | ||
|
|
31d0b8acbf | ||
|
|
0152560fd8 | ||
|
|
e78214c38d | ||
|
|
79ca759774 | ||
|
|
5d1e5ca2ff | ||
|
|
8d13ae9e1e | ||
|
|
b763df5730 | ||
|
|
a237388bd4 | ||
|
|
610f3525a2 | ||
|
|
fff692bd0c | ||
|
|
a2fff64bd8 | ||
|
|
c00074e40b | ||
|
|
93319402cb | ||
|
|
4d2d359b06 | ||
|
|
0cc4a7d238 | ||
|
|
026c6fac2e | ||
|
|
d56ac18585 | ||
|
|
e90d8dcdb5 | ||
|
|
1a1c207a97 | ||
|
|
9b1203185d | ||
|
|
3214af53b7 | ||
|
|
ec6b58d7d4 | ||
|
|
0d888c9eeb | ||
|
|
f957f1d2bb | ||
|
|
730344a201 | ||
|
|
c5e74ca5e0 | ||
|
|
3216c29766 | ||
|
|
db5babf012 | ||
|
|
da147aacd4 | ||
|
|
8c80c1d077 | ||
|
|
7ff646d044 | ||
|
|
cdc1e024f1 | ||
|
|
b9dec2f714 | ||
|
|
0b296cb271 | ||
|
|
e62cca40ac | ||
|
|
170ae3602b | ||
|
|
96349be350 | ||
|
|
62e4828b0d | ||
|
|
0d58a20d70 | ||
|
|
448288834a | ||
|
|
c0fc258848 | ||
|
|
6f1da7ad1f | ||
|
|
c0e2b6ac4d | ||
|
|
99ebce0462 | ||
|
|
9831629430 | ||
|
|
e0ce5b7d12 | ||
|
|
e757bbc1b2 | ||
|
|
f2d90fac26 | ||
|
|
a33e150312 | ||
|
|
e5e9a14de4 | ||
|
|
07311579af | ||
|
|
a517b7fb00 | ||
|
|
7474e7e7bb | ||
|
|
7a8ecf7377 | ||
|
|
def97afd9b | ||
|
|
6ba41af6dc | ||
|
|
a88b35f919 | ||
|
|
a0cf2ea56b | ||
|
|
75c4b4f234 | ||
|
|
37177f1226 | ||
|
|
18fb27d2f7 | ||
|
|
ee054c3181 | ||
|
|
594a3a1321 | ||
|
|
fca72c2b95 | ||
|
|
4048f466c2 | ||
|
|
5a28bbbc9b | ||
|
|
55294701f0 | ||
|
|
b36ddfb3c3 | ||
|
|
faef85b78f | ||
|
|
06c8f5de32 | ||
|
|
eb6af97b42 | ||
|
|
601e94d370 | ||
|
|
640ff152cc | ||
|
|
de19cc8afe | ||
|
|
214f852a98 | ||
|
|
c6b684df89 | ||
|
|
cb3efb157f | ||
|
|
17df48f9fa | ||
|
|
728d87028b | ||
|
|
131feabafe | ||
|
|
a6cf73b6d1 | ||
|
|
1d7fb0e43c | ||
|
|
bf11eacf5a | ||
|
|
513c29d349 | ||
|
|
b68f9f157c | ||
|
|
6b9b98ffdd | ||
|
|
5f7b4a9434 | ||
|
|
8e7d110a7a | ||
|
|
782053a6ec | ||
|
|
fdc72c27b6 | ||
|
|
8d502d2cb7 | ||
|
|
1df3065884 | ||
|
|
cc2ff8e3cb | ||
|
|
bce821dee9 | ||
|
|
9e67efbd1b | ||
|
|
5f081d038e | ||
|
|
d434925f0b | ||
|
|
1b62a57e7c | ||
|
|
13447f0b4f | ||
|
|
327810390e | ||
|
|
f8071ce942 | ||
|
|
2f858e29cb | ||
|
|
1eaecf7568 | ||
|
|
e83747e7ed | ||
|
|
3260d9376e | ||
|
|
827e825e53 | ||
|
|
0521ae4c75 | ||
|
|
3deb5dbb9b | ||
|
|
d58c3bd3d1 | ||
|
|
298bfa81b6 | ||
|
|
a9d1d1a63a | ||
|
|
e5c2a7f176 | ||
|
|
da05003a5c | ||
|
|
b9dfa1aafe | ||
|
|
a57410133a | ||
|
|
f26e646cfc | ||
|
|
2a755b0e65 | ||
|
|
5fdcb322c8 | ||
|
|
76afc2b3ff | ||
|
|
6eb4f7e4a1 | ||
|
|
80412a7c2b | ||
|
|
478b2cb7a2 | ||
|
|
bdc00a152c | ||
|
|
c7cec1b2f1 | ||
|
|
178f3cd4a3 | ||
|
|
3340d39f67 | ||
|
|
5e7c39e42c | ||
|
|
ab479ab885 | ||
|
|
65081d995e | ||
|
|
05b2692eb5 | ||
|
|
ca7b8e589e | ||
|
|
56c325b526 | ||
|
|
732402159c | ||
|
|
1ef3b9ed13 | ||
|
|
ef43a76b0b | ||
|
|
4003a8023c | ||
|
|
102205ff71 | ||
|
|
b736e5d971 | ||
|
|
5720009e29 | ||
|
|
04e2d1a89a | ||
|
|
bc0525589c | ||
|
|
122e8ac9d6 | ||
|
|
dc7b110da2 | ||
|
|
37259baf08 | ||
|
|
d87d095fe9 | ||
|
|
44a1baa41f | ||
|
|
a1bc60145c | ||
|
|
802919e6ea | ||
|
|
1f674b5b86 | ||
|
|
53b15f4507 | ||
|
|
a5e2fa80e8 | ||
|
|
f10f62cebd | ||
|
|
37ac4d30e5 | ||
|
|
0ac43cefa2 | ||
|
|
4c60173b02 | ||
|
|
dbcdc22b26 | ||
|
|
726596d568 | ||
|
|
3e3f223bb2 | ||
|
|
17eb760928 | ||
|
|
4cbfbdd621 | ||
|
|
aeb8e89b69 | ||
|
|
0759e1ece2 | ||
|
|
fd7b2b7c4b | ||
|
|
7ef8f9ac13 | ||
|
|
dbb6c2bd9f | ||
|
|
b18bd735c9 | ||
|
|
b7752cc8a2 | ||
|
|
e8bc88eace | ||
|
|
19a4a99e76 | ||
|
|
bc213888e8 | ||
|
|
c784b46a5e | ||
|
|
1c9ba5b512 | ||
|
|
3d99ea5cbf | ||
|
|
28dc5a5b8c | ||
|
|
dcf23d0952 | ||
|
|
e597ecfe78 | ||
|
|
1c75ac12e8 | ||
|
|
28c4046300 | ||
|
|
762b5444f5 | ||
|
|
a0e34c3a21 | ||
|
|
504892ddb9 | ||
|
|
5927bf8149 | ||
|
|
45069604e1 | ||
|
|
b7f42f47a1 | ||
|
|
2175562b9a | ||
|
|
311ae5c4c5 | ||
|
|
8f29df541f | ||
|
|
80e61206fd | ||
|
|
354d15cbf1 | ||
|
|
12c5100bc8 | ||
|
|
366db1623b | ||
|
|
88457d726b | ||
|
|
ac754f86f3 | ||
|
|
4bb1024041 | ||
|
|
a0d97ff7ed | ||
|
|
6a1a83cc2b | ||
|
|
abf0f7111d | ||
|
|
ef82489040 | ||
|
|
49474c6fc8 | ||
|
|
7ee0dc48a7 | ||
|
|
ca531f0c13 | ||
|
|
e1ef1efdb5 | ||
|
|
c8c393eff9 | ||
|
|
6fd80cd16f | ||
|
|
6f7a3ed031 | ||
|
|
be597ed467 | ||
|
|
a5267bcb5b | ||
|
|
c512693b9d | ||
|
|
95b19864d3 | ||
|
|
db6758f7f7 | ||
|
|
f11f3fdee1 | ||
|
|
497d055b63 | ||
|
|
8f9ecdcfb5 | ||
|
|
fb47b28318 | ||
|
|
6fa72cf912 | ||
|
|
df6fa0be24 | ||
|
|
edb7cfc08d | ||
|
|
559c132d17 | ||
|
|
4e006e9481 | ||
|
|
717a6b6d07 | ||
|
|
04c101018a | ||
|
|
d6a298cffd | ||
|
|
018755516b | ||
|
|
31e17daa34 | ||
|
|
0748743fe0 | ||
|
|
0a7ff53fc7 | ||
|
|
da9ca18fe3 | ||
|
|
d292ab72d2 | ||
|
|
9c77af0d67 | ||
|
|
03f3d295c9 | ||
|
|
9aa5ca022d | ||
|
|
35e2e1848a | ||
|
|
087ee35ece | ||
|
|
399809ee6b | ||
|
|
cf6b12842f | ||
|
|
702c138f44 | ||
|
|
b0f0066f28 | ||
|
|
47c9a1d80f | ||
|
|
239f65d04d | ||
|
|
2cd534526f | ||
|
|
604ecbbf95 | ||
|
|
5e6191f235 | ||
|
|
026f269bdf | ||
|
|
7970955c00 | ||
|
|
3a0ea03a9c | ||
|
|
4ea07940f8 | ||
|
|
a8ac42037b | ||
|
|
78a45fc92d | ||
|
|
a6a12335f1 | ||
|
|
d82c1427f7 | ||
|
|
f2c766ddaf | ||
|
|
33aefb69f4 | ||
|
|
2751624b2b | ||
|
|
fc55267dc3 | ||
|
|
9ea1bb492f | ||
|
|
42c4b95df1 | ||
|
|
55325a0812 | ||
|
|
86bfc0a7f9 | ||
|
|
166fce793f | ||
|
|
df53489498 | ||
|
|
d050f48d4f | ||
|
|
d204418530 | ||
|
|
a4d21586d0 | ||
|
|
bf5c7a41d6 | ||
|
|
73cae2e726 | ||
|
|
019a83bd83 | ||
|
|
826b14b54f | ||
|
|
8a81d59240 | ||
|
|
4581e1daf9 | ||
|
|
1d619b0954 | ||
|
|
6b666bf304 | ||
|
|
cbb784637a | ||
|
|
175dc33b01 | ||
|
|
aa1b98aef8 | ||
|
|
c842a1e8d4 | ||
|
|
7e8be87da2 | ||
|
|
97b9bd0593 | ||
|
|
389865ba13 | ||
|
|
bdaceedc91 | ||
|
|
2c910b0778 | ||
|
|
f01721ce64 | ||
|
|
35b16d421e | ||
|
|
147def5059 | ||
|
|
bf16dd2cf8 | ||
|
|
24feace60b | ||
|
|
3ab8a8e25f | ||
|
|
e96c7bf987 | ||
|
|
e7c39cb53f | ||
|
|
a8aca3ad0f | ||
|
|
b531f6ab8b | ||
|
|
bd83d995fa | ||
|
|
7962303c72 | ||
|
|
991056a861 | ||
|
|
369a1a8ad9 | ||
|
|
b8e7b9c8b3 | ||
|
|
df40bafcfe | ||
|
|
0cd8ac6754 | ||
|
|
ad416ca14f | ||
|
|
70784517e4 | ||
|
|
2c3dc6ceef | ||
|
|
db935b20a7 | ||
|
|
a1fd0318f1 | ||
|
|
c2151c1b59 | ||
|
|
8f729bba41 | ||
|
|
08bf0b6d4d | ||
|
|
1ff30c5e54 | ||
|
|
80e7fb9020 | ||
|
|
1bd0106c2b | ||
|
|
6c59192340 | ||
|
|
29c1498842 | ||
|
|
75c12e8966 | ||
|
|
23291d4627 | ||
|
|
8b89767907 | ||
|
|
7bc43b4fe8 | ||
|
|
0aaf4c1f32 | ||
|
|
16394e6dbd | ||
|
|
3b531f863d | ||
|
|
0bc1a6a22a | ||
|
|
6dac9f769a | ||
|
|
5871ae1a59 | ||
|
|
0a9329ec56 | ||
|
|
00e34bb6fe | ||
|
|
75777dafc6 | ||
|
|
85ca07c521 | ||
|
|
b781e5cc88 | ||
|
|
13313028b5 | ||
|
|
0bc7c452c3 | ||
|
|
b549003054 | ||
|
|
2ee425bdf1 | ||
|
|
fe6160663a | ||
|
|
6549e6136c | ||
|
|
9b1668cbcd | ||
|
|
1c615b7fbf | ||
|
|
7c54012caa | ||
|
|
abee872931 | ||
|
|
1cbcec87d8 | ||
|
|
0f1960f22a | ||
|
|
fb0c000b54 | ||
|
|
87bb6e9995 | ||
|
|
45ceabf49e | ||
|
|
8202629f62 | ||
|
|
d3d15301f7 | ||
|
|
8817ade510 | ||
|
|
4423bfdaa1 | ||
|
|
56c766c7b8 | ||
|
|
f8d2f44f82 | ||
|
|
d86e736b33 | ||
|
|
e2db15ed4d | ||
|
|
d5af131144 | ||
|
|
1401e0ab5a | ||
|
|
49817ee0fa | ||
|
|
e4e5cab60f | ||
|
|
bd6a3a633d | ||
|
|
3d5500e69b | ||
|
|
b5fc236d43 | ||
|
|
9915e560b2 | ||
|
|
4cf07f143c | ||
|
|
9c0994219e | ||
|
|
1287412383 | ||
|
|
0712207ff2 | ||
|
|
3e11a5200e | ||
|
|
723b470284 | ||
|
|
a267aad709 | ||
|
|
b1b318e282 | ||
|
|
31a8d35bb9 | ||
|
|
f5a63998ce | ||
|
|
921f568d2d | ||
|
|
f43ac8554c | ||
|
|
988a21e94d | ||
|
|
a7172d8782 | ||
|
|
cc8c23db85 | ||
|
|
a6d7852903 | ||
|
|
af88fb8af4 | ||
|
|
d16c710caa | ||
|
|
23d362757c | ||
|
|
ef7bea6d2d | ||
|
|
4d0fa60a7a | ||
|
|
e25fc2da88 | ||
|
|
5558e0c62f | ||
|
|
10315ed240 | ||
|
|
754fb2397e | ||
|
|
df2d144590 | ||
|
|
432e47032e | ||
|
|
507d40b6f5 | ||
|
|
97eb814f21 | ||
|
|
0ef80e6d3e | ||
|
|
b651b5cb48 | ||
|
|
02d95e90b4 | ||
|
|
99e160686a | ||
|
|
fc9ada5f18 | ||
|
|
ce3c084ea1 | ||
|
|
ab24796316 | ||
|
|
aa2ee060f1 | ||
|
|
66e47990ac | ||
|
|
bd9f7bda29 | ||
|
|
b002cf3031 | ||
|
|
77407f0879 | ||
|
|
ff4c76e3a2 | ||
|
|
533e0fb10d | ||
|
|
c5bc3e27a8 | ||
|
|
fad0398a48 | ||
|
|
5ce519aef9 | ||
|
|
a0719275e6 | ||
|
|
01a2fc6b75 | ||
|
|
c232983e63 | ||
|
|
fe956d4617 | ||
|
|
fee8838e7b | ||
|
|
0996f8cccb |
4
.env.example
Normal file
4
.env.example
Normal file
@@ -0,0 +1,4 @@
|
||||
DATABASE_URI=mongodb://127.0.0.1/payloadtests
|
||||
PAYLOAD_SECRET=laijflieawfjlweifjewalifjwe
|
||||
# PAYLOAD_CONFIG_PATH=MUST BE SET PROGRAMMATICALLY
|
||||
PAYLOAD_DROP_DATABASE=true
|
||||
13
.eslintrc.js
13
.eslintrc.js
@@ -1,6 +1,15 @@
|
||||
module.exports = {
|
||||
extends: ['@payloadcms'],
|
||||
overrides: [
|
||||
{
|
||||
files: ['scripts/**'],
|
||||
rules: {
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'no-console': 'off',
|
||||
'perfectionist/sort-object-types': 'off',
|
||||
'perfectionist/sort-objects': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
extends: ['plugin:@typescript-eslint/disable-type-checked'],
|
||||
files: ['*.js', '*.cjs', '*.json', '*.md', '*.yml', '*.yaml'],
|
||||
@@ -34,5 +43,9 @@ module.exports = {
|
||||
},
|
||||
},
|
||||
],
|
||||
parserOptions: {
|
||||
project: ['./tsconfig.json'],
|
||||
tsconfigRootDir: __dirname,
|
||||
},
|
||||
root: true,
|
||||
}
|
||||
|
||||
92
.github/workflows/main.yml
vendored
92
.github/workflows/main.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
pull_request:
|
||||
types: [ opened, reopened, synchronize ]
|
||||
push:
|
||||
branches: [ 'main' ]
|
||||
branches: ['main', 'feat/next-poc']
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
|
||||
- run: pnpm install
|
||||
- run: pnpm run build
|
||||
- run: pnpm run build:core
|
||||
|
||||
- name: Cache build
|
||||
uses: actions/cache@v3
|
||||
@@ -79,13 +79,51 @@ jobs:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
plugins-build:
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.needs_build == 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 25
|
||||
|
||||
- name: Use Node.js 18
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
|
||||
- name: Get pnpm store directory
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/cache@v3
|
||||
name: Setup pnpm cache
|
||||
with:
|
||||
path: ${{ env.STORE_PATH }}
|
||||
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pnpm-store-
|
||||
${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
|
||||
- run: pnpm install
|
||||
- run: pnpm run build:plugins
|
||||
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
needs: core-build
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
database: [ mongoose, postgres, postgres-uuid, supabase ]
|
||||
database: [mongoose, postgres, postgres-custom-schema, postgres-uuid, supabase]
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
@@ -123,7 +161,7 @@ jobs:
|
||||
postgresql db: ${{ env.POSTGRES_DB }}
|
||||
postgresql user: ${{ env.POSTGRES_USER }}
|
||||
postgresql password: ${{ env.POSTGRES_PASSWORD }}
|
||||
if: matrix.database == 'postgres' || matrix.database == 'postgres-uuid'
|
||||
if: startsWith(matrix.database, 'postgres')
|
||||
|
||||
- name: Install Supabase CLI
|
||||
uses: supabase/setup-cli@v1
|
||||
@@ -139,14 +177,19 @@ jobs:
|
||||
|
||||
- name: Wait for PostgreSQL
|
||||
run: sleep 30
|
||||
if: matrix.database == 'postgres' || matrix.database == 'postgres-uuid'
|
||||
if: startsWith(matrix.database, 'postgres')
|
||||
|
||||
- name: Configure PostgreSQL
|
||||
run: |
|
||||
psql "postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" -c "CREATE ROLE runner SUPERUSER LOGIN;"
|
||||
psql "postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" -c "SELECT version();"
|
||||
echo "POSTGRES_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" >> $GITHUB_ENV
|
||||
if: matrix.database == 'postgres' || matrix.database == 'postgres-uuid'
|
||||
if: startsWith(matrix.database, 'postgres')
|
||||
|
||||
- name: Configure PostgreSQL with custom schema
|
||||
run: |
|
||||
psql "postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB" -c "CREATE SCHEMA custom;"
|
||||
if: matrix.database == 'postgres-custom-schema'
|
||||
|
||||
- name: Configure Supabase
|
||||
run: |
|
||||
@@ -232,43 +275,6 @@ jobs:
|
||||
- name: Generate GraphQL schema file
|
||||
run: pnpm dev:generate-graphql-schema graphql-schema-gen
|
||||
|
||||
build-packages:
|
||||
runs-on: ubuntu-latest
|
||||
needs: core-build
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pkg:
|
||||
- db-mongodb
|
||||
- db-postgres
|
||||
- bundler-webpack
|
||||
- bundler-vite
|
||||
- richtext-slate
|
||||
- richtext-lexical
|
||||
- live-preview
|
||||
- live-preview-react
|
||||
|
||||
steps:
|
||||
- name: Use Node.js 18
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2
|
||||
with:
|
||||
version: 8
|
||||
run_install: false
|
||||
|
||||
- name: Restore build
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
- name: Build ${{ matrix.pkg }}
|
||||
run: pnpm turbo run build --filter=${{ matrix.pkg }}
|
||||
|
||||
plugins:
|
||||
runs-on: ubuntu-latest
|
||||
needs: core-build
|
||||
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -8,7 +8,11 @@ test-results
|
||||
.devcontainer
|
||||
.localstack
|
||||
/migrations
|
||||
/media
|
||||
.localstack
|
||||
.turbo
|
||||
|
||||
.turbo
|
||||
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=node,macos,windows,webstorm,sublimetext,visualstudiocode
|
||||
|
||||
@@ -1 +1 @@
|
||||
v18.17.1
|
||||
v18.19.1
|
||||
|
||||
8
.vscode/launch.json
vendored
8
.vscode/launch.json
vendored
@@ -2,6 +2,12 @@
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
"configurations": [
|
||||
{
|
||||
"command": "pnpm dev",
|
||||
"name": "Run Dev 3.0",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
},
|
||||
{
|
||||
"command": "pnpm run dev _community",
|
||||
"cwd": "${workspaceFolder}",
|
||||
@@ -27,7 +33,7 @@
|
||||
"type": "node-terminal"
|
||||
},
|
||||
{
|
||||
"command": "pnpm run dev:postgres fields",
|
||||
"command": "pnpm run dev:postgres versions",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"name": "Run Dev Postgres",
|
||||
"request": "launch",
|
||||
|
||||
33
.vscode/settings.json
vendored
33
.vscode/settings.json
vendored
@@ -5,21 +5,21 @@
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
"source.fixAll.eslint": "explicit"
|
||||
}
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
"source.fixAll.eslint": "explicit"
|
||||
}
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
"source.fixAll.eslint": "explicit"
|
||||
}
|
||||
},
|
||||
"[json]": {
|
||||
@@ -35,5 +35,30 @@
|
||||
"eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }],
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
// Load .git-blame-ignore-revs file
|
||||
"gitlens.advanced.blame.customArguments": ["--ignore-revs-file", ".git-blame-ignore-revs"]
|
||||
"gitlens.advanced.blame.customArguments": ["--ignore-revs-file", ".git-blame-ignore-revs"],
|
||||
"[javascript][typescript][typescriptreact]": {
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit"
|
||||
}
|
||||
},
|
||||
"workbench.colorCustomizations": {
|
||||
"activityBar.activeBackground": "#8cb5b6",
|
||||
"activityBar.background": "#8cb5b6",
|
||||
"activityBar.foreground": "#15202b",
|
||||
"activityBar.inactiveForeground": "#15202b99",
|
||||
"activityBarBadge.background": "#9c639b",
|
||||
"activityBarBadge.foreground": "#e7e7e7",
|
||||
"commandCenter.border": "#15202b99",
|
||||
"sash.hoverBorder": "#8cb5b6",
|
||||
"statusBar.background": "#6da1a2",
|
||||
"statusBar.foreground": "#15202b",
|
||||
"statusBarItem.hoverBackground": "#568586",
|
||||
"statusBarItem.remoteBackground": "#6da1a2",
|
||||
"statusBarItem.remoteForeground": "#15202b",
|
||||
"titleBar.activeBackground": "#6da1a2",
|
||||
"titleBar.activeForeground": "#15202b",
|
||||
"titleBar.inactiveBackground": "#6da1a299",
|
||||
"titleBar.inactiveForeground": "#15202b99"
|
||||
},
|
||||
"peacock.color": "#6da1a2"
|
||||
}
|
||||
|
||||
30
CHANGELOG.md
30
CHANGELOG.md
@@ -1,10 +1,24 @@
|
||||
## [2.11.2](https://github.com/payloadcms/payload/compare/v2.11.1...v2.11.2) (2024-02-23)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **db-postgres:** configurable custom schema to use ([#5047](https://github.com/payloadcms/payload/issues/5047)) ([e8f2ca4](https://github.com/payloadcms/payload/commit/e8f2ca484ee56cd7767d5111e46ebd24752ff8de))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Context Provider in EditMany Component ([#5005](https://github.com/payloadcms/payload/issues/5005)) ([70e57fe](https://github.com/payloadcms/payload/commit/70e57fef184f7fcf56344ea755465f246f2253a5))
|
||||
* **db-mongodb:** unique sparse for not required fields ([#5114](https://github.com/payloadcms/payload/issues/5114)) ([815bdfa](https://github.com/payloadcms/payload/commit/815bdfac0b0afbff2a20e54d5aee64b90f6b3a77))
|
||||
* **db-postgres:** set _parentID for array nested localized fields ([#5117](https://github.com/payloadcms/payload/issues/5117)) ([ceca5c4](https://github.com/payloadcms/payload/commit/ceca5c4e97f53f1346797a31b6abfc0375e98215))
|
||||
* disabling API Key does not remove the key ([#5145](https://github.com/payloadcms/payload/issues/5145)) ([7a7f0ed](https://github.com/payloadcms/payload/commit/7a7f0ed7e8132253be607c111c160163b84bd770))
|
||||
* handle thrown errors in config-level afterError hook ([#5147](https://github.com/payloadcms/payload/issues/5147)) ([32ed95e](https://github.com/payloadcms/payload/commit/32ed95e1ee87409db234f1b7bd6d2e462fd9ed5d))
|
||||
* only replace the drawer content with full edit component if it exists ([#5144](https://github.com/payloadcms/payload/issues/5144)) ([0a07f60](https://github.com/payloadcms/payload/commit/0a07f607b9fb1217ad956cd05b2a84a4042a19ca))
|
||||
* transaction error from access endpoint ([#5156](https://github.com/payloadcms/payload/issues/5156)) ([ad42d54](https://github.com/payloadcms/payload/commit/ad42d541b342ed56463b81cee6d6307df6f06d7f))
|
||||
|
||||
## [2.11.1](https://github.com/payloadcms/payload/compare/v2.11.0...v2.11.1) (2024-02-16)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* **richtext-lexical:** Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground (#5066)
|
||||
|
||||
### Features
|
||||
|
||||
* **db-postgres:** adds idType to use uuid or serial id columns ([#3864](https://github.com/payloadcms/payload/issues/3864)) ([d6c2578](https://github.com/payloadcms/payload/commit/d6c25783cfa97983bf9db27ceb5ccd39a62c62f1))
|
||||
@@ -25,6 +39,14 @@
|
||||
* **richtext-lexical:** do not remove adjacent paragraph node when inserting certain nodes in empty editor ([#5061](https://github.com/payloadcms/payload/issues/5061)) ([6323965](https://github.com/payloadcms/payload/commit/6323965c652ea68dffeb716957b124d165b9ce96))
|
||||
* **uploads:** account for serverURL when retrieving external file ([#5102](https://github.com/payloadcms/payload/issues/5102)) ([25cee8b](https://github.com/payloadcms/payload/commit/25cee8bb102bf80b3a4bfb4b4e46712722cc7f0d))
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES: @payloadcms/richtext-lexical
|
||||
|
||||
* **richtext-lexical:** Update lexical from 0.12.6 to 0.13.1, port over all useful changes from playground (#5066)
|
||||
|
||||
- You HAVE to make sure that any versions of the lexical packages (IF you have any installed) match the lexical version which richtext-lexical uses: v0.13.1. If you do not do this, you may be plagued by React useContext / "cannot find active editor state" errors
|
||||
- Updates to lexical's API, e.g. the removal of INTERNAL_isPointSelection, could be breaking depending on your code. Please consult the [lexical changelog](https://github.com/facebook/lexical/blob/main/CHANGELOG.md).
|
||||
|
||||
## [2.11.0](https://github.com/payloadcms/payload/compare/v2.10.1...v2.11.0) (2024-02-09)
|
||||
|
||||
|
||||
|
||||
17
app/(payload)/admin/[[...segments]]/page.tsx
Normal file
17
app/(payload)/admin/[[...segments]]/page.tsx
Normal file
@@ -0,0 +1,17 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
import config from '@payload-config'
|
||||
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
|
||||
import { RootPage } from '@payloadcms/next/views/Root/index'
|
||||
|
||||
type Args = {
|
||||
params: {
|
||||
segments: string[]
|
||||
}
|
||||
searchParams: {
|
||||
[key: string]: string | string[]
|
||||
}
|
||||
}
|
||||
|
||||
const Page = ({ params, searchParams }: Args) => RootPage({ config, params, searchParams })
|
||||
|
||||
export default Page
|
||||
9
app/(payload)/api/[...slug]/route.ts
Normal file
9
app/(payload)/api/[...slug]/route.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
/* DO NOT MODIFY it because it could be re-written at any time. */
|
||||
import config from '@payload-config'
|
||||
import { REST_GET, REST_DELETE, REST_PATCH, REST_POST } from '@payloadcms/next/routes'
|
||||
|
||||
export const GET = REST_GET(config)
|
||||
export const POST = REST_POST(config)
|
||||
export const DELETE = REST_DELETE(config)
|
||||
export const PATCH = REST_PATCH(config)
|
||||
6
app/(payload)/api/[collection]/file/[filename]/route.ts
Normal file
6
app/(payload)/api/[collection]/file/[filename]/route.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
/* DO NOT MODIFY it because it could be re-written at any time. */
|
||||
import config from '@payload-config'
|
||||
import { GET_STATIC_FILE } from '@payloadcms/next/routes'
|
||||
|
||||
export const GET = GET_STATIC_FILE(config)
|
||||
6
app/(payload)/api/graphql-playground/route.ts
Normal file
6
app/(payload)/api/graphql-playground/route.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
/* DO NOT MODIFY it because it could be re-written at any time. */
|
||||
import config from '@payload-config'
|
||||
import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes'
|
||||
|
||||
export const GET = GRAPHQL_PLAYGROUND_GET(config)
|
||||
6
app/(payload)/api/graphql/route.ts
Normal file
6
app/(payload)/api/graphql/route.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
/* DO NOT MODIFY it because it could be re-written at any time. */
|
||||
import config from '@payload-config'
|
||||
import { GRAPHQL_POST } from '@payloadcms/next/routes'
|
||||
|
||||
export const POST = GRAPHQL_POST(config)
|
||||
15
app/(payload)/layout.tsx
Normal file
15
app/(payload)/layout.tsx
Normal file
@@ -0,0 +1,15 @@
|
||||
/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */
|
||||
import configPromise from '@payload-config'
|
||||
import { RootLayout } from '@payloadcms/next/layouts/Root/index'
|
||||
/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */
|
||||
import React from 'react'
|
||||
|
||||
import './custom.scss'
|
||||
|
||||
type Args = {
|
||||
children: React.ReactNode
|
||||
}
|
||||
|
||||
const Layout = ({ children }: Args) => <RootLayout config={configPromise}>{children}</RootLayout>
|
||||
|
||||
export default Layout
|
||||
10
app/my-route/route.ts
Normal file
10
app/my-route/route.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export const GET = async () => {
|
||||
console.log('1')
|
||||
console.log('1')
|
||||
console.log('1')
|
||||
console.log('1')
|
||||
console.log('1')
|
||||
return Response.json({
|
||||
hello: 'elliot',
|
||||
})
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Postgres
|
||||
label: Postgres
|
||||
order: 50
|
||||
desc: Payload supports Postgres through an officially supported Drizzle database adapter.
|
||||
desc: Payload supports Postgres through an officially supported Drizzle database adapter.
|
||||
keywords: Postgres, documentation, typescript, Content Management System, cms, headless, javascript, node, react, express
|
||||
---
|
||||
|
||||
@@ -37,11 +37,12 @@ export default buildConfig({
|
||||
|
||||
### Options
|
||||
|
||||
| Option | Description |
|
||||
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `pool` | [Pool connection options](https://orm.drizzle.team/docs/quick-postgresql/node-postgres) that will be passed to Drizzle and `node-postgres`. |
|
||||
| `push` | Disable Drizzle's [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push) in development mode. By default, `push` is enabled for development mode only. |
|
||||
| `migrationDir` | Customize the directory that migrations are stored. |
|
||||
| Option | Description |
|
||||
|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `pool` | [Pool connection options](https://orm.drizzle.team/docs/quick-postgresql/node-postgres) that will be passed to Drizzle and `node-postgres`. |
|
||||
| `push` | Disable Drizzle's [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push) in development mode. By default, `push` is enabled for development mode only. |
|
||||
| `migrationDir` | Customize the directory that migrations are stored. |
|
||||
| `schemaName` | A string for the postgres schema to use, defaults to 'public'. |
|
||||
|
||||
### Access to Drizzle
|
||||
|
||||
@@ -65,7 +66,7 @@ In addition to exposing Drizzle directly, all of the tables, Drizzle relations,
|
||||
|
||||
Drizzle exposes two ways to work locally in development mode.
|
||||
|
||||
The first is [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push), which automatically pushes changes you make to your Payload config (and therefore, Drizzle schema) to your database so you don't have to manually migrate every time you change your Payload config. This only works in development mode, and should not be mixed with manually running [`migrate`](/docs/database/migrations) commands.
|
||||
The first is [`db push`](https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push), which automatically pushes changes you make to your Payload config (and therefore, Drizzle schema) to your database so you don't have to manually migrate every time you change your Payload config. This only works in development mode, and should not be mixed with manually running [`migrate`](/docs/database/migrations) commands.
|
||||
|
||||
You will be warned if any changes that you make will entail data loss while in development mode. Push is enabled by default, but you can opt out if you'd like.
|
||||
|
||||
@@ -77,11 +78,11 @@ Migrations are extremely powerful thanks to the seamless way that Payload and Dr
|
||||
|
||||
1. You are building your Payload config locally, with a local database used for testing.
|
||||
1. You have left the default setting of `push` enabled, so every time you change your Payload config (add or remove fields, collections, etc.), Drizzle will automatically push changes to your local DB.
|
||||
1. Once you're done with your changes, or have completed a feature, you can run `npm run payload migrate:create`.
|
||||
1. Once you're done with your changes, or have completed a feature, you can run `npm run payload migrate:create`.
|
||||
1. Payload and Drizzle will look for any existing migrations, and automatically generate all SQL changes necessary to convert your schema from its prior state into the state of your current Payload config, and store the resulting DDL in a newly created migration.
|
||||
1. Once you're ready to go to production, you will be able to run `npm run payload migrate` against your production database, which will apply any new migrations that have not yet run.
|
||||
1. Now your production database is in sync with your Payload config!
|
||||
|
||||
<Banner type="warning">
|
||||
Warning: do not mix "push" and migrations with your local development database. If you use "push" locally, and then try to migrate, Payload will throw a warning, telling you that these two methods are not meant to be used interchangeably.
|
||||
</Banner>
|
||||
</Banner>
|
||||
|
||||
@@ -11,7 +11,7 @@ keywords: documentation, getting started, guide, Content Management System, cms,
|
||||
Payload requires the following software:
|
||||
|
||||
- Any JavaScript package manager (Yarn, NPM, or pnpm)
|
||||
- Node.js version 16+
|
||||
- Node.js version 18+
|
||||
- Any [compatible database](/docs/database/overview) (MongoDB or Postgres)
|
||||
|
||||
<Banner type="warning">
|
||||
|
||||
@@ -36,7 +36,7 @@ If your Hook simply performs a side-effect, such as updating a CRM, it might be
|
||||
|
||||
#### Server-only execution
|
||||
|
||||
Payload Hooks do not have any effect within the Payload Admin panel. You can safely [remove your hooks](/docs/admin/webpack#aliasing-server-only-modules) from your Admin panel's code by customizing the Webpack config, which not only keeps your Admin bundles' filesize small but also ensures that any server-side only code does not cause problems within browser environments.
|
||||
Payload Hooks are only triggered on the server. You can safely [remove your hooks](/docs/admin/webpack#aliasing-server-only-modules) from your Admin panel's client-side code by customizing the Webpack config, which not only keeps your Admin bundles' filesize small but also ensures that any server-side only code does not cause problems within browser environments.
|
||||
|
||||
## Hook Types
|
||||
|
||||
|
||||
@@ -4508,9 +4508,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4701,9 +4701,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4508,9 +4508,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4258,14 +4258,14 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^1.1.5:
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
|
||||
integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
|
||||
version "1.1.9"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396"
|
||||
integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"@apollo/client": "^3.7.0",
|
||||
"@faceless-ui/css-grid": "^1.2.0",
|
||||
"@faceless-ui/modal": "^2.0.1",
|
||||
"@faceless-ui/modal": "^2.0.2",
|
||||
"escape-html": "^1.0.3",
|
||||
"graphql": "^16.8.1",
|
||||
"next": "^13.5.6",
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"@payloadcms/bundler-webpack": "latest",
|
||||
"@payloadcms/db-mongodb": "latest",
|
||||
"@payloadcms/richtext-slate": "latest",
|
||||
"@faceless-ui/modal": "^2.0.1",
|
||||
"@faceless-ui/modal": "^2.0.2",
|
||||
"@payloadcms/plugin-form-builder": "^1.0.12",
|
||||
"@payloadcms/plugin-seo": "^1.0.8",
|
||||
"dotenv": "^8.2.0",
|
||||
|
||||
@@ -3924,9 +3924,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4347,9 +4347,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4508,9 +4508,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4625,9 +4625,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4599,9 +4599,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -4513,9 +4513,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
"@swc/core": "^1.3.84",
|
||||
"@swc/jest": "^0.2.29",
|
||||
"@types/jest": "^29.5.4",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"jest": "^29.7.0",
|
||||
"mongodb-memory-server": "^8.15.1",
|
||||
"nodemon": "^3.0.1",
|
||||
|
||||
@@ -4835,9 +4835,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -3748,9 +3748,9 @@ interpret@^2.2.0:
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
|
||||
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105"
|
||||
integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
module.exports = {
|
||||
// const nextJest = require('next/jest.js')
|
||||
|
||||
// const createJestConfig = nextJest({
|
||||
// // Provide the path to your Next.js app to load next.config.js and .env files in your test environment
|
||||
// dir: './',
|
||||
// })
|
||||
|
||||
const customJestConfig = {
|
||||
globalSetup: './test/jest.setup.ts',
|
||||
moduleNameMapper: {
|
||||
'\\.(css|scss)$': '<rootDir>/packages/payload/src/bundlers/mocks/emptyModule.js',
|
||||
@@ -13,3 +20,6 @@ module.exports = {
|
||||
},
|
||||
verbose: true,
|
||||
}
|
||||
|
||||
// module.exports = createJestConfig(customJestConfig)
|
||||
module.exports = customJestConfig
|
||||
|
||||
5
next-env.d.ts
vendored
Normal file
5
next-env.d.ts
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
10
next.config.js
Normal file
10
next.config.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const { withPayload } = require('./packages/next/src/withPayload')
|
||||
const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
||||
enabled: process.env.ANALYZE === 'true',
|
||||
})
|
||||
|
||||
module.exports = withBundleAnalyzer(
|
||||
withPayload({
|
||||
reactStrictMode: false,
|
||||
}),
|
||||
)
|
||||
104
package.json
104
package.json
@@ -1,17 +1,42 @@
|
||||
{
|
||||
"name": "payload-monorepo",
|
||||
"version": "0.0.1",
|
||||
"version": "3.0.0-alpha.10",
|
||||
"private": true,
|
||||
"workspaces:": [
|
||||
"packages/*"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "pnpm --filter payload run build",
|
||||
"build": "pnpm run build:core",
|
||||
"build:all": "turbo build",
|
||||
"clean": "rimraf dist && rimraf packages/payload/dist",
|
||||
"clean:cache": "rimraf node_modules/.cache && rimraf packages/payload/node_modules/.cache",
|
||||
"clean:unix": "find . \\( -type d \\( -name node_modules -o -name dist -o -name .cache \\) -o -type f -name tsconfig.tsbuildinfo \\) -exec rm -rf {} +",
|
||||
"dev": "nodemon",
|
||||
"build:core": "turbo build --filter \"!@payloadcms/plugin-*\"",
|
||||
"build:plugins": "turbo build --filter \"@payloadcms/plugin-*\"",
|
||||
"build:app": "next build",
|
||||
"build:create-payload-app": "turbo build --filter create-payload-app",
|
||||
"build:db-mongodb": "turbo build --filter db-mongodb",
|
||||
"build:db-postgres": "turbo build --filter db-postgres",
|
||||
"build:eslint-config-payload": "turbo build --filter eslint-config-payload",
|
||||
"build:graphql": "turbo build --filter graphql",
|
||||
"build:live-preview": "turbo build --filter live-preview",
|
||||
"build:live-preview-react": "turbo build --filter live-preview-react",
|
||||
"build:next": "turbo build --filter next",
|
||||
"build:payload": "turbo build --filter payload",
|
||||
"build:plugin-cloud": "turbo build --filter plugin-cloud",
|
||||
"build:plugin-cloud-storage": "turbo build --filter plugin-cloud-storage",
|
||||
"build:plugin-form-builder": "turbo build --filter plugin-form-builder",
|
||||
"build:plugin-nested-docs": "turbo build --filter plugin-nested-docs",
|
||||
"build:plugin-redirects": "turbo build --filter plugin-redirects",
|
||||
"build:plugin-search": "turbo build --filter plugin-search",
|
||||
"build:plugin-sentry": "turbo build --filter plugin-sentry",
|
||||
"build:plugin-seo": "turbo build --filter plugin-seo",
|
||||
"build:plugin-stripe": "turbo build --filter plugin-stripe",
|
||||
"build:richtext-lexical": "turbo build --filter richtext-lexical",
|
||||
"build:richtext-slate": "turbo build --filter richtext-slate",
|
||||
"build:translations": "turbo build --filter translations",
|
||||
"build:ui": "turbo build --filter ui",
|
||||
"clean": "turbo clean",
|
||||
"clean:cache": "rimraf node_modules/.cache && rimraf packages/payload/node_modules/.cache && rimraf .next",
|
||||
"clean:all": "find . \\( -type d \\( -name node_modules -o -name dist -o -name .cache \\) -o -type f -name tsconfig.tsbuildinfo \\) -exec rm -rf {} +",
|
||||
"dev": "cross-env node ./test/dev.js",
|
||||
"dev:generate-graphql-schema": "ts-node -T ./test/generateGraphQLSchema.ts",
|
||||
"dev:generate-types": "ts-node -T ./test/generateTypes.ts",
|
||||
"dev:postgres": "pnpm --filter payload run dev:postgres",
|
||||
@@ -23,9 +48,10 @@
|
||||
"lint-staged": "lint-staged",
|
||||
"prepare": "husky install",
|
||||
"pretest": "pnpm build",
|
||||
"reinstall": "pnpm clean:unix && pnpm install",
|
||||
"reinstall": "pnpm clean:all && pnpm install",
|
||||
"script:list-packages": "tsx ./scripts/list-packages.ts",
|
||||
"script:release": "tsx ./scripts/release.ts",
|
||||
"release:alpha": "tsx ./scripts/release.ts --bump prerelease --tag alpha",
|
||||
"release:beta": "tsx ./scripts/release.ts --bump prerelease --tag beta",
|
||||
"test": "pnpm test:int && pnpm test:components && pnpm test:e2e",
|
||||
"test:components": "cross-env jest --config=jest.components.config.js",
|
||||
"test:e2e": "npx playwright install --with-deps chromium && ts-node -T ./test/runE2E.ts",
|
||||
@@ -37,6 +63,8 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@aws-sdk/client-s3": "^3.142.0",
|
||||
"@next/bundle-analyzer": "^14.1.0",
|
||||
"@octokit/core": "^5.1.0",
|
||||
"@payloadcms/eslint-config": "workspace:*",
|
||||
"@playwright/test": "1.40.1",
|
||||
"@swc/cli": "^0.1.62",
|
||||
@@ -48,6 +76,7 @@
|
||||
"@types/conventional-changelog": "^3.1.4",
|
||||
"@types/conventional-changelog-core": "^4.2.5",
|
||||
"@types/conventional-changelog-preset-loader": "^2.3.4",
|
||||
"@types/conventional-changelog-writer": "^4.0.10",
|
||||
"@types/fs-extra": "^11.0.2",
|
||||
"@types/jest": "29.5.7",
|
||||
"@types/minimist": "1.2.2",
|
||||
@@ -59,67 +88,65 @@
|
||||
"@types/shelljs": "0.8.12",
|
||||
"@types/testing-library__jest-dom": "5.14.8",
|
||||
"add-stream": "^1.0.0",
|
||||
"chalk": "^5.3.0",
|
||||
"chalk-template": "1.1.0",
|
||||
"chalk": "^4.1.2",
|
||||
"concat-stream": "^2.0.0",
|
||||
"conventional-changelog": "^5.1.0",
|
||||
"conventional-changelog-conventionalcommits": "^7.0.2",
|
||||
"conventional-changelog-core": "^7.0.0",
|
||||
"conventional-changelog-preset-loader": "^4.1.0",
|
||||
"conventional-changelog-writer": "^7.0.1",
|
||||
"copyfiles": "2.4.1",
|
||||
"cross-env": "7.0.3",
|
||||
"dotenv": "8.6.0",
|
||||
"drizzle-orm": "0.29.3",
|
||||
"drizzle-orm": "0.29.4",
|
||||
"execa": "5.1.1",
|
||||
"express": "4.18.2",
|
||||
"form-data": "3.0.1",
|
||||
"fs-extra": "10.1.0",
|
||||
"get-port": "5.1.1",
|
||||
"get-stream": "6.0.1",
|
||||
"glob": "8.1.0",
|
||||
"graphql-request": "6.1.0",
|
||||
"husky": "^8.0.3",
|
||||
"isomorphic-fetch": "3.0.0",
|
||||
"jest": "29.7.0",
|
||||
"jest-environment-jsdom": "29.7.0",
|
||||
"json5": "^2.2.3",
|
||||
"jwt-decode": "3.1.2",
|
||||
"lexical": "0.13.1",
|
||||
"lint-staged": "^14.0.1",
|
||||
"minimist": "1.2.8",
|
||||
"mongodb-memory-server": "^9",
|
||||
"node-fetch": "2.6.12",
|
||||
"next": "14.1.1-canary.26",
|
||||
"node-mocks-http": "^1.14.1",
|
||||
"nodemon": "3.0.3",
|
||||
"pino": "8.15.0",
|
||||
"pino-pretty": "10.2.0",
|
||||
"prettier": "^3.0.3",
|
||||
"prompts": "2.4.2",
|
||||
"qs": "6.11.2",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"read-stream": "^2.1.1",
|
||||
"rimraf": "3.0.2",
|
||||
"semver": "^7.5.4",
|
||||
"sharp": "0.33.2",
|
||||
"shelljs": "0.8.5",
|
||||
"simple-git": "^3.20.0",
|
||||
"slash": "3.0.0",
|
||||
"slate": "0.91.4",
|
||||
"tempfile": "^3.0.0",
|
||||
"ts-node": "10.9.2",
|
||||
"turbo": "^1.11.1",
|
||||
"tsx": "^4.7.1",
|
||||
"turbo": "^1.12.4",
|
||||
"typescript": "5.2.2",
|
||||
"uuid": "^9.0.1"
|
||||
"uuid": "^9.0.1",
|
||||
"yocto-queue": "^1.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "18.2.0",
|
||||
"react-i18next": "11.18.6",
|
||||
"react-router-dom": "5.3.4"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"copyfiles": "$copyfiles",
|
||||
"cross-env": "$cross-env",
|
||||
"dotenv": "$dotenv",
|
||||
"drizzle-orm": "$drizzle-orm",
|
||||
"ts-node": "$ts-node",
|
||||
"typescript": "$typescript"
|
||||
}
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14",
|
||||
"node": ">=18.17.0",
|
||||
"pnpm": ">=8"
|
||||
},
|
||||
"lint-staged": {
|
||||
@@ -128,6 +155,25 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/react": "^7.77.0"
|
||||
"@sentry/react": "^7.77.0",
|
||||
"passport-strategy": "1.0.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"copyfiles": "$copyfiles",
|
||||
"cross-env": "$cross-env",
|
||||
"dotenv": "$dotenv",
|
||||
"drizzle-orm": "$drizzle-orm",
|
||||
"graphql": "^16.8.1",
|
||||
"react": "$react",
|
||||
"react-dom": "$react-dom",
|
||||
"ts-node": "$ts-node",
|
||||
"typescript": "$typescript"
|
||||
},
|
||||
"allowedDeprecatedVersions": {
|
||||
"uuid": "3.4.0",
|
||||
"abab": "2",
|
||||
"domexception": "4"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
.tmp
|
||||
**/.git
|
||||
**/.hg
|
||||
**/.pnp.*
|
||||
**/.svn
|
||||
**/.yarn/**
|
||||
**/build
|
||||
**/dist/**
|
||||
**/node_modules
|
||||
**/temp
|
||||
@@ -1,28 +0,0 @@
|
||||
# Payload Vite Adapter
|
||||
|
||||
Official Vite adapter for [Payload](https://payloadcms.com).
|
||||
|
||||
- [Main Repository](https://github.com/payloadcms/payload)
|
||||
- [Payload Docs](https://payloadcms.com/docs)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @payloadcms/bundler-vite
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```ts
|
||||
import { buildConfig } from 'payload/config'
|
||||
import { viteBundler } from '@payloadcms/bundler-vite'
|
||||
|
||||
export default buildConfig({
|
||||
bundler: viteBundler(),
|
||||
// ...rest of config
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
More detailed usage can be found in the [Payload Docs](https://payloadcms.com/docs/configuration/overview).
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
export const viteBundler = () => {}
|
||||
export const mongooseAdapter = () => ({})
|
||||
export const postgresAdapter = () => ({})
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"name": "@payloadcms/bundler-vite",
|
||||
"version": "0.1.6",
|
||||
"description": "The officially supported Vite bundler adapter for Payload",
|
||||
"repository": "https://github.com/payloadcms/payload",
|
||||
"license": "MIT",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"author": {
|
||||
"email": "info@payloadcms.com",
|
||||
"name": "Payload",
|
||||
"url": "https://payloadcms.com"
|
||||
},
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "pnpm copyfiles && pnpm build:swc && pnpm build:types && pnpm copyTsx",
|
||||
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
||||
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
||||
"clean": "rimraf {dist,*.tsbuildinfo}",
|
||||
"copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
|
||||
"copyTsx": "copyfiles -u 1 \"src/entry.tsx\" dist/",
|
||||
"prepublishOnly": "pnpm clean && pnpm build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@rollup/plugin-image": "^3.0.2",
|
||||
"@vitejs/plugin-react": "^4.0.4",
|
||||
"compression": "1.7.4",
|
||||
"connect-history-api-fallback": "1.6.0",
|
||||
"get-port": "5.1.1",
|
||||
"path-browserify": "1.0.1",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-virtual": "^0.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@payloadcms/eslint-config": "workspace:*",
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"payload": "^2.0.0",
|
||||
"react-dom": "18.2.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"main": "./dist/index.js",
|
||||
"registry": "https://registry.npmjs.org/",
|
||||
"types": "./dist/index.d.ts"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"mock.js"
|
||||
]
|
||||
}
|
||||
@@ -1,157 +0,0 @@
|
||||
/* eslint-disable no-param-reassign */
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
// @ts-expect-error
|
||||
import type { InlineConfig } from 'vite'
|
||||
|
||||
import image from '@rollup/plugin-image'
|
||||
import react from '@vitejs/plugin-react'
|
||||
import getPort from 'get-port'
|
||||
import path from 'path'
|
||||
import virtual from 'vite-plugin-virtual'
|
||||
|
||||
const mockModulePath = path.resolve(__dirname, './mocks/emptyModule.js')
|
||||
const mockDotENVPath = path.resolve(__dirname, './mocks/dotENV.js')
|
||||
|
||||
export const getViteConfig = async (payloadConfig: SanitizedConfig): Promise<InlineConfig> => {
|
||||
const { createLogger, searchForWorkspaceRoot } = await import('vite')
|
||||
|
||||
const logger = createLogger('warn', { allowClearScreen: false, prefix: '[VITE-WARNING]' })
|
||||
const originalWarning = logger.warn
|
||||
logger.warn = (msg, options) => {
|
||||
// TODO: fix this? removed these warnings to make debugging easier
|
||||
if (msg.includes('Default and named imports from CSS files are deprecated')) return
|
||||
originalWarning(msg, options)
|
||||
}
|
||||
|
||||
const hmrPort = await getPort()
|
||||
|
||||
const absoluteAliases = {}
|
||||
|
||||
const alias = [
|
||||
{ find: '@payloadcms/bundler-vite', replacement: path.resolve(__dirname, '../mock.js') },
|
||||
{ find: '@payloadcms/db-mongodb', replacement: path.resolve(__dirname, '../mock.js') },
|
||||
{ find: '@payloadcms/db-postgres', replacement: path.resolve(__dirname, '../mock.js') },
|
||||
{ find: 'path', replacement: require.resolve('path-browserify') },
|
||||
{ find: 'payload-config', replacement: payloadConfig.paths.rawConfig },
|
||||
{ find: /payload$/, replacement: mockModulePath },
|
||||
{ find: '~payload-user-css', replacement: payloadConfig.admin.css },
|
||||
{ find: '~react-toastify', replacement: 'react-toastify' },
|
||||
{ find: 'dotenv', replacement: mockDotENVPath },
|
||||
]
|
||||
|
||||
if (payloadConfig.admin.webpack && typeof payloadConfig.admin.webpack === 'function') {
|
||||
const webpackConfig = payloadConfig.admin.webpack({
|
||||
resolve: {
|
||||
alias: {},
|
||||
},
|
||||
})
|
||||
|
||||
if (Object.keys(webpackConfig.resolve.alias).length > 0) {
|
||||
Object.entries(webpackConfig.resolve.alias).forEach(([source, target]) => {
|
||||
if (path.isAbsolute(source)) {
|
||||
absoluteAliases[source] = target
|
||||
} else {
|
||||
alias.push({
|
||||
find: source,
|
||||
replacement: target,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const define = {
|
||||
__dirname: '"/"',
|
||||
'module.hot': 'undefined',
|
||||
'process.argv': '[]',
|
||||
'process.cwd': 'function () { return "/" }',
|
||||
'process?.cwd': 'function () { return "/" }',
|
||||
}
|
||||
|
||||
Object.entries(process.env).forEach(([key, val]) => {
|
||||
if (key.indexOf('PAYLOAD_PUBLIC_') === 0) {
|
||||
define[`process.env.${key}`] = `'${val}'`
|
||||
} else {
|
||||
define[`process.env.${key}`] = `''`
|
||||
}
|
||||
})
|
||||
|
||||
let viteConfig: InlineConfig = {
|
||||
base: payloadConfig.routes.admin,
|
||||
build: {
|
||||
chunkSizeWarningLimit: 4000,
|
||||
emptyOutDir: true,
|
||||
outDir: payloadConfig.admin.buildPath,
|
||||
rollupOptions: {
|
||||
plugins: [image()],
|
||||
treeshake: true,
|
||||
},
|
||||
},
|
||||
customLogger: logger,
|
||||
define,
|
||||
optimizeDeps: {
|
||||
exclude: [
|
||||
// Dependencies that need aliases should be excluded
|
||||
// from pre-bundling
|
||||
'@payloadcms/bundler-vite',
|
||||
'@payloadcms/db-mongodb',
|
||||
'@payloadcms/db-postgres',
|
||||
...(Object.keys(absoluteAliases) || []),
|
||||
],
|
||||
include: ['payload/components/root', 'react-dom/client'],
|
||||
},
|
||||
plugins: [
|
||||
{
|
||||
name: 'absolute-aliases',
|
||||
enforce: 'pre',
|
||||
resolveId(source, importer) {
|
||||
let fullSourcePath: string
|
||||
|
||||
// TODO: need to handle this better. This is overly simple.
|
||||
if (source.startsWith('.')) {
|
||||
fullSourcePath = path.resolve(path.dirname(importer), source)
|
||||
|
||||
if (fullSourcePath) {
|
||||
const exactMatch = absoluteAliases[fullSourcePath]
|
||||
if (exactMatch) return exactMatch
|
||||
|
||||
const indexMatch = absoluteAliases[`${fullSourcePath}/index`]
|
||||
if (indexMatch) return indexMatch
|
||||
|
||||
const withoutFileExtensionMatch =
|
||||
absoluteAliases[`${fullSourcePath.replace(/\.[^/.]+$/, '')}`]
|
||||
if (withoutFileExtensionMatch) return withoutFileExtensionMatch
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
},
|
||||
},
|
||||
virtual({
|
||||
crypto: 'export default {}',
|
||||
http: 'export default {}',
|
||||
https: 'export default {}',
|
||||
}),
|
||||
react(),
|
||||
],
|
||||
resolve: {
|
||||
alias,
|
||||
},
|
||||
root: path.resolve(__dirname, './'),
|
||||
server: {
|
||||
fs: {
|
||||
allow: [searchForWorkspaceRoot(process.cwd()), path.resolve(__dirname, '../../../payload')],
|
||||
},
|
||||
hmr: {
|
||||
port: hmrPort,
|
||||
},
|
||||
middlewareMode: true,
|
||||
},
|
||||
}
|
||||
|
||||
if (payloadConfig.admin.vite && typeof payloadConfig.admin.vite === 'function') {
|
||||
viteConfig = payloadConfig.admin.vite(viteConfig)
|
||||
}
|
||||
|
||||
return viteConfig
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
import { Root } from 'payload/components/root'
|
||||
// @ts-expect-error
|
||||
import config from 'payload-config'
|
||||
import React from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
|
||||
const container = document.getElementById('app')
|
||||
const root = createRoot(container)
|
||||
root.render(<Root config={config} />)
|
||||
@@ -1,14 +0,0 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
|
||||
<link rel="icon" href="data:," data-placeholder-favicon />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<div id="portal"></div>
|
||||
<script type="module" src="./entry.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,14 +0,0 @@
|
||||
// @ts-expect-error
|
||||
import type { InlineConfig } from 'vite'
|
||||
|
||||
import type { PayloadBundler } from './types'
|
||||
|
||||
import { buildAdmin } from './scripts/build'
|
||||
import { devAdmin } from './scripts/dev'
|
||||
import { serveAdmin } from './scripts/serve'
|
||||
|
||||
export const viteBundler: (viteConfig?: InlineConfig) => PayloadBundler = (viteConfig) => ({
|
||||
build: async (payloadConfig) => buildAdmin({ payloadConfig, viteConfig }),
|
||||
dev: async (payload) => devAdmin({ payload, viteConfig }),
|
||||
serve: async (payload) => serveAdmin({ payload }),
|
||||
})
|
||||
@@ -1,3 +0,0 @@
|
||||
export default {
|
||||
config: () => null,
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
export default () => {}
|
||||
@@ -1 +0,0 @@
|
||||
export default 'file-stub'
|
||||
@@ -1,21 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
// @ts-expect-error
|
||||
import type { InlineConfig } from 'vite'
|
||||
|
||||
import { getViteConfig } from '../config'
|
||||
|
||||
type BuildAdminType = (options: {
|
||||
payloadConfig: SanitizedConfig
|
||||
viteConfig: InlineConfig
|
||||
}) => Promise<void>
|
||||
export const buildAdmin: BuildAdminType = async ({ payloadConfig, viteConfig: viteConfigArg }) => {
|
||||
const vite = await import('vite')
|
||||
const viteConfig = await getViteConfig(payloadConfig)
|
||||
|
||||
try {
|
||||
await vite.build(viteConfig)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
throw new Error('Error: there was an error building the vite prod config.')
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
import type { PayloadHandler } from 'payload/config'
|
||||
// @ts-expect-error
|
||||
import type { InlineConfig } from 'vite'
|
||||
|
||||
import express from 'express'
|
||||
|
||||
import type { Payload } from '../../../payload'
|
||||
|
||||
import { getViteConfig } from '../config'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
type DevAdminType = (options: {
|
||||
payload: Payload
|
||||
viteConfig: InlineConfig
|
||||
}) => Promise<PayloadHandler>
|
||||
export const devAdmin: DevAdminType = async ({ payload, viteConfig: viteConfigArg }) => {
|
||||
const vite = await import('vite')
|
||||
|
||||
try {
|
||||
const viteConfig = await getViteConfig(payload.config)
|
||||
const viteServer = await vite.createServer(viteConfig)
|
||||
|
||||
router.use(viteServer.middlewares)
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
throw new Error('Error: there was an error creating the vite dev server.')
|
||||
}
|
||||
|
||||
return router
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
import type { Payload } from 'payload'
|
||||
import type { PayloadHandler } from 'payload/config'
|
||||
|
||||
import compression from 'compression'
|
||||
import history from 'connect-history-api-fallback'
|
||||
import express from 'express'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
type ServeAdminType = (options: { payload: Payload }) => Promise<PayloadHandler>
|
||||
|
||||
export const serveAdmin: ServeAdminType = async ({ payload }) => {
|
||||
router.use(history())
|
||||
|
||||
router.get('*', (req, res, next) => {
|
||||
if (req.path.substr(-1) === '/' && req.path.length > 1) {
|
||||
const query = req.url.slice(req.path.length)
|
||||
res.redirect(301, req.path.slice(0, -1) + query)
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
router.use(compression(payload.config.express.compression))
|
||||
router.use(express.static(payload.config.admin.buildPath, { redirect: false }))
|
||||
|
||||
return router
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import type { Payload } from 'payload'
|
||||
import type { PayloadHandler, SanitizedConfig } from 'payload/config'
|
||||
|
||||
export interface PayloadBundler {
|
||||
build: (payloadConfig: SanitizedConfig) => Promise<void> // used in `payload build`
|
||||
dev: (payload: Payload) => Promise<PayloadHandler> // this would be a typical Express middleware handler
|
||||
serve: (payload: Payload) => Promise<PayloadHandler> // serve built files in production
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
.tmp
|
||||
**/.git
|
||||
**/.hg
|
||||
**/.pnp.*
|
||||
**/.svn
|
||||
**/.yarn/**
|
||||
**/build
|
||||
**/dist/**
|
||||
**/node_modules
|
||||
**/temp
|
||||
@@ -1,28 +0,0 @@
|
||||
# Payload Webpack Adapter
|
||||
|
||||
Official Webpack adapter for [Payload](https://payloadcms.com).
|
||||
|
||||
- [Main Repository](https://github.com/payloadcms/payload)
|
||||
- [Payload Docs](https://payloadcms.com/docs)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @payloadcms/bundler-webpack
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```ts
|
||||
import { buildConfig } from 'payload/config'
|
||||
import { webpackBundler } from '@payloadcms/bundler-webpack'
|
||||
|
||||
export default buildConfig({
|
||||
bundler: webpackBundler()
|
||||
// ...rest of config
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
More detailed usage can be found in the [Payload Docs](https://payloadcms.com/docs/configuration/overview).
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
{
|
||||
"name": "@payloadcms/bundler-webpack",
|
||||
"version": "1.0.6",
|
||||
"description": "The officially supported Webpack bundler adapter for Payload",
|
||||
"repository": "https://github.com/payloadcms/payload",
|
||||
"license": "MIT",
|
||||
"homepage": "https://payloadcms.com",
|
||||
"author": {
|
||||
"email": "info@payloadcms.com",
|
||||
"name": "Payload",
|
||||
"url": "https://payloadcms.com"
|
||||
},
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "pnpm build:swc && pnpm build:types",
|
||||
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
||||
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
||||
"clean": "rimraf {dist,*.tsbuildinfo}",
|
||||
"prepublishOnly": "pnpm clean && pnpm build"
|
||||
},
|
||||
"dependencies": {
|
||||
"compression": "1.7.4",
|
||||
"connect-history-api-fallback": "1.6.0",
|
||||
"css-loader": "5.2.7",
|
||||
"css-minimizer-webpack-plugin": "^5.0.0",
|
||||
"file-loader": "6.2.0",
|
||||
"find-node-modules": "^2.1.3",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"md5": "2.3.0",
|
||||
"mini-css-extract-plugin": "1.6.2",
|
||||
"path-browserify": "1.0.1",
|
||||
"postcss": "8.4.31",
|
||||
"postcss-loader": "6.2.1",
|
||||
"postcss-preset-env": "9.0.0",
|
||||
"process": "0.11.10",
|
||||
"sass-loader": "12.6.0",
|
||||
"style-loader": "^2.0.0",
|
||||
"swc-loader": "^0.2.3",
|
||||
"swc-minify-webpack-plugin": "^2.1.0",
|
||||
"terser-webpack-plugin": "^5.3.6",
|
||||
"url-loader": "4.1.1",
|
||||
"webpack": "^5.78.0",
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-middleware": "6.0.1",
|
||||
"webpack-hot-middleware": "^2.25.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@payloadcms/eslint-config": "workspace:*",
|
||||
"@types/extract-text-webpack-plugin": "^3.0.7",
|
||||
"@types/find-node-modules": "^2.1.0",
|
||||
"@types/html-webpack-plugin": "^3.2.6",
|
||||
"@types/mini-css-extract-plugin": "^1.4.3",
|
||||
"@types/optimize-css-assets-webpack-plugin": "^5.0.5",
|
||||
"@types/webpack-bundle-analyzer": "^4.6.0",
|
||||
"@types/webpack-env": "^1.18.0",
|
||||
"@types/webpack-hot-middleware": "2.25.6",
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"payload": "^2.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"main": "./dist/index.js",
|
||||
"registry": "https://registry.npmjs.org/",
|
||||
"types": "./dist/index.d.ts"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
]
|
||||
}
|
||||
@@ -1,105 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
import type { Configuration } from 'webpack'
|
||||
|
||||
import findNodeModules from 'find-node-modules'
|
||||
import fs from 'fs'
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin'
|
||||
import path from 'path'
|
||||
import webpack from 'webpack'
|
||||
|
||||
const mockModulePath = path.resolve(__dirname, '../mocks/emptyModule.js')
|
||||
const mockDotENVPath = path.resolve(__dirname, '../mocks/dotENV.js')
|
||||
const mockDBAdapterPath = path.resolve(__dirname, '../mocks/db-adapters.js')
|
||||
|
||||
const nodeModulesPaths = findNodeModules({ cwd: process.cwd(), relative: false })
|
||||
|
||||
export const getBaseConfig = (payloadConfig: SanitizedConfig): Configuration => {
|
||||
let nodeModulesPath = nodeModulesPaths.find((p) => {
|
||||
const guess = path.resolve(p, 'payload/dist/admin')
|
||||
if (fs.existsSync(guess)) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
if (!nodeModulesPath) {
|
||||
nodeModulesPath = process.cwd()
|
||||
}
|
||||
|
||||
const adminFolderPath = path.resolve(nodeModulesPath, 'payload/dist/admin')
|
||||
|
||||
const config: Configuration = {
|
||||
entry: {
|
||||
main: [adminFolderPath],
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
exclude: /\/node_modules\/(?!.+\.tsx?$).*$/,
|
||||
test: /\.(t|j)sx?$/,
|
||||
use: [
|
||||
{
|
||||
loader: require.resolve('swc-loader'),
|
||||
options: {
|
||||
jsc: {
|
||||
parser: {
|
||||
syntax: 'typescript',
|
||||
tsx: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
oneOf: [
|
||||
{
|
||||
test: /\.(?:ico|gif|png|jpg|jpeg|woff(2)?|eot|ttf|otf|svg)$/i,
|
||||
type: 'asset/resource',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
new webpack.ProvidePlugin({ process: require.resolve('process/browser') }),
|
||||
new webpack.DefinePlugin(
|
||||
Object.entries(process.env).reduce((values, [key, val]) => {
|
||||
if (key.indexOf('PAYLOAD_PUBLIC_') === 0) {
|
||||
return {
|
||||
...values,
|
||||
[`process.env.${key}`]: `'${val}'`,
|
||||
}
|
||||
}
|
||||
|
||||
return values
|
||||
}, {}),
|
||||
),
|
||||
new HtmlWebpackPlugin({
|
||||
filename: path.normalize('./index.html'),
|
||||
template: payloadConfig.admin.indexHTML,
|
||||
}),
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@payloadcms/bundler-webpack': mockModulePath,
|
||||
'@payloadcms/db-mongodb': mockDBAdapterPath,
|
||||
'@payloadcms/db-postgres': mockDBAdapterPath,
|
||||
dotenv: mockDotENVPath,
|
||||
path: require.resolve('path-browserify'),
|
||||
payload$: mockModulePath,
|
||||
'payload-config': payloadConfig.paths.rawConfig,
|
||||
'payload-user-css': payloadConfig.admin.css,
|
||||
},
|
||||
extensions: ['.ts', '.tsx', '.js', '.json'],
|
||||
fallback: {
|
||||
crypto: false,
|
||||
http: false,
|
||||
https: false,
|
||||
},
|
||||
modules: ['node_modules', nodeModulesPath, path.resolve(__dirname, '../../node_modules')],
|
||||
},
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
import type { Configuration } from 'webpack'
|
||||
|
||||
import md5 from 'md5'
|
||||
import webpack from 'webpack'
|
||||
|
||||
import { getBaseConfig } from './base'
|
||||
|
||||
export const getDevConfig = (payloadConfig: SanitizedConfig): Configuration => {
|
||||
const baseConfig = getBaseConfig(payloadConfig) as any
|
||||
|
||||
let webpackConfig: Configuration = {
|
||||
...baseConfig,
|
||||
cache: {
|
||||
type: 'filesystem',
|
||||
// version cache when there are changes to aliases
|
||||
buildDependencies: {
|
||||
config: [__filename],
|
||||
},
|
||||
version: md5(Object.entries(baseConfig.resolve.alias).join()),
|
||||
},
|
||||
devtool: 'inline-source-map',
|
||||
entry: {
|
||||
...baseConfig.entry,
|
||||
main: [
|
||||
`${require.resolve('webpack-hot-middleware/client')}?path=${
|
||||
payloadConfig.routes.admin
|
||||
}/__webpack_hmr`,
|
||||
...(baseConfig.entry.main as string[]),
|
||||
],
|
||||
},
|
||||
mode: 'development',
|
||||
module: {
|
||||
...baseConfig.module,
|
||||
rules: [
|
||||
...baseConfig.module.rules,
|
||||
{
|
||||
sideEffects: true,
|
||||
test: /\.(scss|css)$/,
|
||||
/*
|
||||
* The loaders here are run in reverse order. Here is how your loaders are being processed:
|
||||
* 1. sass-loader: This loader compiles your SCSS into CSS.
|
||||
* 2. postcss-loader: This loader applies postcss transformations (with preset-env plugin in your case).
|
||||
* 3. css-loader: This loader interprets @import and url() like import/require() and will resolve them.
|
||||
* 4. style-loader: This loader injects CSS into the DOM.
|
||||
*/
|
||||
use: [
|
||||
require.resolve('style-loader'),
|
||||
{
|
||||
loader: require.resolve('css-loader'),
|
||||
options: {
|
||||
url: (url) => !url.startsWith('/'),
|
||||
},
|
||||
},
|
||||
{
|
||||
loader: require.resolve('postcss-loader'),
|
||||
options: {
|
||||
postcssOptions: {
|
||||
plugins: [require.resolve('postcss-preset-env')],
|
||||
},
|
||||
},
|
||||
},
|
||||
require.resolve('sass-loader'),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: '/',
|
||||
publicPath: `${payloadConfig.routes.admin}/`,
|
||||
},
|
||||
plugins: [...baseConfig.plugins, new webpack.HotModuleReplacementPlugin()],
|
||||
stats: 'errors-warnings',
|
||||
}
|
||||
|
||||
if (payloadConfig.admin.webpack && typeof payloadConfig.admin.webpack === 'function') {
|
||||
webpackConfig = payloadConfig.admin.webpack(webpackConfig)
|
||||
}
|
||||
|
||||
return webpackConfig
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
import type { Configuration } from 'webpack'
|
||||
|
||||
import MiniCSSExtractPlugin from 'mini-css-extract-plugin'
|
||||
import { SwcMinifyWebpackPlugin } from 'swc-minify-webpack-plugin'
|
||||
import { WebpackPluginInstance } from 'webpack'
|
||||
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
|
||||
|
||||
import { getBaseConfig } from './base'
|
||||
|
||||
export const getProdConfig = (payloadConfig: SanitizedConfig): Configuration => {
|
||||
const baseConfig = getBaseConfig(payloadConfig) as any
|
||||
|
||||
let webpackConfig: Configuration = {
|
||||
...baseConfig,
|
||||
mode: 'production',
|
||||
module: {
|
||||
...baseConfig.module,
|
||||
rules: [
|
||||
...baseConfig.module.rules,
|
||||
{
|
||||
sideEffects: true,
|
||||
test: /\.(scss|css)$/,
|
||||
use: [
|
||||
MiniCSSExtractPlugin.loader,
|
||||
{
|
||||
loader: require.resolve('css-loader'),
|
||||
options: {
|
||||
url: (url) => !url.startsWith('/'),
|
||||
},
|
||||
},
|
||||
{
|
||||
loader: require.resolve('postcss-loader'),
|
||||
options: {
|
||||
postcssOptions: {
|
||||
plugins: [require.resolve('postcss-preset-env')],
|
||||
},
|
||||
},
|
||||
},
|
||||
require.resolve('sass-loader'),
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
optimization: {
|
||||
minimizer: [new SwcMinifyWebpackPlugin()],
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
styles: {
|
||||
name: 'styles',
|
||||
chunks: 'all',
|
||||
enforce: true,
|
||||
test: /\.(sa|sc|c)ss$/,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
output: {
|
||||
chunkFilename: '[name].[chunkhash].js',
|
||||
filename: '[name].[chunkhash].js',
|
||||
path: payloadConfig.admin.buildPath,
|
||||
publicPath: `${payloadConfig.routes.admin}/`,
|
||||
},
|
||||
plugins: [
|
||||
...baseConfig.plugins,
|
||||
new MiniCSSExtractPlugin({
|
||||
filename: '[name].[contenthash].css',
|
||||
ignoreOrder: true,
|
||||
}),
|
||||
...(process.env.PAYLOAD_ANALYZE_BUNDLE ? [new BundleAnalyzerPlugin()] : []),
|
||||
],
|
||||
stats: 'errors-only',
|
||||
}
|
||||
|
||||
if (payloadConfig.admin.webpack && typeof payloadConfig.admin.webpack === 'function') {
|
||||
webpackConfig = payloadConfig.admin.webpack(webpackConfig)
|
||||
}
|
||||
|
||||
return webpackConfig
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||
import type { PayloadBundler } from '../../payload/dist/bundlers/types'
|
||||
|
||||
import { buildAdmin } from './scripts/build'
|
||||
import { devAdmin } from './scripts/dev'
|
||||
import { serveAdmin } from './scripts/serve'
|
||||
|
||||
export const webpackBundler: () => PayloadBundler = () => ({
|
||||
build: async (payloadConfig) => buildAdmin({ payloadConfig }),
|
||||
dev: async (payload) => devAdmin({ payload }),
|
||||
serve: async (payload) => serveAdmin({ payload }),
|
||||
})
|
||||
@@ -1,2 +0,0 @@
|
||||
export const mongooseAdapter = () => ({})
|
||||
export const postgresAdapter = () => ({})
|
||||
@@ -1,3 +0,0 @@
|
||||
export default {
|
||||
config: () => null,
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
export const webpackBundler = () => {}
|
||||
|
||||
export default () => {}
|
||||
@@ -1 +0,0 @@
|
||||
export default 'file-stub'
|
||||
@@ -1,31 +0,0 @@
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
|
||||
import webpack from 'webpack'
|
||||
|
||||
import { getProdConfig } from '../configs/prod'
|
||||
|
||||
type BuildAdminType = (options: { payloadConfig: SanitizedConfig }) => Promise<void>
|
||||
export const buildAdmin: BuildAdminType = async ({ payloadConfig }) => {
|
||||
try {
|
||||
const webpackConfig = getProdConfig(payloadConfig)
|
||||
webpack(webpackConfig, (err, stats) => {
|
||||
if (err || stats.hasErrors()) {
|
||||
// Handle errors here
|
||||
|
||||
if (stats) {
|
||||
console.error(
|
||||
stats.toString({
|
||||
chunks: false,
|
||||
colors: true,
|
||||
}),
|
||||
)
|
||||
} else {
|
||||
console.error(err.message)
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
throw new Error('Error: there was an error building the webpack prod config.')
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
import type { Payload } from 'payload'
|
||||
import type { PayloadHandler } from 'payload/config'
|
||||
|
||||
import history from 'connect-history-api-fallback'
|
||||
import express from 'express'
|
||||
import webpack from 'webpack'
|
||||
import webpackDevMiddleware from 'webpack-dev-middleware'
|
||||
import webpackHotMiddleware from 'webpack-hot-middleware'
|
||||
|
||||
import { getDevConfig } from '../configs/dev'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
type DevAdminType = (options: { payload: Payload }) => Promise<PayloadHandler>
|
||||
export const devAdmin: DevAdminType = async ({ payload }) => {
|
||||
router.use(history())
|
||||
|
||||
try {
|
||||
const webpackConfig = getDevConfig(payload.config)
|
||||
const compiler = webpack(webpackConfig)
|
||||
|
||||
router.use(
|
||||
webpackDevMiddleware(compiler, {
|
||||
publicPath: '/',
|
||||
}),
|
||||
)
|
||||
|
||||
router.use(webpackHotMiddleware(compiler))
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
throw new Error('Error: there was an error creating the webpack dev server.')
|
||||
}
|
||||
|
||||
return router
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import type { Payload } from 'payload'
|
||||
import type { PayloadHandler } from 'payload/config'
|
||||
|
||||
import compression from 'compression'
|
||||
import history from 'connect-history-api-fallback'
|
||||
import express from 'express'
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
type ServeAdminType = (options: { payload: Payload }) => Promise<PayloadHandler>
|
||||
|
||||
export const serveAdmin: ServeAdminType = async ({ payload }) => {
|
||||
router.use(history())
|
||||
|
||||
router.get('*', (req, res, next) => {
|
||||
if (req.path.substr(-1) === '/' && req.path.length > 1) {
|
||||
const query = req.url.slice(req.path.length)
|
||||
res.redirect(301, req.path.slice(0, -1) + query)
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
router.use(compression(payload.config.express.compression))
|
||||
router.use(
|
||||
express.static(payload.config.admin.buildPath, {
|
||||
redirect: false,
|
||||
setHeaders: (res, path) => {
|
||||
const staticFilesRegex = new RegExp(
|
||||
'.(svg|css|js|jp(e)?g|png|avif|webp|webm|gif|ico|woff|woff2|ttf|otf)$',
|
||||
'i',
|
||||
)
|
||||
if (path.match(staticFilesRegex)) {
|
||||
res.set('Cache-Control', `public, max-age=${60 * 60 * 24 * 365}, immutable`)
|
||||
}
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
return router
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"composite": true, // Make sure typescript knows that this module depends on their references
|
||||
"noEmit": false /* Do not emit outputs. */,
|
||||
"emitDeclarationOnly": true,
|
||||
"outDir": "./dist" /* Specify an output folder for all emitted files. */,
|
||||
"rootDir": "./src" /* Specify the root folder within your source files. */
|
||||
},
|
||||
"exclude": ["dist", "node_modules", ".eslintrc.js"],
|
||||
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"],
|
||||
"references": [{ "path": "../payload" }]
|
||||
}
|
||||
@@ -6,7 +6,8 @@
|
||||
"create-payload-app": "bin/cli.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "pnpm build:swc",
|
||||
"build": "pnpm copyfiles && pnpm build:swc",
|
||||
"copyfiles": "copyfiles -u 4 \"../next/src/app/(payload)/**\" \"dist/app\"",
|
||||
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
||||
"clean": "rimraf {dist,*.tsbuildinfo}",
|
||||
"test": "jest",
|
||||
@@ -26,6 +27,7 @@
|
||||
"execa": "^5.0.0",
|
||||
"figures": "^3.2.0",
|
||||
"fs-extra": "^9.0.1",
|
||||
"globby": "11.1.0",
|
||||
"handlebars": "^4.7.7",
|
||||
"ora": "^5.1.0",
|
||||
"prompts": "^2.4.2",
|
||||
|
||||
69
packages/create-payload-app/src/lib/init-next.ts
Normal file
69
packages/create-payload-app/src/lib/init-next.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import fs from 'fs'
|
||||
import globby from 'globby'
|
||||
import path from 'path'
|
||||
|
||||
import type { CliArgs } from '../types'
|
||||
|
||||
import { copyRecursiveSync } from '../utils/copy-recursive-sync'
|
||||
import { error, info, debug as origDebug, success } from '../utils/log'
|
||||
|
||||
export async function initNext(
|
||||
args: Pick<CliArgs, '--debug'> & { nextDir?: string; useDistFiles?: boolean },
|
||||
): Promise<{ success: boolean }> {
|
||||
const { '--debug': debug, nextDir, useDistFiles } = args
|
||||
|
||||
info('Initializing Payload app in Next.js project', 1)
|
||||
|
||||
const logDebug = (message: string) => {
|
||||
if (debug) origDebug(message)
|
||||
}
|
||||
|
||||
let projectDir = process.cwd()
|
||||
if (nextDir) {
|
||||
projectDir = path.resolve(projectDir, nextDir)
|
||||
if (debug) logDebug(`Overriding project directory to ${projectDir}`)
|
||||
}
|
||||
|
||||
if (!fs.existsSync(projectDir)) {
|
||||
error(`Could not find specified project directory at ${projectDir}`)
|
||||
return { success: false }
|
||||
}
|
||||
|
||||
const foundConfig = (await globby('next.config.*js', { cwd: projectDir }))?.[0]
|
||||
const nextConfigPath = path.resolve(projectDir, foundConfig)
|
||||
if (!fs.existsSync(nextConfigPath)) {
|
||||
error(
|
||||
`No next.config.js found at ${nextConfigPath}. Ensure you are in a Next.js project directory.`,
|
||||
)
|
||||
return { success: false }
|
||||
} else {
|
||||
if (debug) logDebug(`Found Next config at ${nextConfigPath}`)
|
||||
}
|
||||
|
||||
const templateFilesPath =
|
||||
__dirname.endsWith('dist') || useDistFiles
|
||||
? path.resolve(__dirname, '../..', 'dist/app')
|
||||
: path.resolve(__dirname, '../../../next/src/app')
|
||||
|
||||
if (debug) logDebug(`Using template files from: ${templateFilesPath}`)
|
||||
|
||||
if (!fs.existsSync(templateFilesPath)) {
|
||||
error(`Could not find template source files from ${templateFilesPath}`)
|
||||
return { success: false }
|
||||
} else {
|
||||
if (debug) logDebug('Found template source files')
|
||||
}
|
||||
|
||||
const userAppDir = path.resolve(projectDir, 'src/app')
|
||||
if (!fs.existsSync(userAppDir)) {
|
||||
error(`Could not find user app directory at ${userAppDir}`)
|
||||
return { success: false }
|
||||
} else {
|
||||
logDebug(`Found user app directory: ${userAppDir}`)
|
||||
}
|
||||
|
||||
logDebug(`Copying template files from ${templateFilesPath} to ${userAppDir}`)
|
||||
copyRecursiveSync(templateFilesPath, userAppDir, debug)
|
||||
success('Successfully initialized.')
|
||||
return { success: true }
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import type { CliArgs, PackageManager } from './types'
|
||||
|
||||
import { createProject } from './lib/create-project'
|
||||
import { generateSecret } from './lib/generate-secret'
|
||||
import { initNext } from './lib/init-next'
|
||||
import { parseProjectName } from './lib/parse-project-name'
|
||||
import { parseTemplate } from './lib/parse-template'
|
||||
import { selectDb } from './lib/select-db'
|
||||
@@ -27,6 +28,9 @@ export class Main {
|
||||
'--secret': String,
|
||||
'--template': String,
|
||||
|
||||
// Next.js
|
||||
'--init-next': Boolean,
|
||||
|
||||
// Package manager
|
||||
'--no-deps': Boolean,
|
||||
'--use-npm': Boolean,
|
||||
@@ -35,6 +39,7 @@ export class Main {
|
||||
|
||||
// Flags
|
||||
'--beta': Boolean,
|
||||
'--debug': Boolean,
|
||||
'--dry-run': Boolean,
|
||||
|
||||
// Aliases
|
||||
@@ -53,6 +58,12 @@ export class Main {
|
||||
console.log(helpMessage())
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
if (this.args['--init-next']) {
|
||||
const result = await initNext(this.args)
|
||||
process.exit(result.success ? 0 : 1)
|
||||
}
|
||||
|
||||
const templateArg = this.args['--template']
|
||||
if (templateArg) {
|
||||
const valid = validateTemplate(templateArg)
|
||||
|
||||
@@ -3,8 +3,10 @@ import type arg from 'arg'
|
||||
export interface Args extends arg.Spec {
|
||||
'--beta': BooleanConstructor
|
||||
'--db': StringConstructor
|
||||
'--debug': BooleanConstructor
|
||||
'--dry-run': BooleanConstructor
|
||||
'--help': BooleanConstructor
|
||||
'--init-next': BooleanConstructor
|
||||
'--name': StringConstructor
|
||||
'--no-deps': BooleanConstructor
|
||||
'--secret': StringConstructor
|
||||
@@ -12,6 +14,9 @@ export interface Args extends arg.Spec {
|
||||
'--use-npm': BooleanConstructor
|
||||
'--use-pnpm': BooleanConstructor
|
||||
'--use-yarn': BooleanConstructor
|
||||
|
||||
// Aliases
|
||||
|
||||
'-h': string
|
||||
'-n': string
|
||||
'-t': string
|
||||
|
||||
19
packages/create-payload-app/src/utils/copy-recursive-sync.ts
Normal file
19
packages/create-payload-app/src/utils/copy-recursive-sync.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
/**
|
||||
* Recursively copy files from src to dest
|
||||
*/
|
||||
export function copyRecursiveSync(src: string, dest: string, debug?: boolean) {
|
||||
const exists = fs.existsSync(src)
|
||||
const stats = exists && fs.statSync(src)
|
||||
const isDirectory = exists && stats.isDirectory()
|
||||
if (isDirectory) {
|
||||
fs.mkdirSync(dest, { recursive: true })
|
||||
fs.readdirSync(src).forEach((childItemName) => {
|
||||
copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName))
|
||||
})
|
||||
} else {
|
||||
fs.copyFileSync(src, dest)
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,18 @@ export const warning = (message: string): void => {
|
||||
console.log(chalk.yellow('? ') + chalk.bold(message))
|
||||
}
|
||||
|
||||
export const info = (message: string): void => {
|
||||
console.log(`${chalk.yellow(figures.info)} ${chalk.bold(message)}`)
|
||||
export const info = (message: string, paddingTop?: number): void => {
|
||||
console.log(
|
||||
`${'\n'.repeat(paddingTop || 0)}${chalk.green(figures.pointerSmall)} ${chalk.bold(message)}`,
|
||||
)
|
||||
}
|
||||
|
||||
export const error = (message: string): void => {
|
||||
console.log(`${chalk.red(figures.cross)} ${chalk.bold(message)}`)
|
||||
}
|
||||
|
||||
export const debug = (message: string): void => {
|
||||
console.log(
|
||||
`${chalk.gray(figures.pointerSmall)} ${chalk.bgGray('[DEBUG]')} ${chalk.gray(message)}`,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@payloadcms/db-mongodb",
|
||||
"version": "1.4.2",
|
||||
"description": "The officially supported MongoDB database adapter for Payload",
|
||||
"version": "3.0.0-alpha.10",
|
||||
"description": "The officially supported MongoDB database adapter for Payload - Update 2",
|
||||
"repository": "https://github.com/payloadcms/payload",
|
||||
"license": "MIT",
|
||||
"homepage": "https://payloadcms.com",
|
||||
@@ -17,17 +17,17 @@
|
||||
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
||||
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
||||
"clean": "rimraf {dist,*.tsbuildinfo}",
|
||||
"prepublishOnly": "pnpm clean && pnpm build"
|
||||
"prepublishOnly": "pnpm clean && pnpm turbo build"
|
||||
},
|
||||
"dependencies": {
|
||||
"bson-objectid": "2.0.4",
|
||||
"deepmerge": "4.3.1",
|
||||
"get-port": "5.1.1",
|
||||
"http-status": "1.6.2",
|
||||
"mongoose": "6.12.3",
|
||||
"mongoose-aggregate-paginate-v2": "1.0.6",
|
||||
"mongoose-paginate-v2": "1.7.22",
|
||||
"prompts": "2.4.2",
|
||||
"http-status": "1.6.2",
|
||||
"uuid": "9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -38,7 +38,7 @@
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"payload": "^2.0.0"
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"publishConfig": {
|
||||
"main": "./dist/index.js",
|
||||
|
||||
@@ -6,17 +6,17 @@ import mongoose from 'mongoose'
|
||||
|
||||
import type { MongooseAdapter } from '.'
|
||||
|
||||
export const connect: Connect = async function connect(this: MongooseAdapter, payload) {
|
||||
export const connect: Connect = async function connect(this: MongooseAdapter) {
|
||||
if (this.url === false) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!payload.local && typeof this.url !== 'string') {
|
||||
if (typeof this.url !== 'string') {
|
||||
throw new Error('Error: missing MongoDB connection URL.')
|
||||
}
|
||||
|
||||
let urlToConnect = this.url
|
||||
let successfulConnectionMessage = 'Connected to MongoDB server successfully!'
|
||||
const urlToConnect = this.url
|
||||
const successfulConnectionMessage = 'Connected to MongoDB server successfully!'
|
||||
|
||||
const connectionOptions: ConnectOptions & { useFacet: undefined } = {
|
||||
autoIndex: true,
|
||||
@@ -24,30 +24,6 @@ export const connect: Connect = async function connect(this: MongooseAdapter, pa
|
||||
useFacet: undefined,
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === 'test') {
|
||||
if (process.env.PAYLOAD_TEST_MONGO_URL) {
|
||||
urlToConnect = process.env.PAYLOAD_TEST_MONGO_URL
|
||||
} else {
|
||||
connectionOptions.dbName = 'payloadmemory'
|
||||
const { MongoMemoryReplSet } = require('mongodb-memory-server')
|
||||
const getPort = require('get-port')
|
||||
|
||||
const port = await getPort()
|
||||
this.mongoMemoryServer = await MongoMemoryReplSet.create({
|
||||
instance: {
|
||||
dbName: 'payloadmemory',
|
||||
port,
|
||||
},
|
||||
replSet: {
|
||||
count: 3,
|
||||
},
|
||||
})
|
||||
|
||||
urlToConnect = this.mongoMemoryServer.getUri()
|
||||
successfulConnectionMessage = 'Connected to in-memory MongoDB server successfully!'
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
this.connection = (await mongoose.connect(urlToConnect, connectionOptions)).connection
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ export const createMigration: CreateMigration = async function createMigration({
|
||||
|
||||
// Check if predefined migration exists
|
||||
if (fs.existsSync(cleanPath)) {
|
||||
const { down, up } = require(cleanPath)
|
||||
const { down, up } = eval(`require(${cleanPath})`)
|
||||
migrationFileContent = migrationTemplate(up, down)
|
||||
} else {
|
||||
payload.logger.error({
|
||||
|
||||
@@ -37,6 +37,7 @@ import { updateOne } from './updateOne'
|
||||
import { updateVersion } from './updateVersion'
|
||||
|
||||
export type { MigrateDownArgs, MigrateUpArgs } from './types'
|
||||
import type { DatabaseAdapterObj } from 'payload/database'
|
||||
|
||||
export interface Args {
|
||||
/** Set to false to disable auto-pluralization of collection names, Defaults to true */
|
||||
@@ -68,8 +69,6 @@ export type MongooseAdapter = BaseDatabaseAdapter &
|
||||
}
|
||||
}
|
||||
|
||||
type MongooseAdapterResult = (args: { payload: Payload }) => MongooseAdapter
|
||||
|
||||
declare module 'payload' {
|
||||
export interface DatabaseAdapter
|
||||
extends Omit<BaseDatabaseAdapter, 'sessions'>,
|
||||
@@ -95,7 +94,7 @@ export function mongooseAdapter({
|
||||
migrationDir: migrationDirArg,
|
||||
transactionOptions = {},
|
||||
url,
|
||||
}: Args): MongooseAdapterResult {
|
||||
}: Args): DatabaseAdapterObj {
|
||||
function adapter({ payload }: { payload: Payload }) {
|
||||
const migrationDir = findMigrationDir(migrationDirArg)
|
||||
mongoose.set('strictQuery', false)
|
||||
@@ -148,7 +147,10 @@ export function mongooseAdapter({
|
||||
})
|
||||
}
|
||||
|
||||
return adapter
|
||||
return {
|
||||
defaultIDType: 'text',
|
||||
init: adapter,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,6 @@ import type { Init } from 'payload/database'
|
||||
import type { SanitizedCollectionConfig } from 'payload/types'
|
||||
|
||||
import mongoose from 'mongoose'
|
||||
import mongooseAggregatePaginate from 'mongoose-aggregate-paginate-v2'
|
||||
import paginate from 'mongoose-paginate-v2'
|
||||
import {
|
||||
buildVersionCollectionFields,
|
||||
@@ -45,10 +44,6 @@ export const init: Init = async function init(this: MongooseAdapter) {
|
||||
}),
|
||||
)
|
||||
|
||||
if (collection.versions?.drafts) {
|
||||
versionSchema.plugin(mongooseAggregatePaginate)
|
||||
}
|
||||
|
||||
const model = mongoose.model(
|
||||
versionModelName,
|
||||
versionSchema,
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
import prompts from 'prompts'
|
||||
|
||||
import type { MongooseAdapter } from '.'
|
||||
@@ -21,9 +23,9 @@ export async function migrateFresh(
|
||||
const { confirm: acceptWarning } = await prompts(
|
||||
{
|
||||
name: 'confirm',
|
||||
type: 'confirm',
|
||||
initial: false,
|
||||
message: `WARNING: This will drop your database and run all migrations. Are you sure you want to proceed?`,
|
||||
type: 'confirm',
|
||||
},
|
||||
{
|
||||
onCancel: () => {
|
||||
|
||||
@@ -14,8 +14,10 @@ import type {
|
||||
DateField,
|
||||
EmailField,
|
||||
Field,
|
||||
FieldAffectingData,
|
||||
GroupField,
|
||||
JSONField,
|
||||
NonPresentationalField,
|
||||
NumberField,
|
||||
PointField,
|
||||
RadioField,
|
||||
@@ -23,12 +25,12 @@ import type {
|
||||
RichTextField,
|
||||
RowField,
|
||||
SelectField,
|
||||
Tab,
|
||||
TabsField,
|
||||
TextField,
|
||||
TextareaField,
|
||||
UploadField,
|
||||
} from 'payload/types'
|
||||
import type { FieldAffectingData, NonPresentationalField, Tab, UnnamedTab } from 'payload/types'
|
||||
|
||||
import { Schema } from 'mongoose'
|
||||
import {
|
||||
@@ -61,7 +63,15 @@ const formatBaseSchema = (field: FieldAffectingData, buildSchemaOptions: BuildSc
|
||||
unique: (!disableUnique && field.unique) || false,
|
||||
}
|
||||
|
||||
if (schema.unique && (field.localized || draftsEnabled)) {
|
||||
if (
|
||||
schema.unique &&
|
||||
(field.localized ||
|
||||
draftsEnabled ||
|
||||
(fieldAffectsData(field) &&
|
||||
field.type !== 'group' &&
|
||||
field.type !== 'tab' &&
|
||||
field.required !== true))
|
||||
) {
|
||||
schema.sparse = true
|
||||
}
|
||||
|
||||
@@ -79,7 +89,6 @@ const localizeSchema = (
|
||||
) => {
|
||||
if (fieldIsLocalized(entity) && localization && Array.isArray(localization.locales)) {
|
||||
return {
|
||||
localized: true,
|
||||
type: localization.localeCodes.reduce(
|
||||
(localeSchema, locale) => ({
|
||||
...localeSchema,
|
||||
@@ -89,6 +98,7 @@ const localizeSchema = (
|
||||
_id: false,
|
||||
},
|
||||
),
|
||||
localized: true,
|
||||
}
|
||||
}
|
||||
return schema
|
||||
@@ -140,7 +150,6 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
) => {
|
||||
const baseSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
default: undefined,
|
||||
type: [
|
||||
buildSchema(config, field.fields, {
|
||||
allowIDField: true,
|
||||
@@ -153,6 +162,7 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
},
|
||||
}),
|
||||
],
|
||||
default: undefined,
|
||||
}
|
||||
|
||||
schema.add({
|
||||
@@ -166,8 +176,8 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
buildSchemaOptions: BuildSchemaOptions,
|
||||
): void => {
|
||||
const fieldSchema = {
|
||||
default: undefined,
|
||||
type: [new Schema({}, { _id: false, discriminatorKey: 'blockType' })],
|
||||
default: undefined,
|
||||
}
|
||||
|
||||
schema.add({
|
||||
@@ -187,12 +197,12 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
if (field.localized && config.localization) {
|
||||
config.localization.localeCodes.forEach((localeCode) => {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore Possible incorrect typing in mongoose types, this works
|
||||
// @ts-expect-error Possible incorrect typing in mongoose types, this works
|
||||
schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema)
|
||||
})
|
||||
} else {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore Possible incorrect typing in mongoose types, this works
|
||||
// @ts-expect-error Possible incorrect typing in mongoose types, this works
|
||||
schema.path(field.name).discriminator(blockItem.slug, blockSchema)
|
||||
}
|
||||
})
|
||||
@@ -325,14 +335,14 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
buildSchemaOptions: BuildSchemaOptions,
|
||||
): void => {
|
||||
const baseSchema: SchemaTypeOptions<unknown> = {
|
||||
type: {
|
||||
type: String,
|
||||
enum: ['Point'],
|
||||
},
|
||||
coordinates: {
|
||||
type: [Number],
|
||||
default: field.defaultValue || undefined,
|
||||
required: false,
|
||||
type: [Number],
|
||||
},
|
||||
type: {
|
||||
enum: ['Point'],
|
||||
type: String,
|
||||
},
|
||||
}
|
||||
if (buildSchemaOptions.disableUnique && field.unique && field.localized) {
|
||||
@@ -366,11 +376,11 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
): void => {
|
||||
const baseSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
type: String,
|
||||
enum: field.options.map((option) => {
|
||||
if (typeof option === 'object') return option.value
|
||||
return option
|
||||
}),
|
||||
type: String,
|
||||
}
|
||||
|
||||
schema.add({
|
||||
@@ -388,7 +398,6 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
|
||||
if (field.localized && config.localization) {
|
||||
schemaToReturn = {
|
||||
localized: true,
|
||||
type: config.localization.localeCodes.reduce((locales, locale) => {
|
||||
let localeSchema: { [key: string]: any } = {}
|
||||
|
||||
@@ -396,56 +405,57 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
localeSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
_id: false,
|
||||
relationTo: { enum: field.relationTo, type: String },
|
||||
type: Schema.Types.Mixed,
|
||||
relationTo: { type: String, enum: field.relationTo },
|
||||
value: {
|
||||
refPath: `${field.name}.${locale}.relationTo`,
|
||||
type: Schema.Types.Mixed,
|
||||
refPath: `${field.name}.${locale}.relationTo`,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
localeSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
ref: field.relationTo,
|
||||
type: Schema.Types.Mixed,
|
||||
ref: field.relationTo,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...locales,
|
||||
[locale]: field.hasMany ? { default: undefined, type: [localeSchema] } : localeSchema,
|
||||
[locale]: field.hasMany ? { type: [localeSchema], default: undefined } : localeSchema,
|
||||
}
|
||||
}, {}),
|
||||
localized: true,
|
||||
}
|
||||
} else if (hasManyRelations) {
|
||||
schemaToReturn = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
_id: false,
|
||||
relationTo: { enum: field.relationTo, type: String },
|
||||
type: Schema.Types.Mixed,
|
||||
relationTo: { type: String, enum: field.relationTo },
|
||||
value: {
|
||||
refPath: `${field.name}.relationTo`,
|
||||
type: Schema.Types.Mixed,
|
||||
refPath: `${field.name}.relationTo`,
|
||||
},
|
||||
}
|
||||
|
||||
if (field.hasMany) {
|
||||
schemaToReturn = {
|
||||
default: undefined,
|
||||
type: [schemaToReturn],
|
||||
default: undefined,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
schemaToReturn = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
ref: field.relationTo,
|
||||
type: Schema.Types.Mixed,
|
||||
ref: field.relationTo,
|
||||
}
|
||||
|
||||
if (field.hasMany) {
|
||||
schemaToReturn = {
|
||||
default: undefined,
|
||||
type: [schemaToReturn],
|
||||
default: undefined,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -488,11 +498,11 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
): void => {
|
||||
const baseSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
type: String,
|
||||
enum: field.options.map((option) => {
|
||||
if (typeof option === 'object') return option.value
|
||||
return option
|
||||
}),
|
||||
type: String,
|
||||
}
|
||||
|
||||
if (buildSchemaOptions.draftsEnabled || !field.required) {
|
||||
@@ -576,8 +586,8 @@ const fieldToSchemaMap: Record<string, FieldSchemaGenerator> = {
|
||||
): void => {
|
||||
const baseSchema = {
|
||||
...formatBaseSchema(field, buildSchemaOptions),
|
||||
ref: field.relationTo,
|
||||
type: Schema.Types.Mixed,
|
||||
ref: field.relationTo,
|
||||
}
|
||||
|
||||
schema.add({
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { PathToQuery } from 'payload/database'
|
||||
import type { Field } from 'payload/types'
|
||||
import type { Operator } from 'payload/types'
|
||||
|
||||
import objectID from 'bson-objectid'
|
||||
import ObjectId from 'bson-objectid'
|
||||
import mongoose from 'mongoose'
|
||||
import { getLocalizedPaths } from 'payload/database'
|
||||
import { fieldAffectsData } from 'payload/types'
|
||||
@@ -204,7 +204,7 @@ export async function buildSearchParam({
|
||||
|
||||
if (typeof formattedValue === 'string') {
|
||||
if (mongoose.Types.ObjectId.isValid(formattedValue)) {
|
||||
result.value.$or.push({ [path]: { [operatorKey]: objectID(formattedValue) } })
|
||||
result.value.$or.push({ [path]: { [operatorKey]: new ObjectId(formattedValue) } })
|
||||
} else {
|
||||
;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(
|
||||
(relationTo) => {
|
||||
|
||||
@@ -1,11 +1,4 @@
|
||||
import type {
|
||||
AggregatePaginateModel,
|
||||
IndexDefinition,
|
||||
IndexOptions,
|
||||
Model,
|
||||
PaginateModel,
|
||||
SchemaOptions,
|
||||
} from 'mongoose'
|
||||
import type { IndexDefinition, IndexOptions, Model, PaginateModel, SchemaOptions } from 'mongoose'
|
||||
import type { Payload } from 'payload'
|
||||
import type { SanitizedConfig } from 'payload/config'
|
||||
import type {
|
||||
@@ -34,20 +27,10 @@ import type {
|
||||
|
||||
import type { BuildQueryArgs } from './queries/buildQuery'
|
||||
|
||||
export interface CollectionModel
|
||||
extends Model<any>,
|
||||
PaginateModel<any>,
|
||||
AggregatePaginateModel<any>,
|
||||
PassportLocalModel {
|
||||
export interface CollectionModel extends Model<any>, PaginateModel<any> {
|
||||
/** buildQuery is used to transform payload's where operator into what can be used by mongoose (e.g. id => _id) */
|
||||
buildQuery: (args: BuildQueryArgs) => Promise<Record<string, unknown>> // TODO: Delete this
|
||||
}
|
||||
type Register<T = any> = (doc: T, password: string) => T
|
||||
|
||||
interface PassportLocalModel {
|
||||
authenticate: any
|
||||
register: Register
|
||||
}
|
||||
|
||||
export interface AuthCollectionModel extends CollectionModel {
|
||||
resetPasswordExpiration: Date
|
||||
|
||||
@@ -20,5 +20,5 @@
|
||||
"src/**/*.spec.tsx"
|
||||
],
|
||||
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"],
|
||||
"references": [{ "path": "../payload" }] // db-mongodb depends on payload
|
||||
"references": [{ "path": "../payload" }, { "path": "../translations" }]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@payloadcms/db-postgres",
|
||||
"version": "0.6.0",
|
||||
"version": "0.7.0",
|
||||
"description": "The officially supported Postgres database adapter for Payload",
|
||||
"repository": "https://github.com/payloadcms/payload",
|
||||
"license": "MIT",
|
||||
@@ -17,13 +17,13 @@
|
||||
"build:swc": "swc ./src -d ./dist --config-file .swcrc",
|
||||
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
||||
"clean": "rimraf {dist,*.tsbuildinfo}",
|
||||
"prepublishOnly": "pnpm clean && pnpm build"
|
||||
"prepublishOnly": "pnpm clean && pnpm turbo build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@libsql/client": "^0.3.1",
|
||||
"@libsql/client": "^0.5.2",
|
||||
"console-table-printer": "2.11.2",
|
||||
"drizzle-kit": "0.20.14-1f2c838",
|
||||
"drizzle-orm": "0.29.3",
|
||||
"drizzle-orm": "0.29.4",
|
||||
"pg": "8.11.3",
|
||||
"prompts": "2.4.2",
|
||||
"to-snake-case": "1.0.0",
|
||||
@@ -36,7 +36,7 @@
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"payload": "^2.0.0"
|
||||
"payload": "workspace:*"
|
||||
},
|
||||
"publishConfig": {
|
||||
"main": "./dist/index.js",
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { Connect } from 'payload/database'
|
||||
|
||||
import { eq, sql } from 'drizzle-orm'
|
||||
import { drizzle } from 'drizzle-orm/node-postgres'
|
||||
import { numeric, pgTable, timestamp, varchar } from 'drizzle-orm/pg-core'
|
||||
import { numeric, timestamp, varchar } from 'drizzle-orm/pg-core'
|
||||
import { Pool } from 'pg'
|
||||
import prompts from 'prompts'
|
||||
|
||||
@@ -61,9 +61,13 @@ export const connect: Connect = async function connect(this: PostgresAdapter, pa
|
||||
|
||||
this.drizzle = drizzle(this.pool, { logger, schema: this.schema })
|
||||
if (process.env.PAYLOAD_DROP_DATABASE === 'true') {
|
||||
this.payload.logger.info('---- DROPPING TABLES ----')
|
||||
await this.drizzle.execute(sql`drop schema public cascade;
|
||||
create schema public;`)
|
||||
this.payload.logger.info(`---- DROPPING TABLES SCHEMA(${this.schemaName || 'public'}) ----`)
|
||||
await this.drizzle.execute(
|
||||
sql.raw(`
|
||||
drop schema if exists ${this.schemaName || 'public'} cascade;
|
||||
create schema ${this.schemaName || 'public'};
|
||||
`),
|
||||
)
|
||||
this.payload.logger.info('---- DROPPED TABLES ----')
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -120,7 +124,7 @@ export const connect: Connect = async function connect(this: PostgresAdapter, pa
|
||||
await apply()
|
||||
|
||||
// Migration table def in order to use query using drizzle
|
||||
const migrationsSchema = pgTable('payload_migrations', {
|
||||
const migrationsSchema = this.pgSchema.table('payload_migrations', {
|
||||
name: varchar('name'),
|
||||
batch: numeric('batch'),
|
||||
created_at: timestamp('created_at'),
|
||||
|
||||
@@ -78,7 +78,7 @@ export const traverseFields = ({
|
||||
with: {},
|
||||
}
|
||||
|
||||
const arrayTableName = `${currentTableName}_${toSnakeCase(field.name)}`
|
||||
const arrayTableName = `${currentTableName}_${path}${toSnakeCase(field.name)}`
|
||||
|
||||
if (adapter.tables[`${arrayTableName}_locales`]) withArray.with._locales = _locales
|
||||
currentArgs.with[`${path}${field.name}`] = withArray
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import type { Payload } from 'payload'
|
||||
import type { DatabaseAdapterObj } from 'payload/database'
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { createDatabaseAdapter } from 'payload/database'
|
||||
|
||||
import type { Args, PostgresAdapter, PostgresAdapterResult } from './types'
|
||||
import type { Args, PostgresAdapter } from './types'
|
||||
|
||||
import { connect } from './connect'
|
||||
import { create } from './create'
|
||||
@@ -39,10 +40,11 @@ import { updateVersion } from './updateVersion'
|
||||
|
||||
export type { MigrateDownArgs, MigrateUpArgs } from './types'
|
||||
|
||||
export function postgresAdapter(args: Args): PostgresAdapterResult {
|
||||
export function postgresAdapter(args: Args): DatabaseAdapterObj<PostgresAdapter> {
|
||||
function adapter({ payload }: { payload: Payload }) {
|
||||
const migrationDir = findMigrationDir(args.migrationDir)
|
||||
const idType = args.idType || 'serial'
|
||||
|
||||
return createDatabaseAdapter<PostgresAdapter>({
|
||||
name: 'postgres',
|
||||
|
||||
@@ -52,11 +54,13 @@ export function postgresAdapter(args: Args): PostgresAdapterResult {
|
||||
fieldConstraints: {},
|
||||
idType,
|
||||
logger: args.logger,
|
||||
pgSchema: undefined,
|
||||
pool: undefined,
|
||||
poolOptions: args.pool,
|
||||
push: args.push,
|
||||
relations: {},
|
||||
schema: {},
|
||||
schemaName: args.schemaName,
|
||||
sessions: {},
|
||||
tables: {},
|
||||
|
||||
@@ -100,7 +104,10 @@ export function postgresAdapter(args: Args): PostgresAdapterResult {
|
||||
})
|
||||
}
|
||||
|
||||
return adapter
|
||||
return {
|
||||
defaultIDType: 'number',
|
||||
init: adapter,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import type { Init } from 'payload/database'
|
||||
import type { SanitizedCollectionConfig } from 'payload/types'
|
||||
|
||||
import { pgEnum } from 'drizzle-orm/pg-core'
|
||||
import { pgEnum, pgSchema, pgTable } from 'drizzle-orm/pg-core'
|
||||
import { buildVersionCollectionFields, buildVersionGlobalFields } from 'payload/versions'
|
||||
import toSnakeCase from 'to-snake-case'
|
||||
|
||||
@@ -11,6 +11,12 @@ import type { PostgresAdapter } from './types'
|
||||
import { buildTable } from './schema/build'
|
||||
|
||||
export const init: Init = async function init(this: PostgresAdapter) {
|
||||
if (this.schemaName) {
|
||||
this.pgSchema = pgSchema(this.schemaName)
|
||||
} else {
|
||||
this.pgSchema = { table: pgTable }
|
||||
}
|
||||
|
||||
if (this.payload.config.localization) {
|
||||
this.enums.enum__locales = pgEnum(
|
||||
'_locales',
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
/* eslint-disable no-restricted-syntax, no-await-in-loop */
|
||||
import type { Payload } from 'payload'
|
||||
import type { Migration } from 'payload/database'
|
||||
import type { PayloadRequest } from 'payload/dist/express/types'
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
import prompts from 'prompts'
|
||||
|
||||
import type { PostgresAdapter } from './types'
|
||||
@@ -39,7 +41,7 @@ export async function migrate(this: PostgresAdapter): Promise<void> {
|
||||
latestBatch = Number(migrationsInDB[0]?.batch)
|
||||
}
|
||||
} else {
|
||||
await createMigrationTable(this.drizzle)
|
||||
await createMigrationTable(this)
|
||||
}
|
||||
|
||||
if (migrationsInDB.find((m) => m.batch === -1)) {
|
||||
@@ -87,7 +89,7 @@ async function runMigrationFile(payload: Payload, migration: Migration, batch: n
|
||||
|
||||
payload.logger.info({ msg: `Migrating: ${migration.name}` })
|
||||
|
||||
const pgAdapter = payload.db
|
||||
const pgAdapter = payload.db as PostgresAdapter
|
||||
const drizzleJSON = generateDrizzleJson(pgAdapter.schema)
|
||||
|
||||
try {
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
/* eslint-disable no-restricted-syntax, no-await-in-loop */
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { getMigrations, readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
getMigrations,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
|
||||
import type { PostgresAdapter } from './types'
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { sql } from 'drizzle-orm'
|
||||
import { readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
import prompts from 'prompts'
|
||||
|
||||
import type { PostgresAdapter } from './types'
|
||||
@@ -44,8 +46,10 @@ export async function migrateFresh(
|
||||
msg: `Dropping database.`,
|
||||
})
|
||||
|
||||
await this.drizzle.execute(sql`drop schema public cascade;
|
||||
create schema public;`)
|
||||
await this.drizzle.execute(
|
||||
sql.raw(`drop schema ${this.schemaName || 'public'} cascade;
|
||||
create schema ${this.schemaName || 'public'};`),
|
||||
)
|
||||
|
||||
const migrationFiles = await readMigrationFiles({ payload })
|
||||
payload.logger.debug({
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
/* eslint-disable no-restricted-syntax, no-await-in-loop */
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { getMigrations, readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
getMigrations,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
|
||||
import type { PostgresAdapter } from './types'
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
/* eslint-disable no-restricted-syntax, no-await-in-loop */
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
|
||||
import { getMigrations, readMigrationFiles } from 'payload/database'
|
||||
import { commitTransaction } from 'payload/dist/utilities/commitTransaction'
|
||||
import { initTransaction } from 'payload/dist/utilities/initTransaction'
|
||||
import { killTransaction } from 'payload/dist/utilities/killTransaction'
|
||||
import {
|
||||
commitTransaction,
|
||||
getMigrations,
|
||||
initTransaction,
|
||||
killTransaction,
|
||||
readMigrationFiles,
|
||||
} from 'payload/database'
|
||||
|
||||
import type { PostgresAdapter } from './types'
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type { SQL } from 'drizzle-orm'
|
||||
import type { PgTableWithColumns } from 'drizzle-orm/pg-core'
|
||||
import type { Field, Where } from 'payload/types'
|
||||
|
||||
import { asc, desc } from 'drizzle-orm'
|
||||
@@ -12,7 +13,7 @@ export type BuildQueryJoins = Record<string, SQL>
|
||||
|
||||
export type BuildQueryJoinAliases = {
|
||||
condition: SQL
|
||||
table: GenericTable
|
||||
table: GenericTable | PgTableWithColumns<any>
|
||||
}[]
|
||||
|
||||
type BuildQueryArgs = {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* eslint-disable no-param-reassign */
|
||||
import type { SQL } from 'drizzle-orm'
|
||||
import type { Field, FieldAffectingData, NumberField, TabAsField, TextField } from 'payload/types'
|
||||
import type { PgTableWithColumns } from 'drizzle-orm/pg-core'
|
||||
import type { Field, FieldAffectingData, NumberField, TabAsField, TextField } from 'payload/types'
|
||||
|
||||
import { and, eq, like, sql } from 'drizzle-orm'
|
||||
import { alias } from 'drizzle-orm/pg-core'
|
||||
@@ -15,7 +16,7 @@ import type { BuildQueryJoinAliases, BuildQueryJoins } from './buildQuery'
|
||||
|
||||
type Constraint = {
|
||||
columnName: string
|
||||
table: GenericTable
|
||||
table: GenericTable | PgTableWithColumns<any>
|
||||
value: unknown
|
||||
}
|
||||
|
||||
@@ -26,12 +27,12 @@ type TableColumn = {
|
||||
getNotNullColumnByValue?: (val: unknown) => string
|
||||
pathSegments?: string[]
|
||||
rawColumn?: SQL
|
||||
table: GenericTable
|
||||
table: GenericTable | PgTableWithColumns<any>
|
||||
}
|
||||
|
||||
type Args = {
|
||||
adapter: PostgresAdapter
|
||||
aliasTable?: GenericTable
|
||||
aliasTable?: GenericTable | PgTableWithColumns<any>
|
||||
collectionPath: string
|
||||
columnPrefix?: string
|
||||
constraintPath?: string
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
/* eslint-disable no-param-reassign */
|
||||
import type { Relation } from 'drizzle-orm'
|
||||
import type { IndexBuilder, PgColumnBuilder, UniqueConstraintBuilder } from 'drizzle-orm/pg-core'
|
||||
import type {
|
||||
IndexBuilder,
|
||||
PgColumnBuilder,
|
||||
PgTableWithColumns,
|
||||
UniqueConstraintBuilder,
|
||||
} from 'drizzle-orm/pg-core'
|
||||
import type { Field } from 'payload/types'
|
||||
|
||||
import { relations } from 'drizzle-orm'
|
||||
import {
|
||||
index,
|
||||
integer,
|
||||
numeric,
|
||||
pgTable,
|
||||
serial,
|
||||
timestamp,
|
||||
unique,
|
||||
varchar,
|
||||
} from 'drizzle-orm/pg-core'
|
||||
import { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core'
|
||||
import { fieldAffectsData } from 'payload/types'
|
||||
import toSnakeCase from 'to-snake-case'
|
||||
|
||||
@@ -77,14 +73,14 @@ export const buildTable = ({
|
||||
|
||||
const localesColumns: Record<string, PgColumnBuilder> = {}
|
||||
const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}
|
||||
let localesTable: GenericTable
|
||||
let textsTable: GenericTable
|
||||
let numbersTable: GenericTable
|
||||
let localesTable: GenericTable | PgTableWithColumns<any>
|
||||
let textsTable: GenericTable | PgTableWithColumns<any>
|
||||
let numbersTable: GenericTable | PgTableWithColumns<any>
|
||||
|
||||
// Relationships to the base collection
|
||||
const relationships: Set<string> = rootRelationships || new Set()
|
||||
|
||||
let relationshipsTable: GenericTable
|
||||
let relationshipsTable: GenericTable | PgTableWithColumns<any>
|
||||
|
||||
// Drizzle relations
|
||||
const relationsToBuild: Map<string, string> = new Map()
|
||||
@@ -136,7 +132,7 @@ export const buildTable = ({
|
||||
.notNull()
|
||||
}
|
||||
|
||||
const table = pgTable(tableName, columns, (cols) => {
|
||||
const table = adapter.pgSchema.table(tableName, columns, (cols) => {
|
||||
const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {
|
||||
config[key] = func(cols)
|
||||
return config
|
||||
@@ -158,7 +154,7 @@ export const buildTable = ({
|
||||
.references(() => table.id, { onDelete: 'cascade' })
|
||||
.notNull()
|
||||
|
||||
localesTable = pgTable(localeTableName, localesColumns, (cols) => {
|
||||
localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {
|
||||
return Object.entries(localesIndexes).reduce(
|
||||
(acc, [colName, func]) => {
|
||||
acc[colName] = func(cols)
|
||||
@@ -201,7 +197,7 @@ export const buildTable = ({
|
||||
columns.locale = adapter.enums.enum__locales('locale')
|
||||
}
|
||||
|
||||
textsTable = pgTable(textsTableName, columns, (cols) => {
|
||||
textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {
|
||||
const indexes: Record<string, IndexBuilder> = {
|
||||
orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),
|
||||
}
|
||||
@@ -245,7 +241,7 @@ export const buildTable = ({
|
||||
columns.locale = adapter.enums.enum__locales('locale')
|
||||
}
|
||||
|
||||
numbersTable = pgTable(numbersTableName, columns, (cols) => {
|
||||
numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {
|
||||
const indexes: Record<string, IndexBuilder> = {
|
||||
orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),
|
||||
}
|
||||
@@ -307,19 +303,23 @@ export const buildTable = ({
|
||||
|
||||
const relationshipsTableName = `${tableName}_rels`
|
||||
|
||||
relationshipsTable = pgTable(relationshipsTableName, relationshipColumns, (cols) => {
|
||||
const result: Record<string, unknown> = {
|
||||
order: index(`${relationshipsTableName}_order_idx`).on(cols.order),
|
||||
parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),
|
||||
pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),
|
||||
}
|
||||
relationshipsTable = adapter.pgSchema.table(
|
||||
relationshipsTableName,
|
||||
relationshipColumns,
|
||||
(cols) => {
|
||||
const result: Record<string, unknown> = {
|
||||
order: index(`${relationshipsTableName}_order_idx`).on(cols.order),
|
||||
parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),
|
||||
pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),
|
||||
}
|
||||
|
||||
if (hasLocalizedRelationshipField) {
|
||||
result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)
|
||||
}
|
||||
if (hasLocalizedRelationshipField) {
|
||||
result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
return result
|
||||
},
|
||||
)
|
||||
|
||||
adapter.tables[relationshipsTableName] = relationshipsTable
|
||||
|
||||
|
||||
@@ -7,7 +7,14 @@ import type {
|
||||
Relations,
|
||||
} from 'drizzle-orm'
|
||||
import type { NodePgDatabase, NodePgQueryResultHKT } from 'drizzle-orm/node-postgres'
|
||||
import type { PgColumn, PgEnum, PgTableWithColumns, PgTransaction } from 'drizzle-orm/pg-core'
|
||||
import type {
|
||||
PgColumn,
|
||||
PgEnum,
|
||||
PgSchema,
|
||||
PgTableWithColumns,
|
||||
PgTransaction,
|
||||
} from 'drizzle-orm/pg-core'
|
||||
import type { PgTableFn } from 'drizzle-orm/pg-core/table'
|
||||
import type { Payload } from 'payload'
|
||||
import type { BaseDatabaseAdapter } from 'payload/database'
|
||||
import type { PayloadRequest } from 'payload/types'
|
||||
@@ -21,6 +28,7 @@ export type Args = {
|
||||
migrationDir?: string
|
||||
pool: PoolConfig
|
||||
push?: boolean
|
||||
schemaName?: string
|
||||
}
|
||||
|
||||
export type GenericColumn = PgColumn<
|
||||
@@ -59,11 +67,13 @@ export type PostgresAdapter = BaseDatabaseAdapter & {
|
||||
fieldConstraints: Record<string, Record<string, string>>
|
||||
idType: Args['idType']
|
||||
logger: DrizzleConfig['logger']
|
||||
pgSchema?: { table: PgTableFn } | PgSchema
|
||||
pool: Pool
|
||||
poolOptions: Args['pool']
|
||||
push: boolean
|
||||
relations: Record<string, GenericRelation>
|
||||
schema: Record<string, GenericEnum | GenericRelation | GenericTable>
|
||||
schemaName?: Args['schemaName']
|
||||
sessions: {
|
||||
[id: string]: {
|
||||
db: DrizzleTransaction
|
||||
@@ -71,7 +81,7 @@ export type PostgresAdapter = BaseDatabaseAdapter & {
|
||||
resolve: () => Promise<void>
|
||||
}
|
||||
}
|
||||
tables: Record<string, GenericTable>
|
||||
tables: Record<string, GenericTable | PgTableWithColumns<any>>
|
||||
}
|
||||
|
||||
export type IDType = 'integer' | 'numeric' | 'uuid' | 'varchar'
|
||||
|
||||
@@ -3,7 +3,6 @@ import type { TypeWithID } from 'payload/types'
|
||||
|
||||
import { eq } from 'drizzle-orm'
|
||||
import { ValidationError } from 'payload/errors'
|
||||
import { i18nInit } from 'payload/utilities'
|
||||
|
||||
import type { BlockRowToInsert } from '../transform/write/types'
|
||||
import type { Args } from './types'
|
||||
@@ -318,7 +317,7 @@ export const upsertRow = async <T extends TypeWithID>({
|
||||
message: req.t('error:valueMustBeUnique'),
|
||||
},
|
||||
],
|
||||
req?.t ?? i18nInit(req.payload.config.i18n).t,
|
||||
req.t,
|
||||
)
|
||||
: error
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user