alinea 2.0.0-preview.8 → 2.0.0-preview.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +136 -136
  3. package/dist/adapter/next/cms.js +24 -8
  4. package/dist/adapter/next/handler.js +63 -10
  5. package/dist/adapter/next/renderStats.d.ts +25 -4
  6. package/dist/adapter/next/renderStats.js +71 -3
  7. package/dist/adapter/next/syncCheck.js +2 -8
  8. package/dist/adapter/next/with-alinea.js +6 -2
  9. package/dist/backend/HandleAction.d.ts +1 -1
  10. package/dist/backend/HandleAction.js +1 -1
  11. package/dist/backend/Handler.js +12 -35
  12. package/dist/backend/api/CreateBackend.js +6 -6
  13. package/dist/backend/api/DatabaseApi.js +2 -2
  14. package/dist/backend/api/ProxyMedia.d.ts +2 -3
  15. package/dist/backend/api/ProxyMedia.js +7 -22
  16. package/dist/backend/api/database.js +6 -6
  17. package/dist/backend/store/GeneratedDatabase.d.ts +6 -3
  18. package/dist/backend/store/GeneratedDatabase.js +13 -11
  19. package/dist/backend/store/GeneratedDatabaseNode.d.ts +1 -1
  20. package/dist/backend/store/GeneratedDatabaseNode.js +1 -1
  21. package/dist/bundled.d.ts +280 -211
  22. package/dist/chunks/{node-sqlite-7CSGL27V.js → bun-sqlite-5SHXN3AT.js} +3 -3
  23. package/dist/chunks/{chunk-IL7FJQAY.js → chunk-66YZ47TY.js} +1 -1
  24. package/dist/chunks/{chunk-M7KDJEGH.js → chunk-AIU6CMVT.js} +1 -1
  25. package/dist/chunks/{chunk-K7LHQXI4.js → chunk-ASYKC6IE.js} +1 -1
  26. package/dist/chunks/{chunk-RWWYUNVX.js → chunk-DWR5A5KL.js} +6 -2
  27. package/dist/chunks/{chunk-NLZLRQ5U.js → chunk-ETWOY4AL.js} +1 -1
  28. package/dist/chunks/{chunk-TFMUSWGG.js → chunk-MOWR65LM.js} +72 -67
  29. package/dist/chunks/{chunk-2U43BB6P.js → chunk-QJGGYF6E.js} +5 -5
  30. package/dist/chunks/{chunk-A42DP5T7.js → chunk-QSN6RH6X.js} +1 -1
  31. package/dist/chunks/{bun-sqlite-ZZDB7YQQ.js → node-sqlite-XVNTNMCY.js} +3 -3
  32. package/dist/cli/Serve.js +1 -1
  33. package/dist/cli/bin.js +6 -2
  34. package/dist/cli/generate/DevDB.js +4 -2
  35. package/dist/cli/serve/DevServer.d.ts +2 -0
  36. package/dist/cli/serve/DevServer.js +7 -2
  37. package/dist/cloud/CloudRemote.js +1 -1
  38. package/dist/components/Breadcrumbs.js +2 -2
  39. package/dist/components/Calendar.js +7 -7
  40. package/dist/components/Checkbox.js +3 -3
  41. package/dist/components/ComboBox.js +12 -12
  42. package/dist/components/DatePicker.js +3 -3
  43. package/dist/components/DateRangePicker.js +5 -5
  44. package/dist/components/Disclosure.js +7 -7
  45. package/dist/components/Label.js +5 -5
  46. package/dist/components/List.js +37 -37
  47. package/dist/components/Menu.js +2 -2
  48. package/dist/components/Modal.js +3 -3
  49. package/dist/components/MultipleSelect.js +26 -26
  50. package/dist/components/NumberField.js +6 -6
  51. package/dist/components/ProgressCircle.js +3 -3
  52. package/dist/components/RadioGroup.js +2 -2
  53. package/dist/components/SearchField.js +7 -7
  54. package/dist/components/Select.js +7 -7
  55. package/dist/components/Surface.js +2 -2
  56. package/dist/components/Switch.js +2 -2
  57. package/dist/components/Table.js +7 -7
  58. package/dist/components/Tabs.js +3 -3
  59. package/dist/components/TagGroup.js +2 -2
  60. package/dist/components/TextField.js +4 -4
  61. package/dist/components/TimeField.js +3 -3
  62. package/dist/components/Toggle.js +2 -2
  63. package/dist/components/Toolbar.js +3 -3
  64. package/dist/components/Tree.js +7 -7
  65. package/dist/core/Client.d.ts +1 -4
  66. package/dist/core/Client.js +5 -7
  67. package/dist/core/Connection.d.ts +4 -1
  68. package/dist/core/Connection.js +3 -1
  69. package/dist/core/db/LocalStore.d.ts +2 -0
  70. package/dist/core/source/GithubSource.js +39 -11
  71. package/dist/dashboard/App.js +2 -2
  72. package/dist/dashboard/app/AccessDenied.js +4 -4
  73. package/dist/dashboard/app/ActivityStatus.js +15 -15
  74. package/dist/dashboard/app/AuthView.js +13 -13
  75. package/dist/dashboard/app/Badge.js +2 -2
  76. package/dist/dashboard/app/CompactField.js +9 -9
  77. package/dist/dashboard/app/DashboardErrorBoundary.js +7 -7
  78. package/dist/dashboard/app/DashboardLayout.js +3 -3
  79. package/dist/dashboard/app/EntryFields.js +2 -2
  80. package/dist/dashboard/app/EntryHeader.js +10 -10
  81. package/dist/dashboard/app/EntryReferences.js +7 -7
  82. package/dist/dashboard/app/EntrySidebar.js +16 -16
  83. package/dist/dashboard/app/EntrySidebarPreview.js +10 -10
  84. package/dist/dashboard/app/EntryTranslationBanner.js +3 -3
  85. package/dist/dashboard/app/Explorer.js +44 -44
  86. package/dist/dashboard/app/ExplorerCards.js +34 -34
  87. package/dist/dashboard/app/ExplorerFileCard.js +21 -21
  88. package/dist/dashboard/app/ExplorerList.js +10 -10
  89. package/dist/dashboard/app/ExplorerModal.js +4 -4
  90. package/dist/dashboard/app/ExplorerTable.js +49 -49
  91. package/dist/dashboard/app/LinkPicker.js +4 -4
  92. package/dist/dashboard/app/LocaleMenu.js +3 -3
  93. package/dist/dashboard/app/SidebarTree.js +42 -42
  94. package/dist/dashboard/app/WorkspaceMenu.js +12 -12
  95. package/dist/dashboard/app/WorkspaceRoots.js +28 -28
  96. package/dist/dashboard/app/editor/FileEditor.js +27 -27
  97. package/dist/dashboard/app/editor/FilePreview.js +7 -7
  98. package/dist/dashboard/app/modals/CreateEntry.js +3 -3
  99. package/dist/dashboard/app/pages/EntryPage.js +19 -19
  100. package/dist/dashboard/app/pages/SplashPage.js +46 -46
  101. package/dist/dashboard/app/pages/UsersPage.js +36 -36
  102. package/dist/dashboard/app/ui/DashboardModal.js +19 -19
  103. package/dist/dashboard/app/ui/Rail.js +3 -3
  104. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  105. package/dist/dashboard/boot/DashboardWorker.js +6 -2
  106. package/dist/dashboard/boot/WorkerDB.d.ts +2 -2
  107. package/dist/database/BrowserEntryStore.d.ts +18 -6
  108. package/dist/database/BrowserEntryStore.js +95 -81
  109. package/dist/database/DatabaseSource.d.ts +2 -2
  110. package/dist/database/DatabaseTables.js +2 -2
  111. package/dist/database/EntryDatabase.d.ts +83 -7
  112. package/dist/database/EntryDatabase.js +420 -30
  113. package/dist/database/EntryStore.d.ts +10 -12
  114. package/dist/database/EntryStore.js +27 -66
  115. package/dist/database/EntryTransaction.d.ts +3 -3
  116. package/dist/database/EntryTransaction.js +39 -21
  117. package/dist/database/Version.d.ts +2 -2
  118. package/dist/database/Version.js +1 -1
  119. package/dist/database/driver/DatabaseHandle.d.ts +17 -0
  120. package/dist/database/driver/DatabaseHandle.js +0 -0
  121. package/dist/database/driver/OverlayExtension.browser.d.ts +2 -0
  122. package/dist/database/driver/OverlayExtension.browser.js +9 -0
  123. package/dist/database/driver/OverlayExtension.d.ts +1 -0
  124. package/dist/database/driver/OverlayExtension.js +7 -0
  125. package/dist/database/driver/RuntimeDatabase.d.ts +11 -6
  126. package/dist/database/driver/RuntimeDatabase.js +66 -22
  127. package/dist/database/driver/WasmDatabase.d.ts +23 -2
  128. package/dist/database/driver/WasmDatabase.js +22 -9
  129. package/dist/database/entry/EntryTable.d.ts +21 -5
  130. package/dist/database/entry/EntryTable.js +59 -10
  131. package/dist/database/query/EntryQuery.d.ts +3 -2
  132. package/dist/database/query/EntryQuery.js +23 -25
  133. package/dist/database/query/EntryReferences.d.ts +2 -3
  134. package/dist/database/query/EntryReferences.js +43 -41
  135. package/dist/database/query/Relation.js +1 -1
  136. package/dist/database/query/ResolveQuery.d.ts +1 -4
  137. package/dist/database/query/ResolveQuery.js +54 -19
  138. package/dist/database/query/Search.d.ts +8 -17
  139. package/dist/database/query/Search.js +17 -37
  140. package/dist/database/sync/EntryParser.d.ts +5 -1
  141. package/dist/database/sync/EntryParser.js +4 -1
  142. package/dist/database/sync/EntrySyncer.d.ts +7 -19
  143. package/dist/database/sync/EntrySyncer.js +17 -45
  144. package/dist/database/sync/Ingest.js +40 -31
  145. package/dist/database/sync/SyncQueries.d.ts +5 -2
  146. package/dist/database/sync/SyncQueries.js +27 -3
  147. package/dist/field/check/CheckField.view.js +2 -2
  148. package/dist/field/code/CodeField.view.js +11 -11
  149. package/dist/field/link/LinkField.view.js +34 -34
  150. package/dist/field/list/ListField.view.js +17 -17
  151. package/dist/field/metadata/MetadataField.view.js +15 -15
  152. package/dist/field/richtext/RichTextBlock.js +2 -2
  153. package/dist/field/richtext/RichTextExtensions.js +23 -23
  154. package/dist/field/richtext/RichTextField.view.js +2 -2
  155. package/dist/field/richtext/RichTextInsertMenu.js +2 -2
  156. package/dist/next.cjs +6 -2
  157. package/dist/preview/widget.d.ts +29 -0
  158. package/dist/preview/widget.js +31 -5
  159. package/package.json +6 -2
  160. package/dist/adapter/next/DevRemote.d.ts +0 -3
  161. package/dist/adapter/next/DevRemote.js +0 -45
  162. package/dist/database/EntryLayer.d.ts +0 -93
  163. package/dist/database/EntryLayer.js +0 -459
  164. package/dist/database/entry/EntryView.d.ts +0 -22
  165. package/dist/database/entry/EntryView.js +0 -106
@@ -1,5 +1,5 @@
1
1
  {
2
- "_id": "3JmA8NHtbBt6eB3HhLdaN4zhM7O",
2
+ "_id": "3JxaoSVMu4j5r7ELfcth6oNPMoc",
3
3
  "_type": "Page",
4
4
  "_index": "a0",
5
5
  "_seeded": "welcome.json",
package/dist/LICENSES.md CHANGED
@@ -2,7 +2,87 @@ This file contains the licenses of the bundled modules in this distribution.
2
2
 
3
3
  ===
4
4
 
5
- # @internationalized/date@3.12.1 (Apache-2.0)
5
+ # rado@1.3.0-preview.11 (MIT)
6
+
7
+ MIT License
8
+
9
+ Copyright (c) 2024 Ben Merckx
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
29
+ ===
30
+
31
+ # jotai@3.0.0 (MIT)
32
+
33
+ MIT License
34
+
35
+ Copyright (c) 2020 Poimandres
36
+
37
+ Permission is hereby granted, free of charge, to any person obtaining a copy
38
+ of this software and associated documentation files (the "Software"), to deal
39
+ in the Software without restriction, including without limitation the rights
40
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
41
+ copies of the Software, and to permit persons to whom the Software is
42
+ furnished to do so, subject to the following conditions:
43
+
44
+ The above copyright notice and this permission notice shall be included in all
45
+ copies or substantial portions of the Software.
46
+
47
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
48
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
49
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
50
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
51
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
52
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53
+ SOFTWARE.
54
+
55
+
56
+ ===
57
+
58
+ # @tiptap/core@3.30.5 (MIT)
59
+
60
+ MIT License
61
+
62
+ Copyright (c) 2025, Tiptap GmbH
63
+
64
+ Permission is hereby granted, free of charge, to any person obtaining a copy
65
+ of this software and associated documentation files (the "Software"), to deal
66
+ in the Software without restriction, including without limitation the rights
67
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
68
+ copies of the Software, and to permit persons to whom the Software is
69
+ furnished to do so, subject to the following conditions:
70
+
71
+ The above copyright notice and this permission notice shall be included in all
72
+ copies or substantial portions of the Software.
73
+
74
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
75
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
76
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
77
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
78
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
79
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
80
+ SOFTWARE.
81
+
82
+
83
+ ===
84
+
85
+ # react-aria-components@1.17.0 (Apache-2.0)
6
86
 
7
87
  Apache License
8
88
  Version 2.0, January 2004
@@ -209,11 +289,11 @@ This file contains the licenses of the bundled modules in this distribution.
209
289
 
210
290
  ===
211
291
 
212
- # jotai@3.0.0 (MIT)
292
+ # microcbor@1.2.1 (MIT)
213
293
 
214
294
  MIT License
215
295
 
216
- Copyright (c) 2020 Poimandres
296
+ Copyright (c) 2021 Joel Gustafson
217
297
 
218
298
  Permission is hereby granted, free of charge, to any person obtaining a copy
219
299
  of this software and associated documentation files (the "Software"), to deal
@@ -236,7 +316,7 @@ SOFTWARE.
236
316
 
237
317
  ===
238
318
 
239
- # react-aria-components@1.17.0 (Apache-2.0)
319
+ # @internationalized/date@3.12.1 (Apache-2.0)
240
320
 
241
321
  Apache License
242
322
  Version 2.0, January 2004
@@ -441,59 +521,6 @@ SOFTWARE.
441
521
  limitations under the License.
442
522
 
443
523
 
444
- ===
445
-
446
- # rado@1.3.0-preview.11 (MIT)
447
-
448
- MIT License
449
-
450
- Copyright (c) 2024 Ben Merckx
451
-
452
- Permission is hereby granted, free of charge, to any person obtaining a copy
453
- of this software and associated documentation files (the "Software"), to deal
454
- in the Software without restriction, including without limitation the rights
455
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
456
- copies of the Software, and to permit persons to whom the Software is
457
- furnished to do so, subject to the following conditions:
458
-
459
- The above copyright notice and this permission notice shall be included in all
460
- copies or substantial portions of the Software.
461
-
462
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
463
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
464
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
465
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
466
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
467
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
468
- SOFTWARE.
469
-
470
- ===
471
-
472
- # microcbor@1.2.1 (MIT)
473
-
474
- MIT License
475
-
476
- Copyright (c) 2021 Joel Gustafson
477
-
478
- Permission is hereby granted, free of charge, to any person obtaining a copy
479
- of this software and associated documentation files (the "Software"), to deal
480
- in the Software without restriction, including without limitation the rights
481
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
482
- copies of the Software, and to permit persons to whom the Software is
483
- furnished to do so, subject to the following conditions:
484
-
485
- The above copyright notice and this permission notice shall be included in all
486
- copies or substantial portions of the Software.
487
-
488
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
489
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
490
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
491
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
492
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
493
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
494
- SOFTWARE.
495
-
496
-
497
524
  ===
498
525
 
499
526
  # react-stately@3.46.0 (Apache-2.0)
@@ -703,11 +730,38 @@ SOFTWARE.
703
730
 
704
731
  ===
705
732
 
706
- # @tiptap/core@3.30.5 (MIT)
733
+ # jotai-location@0.6.2 (MIT)
734
+
735
+ The MIT License (MIT)
736
+
737
+ Copyright (c) 2022 Daishi Kato
738
+
739
+ Permission is hereby granted, free of charge, to any person obtaining a copy
740
+ of this software and associated documentation files (the "Software"), to deal
741
+ in the Software without restriction, including without limitation the rights
742
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
743
+ copies of the Software, and to permit persons to whom the Software is
744
+ furnished to do so, subject to the following conditions:
745
+
746
+ The above copyright notice and this permission notice shall be included in
747
+ all copies or substantial portions of the Software.
748
+
749
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
750
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
751
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
752
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
753
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
754
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
755
+ THE SOFTWARE.
756
+
757
+
758
+ ===
759
+
760
+ # jotai-family@1.1.0 (MIT)
707
761
 
708
762
  MIT License
709
763
 
710
- Copyright (c) 2025, Tiptap GmbH
764
+ Copyright (c) 2025 Poimandres
711
765
 
712
766
  Permission is hereby granted, free of charge, to any person obtaining a copy
713
767
  of this software and associated documentation files (the "Software"), to deal
@@ -937,38 +991,11 @@ SOFTWARE.
937
991
 
938
992
  ===
939
993
 
940
- # jotai-location@0.6.2 (MIT)
941
-
942
- The MIT License (MIT)
943
-
944
- Copyright (c) 2022 Daishi Kato
945
-
946
- Permission is hereby granted, free of charge, to any person obtaining a copy
947
- of this software and associated documentation files (the "Software"), to deal
948
- in the Software without restriction, including without limitation the rights
949
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
950
- copies of the Software, and to permit persons to whom the Software is
951
- furnished to do so, subject to the following conditions:
952
-
953
- The above copyright notice and this permission notice shall be included in
954
- all copies or substantial portions of the Software.
955
-
956
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
957
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
958
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
959
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
960
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
961
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
962
- THE SOFTWARE.
963
-
964
-
965
- ===
966
-
967
- # jotai-family@1.1.0 (MIT)
994
+ # @badgateway/oauth2-client@3.3.1 (MIT)
968
995
 
969
996
  MIT License
970
997
 
971
- Copyright (c) 2025 Poimandres
998
+ Copyright (c) 2019-2025 Evert Pot
972
999
 
973
1000
  Permission is hereby granted, free of charge, to any person obtaining a copy
974
1001
  of this software and associated documentation files (the "Software"), to deal
@@ -991,11 +1018,11 @@ SOFTWARE.
991
1018
 
992
1019
  ===
993
1020
 
994
- # @badgateway/oauth2-client@3.3.1 (MIT)
1021
+ # @tiptap/extension-list@3.30.5 (MIT)
995
1022
 
996
1023
  MIT License
997
1024
 
998
- Copyright (c) 2019-2025 Evert Pot
1025
+ Copyright (c) 2025, Tiptap GmbH
999
1026
 
1000
1027
  Permission is hereby granted, free of charge, to any person obtaining a copy
1001
1028
  of this software and associated documentation files (the "Software"), to deal
@@ -1018,38 +1045,34 @@ SOFTWARE.
1018
1045
 
1019
1046
  ===
1020
1047
 
1021
- # @tiptap/extension-list@3.30.5 (MIT)
1022
-
1023
- MIT License
1024
-
1025
- Copyright (c) 2025, Tiptap GmbH
1048
+ # htmlparser2@9.1.0 (MIT)
1026
1049
 
1050
+ Copyright 2010, 2011, Chris Winberry <chris@winberry.net>. All rights reserved.
1027
1051
  Permission is hereby granted, free of charge, to any person obtaining a copy
1028
- of this software and associated documentation files (the "Software"), to deal
1029
- in the Software without restriction, including without limitation the rights
1030
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1031
- copies of the Software, and to permit persons to whom the Software is
1052
+ of this software and associated documentation files (the "Software"), to
1053
+ deal in the Software without restriction, including without limitation the
1054
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1055
+ sell copies of the Software, and to permit persons to whom the Software is
1032
1056
  furnished to do so, subject to the following conditions:
1033
-
1034
- The above copyright notice and this permission notice shall be included in all
1035
- copies or substantial portions of the Software.
1036
-
1057
+
1058
+ The above copyright notice and this permission notice shall be included in
1059
+ all copies or substantial portions of the Software.
1060
+
1037
1061
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1038
1062
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1039
1063
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1040
1064
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1041
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1042
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1043
- SOFTWARE.
1044
-
1065
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1066
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
1067
+ IN THE SOFTWARE.
1045
1068
 
1046
1069
  ===
1047
1070
 
1048
- # use-sync-external-store@1.6.0 (MIT)
1071
+ # fp16@1.0.0 (MIT)
1049
1072
 
1050
1073
  MIT License
1051
1074
 
1052
- Copyright (c) Meta Platforms, Inc. and affiliates.
1075
+ Copyright (c) 2021 Joel Gustafson
1053
1076
 
1054
1077
  Permission is hereby granted, free of charge, to any person obtaining a copy
1055
1078
  of this software and associated documentation files (the "Software"), to deal
@@ -1072,11 +1095,11 @@ SOFTWARE.
1072
1095
 
1073
1096
  ===
1074
1097
 
1075
- # fp16@1.0.0 (MIT)
1098
+ # use-sync-external-store@1.6.0 (MIT)
1076
1099
 
1077
1100
  MIT License
1078
1101
 
1079
- Copyright (c) 2021 Joel Gustafson
1102
+ Copyright (c) Meta Platforms, Inc. and affiliates.
1080
1103
 
1081
1104
  Permission is hereby granted, free of charge, to any person obtaining a copy
1082
1105
  of this software and associated documentation files (the "Software"), to deal
@@ -1099,30 +1122,7 @@ SOFTWARE.
1099
1122
 
1100
1123
  ===
1101
1124
 
1102
- # htmlparser2@9.1.0 (MIT)
1103
-
1104
- Copyright 2010, 2011, Chris Winberry <chris@winberry.net>. All rights reserved.
1105
- Permission is hereby granted, free of charge, to any person obtaining a copy
1106
- of this software and associated documentation files (the "Software"), to
1107
- deal in the Software without restriction, including without limitation the
1108
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1109
- sell copies of the Software, and to permit persons to whom the Software is
1110
- furnished to do so, subject to the following conditions:
1111
-
1112
- The above copyright notice and this permission notice shall be included in
1113
- all copies or substantial portions of the Software.
1114
-
1115
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1116
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1117
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1118
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1119
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1120
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
1121
- IN THE SOFTWARE.
1122
-
1123
- ===
1124
-
1125
- # domhandler@5.0.3 (BSD-2-Clause)
1125
+ # domutils@3.2.2 (BSD-2-Clause)
1126
1126
 
1127
1127
  Copyright (c) Felix Böhm
1128
1128
  All rights reserved.
@@ -1139,7 +1139,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1139
1139
 
1140
1140
  ===
1141
1141
 
1142
- # domutils@3.2.2 (BSD-2-Clause)
1142
+ # domhandler@5.0.3 (BSD-2-Clause)
1143
1143
 
1144
1144
  Copyright (c) Felix Böhm
1145
1145
  All rights reserved.
@@ -13,7 +13,6 @@ import { Client } from "alinea/core/Client";
13
13
  import { CMS } from "alinea/core/CMS";
14
14
  import { Config } from "alinea/core/Config";
15
15
  import { outcome } from "alinea/core/Outcome";
16
- import { ReadonlyTree } from "alinea/core/source/Tree";
17
16
  import { trace } from "alinea/core/Trace";
18
17
  import { getPreviewPayloadFromCookies } from "alinea/preview/PreviewCookies";
19
18
  import { Headers } from "@alinea/iso";
@@ -26,6 +25,8 @@ var preValidatedRemote = { validate: false };
26
25
  var NextCMS = class extends CMS {
27
26
  bundledDb;
28
27
  #syncedAt;
28
+ /** How the bundled database opened, once it did. */
29
+ #opened;
29
30
  constructor(config, openBundledDatabase) {
30
31
  super(config);
31
32
  this.bundledDb = PLazy.from(async () => {
@@ -38,13 +39,20 @@ var NextCMS = class extends CMS {
38
39
  "A bundled database loader is required. Import createCMS from 'alinea/next'."
39
40
  );
40
41
  const span = trace(this.config, "alinea.next.cms.db");
41
- return span(
42
+ const start = performance.now();
43
+ const db = await span(
42
44
  () => openBundledDatabase(this.config, {
43
45
  // Statements run in the async context of the query that caused
44
46
  // them, which carries the React request of the render.
45
- logQuery: (_query, durationMs) => this.#render().stats?.statement(durationMs)
47
+ logQuery: (query, durationMs) => this.#render().stats?.statement(durationMs, query.sql)
46
48
  })
47
49
  );
50
+ this.#opened = {
51
+ driver: db.driver,
52
+ openMs: performance.now() - start,
53
+ readyAt: Date.now()
54
+ };
55
+ return db;
48
56
  });
49
57
  }
50
58
  throttle = createThrottledSync();
@@ -146,8 +154,8 @@ var NextCMS = class extends CMS {
146
154
  };
147
155
  }
148
156
  const client = createClient(this.config, context);
149
- const tree = await client.getTreeIfDifferent(ReadonlyTree.EMPTY.sha).catch(() => void 0);
150
- return { source: "handler", sha: tree?.sha, syncedAt: void 0 };
157
+ const sha = await client.getSha().catch(() => void 0);
158
+ return { source: "handler", sha, syncedAt: void 0 };
151
159
  }
152
160
  async resolve(query) {
153
161
  const stats = await this.#renderStats();
@@ -169,10 +177,18 @@ var NextCMS = class extends CMS {
169
177
  return timed(row, () => span(() => client.resolve(request)));
170
178
  }
171
179
  const db = await this.bundledDb;
180
+ const stats = this.#render().stats;
181
+ const opened = this.#opened;
182
+ if (stats && opened)
183
+ stats.database ??= {
184
+ driver: opened.driver,
185
+ openMs: opened.openMs,
186
+ cold: opened.readyAt >= stats.startedAt
187
+ };
188
+ const answer = () => stats && row ? stats.executed(row, () => db.resolve(request)) : db.resolve(request);
172
189
  const syncInterval = request.disableSync ? Number.POSITIVE_INFINITY : request.syncInterval ?? this.config.syncInterval;
173
- if (hasPreview) return timed(row, () => db.resolve(request));
190
+ if (hasPreview) return answer();
174
191
  if (!isBuild) {
175
- const stats = this.#render().stats;
176
192
  const tracked = {
177
193
  sha: db.sha,
178
194
  syncWith: () => this.#syncDb(db, client, stats)
@@ -181,7 +197,7 @@ var NextCMS = class extends CMS {
181
197
  if (!settled)
182
198
  await this.throttle(() => this.#syncDb(db, client, stats), syncInterval);
183
199
  }
184
- return timed(row, () => db.resolve(request));
200
+ return answer();
185
201
  }
186
202
  async #authenticatedClient() {
187
203
  const context = await requestContext(this.config);
@@ -10,19 +10,25 @@ import {
10
10
  import {
11
11
  createHandler as createCoreHandler
12
12
  } from "alinea/backend/Handler";
13
+ import { HandleAction } from "alinea/backend/HandleAction";
13
14
  import { JWTPreviews } from "alinea/backend/util/JWTPreviews";
14
15
  import { CloudRemote } from "alinea/cloud/CloudRemote";
16
+ import { Client } from "alinea/core/Client";
15
17
  import { Config } from "alinea/core/Config";
18
+ import {
19
+ developmentKeyHeader,
20
+ forwardedMutationHeader
21
+ } from "alinea/core/Connection";
22
+ import { HttpError } from "alinea/core/HttpError";
16
23
  import { trace } from "alinea/core/Trace";
17
24
  import { NextCMS } from "./cms.js";
18
25
  import { requestContext } from "./context.js";
19
- import { createDevRemote } from "./DevRemote.js";
20
26
  import { revalidateContentSha } from "./syncCheck.js";
21
27
  function createHandlerWithDatabase(input, openGeneratedDatabase) {
22
28
  const options = input instanceof NextCMS ? { cms: input } : input;
23
29
  const config = options.cms.config;
24
30
  const backend = typeof options.backend === "function" ? options.backend : options.backend ? backendFromOptions(options.backend) : (context) => new CloudRemote(context, config);
25
- const remote = (context) => context.isDev ? createDevRemote(context, config) : backend(context, config);
31
+ const remote = (context) => backend(context, config);
26
32
  const span = trace(config, "alinea.next.handler.db");
27
33
  const db = PLazy.from(
28
34
  () => span(async () => {
@@ -37,19 +43,57 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
37
43
  return openGeneratedDatabase(config);
38
44
  })
39
45
  );
46
+ const afterCommit = async (context) => {
47
+ await revalidateContentSha();
48
+ await options.afterCommit?.(context);
49
+ };
40
50
  const handleBackend = createCoreHandler({
41
51
  ...options,
42
52
  remote,
43
53
  db,
44
- // Revalidate the shared content sha before the user-provided hook so
45
- // page revalidation triggered there already sees the fresh sha when
46
- // RSC renders resolve. Invalidation never throws (failures are
47
- // swallowed inside revalidateContentSha).
48
- afterCommit: async (context) => {
49
- await revalidateContentSha();
50
- await options.afterCommit?.(context);
51
- }
54
+ afterCommit
52
55
  });
56
+ async function handleDevelopment(request, context) {
57
+ const action = new URL(request.url).searchParams.get("action");
58
+ if (action !== HandleAction.Mutate || request.method !== "POST")
59
+ return failure(404, "Answered by the Alinea dev server");
60
+ const developmentKey = request.headers.get(developmentKeyHeader);
61
+ if (!context.apiKey || developmentKey !== context.apiKey)
62
+ return failure(401, "Invalid development credentials");
63
+ let mutations;
64
+ try {
65
+ mutations = await request.json();
66
+ } catch {
67
+ return failure(400, "Expected JSON");
68
+ }
69
+ if (!Array.isArray(mutations)) return failure(400, "Expected mutations");
70
+ const adjusted = await options.beforeCommit?.({ mutations });
71
+ if (adjusted) mutations = [...adjusted];
72
+ const devServer = new Client({
73
+ config,
74
+ url: context.handlerUrl.href,
75
+ applyAuth(init) {
76
+ const authorized = context.applyAuth?.(init) ?? init ?? {};
77
+ const headers = new Headers(authorized.headers);
78
+ headers.set(forwardedMutationHeader, "true");
79
+ return { ...authorized, headers };
80
+ }
81
+ });
82
+ let sha;
83
+ try {
84
+ ;
85
+ ({ sha } = await devServer.mutate(mutations));
86
+ } catch (error) {
87
+ if (error instanceof HttpError) return failure(error.code, error.message);
88
+ throw error;
89
+ }
90
+ try {
91
+ await afterCommit({ mutations, sha });
92
+ } catch (error) {
93
+ console.error("Alinea afterCommit hook failed", error);
94
+ }
95
+ return Response.json({ sha });
96
+ }
53
97
  const handle = async (request) => {
54
98
  const url = new URL(request.url);
55
99
  const context = await requestContext(config, request);
@@ -61,6 +105,11 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
61
105
  backendUrl.pathname = handlerPath;
62
106
  backendUrl.searchParams.set("file", rewrittenFile);
63
107
  backendUrl.searchParams.set("delivery", "proxy");
108
+ if (context.isDev) {
109
+ const devUrl = new URL(context.handlerUrl);
110
+ devUrl.search = backendUrl.search;
111
+ return Response.redirect(devUrl, 307);
112
+ }
64
113
  return await handleBackend(new Request(backendUrl, request), context);
65
114
  }
66
115
  if (url.pathname !== handlerPath)
@@ -88,6 +137,7 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
88
137
  headers: { location: String(location) }
89
138
  });
90
139
  }
140
+ if (context.isDev) return await handleDevelopment(request, context);
91
141
  return await handleBackend(request, context);
92
142
  } catch (error) {
93
143
  console.error(error);
@@ -96,6 +146,9 @@ function createHandlerWithDatabase(input, openGeneratedDatabase) {
96
146
  };
97
147
  return handle;
98
148
  }
149
+ function failure(status, error) {
150
+ return Response.json({ success: false, error }, { status });
151
+ }
99
152
  function handlerPathname(config, requestUrl) {
100
153
  return new URL(Config.handlerUrl(config), requestUrl).pathname;
101
154
  }
@@ -1,14 +1,30 @@
1
1
  import type { GraphQuery } from 'alinea/core/Graph';
2
- import type { PreviewStat, PreviewStats } from 'alinea/preview/widget';
2
+ import type { PreviewDatabase, PreviewStat, PreviewStatement, PreviewStats } from 'alinea/preview/widget';
3
3
  /** Collects the CMS queries and syncs of one draft render. */
4
4
  export declare class RenderStats {
5
5
  #private;
6
6
  rows: Array<PreviewStat>;
7
7
  statements: number;
8
8
  sqlMs: number;
9
+ slowest: Array<PreviewStatement>;
10
+ /** The bundled database that answered, once a query reached it. */
11
+ database?: PreviewDatabase;
12
+ readonly startedAt: number;
9
13
  /** Add a row and count it as pending until `run` settles; see `timed`. */
10
14
  track<T>(stat: Omit<PreviewStat, 'durationMs'>, run: (row: PreviewStat) => Promise<T>): Promise<T>;
11
- statement(durationMs: number): void;
15
+ /**
16
+ * Time a database query without the time it waited behind the others:
17
+ * queries of a render run one at a time in the order they were called, so
18
+ * one starts executing once the previous one finished, or when it was
19
+ * called if that is later.
20
+ */
21
+ executed<T>(row: PreviewStat, run: () => Promise<T>): Promise<T>;
22
+ /**
23
+ * Count a statement towards the render, and towards the row that ran it:
24
+ * a sync in progress, or else the query executing, which is the earliest
25
+ * one called that has not finished (see `executed`).
26
+ */
27
+ statement(durationMs: number, sql?: string): void;
12
28
  /**
13
29
  * Resolves once nothing ran for `quietMs`, so queries of server components
14
30
  * that render after the caller are counted, or after `maxMs` regardless.
@@ -16,8 +32,13 @@ export declare class RenderStats {
16
32
  settled(quietMs?: number, maxMs?: number): Promise<PreviewStats>;
17
33
  }
18
34
  /**
19
- * Time the work a row stands for, such as answering a query without the sync
20
- * it waited for.
35
+ * A statement short enough to read in a table, such as
36
+ * `select … from alinea_entry_index where (visible = ? and id in (?))`.
37
+ */
38
+ export declare function summarizeSql(sql: string, maxLength?: number): string;
39
+ /**
40
+ * Time the work a row stands for from call to answer, such as a sync or a
41
+ * query the handler answers, without the sync it waited for.
21
42
  */
22
43
  export declare function timed<T>(row: PreviewStat | undefined, run: () => Promise<T>): Promise<T>;
23
44
  /** A short description such as `first(type, url=/about)`. */