sa2kit 1.6.60 → 1.6.62

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 (297) hide show
  1. package/dist/UniversalFileService-C3WQAFOV.js +15 -0
  2. package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
  3. package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
  4. package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
  5. package/dist/ai/llm/index.d.mts +70 -0
  6. package/dist/ai/llm/index.d.ts +70 -0
  7. package/dist/ai/llm/index.js +54 -0
  8. package/dist/ai/llm/index.js.map +1 -0
  9. package/dist/ai/llm/index.mjs +5 -0
  10. package/dist/ai/llm/index.mjs.map +1 -0
  11. package/dist/ai/llm/ui/electron/index.d.mts +5 -0
  12. package/dist/ai/llm/ui/electron/index.d.ts +5 -0
  13. package/dist/ai/llm/ui/electron/index.js +21 -0
  14. package/dist/ai/llm/ui/electron/index.js.map +1 -0
  15. package/dist/ai/llm/ui/electron/index.mjs +8 -0
  16. package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
  17. package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
  18. package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
  19. package/dist/ai/llm/ui/miniapp/index.js +107 -0
  20. package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
  21. package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
  22. package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
  23. package/dist/ai/llm/ui/rn/index.d.mts +9 -0
  24. package/dist/ai/llm/ui/rn/index.d.ts +9 -0
  25. package/dist/ai/llm/ui/rn/index.js +249 -0
  26. package/dist/ai/llm/ui/rn/index.js.map +1 -0
  27. package/dist/ai/llm/ui/rn/index.mjs +243 -0
  28. package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
  29. package/dist/ai/llm/ui/web/index.d.mts +15 -0
  30. package/dist/ai/llm/ui/web/index.d.ts +15 -0
  31. package/dist/ai/llm/ui/web/index.js +21 -0
  32. package/dist/ai/llm/ui/web/index.js.map +1 -0
  33. package/dist/ai/llm/ui/web/index.mjs +8 -0
  34. package/dist/ai/llm/ui/web/index.mjs.map +1 -0
  35. package/dist/ar/index.d.mts +7 -0
  36. package/dist/ar/index.d.ts +7 -0
  37. package/dist/ar/index.js +17 -0
  38. package/dist/ar/index.js.map +1 -0
  39. package/dist/ar/index.mjs +4 -0
  40. package/dist/ar/index.mjs.map +1 -0
  41. package/dist/auth/index.js +22 -22
  42. package/dist/auth/index.mjs +2 -2
  43. package/dist/auth/legacy/db/index.d.mts +5 -0
  44. package/dist/auth/legacy/db/index.d.ts +5 -0
  45. package/dist/auth/legacy/db/index.js +34 -0
  46. package/dist/auth/legacy/db/index.js.map +1 -0
  47. package/dist/auth/legacy/db/index.mjs +5 -0
  48. package/dist/auth/legacy/db/index.mjs.map +1 -0
  49. package/dist/auth/legacy/index.d.mts +51 -0
  50. package/dist/auth/legacy/index.d.ts +51 -0
  51. package/dist/auth/legacy/index.js +146 -0
  52. package/dist/auth/legacy/index.js.map +1 -0
  53. package/dist/auth/legacy/index.mjs +13 -0
  54. package/dist/auth/legacy/index.mjs.map +1 -0
  55. package/dist/auth/legacy/logic/index.d.mts +9 -0
  56. package/dist/auth/legacy/logic/index.d.ts +9 -0
  57. package/dist/auth/legacy/logic/index.js +18 -0
  58. package/dist/auth/legacy/logic/index.js.map +1 -0
  59. package/dist/auth/legacy/logic/index.mjs +5 -0
  60. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  61. package/dist/auth/legacy/routes/index.d.mts +50 -0
  62. package/dist/auth/legacy/routes/index.d.ts +50 -0
  63. package/dist/auth/legacy/routes/index.js +34 -0
  64. package/dist/auth/legacy/routes/index.js.map +1 -0
  65. package/dist/auth/legacy/routes/index.mjs +5 -0
  66. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  67. package/dist/auth/legacy/schema/index.d.mts +401 -0
  68. package/dist/auth/legacy/schema/index.d.ts +401 -0
  69. package/dist/auth/legacy/schema/index.js +29 -0
  70. package/dist/auth/legacy/schema/index.js.map +1 -0
  71. package/dist/auth/legacy/schema/index.mjs +4 -0
  72. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  73. package/dist/auth/legacy/server/index.d.mts +15 -0
  74. package/dist/auth/legacy/server/index.d.ts +15 -0
  75. package/dist/auth/legacy/server/index.js +65 -0
  76. package/dist/auth/legacy/server/index.js.map +1 -0
  77. package/dist/auth/legacy/server/index.mjs +8 -0
  78. package/dist/auth/legacy/server/index.mjs.map +1 -0
  79. package/dist/auth/legacy/services/index.d.mts +40 -0
  80. package/dist/auth/legacy/services/index.d.ts +40 -0
  81. package/dist/auth/legacy/services/index.js +14 -0
  82. package/dist/auth/legacy/services/index.js.map +1 -0
  83. package/dist/auth/legacy/services/index.mjs +5 -0
  84. package/dist/auth/legacy/services/index.mjs.map +1 -0
  85. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  86. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  87. package/dist/auth/legacy/ui/miniapp/index.js +23 -0
  88. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  89. package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
  90. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  91. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  92. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  93. package/dist/auth/legacy/ui/web/index.js +31 -0
  94. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  95. package/dist/auth/legacy/ui/web/index.mjs +6 -0
  96. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  97. package/dist/calendar/index.d.mts +390 -237
  98. package/dist/calendar/index.d.ts +390 -237
  99. package/dist/calendar/index.js +3825 -3785
  100. package/dist/calendar/index.js.map +1 -1
  101. package/dist/calendar/index.mjs +3730 -3696
  102. package/dist/calendar/index.mjs.map +1 -1
  103. package/dist/calendar/routes/index.js +30 -327
  104. package/dist/calendar/routes/index.js.map +1 -1
  105. package/dist/calendar/routes/index.mjs +1 -323
  106. package/dist/calendar/routes/index.mjs.map +1 -1
  107. package/dist/calendar/server.d.mts +6 -0
  108. package/dist/calendar/server.d.ts +6 -0
  109. package/dist/calendar/server.js +41 -13
  110. package/dist/calendar/server.js.map +1 -1
  111. package/dist/calendar/server.mjs +2 -2
  112. package/dist/calendar/server.mjs.map +1 -1
  113. package/dist/chunk-24F7KUED.js +263 -0
  114. package/dist/chunk-24F7KUED.js.map +1 -0
  115. package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
  116. package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
  117. package/dist/chunk-37M6NZIF.js +279 -0
  118. package/dist/chunk-37M6NZIF.js.map +1 -0
  119. package/dist/chunk-3JMUNOUT.js +144 -0
  120. package/dist/chunk-3JMUNOUT.js.map +1 -0
  121. package/dist/chunk-3PFCOTJP.mjs +256 -0
  122. package/dist/chunk-3PFCOTJP.mjs.map +1 -0
  123. package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
  124. package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
  125. package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
  126. package/dist/chunk-5BLZEVWK.mjs.map +1 -0
  127. package/dist/{chunk-YN4MJFIG.js → chunk-5LCGOCKG.js} +5 -5
  128. package/dist/{chunk-YN4MJFIG.js.map → chunk-5LCGOCKG.js.map} +1 -1
  129. package/dist/chunk-6XUQ2B4K.js +219 -0
  130. package/dist/chunk-6XUQ2B4K.js.map +1 -0
  131. package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
  132. package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
  133. package/dist/chunk-CFM56MGO.mjs +35 -0
  134. package/dist/chunk-CFM56MGO.mjs.map +1 -0
  135. package/dist/chunk-CPSFYP34.mjs +140 -0
  136. package/dist/chunk-CPSFYP34.mjs.map +1 -0
  137. package/dist/chunk-D22QBOCM.mjs +336 -0
  138. package/dist/chunk-D22QBOCM.mjs.map +1 -0
  139. package/dist/chunk-DA4QV64P.mjs +35 -0
  140. package/dist/chunk-DA4QV64P.mjs.map +1 -0
  141. package/dist/chunk-EKDLZND6.js +275 -0
  142. package/dist/chunk-EKDLZND6.js.map +1 -0
  143. package/dist/chunk-EKQPFZXQ.js +12 -0
  144. package/dist/chunk-EKQPFZXQ.js.map +1 -0
  145. package/dist/chunk-ERAAB5VG.js +324 -0
  146. package/dist/chunk-ERAAB5VG.js.map +1 -0
  147. package/dist/chunk-ESLY72VI.mjs +175 -0
  148. package/dist/chunk-ESLY72VI.mjs.map +1 -0
  149. package/dist/chunk-FGQGWW73.js +38 -0
  150. package/dist/chunk-FGQGWW73.js.map +1 -0
  151. package/dist/chunk-FXQOXLDE.js +120 -0
  152. package/dist/chunk-FXQOXLDE.js.map +1 -0
  153. package/dist/chunk-FZELCJR7.mjs +19 -0
  154. package/dist/chunk-FZELCJR7.mjs.map +1 -0
  155. package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
  156. package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
  157. package/dist/chunk-HBQMN5QM.mjs +10 -0
  158. package/dist/chunk-HBQMN5QM.mjs.map +1 -0
  159. package/dist/chunk-ITRIXMXF.mjs +862 -0
  160. package/dist/chunk-ITRIXMXF.mjs.map +1 -0
  161. package/dist/chunk-IUWSCUDC.js +4 -0
  162. package/dist/chunk-IUWSCUDC.js.map +1 -0
  163. package/dist/chunk-JCKCKRC2.js +50 -0
  164. package/dist/chunk-JCKCKRC2.js.map +1 -0
  165. package/dist/chunk-L7GQNY54.mjs +286 -0
  166. package/dist/chunk-L7GQNY54.mjs.map +1 -0
  167. package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
  168. package/dist/chunk-LDVJ7URJ.js.map +1 -0
  169. package/dist/{chunk-CYTXGBP2.js → chunk-MLP74E3O.js} +573 -1607
  170. package/dist/chunk-MLP74E3O.js.map +1 -0
  171. package/dist/chunk-NAX4TUT7.js +182 -0
  172. package/dist/chunk-NAX4TUT7.js.map +1 -0
  173. package/dist/chunk-NW4EN4YI.mjs +213 -0
  174. package/dist/chunk-NW4EN4YI.mjs.map +1 -0
  175. package/dist/chunk-P3QMT3AY.mjs +44 -0
  176. package/dist/chunk-P3QMT3AY.mjs.map +1 -0
  177. package/dist/chunk-PJ4KYAQZ.mjs +631 -0
  178. package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
  179. package/dist/chunk-PLSEAREM.js +345 -0
  180. package/dist/chunk-PLSEAREM.js.map +1 -0
  181. package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
  182. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
  183. package/dist/chunk-RJVR33ME.mjs +3 -0
  184. package/dist/chunk-RJVR33ME.mjs.map +1 -0
  185. package/dist/chunk-SYBHDB2D.js +650 -0
  186. package/dist/chunk-SYBHDB2D.js.map +1 -0
  187. package/dist/chunk-TVKVM7JT.js +21 -0
  188. package/dist/chunk-TVKVM7JT.js.map +1 -0
  189. package/dist/{chunk-PONZPO3U.mjs → chunk-UTB72ZJ7.mjs} +414 -1448
  190. package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
  191. package/dist/chunk-V7EVKD5G.mjs +116 -0
  192. package/dist/chunk-V7EVKD5G.mjs.map +1 -0
  193. package/dist/chunk-VGPR3KLR.js +872 -0
  194. package/dist/chunk-VGPR3KLR.js.map +1 -0
  195. package/dist/chunk-VS7WATQD.js +255 -0
  196. package/dist/chunk-VS7WATQD.js.map +1 -0
  197. package/dist/chunk-VSP7XJT5.mjs +272 -0
  198. package/dist/chunk-VSP7XJT5.mjs.map +1 -0
  199. package/dist/{chunk-CSDIPQQO.mjs → chunk-VTKAIOP5.mjs} +5 -5
  200. package/dist/{chunk-CSDIPQQO.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
  201. package/dist/chunk-VULJUXTF.mjs +267 -0
  202. package/dist/chunk-VULJUXTF.mjs.map +1 -0
  203. package/dist/chunk-XAHM6B3V.js +44 -0
  204. package/dist/chunk-XAHM6B3V.js.map +1 -0
  205. package/dist/chunk-YSF5YISM.mjs +248 -0
  206. package/dist/chunk-YSF5YISM.mjs.map +1 -0
  207. package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
  208. package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
  209. package/dist/components/index.d.mts +1 -0
  210. package/dist/components/index.d.ts +1 -0
  211. package/dist/components/index.js +182 -181
  212. package/dist/components/index.mjs +4 -3
  213. package/dist/index-DNKZ7-R_.d.mts +184 -0
  214. package/dist/index-DNKZ7-R_.d.ts +184 -0
  215. package/dist/index.d.mts +4 -1
  216. package/dist/index.d.ts +4 -1
  217. package/dist/index.js +285 -229
  218. package/dist/index.js.map +1 -1
  219. package/dist/index.mjs +15 -10
  220. package/dist/index.mjs.map +1 -1
  221. package/dist/mikuFusionGame/index.js +3 -3
  222. package/dist/mikuFusionGame/index.mjs +2 -2
  223. package/dist/mmd/index.d.mts +67 -9
  224. package/dist/mmd/index.d.ts +67 -9
  225. package/dist/mmd/index.js +969 -625
  226. package/dist/mmd/index.js.map +1 -1
  227. package/dist/mmd/index.mjs +969 -628
  228. package/dist/mmd/index.mjs.map +1 -1
  229. package/dist/portfolio/index.js +10 -9
  230. package/dist/portfolio/index.mjs +5 -4
  231. package/dist/qqbot/index.d.mts +2 -0
  232. package/dist/qqbot/index.d.ts +2 -0
  233. package/dist/qqbot/index.js +21 -0
  234. package/dist/qqbot/index.js.map +1 -0
  235. package/dist/qqbot/index.mjs +4 -0
  236. package/dist/qqbot/index.mjs.map +1 -0
  237. package/dist/qqbot/server/index.d.mts +91 -0
  238. package/dist/qqbot/server/index.d.ts +91 -0
  239. package/dist/qqbot/server/index.js +21 -0
  240. package/dist/qqbot/server/index.js.map +1 -0
  241. package/dist/qqbot/server/index.mjs +4 -0
  242. package/dist/qqbot/server/index.mjs.map +1 -0
  243. package/dist/qqbot/ui/web/index.d.mts +10 -0
  244. package/dist/qqbot/ui/web/index.d.ts +10 -0
  245. package/dist/qqbot/ui/web/index.js +105 -0
  246. package/dist/qqbot/ui/web/index.js.map +1 -0
  247. package/dist/qqbot/ui/web/index.mjs +99 -0
  248. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  249. package/dist/screenReceiver/index.d.mts +78 -0
  250. package/dist/screenReceiver/index.d.ts +78 -0
  251. package/dist/screenReceiver/index.js +17 -0
  252. package/dist/screenReceiver/index.js.map +1 -0
  253. package/dist/screenReceiver/index.mjs +4 -0
  254. package/dist/screenReceiver/index.mjs.map +1 -0
  255. package/dist/screenReceiver/server/index.d.mts +36 -0
  256. package/dist/screenReceiver/server/index.d.ts +36 -0
  257. package/dist/screenReceiver/server/index.js +160 -0
  258. package/dist/screenReceiver/server/index.js.map +1 -0
  259. package/dist/screenReceiver/server/index.mjs +157 -0
  260. package/dist/screenReceiver/server/index.mjs.map +1 -0
  261. package/dist/showmasterpiece/db/index.js +42 -42
  262. package/dist/showmasterpiece/db/index.mjs +1 -1
  263. package/dist/showmasterpiece/index.js +52 -41
  264. package/dist/showmasterpiece/index.js.map +1 -1
  265. package/dist/showmasterpiece/index.mjs +15 -4
  266. package/dist/showmasterpiece/index.mjs.map +1 -1
  267. package/dist/showmasterpiece/server/index.js +42 -42
  268. package/dist/showmasterpiece/server/index.mjs +1 -1
  269. package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -0
  270. package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -0
  271. package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
  272. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  273. package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
  274. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  275. package/dist/showmasterpiece/ui/web/index.js +43 -32
  276. package/dist/showmasterpiece/ui/web/index.mjs +15 -4
  277. package/dist/testYourself/index.js +13 -13
  278. package/dist/testYourself/index.mjs +2 -2
  279. package/dist/types-B-hOccQw.d.mts +122 -0
  280. package/dist/types-B8rGXc4e.d.mts +38 -0
  281. package/dist/types-Cg89HGz2.d.ts +38 -0
  282. package/dist/types-CvKvpyN8.d.mts +48 -0
  283. package/dist/types-CvKvpyN8.d.ts +48 -0
  284. package/dist/types-Dy6x2gJW.d.ts +122 -0
  285. package/dist/universalFile/server/index.js +11 -11
  286. package/dist/universalFile/server/index.mjs +4 -4
  287. package/package.json +101 -1
  288. package/dist/UniversalFileService-336GFY6N.mjs +0 -6
  289. package/dist/UniversalFileService-J6ET6KZK.js +0 -15
  290. package/dist/chunk-622Y6LTH.mjs.map +0 -1
  291. package/dist/chunk-CYTXGBP2.js.map +0 -1
  292. package/dist/chunk-GVVS4IMM.mjs +0 -302
  293. package/dist/chunk-GVVS4IMM.mjs.map +0 -1
  294. package/dist/chunk-PONZPO3U.mjs.map +0 -1
  295. package/dist/chunk-WC5QFO3T.js +0 -314
  296. package/dist/chunk-WC5QFO3T.js.map +0 -1
  297. package/dist/chunk-ZRWED7Q6.js.map +0 -1
@@ -1,327 +1,5 @@
1
- import { calendarDbService } from '../../chunk-GVVS4IMM.mjs';
1
+ export { createBatchDeleteEventsHandler, createConfigHandler, createCreateEventHandler, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler } from '../../chunk-PJ4KYAQZ.mjs';
2
2
  import '../../chunk-AIKEVVDR.mjs';
3
3
  import '../../chunk-WMJKH4XE.mjs';
4
- import { NextResponse } from 'next/server';
5
-
6
- function initDbService(db) {
7
- if (db) {
8
- calendarDbService.setDb(db);
9
- }
10
- }
11
- function createGetEventsHandler(config) {
12
- initDbService(config.db);
13
- return async (request) => {
14
- try {
15
- const user = await config.validateAuth(request);
16
- if (!user) {
17
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
18
- }
19
- const { searchParams } = new URL(request.url);
20
- const startDateStr = searchParams.get("startDate");
21
- const endDateStr = searchParams.get("endDate");
22
- let startDate;
23
- let endDate;
24
- if (startDateStr) {
25
- startDate = new Date(startDateStr);
26
- if (isNaN(startDate.getTime())) {
27
- return NextResponse.json({ success: false, error: "\u5F00\u59CB\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
28
- }
29
- }
30
- if (endDateStr) {
31
- endDate = new Date(endDateStr);
32
- if (isNaN(endDate.getTime())) {
33
- return NextResponse.json({ success: false, error: "\u7ED3\u675F\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
34
- }
35
- }
36
- const events = await calendarDbService.getAllEvents(user.id, startDate, endDate);
37
- return NextResponse.json({
38
- success: true,
39
- data: events,
40
- message: "\u83B7\u53D6\u4E8B\u4EF6\u5217\u8868\u6210\u529F"
41
- });
42
- } catch (error) {
43
- console.error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
44
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
45
- }
46
- };
47
- }
48
- function createCreateEventHandler(config) {
49
- initDbService(config.db);
50
- return async (request) => {
51
- try {
52
- const user = await config.validateAuth(request);
53
- if (!user) {
54
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
55
- }
56
- const body = await request.json();
57
- if (!body.title || typeof body.title !== "string" || body.title.trim() === "") {
58
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
59
- }
60
- if (!body.startTime || !body.endTime) {
61
- return NextResponse.json({ success: false, error: "\u5F00\u59CB\u65F6\u95F4\u548C\u7ED3\u675F\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
62
- }
63
- const startTime = new Date(body.startTime);
64
- const endTime = new Date(body.endTime);
65
- if (isNaN(startTime.getTime()) || isNaN(endTime.getTime())) {
66
- return NextResponse.json({ success: false, error: "\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
67
- }
68
- if (startTime.getTime() >= endTime.getTime()) {
69
- return NextResponse.json({ success: false, error: "\u7ED3\u675F\u65F6\u95F4\u5FC5\u987B\u665A\u4E8E\u5F00\u59CB\u65F6\u95F4" }, { status: 400 });
70
- }
71
- const eventData = {
72
- title: body.title.trim(),
73
- description: body.description || null,
74
- startTime,
75
- endTime,
76
- allDay: Boolean(body.allDay),
77
- location: body.location || null,
78
- color: body.color || "#3B82F6",
79
- userId: user.id
80
- };
81
- const newEvent = await calendarDbService.createEvent(eventData);
82
- if (body.recurrence) {
83
- await calendarDbService.createRecurrenceRule({
84
- eventId: newEvent.id,
85
- ...body.recurrence,
86
- endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : void 0
87
- });
88
- }
89
- if (body.reminders && Array.isArray(body.reminders)) {
90
- for (const reminder of body.reminders) {
91
- if (reminder.reminderTime) {
92
- await calendarDbService.createReminder({
93
- eventId: newEvent.id,
94
- reminderTime: new Date(reminder.reminderTime),
95
- reminderType: reminder.reminderType || "notification",
96
- status: "pending"
97
- });
98
- }
99
- }
100
- }
101
- return NextResponse.json({
102
- success: true,
103
- data: newEvent,
104
- message: "\u521B\u5EFA\u4E8B\u4EF6\u6210\u529F"
105
- });
106
- } catch (error) {
107
- console.error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
108
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
109
- }
110
- };
111
- }
112
- function createGetEventByIdHandler(config) {
113
- initDbService(config.db);
114
- return async (request, { params }) => {
115
- try {
116
- const user = await config.validateAuth(request);
117
- if (!user) {
118
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
119
- }
120
- const eventId = parseInt(params.id);
121
- if (isNaN(eventId)) {
122
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
123
- }
124
- const event = await calendarDbService.getEventById(eventId);
125
- if (!event) {
126
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728" }, { status: 404 });
127
- }
128
- if (event.userId !== user.id) {
129
- return NextResponse.json({ success: false, error: "\u65E0\u6743\u8BBF\u95EE\u6B64\u4E8B\u4EF6" }, { status: 403 });
130
- }
131
- const [recurrenceRule, reminders] = await Promise.all([
132
- calendarDbService.getRecurrenceRule(eventId),
133
- calendarDbService.getEventReminders(eventId)
134
- ]);
135
- return NextResponse.json({
136
- success: true,
137
- data: {
138
- ...event,
139
- recurrenceRule: recurrenceRule || void 0,
140
- reminders: reminders || []
141
- },
142
- message: "\u83B7\u53D6\u4E8B\u4EF6\u6210\u529F"
143
- });
144
- } catch (error) {
145
- console.error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
146
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
147
- }
148
- };
149
- }
150
- function createUpdateEventHandler(config) {
151
- initDbService(config.db);
152
- return async (request, { params }) => {
153
- try {
154
- const user = await config.validateAuth(request);
155
- if (!user) {
156
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
157
- }
158
- const eventId = parseInt(params.id);
159
- if (isNaN(eventId)) {
160
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
161
- }
162
- const existingEvent = await calendarDbService.getEventById(eventId);
163
- if (!existingEvent || existingEvent.userId !== user.id) {
164
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u4FEE\u6539" }, { status: 404 });
165
- }
166
- const body = await request.json();
167
- const updateData = {};
168
- if (body.title !== void 0) updateData.title = body.title.trim();
169
- if (body.description !== void 0) updateData.description = body.description;
170
- if (body.startTime !== void 0) updateData.startTime = new Date(body.startTime);
171
- if (body.endTime !== void 0) updateData.endTime = new Date(body.endTime);
172
- if (body.allDay !== void 0) updateData.allDay = Boolean(body.allDay);
173
- if (body.location !== void 0) updateData.location = body.location;
174
- if (body.color !== void 0) updateData.color = body.color;
175
- const updatedEvent = await calendarDbService.updateEvent(eventId, updateData);
176
- if (body.recurrence !== void 0) {
177
- await calendarDbService.deleteRecurrenceRule(eventId);
178
- if (body.recurrence) {
179
- await calendarDbService.createRecurrenceRule({
180
- eventId,
181
- ...body.recurrence,
182
- endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : void 0
183
- });
184
- }
185
- }
186
- if (body.reminders !== void 0) {
187
- await calendarDbService.deleteEventReminders(eventId);
188
- if (Array.isArray(body.reminders)) {
189
- for (const reminder of body.reminders) {
190
- if (reminder.reminderTime) {
191
- await calendarDbService.createReminder({
192
- eventId,
193
- reminderTime: new Date(reminder.reminderTime),
194
- reminderType: reminder.reminderType || "notification",
195
- status: "pending"
196
- });
197
- }
198
- }
199
- }
200
- }
201
- return NextResponse.json({
202
- success: true,
203
- data: updatedEvent,
204
- message: "\u66F4\u65B0\u4E8B\u4EF6\u6210\u529F"
205
- });
206
- } catch (error) {
207
- console.error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
208
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
209
- }
210
- };
211
- }
212
- function createDeleteEventHandler(config) {
213
- initDbService(config.db);
214
- return async (request, { params }) => {
215
- try {
216
- const user = await config.validateAuth(request);
217
- if (!user) {
218
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
219
- }
220
- const eventId = parseInt(params.id);
221
- if (isNaN(eventId)) {
222
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
223
- }
224
- const existingEvent = await calendarDbService.getEventById(eventId);
225
- if (!existingEvent || existingEvent.userId !== user.id) {
226
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u5220\u9664" }, { status: 404 });
227
- }
228
- await calendarDbService.deleteEvent(eventId);
229
- return NextResponse.json({
230
- success: true,
231
- message: "\u5220\u9664\u4E8B\u4EF6\u6210\u529F"
232
- });
233
- } catch (error) {
234
- console.error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
235
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
236
- }
237
- };
238
- }
239
- function createBatchDeleteEventsHandler(config) {
240
- initDbService(config.db);
241
- return async (request) => {
242
- try {
243
- const user = await config.validateAuth(request);
244
- if (!user) {
245
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
246
- }
247
- const body = await request.json();
248
- if (!body.eventIds || !Array.isArray(body.eventIds)) {
249
- return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
250
- }
251
- const results = await Promise.all(
252
- body.eventIds.map(async (id) => {
253
- const event = await calendarDbService.getEventById(id);
254
- if (event && event.userId === user.id) {
255
- await calendarDbService.deleteEvent(id);
256
- return true;
257
- }
258
- return false;
259
- })
260
- );
261
- const deletedCount = results.filter(Boolean).length;
262
- return NextResponse.json({
263
- success: true,
264
- data: { deletedCount },
265
- message: "\u6210\u529F\u5220\u9664 " + deletedCount + " \u4E2A\u4E8B\u4EF6"
266
- });
267
- } catch (error) {
268
- console.error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
269
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
270
- }
271
- };
272
- }
273
- function createConfigHandler(config) {
274
- initDbService(config.db);
275
- return {
276
- GET: async (request) => {
277
- try {
278
- const user = await config.validateAuth(request);
279
- if (!user) {
280
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
281
- }
282
- const dbConfig = await calendarDbService.getUserConfig(user.id);
283
- return NextResponse.json({
284
- success: true,
285
- data: dbConfig || {
286
- firstDayOfWeek: 1,
287
- workingHoursStart: "09:00",
288
- workingHoursEnd: "18:00",
289
- timeZone: "Asia/Shanghai",
290
- dateFormat: "YYYY-MM-DD",
291
- timeFormat: "HH:mm",
292
- defaultView: "month",
293
- defaultEventColor: "#3B82F6",
294
- weekends: true,
295
- eventColors: {}
296
- },
297
- message: "\u83B7\u53D6\u914D\u7F6E\u6210\u529F"
298
- });
299
- } catch (error) {
300
- console.error("\u83B7\u53D6\u914D\u7F6E\u5931\u8D25\uFF1A", error);
301
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
302
- }
303
- },
304
- PUT: async (request) => {
305
- try {
306
- const user = await config.validateAuth(request);
307
- if (!user) {
308
- return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
309
- }
310
- const body = await request.json();
311
- const updatedConfig = await calendarDbService.upsertUserConfig(user.id, body);
312
- return NextResponse.json({
313
- success: true,
314
- data: updatedConfig,
315
- message: "\u66F4\u65B0\u914D\u7F6E\u6210\u529F"
316
- });
317
- } catch (error) {
318
- console.error("\u66F4\u65B0\u914D\u7F6E\u5931\u8D25\uFF1A", error);
319
- return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
320
- }
321
- }
322
- };
323
- }
324
-
325
- export { createBatchDeleteEventsHandler, createConfigHandler, createCreateEventHandler, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler };
326
4
  //# sourceMappingURL=index.mjs.map
327
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/calendar/routes/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { calendarDbService } from '../db/calendarDbService';\n\nexport interface CalendarRouteConfig {\n /**\n * Drizzle 数据库实例\n * 如果提供,将自动初始化 calendarDbService\n */\n db?: any;\n /**\n * 验证用户身份的函数\n * 应该返回用户信息或 null\n */\n validateAuth: (request: NextRequest) => Promise<{ id: number } | null>;\n}\n\n/**\n * 初始化数据库服务的辅助函数\n */\nfunction initDbService(db?: any) {\n if (db) {\n calendarDbService.setDb(db);\n }\n}\n\n/**\n * 创建获取日历事件列表的处理器\n */\nexport function createGetEventsHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const { searchParams } = new URL(request.url);\n const startDateStr = searchParams.get('startDate');\n const endDateStr = searchParams.get('endDate');\n\n let startDate: Date | undefined;\n let endDate: Date | undefined;\n\n if (startDateStr) {\n startDate = new Date(startDateStr);\n if (isNaN(startDate.getTime())) {\n return NextResponse.json({ success: false, error: '开始日期格式无效' }, { status: 400 });\n }\n }\n\n if (endDateStr) {\n endDate = new Date(endDateStr);\n if (isNaN(endDate.getTime())) {\n return NextResponse.json({ success: false, error: '结束日期格式无效' }, { status: 400 });\n }\n }\n\n const events = await calendarDbService.getAllEvents(user.id, startDate, endDate);\n\n return NextResponse.json({\n success: true,\n data: events,\n message: '获取事件列表成功'\n });\n } catch (error) {\n console.error('获取事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建日历事件的处理器\n */\nexport function createCreateEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n \n if (!body.title || typeof body.title !== 'string' || body.title.trim() === '') {\n return NextResponse.json({ success: false, error: '事件标题不能为空' }, { status: 400 });\n }\n\n if (!body.startTime || !body.endTime) {\n return NextResponse.json({ success: false, error: '开始时间和结束时间不能为空' }, { status: 400 });\n }\n\n const startTime = new Date(body.startTime);\n const endTime = new Date(body.endTime);\n\n if (isNaN(startTime.getTime()) || isNaN(endTime.getTime())) {\n return NextResponse.json({ success: false, error: '日期格式无效' }, { status: 400 });\n }\n\n if (startTime.getTime() >= endTime.getTime()) {\n return NextResponse.json({ success: false, error: '结束时间必须晚于开始时间' }, { status: 400 });\n }\n\n const eventData = {\n title: body.title.trim(),\n description: body.description || null,\n startTime,\n endTime,\n allDay: Boolean(body.allDay),\n location: body.location || null,\n color: body.color || '#3B82F6',\n userId: user.id,\n };\n\n const newEvent = await calendarDbService.createEvent(eventData);\n\n if (body.recurrence) {\n await calendarDbService.createRecurrenceRule({\n eventId: newEvent.id,\n ...body.recurrence,\n endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : undefined,\n });\n }\n\n if (body.reminders && Array.isArray(body.reminders)) {\n for (const reminder of body.reminders) {\n if (reminder.reminderTime) {\n await calendarDbService.createReminder({\n eventId: newEvent.id,\n reminderTime: new Date(reminder.reminderTime),\n reminderType: reminder.reminderType || 'notification',\n status: 'pending'\n });\n }\n }\n }\n\n return NextResponse.json({\n success: true,\n data: newEvent,\n message: '创建事件成功'\n });\n } catch (error) {\n console.error('创建事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建获取单个事件的处理器\n */\nexport function createGetEventByIdHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const event = await calendarDbService.getEventById(eventId);\n if (!event) {\n return NextResponse.json({ success: false, error: '事件不存在' }, { status: 404 });\n }\n\n if (event.userId !== user.id) {\n return NextResponse.json({ success: false, error: '无权访问此事件' }, { status: 403 });\n }\n\n const [recurrenceRule, reminders] = await Promise.all([\n calendarDbService.getRecurrenceRule(eventId),\n calendarDbService.getEventReminders(eventId)\n ]);\n\n return NextResponse.json({\n success: true,\n data: {\n ...event,\n recurrenceRule: recurrenceRule || undefined,\n reminders: reminders || []\n },\n message: '获取事件成功'\n });\n } catch (error) {\n console.error('获取事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建更新事件的处理器\n */\nexport function createUpdateEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const existingEvent = await calendarDbService.getEventById(eventId);\n if (!existingEvent || existingEvent.userId !== user.id) {\n return NextResponse.json({ success: false, error: '事件不存在或无权修改' }, { status: 404 });\n }\n\n const body = await request.json();\n const updateData: any = {};\n\n if (body.title !== undefined) updateData.title = body.title.trim();\n if (body.description !== undefined) updateData.description = body.description;\n if (body.startTime !== undefined) updateData.startTime = new Date(body.startTime);\n if (body.endTime !== undefined) updateData.endTime = new Date(body.endTime);\n if (body.allDay !== undefined) updateData.allDay = Boolean(body.allDay);\n if (body.location !== undefined) updateData.location = body.location;\n if (body.color !== undefined) updateData.color = body.color;\n\n const updatedEvent = await calendarDbService.updateEvent(eventId, updateData);\n\n if (body.recurrence !== undefined) {\n await calendarDbService.deleteRecurrenceRule(eventId);\n if (body.recurrence) {\n await calendarDbService.createRecurrenceRule({\n eventId,\n ...body.recurrence,\n endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : undefined,\n });\n }\n }\n\n if (body.reminders !== undefined) {\n await calendarDbService.deleteEventReminders(eventId);\n if (Array.isArray(body.reminders)) {\n for (const reminder of body.reminders) {\n if (reminder.reminderTime) {\n await calendarDbService.createReminder({\n eventId,\n reminderTime: new Date(reminder.reminderTime),\n reminderType: reminder.reminderType || 'notification',\n status: 'pending'\n });\n }\n }\n }\n }\n\n return NextResponse.json({\n success: true,\n data: updatedEvent,\n message: '更新事件成功'\n });\n } catch (error) {\n console.error('更新事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建删除事件的处理器\n */\nexport function createDeleteEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const existingEvent = await calendarDbService.getEventById(eventId);\n if (!existingEvent || existingEvent.userId !== user.id) {\n return NextResponse.json({ success: false, error: '事件不存在或无权删除' }, { status: 404 });\n }\n\n await calendarDbService.deleteEvent(eventId);\n\n return NextResponse.json({\n success: true,\n message: '删除事件成功'\n });\n } catch (error) {\n console.error('删除事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建批量删除事件的处理器\n */\nexport function createBatchDeleteEventsHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n if (!body.eventIds || !Array.isArray(body.eventIds)) {\n return NextResponse.json({ success: false, error: '事件ID列表不能为空' }, { status: 400 });\n }\n\n const results = await Promise.all(\n body.eventIds.map(async (id: number) => {\n const event = await calendarDbService.getEventById(id);\n if (event && event.userId === user.id) {\n await calendarDbService.deleteEvent(id);\n return true;\n }\n return false;\n })\n );\n\n const deletedCount = results.filter(Boolean).length;\n\n return NextResponse.json({\n success: true,\n data: { deletedCount },\n message: '成功删除 ' + (deletedCount) + ' 个事件'\n });\n } catch (error) {\n console.error('批量删除事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建配置处理器的工厂\n */\nexport function createConfigHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return {\n GET: async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const dbConfig = await calendarDbService.getUserConfig(user.id);\n return NextResponse.json({\n success: true,\n data: dbConfig || {\n firstDayOfWeek: 1,\n workingHoursStart: '09:00',\n workingHoursEnd: '18:00',\n timeZone: 'Asia/Shanghai',\n dateFormat: 'YYYY-MM-DD',\n timeFormat: 'HH:mm',\n defaultView: 'month',\n defaultEventColor: '#3B82F6',\n weekends: true,\n eventColors: {}\n },\n message: '获取配置成功'\n });\n } catch (error) {\n console.error('获取配置失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n },\n PUT: async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n const updatedConfig = await calendarDbService.upsertUserConfig(user.id, body);\n\n return NextResponse.json({\n success: true,\n data: updatedConfig,\n message: '更新配置成功'\n });\n } catch (error) {\n console.error('更新配置失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n }\n };\n}\n\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -1,5 +1,7 @@
1
1
  import * as drizzle_orm from 'drizzle-orm';
2
2
  import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
3
+ export { CalendarRouteConfig, createBatchDeleteEventsHandler, createConfigHandler, createCreateEventHandler, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler } from './routes/index.mjs';
4
+ import 'next/server';
3
5
 
4
6
  /**
5
7
  * 简化版日历数据库服务
@@ -13,6 +15,10 @@ declare class CalendarDbService {
13
15
  * 设置数据库实例
14
16
  */
15
17
  setDb(db: any): void;
18
+ /**
19
+ * 数据库是否已初始化
20
+ */
21
+ isConfigured(): boolean;
16
22
  /**
17
23
  * 获取数据库实例
18
24
  */
@@ -1,5 +1,7 @@
1
1
  import * as drizzle_orm from 'drizzle-orm';
2
2
  import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
3
+ export { CalendarRouteConfig, createBatchDeleteEventsHandler, createConfigHandler, createCreateEventHandler, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler } from './routes/index.js';
4
+ import 'next/server';
3
5
 
4
6
  /**
5
7
  * 简化版日历数据库服务
@@ -13,6 +15,10 @@ declare class CalendarDbService {
13
15
  * 设置数据库实例
14
16
  */
15
17
  setDb(db: any): void;
18
+ /**
19
+ * 数据库是否已初始化
20
+ */
21
+ isConfigured(): boolean;
16
22
  /**
17
23
  * 获取数据库实例
18
24
  */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkWC5QFO3T_js = require('../chunk-WC5QFO3T.js');
3
+ var chunkSYBHDB2D_js = require('../chunk-SYBHDB2D.js');
4
4
  require('../chunk-SVWQN2LR.js');
5
5
  require('../chunk-Z6ZWNWWR.js');
6
6
 
@@ -150,7 +150,7 @@ function createSuccessResponse(data, message) {
150
150
  }
151
151
  async function checkEventPermission(eventId, userId, requiredPermission = "read") {
152
152
  try {
153
- const event = await chunkWC5QFO3T_js.calendarDbService.getEventById(eventId);
153
+ const event = await chunkSYBHDB2D_js.calendarDbService.getEventById(eventId);
154
154
  if (!event) return false;
155
155
  return event.userId === userId;
156
156
  } catch (error) {
@@ -163,47 +163,75 @@ var CALENDAR_SERVER_MODULE_NAME = "sa2kit/calendar/server";
163
163
 
164
164
  Object.defineProperty(exports, "calendarConfigs", {
165
165
  enumerable: true,
166
- get: function () { return chunkWC5QFO3T_js.calendarConfigs; }
166
+ get: function () { return chunkSYBHDB2D_js.calendarConfigs; }
167
167
  });
168
168
  Object.defineProperty(exports, "calendarConfigsRelations", {
169
169
  enumerable: true,
170
- get: function () { return chunkWC5QFO3T_js.calendarConfigsRelations; }
170
+ get: function () { return chunkSYBHDB2D_js.calendarConfigsRelations; }
171
171
  });
172
172
  Object.defineProperty(exports, "calendarDbService", {
173
173
  enumerable: true,
174
- get: function () { return chunkWC5QFO3T_js.calendarDbService; }
174
+ get: function () { return chunkSYBHDB2D_js.calendarDbService; }
175
175
  });
176
176
  Object.defineProperty(exports, "calendarEvents", {
177
177
  enumerable: true,
178
- get: function () { return chunkWC5QFO3T_js.calendarEvents; }
178
+ get: function () { return chunkSYBHDB2D_js.calendarEvents; }
179
179
  });
180
180
  Object.defineProperty(exports, "calendarEventsRelations", {
181
181
  enumerable: true,
182
- get: function () { return chunkWC5QFO3T_js.calendarEventsRelations; }
182
+ get: function () { return chunkSYBHDB2D_js.calendarEventsRelations; }
183
+ });
184
+ Object.defineProperty(exports, "createBatchDeleteEventsHandler", {
185
+ enumerable: true,
186
+ get: function () { return chunkSYBHDB2D_js.createBatchDeleteEventsHandler; }
187
+ });
188
+ Object.defineProperty(exports, "createConfigHandler", {
189
+ enumerable: true,
190
+ get: function () { return chunkSYBHDB2D_js.createConfigHandler; }
191
+ });
192
+ Object.defineProperty(exports, "createCreateEventHandler", {
193
+ enumerable: true,
194
+ get: function () { return chunkSYBHDB2D_js.createCreateEventHandler; }
195
+ });
196
+ Object.defineProperty(exports, "createDeleteEventHandler", {
197
+ enumerable: true,
198
+ get: function () { return chunkSYBHDB2D_js.createDeleteEventHandler; }
199
+ });
200
+ Object.defineProperty(exports, "createGetEventByIdHandler", {
201
+ enumerable: true,
202
+ get: function () { return chunkSYBHDB2D_js.createGetEventByIdHandler; }
203
+ });
204
+ Object.defineProperty(exports, "createGetEventsHandler", {
205
+ enumerable: true,
206
+ get: function () { return chunkSYBHDB2D_js.createGetEventsHandler; }
207
+ });
208
+ Object.defineProperty(exports, "createUpdateEventHandler", {
209
+ enumerable: true,
210
+ get: function () { return chunkSYBHDB2D_js.createUpdateEventHandler; }
183
211
  });
184
212
  Object.defineProperty(exports, "eventShares", {
185
213
  enumerable: true,
186
- get: function () { return chunkWC5QFO3T_js.eventShares; }
214
+ get: function () { return chunkSYBHDB2D_js.eventShares; }
187
215
  });
188
216
  Object.defineProperty(exports, "eventSharesRelations", {
189
217
  enumerable: true,
190
- get: function () { return chunkWC5QFO3T_js.eventSharesRelations; }
218
+ get: function () { return chunkSYBHDB2D_js.eventSharesRelations; }
191
219
  });
192
220
  Object.defineProperty(exports, "recurrenceRules", {
193
221
  enumerable: true,
194
- get: function () { return chunkWC5QFO3T_js.recurrenceRules; }
222
+ get: function () { return chunkSYBHDB2D_js.recurrenceRules; }
195
223
  });
196
224
  Object.defineProperty(exports, "recurrenceRulesRelations", {
197
225
  enumerable: true,
198
- get: function () { return chunkWC5QFO3T_js.recurrenceRulesRelations; }
226
+ get: function () { return chunkSYBHDB2D_js.recurrenceRulesRelations; }
199
227
  });
200
228
  Object.defineProperty(exports, "reminders", {
201
229
  enumerable: true,
202
- get: function () { return chunkWC5QFO3T_js.reminders; }
230
+ get: function () { return chunkSYBHDB2D_js.reminders; }
203
231
  });
204
232
  Object.defineProperty(exports, "remindersRelations", {
205
233
  enumerable: true,
206
- get: function () { return chunkWC5QFO3T_js.remindersRelations; }
234
+ get: function () { return chunkSYBHDB2D_js.remindersRelations; }
207
235
  });
208
236
  exports.CALENDAR_SERVER_MODULE_NAME = CALENDAR_SERVER_MODULE_NAME;
209
237
  exports.CALENDAR_SERVER_MODULE_VERSION = CALENDAR_SERVER_MODULE_VERSION;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/calendar/server.ts"],"names":["calendarDbService"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * Calendar 模块 - 服务端专用导出\n * \n * 这个文件包含只能在服务端使用的功能,包括:\n * - 数据库服务层\n * - 服务端配置和工具\n * - API处理函数\n * \n * 注意:这些导出只能在服务端环境中使用,不要在客户端组件中导入!\n * \n * 使用方式:\n * ```typescript\n * import { calendarDbService } from 'sa2kit/calendar/server';\n * ```\n * \n * @version 1.0.0\n * @author Profile-v1 Team\n */\n\n// ===== 数据库服务导出 =====\n/**\n * 日历数据库服务\n * \n * 提供所有与日历相关的数据库操作,包括:\n * - 事件的CRUD操作\n * - 重复规则管理\n * - 提醒管理\n * - 用户配置管理\n * - 事件分享功能\n */\nimport { calendarDbService } from './db/calendarDbService';\nexport { calendarDbService };\n\n// ===== 数据库Schema导出 =====\n/**\n * 数据库表结构和关系定义\n * \n * 用于数据库迁移、类型定义和关系查询\n */\nexport {\n calendarEvents,\n recurrenceRules,\n reminders,\n calendarConfigs,\n eventShares,\n calendarEventsRelations,\n recurrenceRulesRelations,\n remindersRelations,\n calendarConfigsRelations,\n eventSharesRelations,\n} from './db/schema';\n\n// ===== 服务端工具函数 =====\n/**\n * 服务端专用的工具函数和常量\n */\n\n/**\n * 默认日历配置\n */\nexport const DEFAULT_CALENDAR_CONFIG = {\n firstDayOfWeek: 1, // 周一开始\n workingHours: {\n start: '09:00',\n end: '18:00'\n },\n timeZone: 'Asia/Shanghai',\n dateFormat: 'YYYY-MM-DD',\n timeFormat: 'HH:mm',\n defaultView: 'month' as const,\n defaultEventColor: '#3B82F6',\n weekends: true,\n eventColors: {\n blue: '#3B82F6',\n green: '#10B981',\n purple: '#8B5CF6',\n red: '#EF4444',\n yellow: '#F59E0B',\n pink: '#EC4899',\n indigo: '#6366F1',\n gray: '#6B7280'\n }\n};\n\n/**\n * 验证事件数据的服务端函数\n */\nexport function validateEventData(eventData: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // 验证必需字段\n if (!eventData.title || typeof eventData.title !== 'string' || eventData.title.trim() === '') {\n errors.push('事件标题不能为空');\n }\n\n if (!eventData.startTime) {\n errors.push('开始时间不能为空');\n }\n\n if (!eventData.endTime) {\n errors.push('结束时间不能为空');\n }\n\n // 验证时间逻辑\n if (eventData.startTime && eventData.endTime) {\n const startTime = new Date(eventData.startTime);\n const endTime = new Date(eventData.endTime);\n\n if (isNaN(startTime.getTime())) {\n errors.push('开始时间格式无效');\n }\n\n if (isNaN(endTime.getTime())) {\n errors.push('结束时间格式无效');\n }\n\n if (startTime.getTime() >= endTime.getTime()) {\n errors.push('结束时间必须晚于开始时间');\n }\n }\n\n // 验证颜色格式\n if (eventData.color && !/^#[0-9A-Fa-f]{6}$/.test(eventData.color)) {\n errors.push('颜色格式无效,请使用十六进制格式(如 #FF0000)');\n }\n\n // 验证用户ID\n if (!eventData.userId || typeof eventData.userId !== 'number' || eventData.userId <= 0) {\n errors.push('用户ID无效');\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n}\n\n/**\n * 验证重复规则数据\n */\nexport function validateRecurrenceData(recurrenceData: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!recurrenceData.ruleType) {\n errors.push('重复类型不能为空');\n }\n\n const validRuleTypes = ['daily', 'weekly', 'monthly', 'yearly', 'custom'];\n if (recurrenceData.ruleType && !validRuleTypes.includes(recurrenceData.ruleType)) {\n errors.push('重复类型无效');\n }\n\n if (!recurrenceData.interval || recurrenceData.interval < 1) {\n errors.push('重复间隔必须大于0');\n }\n\n // 验证结束条件\n if (recurrenceData.endDate && recurrenceData.count) {\n errors.push('不能同时设置结束日期和重复次数');\n }\n\n if (recurrenceData.endDate) {\n const endDate = new Date(recurrenceData.endDate);\n if (isNaN(endDate.getTime())) {\n errors.push('结束日期格式无效');\n }\n }\n\n if (recurrenceData.count && (recurrenceData.count < 1 || recurrenceData.count > 1000)) {\n errors.push('重复次数必须在1-1000之间');\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n}\n\n/**\n * 生成重复事件的服务端函数\n */\nexport function generateRecurrenceInstances(\n baseEvent: any,\n recurrenceRule: any,\n maxInstances: number = 100\n): Array<{ startTime: Date; endTime: Date }> {\n const instances: Array<{ startTime: Date; endTime: Date }> = [];\n const startTime = new Date(baseEvent.startTime);\n const endTime = new Date(baseEvent.endTime);\n const duration = endTime.getTime() - startTime.getTime();\n\n let currentDate = new Date(startTime);\n let count = 0;\n\n const endDate = recurrenceRule.endDate ? new Date(recurrenceRule.endDate) : null;\n const maxCount = recurrenceRule.count || maxInstances;\n\n while (count < maxCount) {\n // 检查是否超过结束日期\n if (endDate && currentDate > endDate) {\n break;\n }\n\n // 添加实例\n instances.push({\n startTime: new Date(currentDate),\n endTime: new Date(currentDate.getTime() + duration)\n });\n\n count++;\n\n // 计算下一个实例的日期\n switch (recurrenceRule.ruleType) {\n case 'daily':\n currentDate.setDate(currentDate.getDate() + recurrenceRule.interval);\n break;\n case 'weekly':\n currentDate.setDate(currentDate.getDate() + (7 * recurrenceRule.interval));\n break;\n case 'monthly':\n currentDate.setMonth(currentDate.getMonth() + recurrenceRule.interval);\n break;\n case 'yearly':\n currentDate.setFullYear(currentDate.getFullYear() + recurrenceRule.interval);\n break;\n default:\n // 对于自定义规则,需要更复杂的逻辑\n break;\n }\n }\n\n return instances;\n}\n\n/**\n * 获取提醒发送时间\n */\nexport function calculateReminderTime(eventStartTime: Date, reminderOffset: number): Date {\n return new Date(eventStartTime.getTime() - reminderOffset);\n}\n\n/**\n * 格式化错误响应\n */\nexport function createErrorResponse(message: string, errors?: string[]): Response {\n return Response.json(\n {\n success: false,\n error: message,\n errors: errors\n },\n { status: 400 }\n );\n}\n\n/**\n * 格式化成功响应\n */\nexport function createSuccessResponse(data: any, message?: string): Response {\n return Response.json({\n success: true,\n data,\n message\n });\n}\n\n/**\n * 检查用户是否有权限访问事件\n */\nexport async function checkEventPermission(\n eventId: number,\n userId: number,\n requiredPermission: 'read' | 'write' = 'read'\n): Promise<boolean> {\n try {\n // 检查是否是事件创建者\n const event = await calendarDbService.getEventById(eventId);\n if (!event) return false;\n \n // 目前只允许事件创建者访问\n return event.userId === userId;\n } catch (error) {\n console.error('检查事件权限时出错:', error);\n return false;\n }\n}\n\n// ===== 模块信息 =====\nexport const CALENDAR_SERVER_MODULE_VERSION = '1.0.0';\nexport const CALENDAR_SERVER_MODULE_NAME = 'sa2kit/calendar/server'; "]}
1
+ {"version":3,"sources":["../../src/calendar/server.ts"],"names":["calendarDbService"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * Calendar 模块 - 服务端专用导出\n * \n * 这个文件包含只能在服务端使用的功能,包括:\n * - 数据库服务层\n * - 服务端配置和工具\n * - API处理函数\n * \n * 注意:这些导出只能在服务端环境中使用,不要在客户端组件中导入!\n * \n * 使用方式:\n * ```typescript\n * import { calendarDbService } from 'sa2kit/calendar/server';\n * ```\n * \n * @version 1.0.0\n * @author Profile-v1 Team\n */\n\n// ===== 数据库服务导出 =====\n/**\n * 日历数据库服务\n * \n * 提供所有与日历相关的数据库操作,包括:\n * - 事件的CRUD操作\n * - 重复规则管理\n * - 提醒管理\n * - 用户配置管理\n * - 事件分享功能\n */\nimport { calendarDbService } from './server/services';\nexport { calendarDbService };\n\n// ===== 数据库Schema导出 =====\n/**\n * 数据库表结构和关系定义\n * \n * 用于数据库迁移、类型定义和关系查询\n */\nexport {\n calendarEvents,\n recurrenceRules,\n reminders,\n calendarConfigs,\n eventShares,\n calendarEventsRelations,\n recurrenceRulesRelations,\n remindersRelations,\n calendarConfigsRelations,\n eventSharesRelations,\n} from './db/schema';\n\n// 新分层 server 路由工厂导出\nexport * from './server/routes';\n\n// ===== 服务端工具函数 =====\n/**\n * 服务端专用的工具函数和常量\n */\n\n/**\n * 默认日历配置\n */\nexport const DEFAULT_CALENDAR_CONFIG = {\n firstDayOfWeek: 1, // 周一开始\n workingHours: {\n start: '09:00',\n end: '18:00'\n },\n timeZone: 'Asia/Shanghai',\n dateFormat: 'YYYY-MM-DD',\n timeFormat: 'HH:mm',\n defaultView: 'month' as const,\n defaultEventColor: '#3B82F6',\n weekends: true,\n eventColors: {\n blue: '#3B82F6',\n green: '#10B981',\n purple: '#8B5CF6',\n red: '#EF4444',\n yellow: '#F59E0B',\n pink: '#EC4899',\n indigo: '#6366F1',\n gray: '#6B7280'\n }\n};\n\n/**\n * 验证事件数据的服务端函数\n */\nexport function validateEventData(eventData: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // 验证必需字段\n if (!eventData.title || typeof eventData.title !== 'string' || eventData.title.trim() === '') {\n errors.push('事件标题不能为空');\n }\n\n if (!eventData.startTime) {\n errors.push('开始时间不能为空');\n }\n\n if (!eventData.endTime) {\n errors.push('结束时间不能为空');\n }\n\n // 验证时间逻辑\n if (eventData.startTime && eventData.endTime) {\n const startTime = new Date(eventData.startTime);\n const endTime = new Date(eventData.endTime);\n\n if (isNaN(startTime.getTime())) {\n errors.push('开始时间格式无效');\n }\n\n if (isNaN(endTime.getTime())) {\n errors.push('结束时间格式无效');\n }\n\n if (startTime.getTime() >= endTime.getTime()) {\n errors.push('结束时间必须晚于开始时间');\n }\n }\n\n // 验证颜色格式\n if (eventData.color && !/^#[0-9A-Fa-f]{6}$/.test(eventData.color)) {\n errors.push('颜色格式无效,请使用十六进制格式(如 #FF0000)');\n }\n\n // 验证用户ID\n if (!eventData.userId || typeof eventData.userId !== 'number' || eventData.userId <= 0) {\n errors.push('用户ID无效');\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n}\n\n/**\n * 验证重复规则数据\n */\nexport function validateRecurrenceData(recurrenceData: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!recurrenceData.ruleType) {\n errors.push('重复类型不能为空');\n }\n\n const validRuleTypes = ['daily', 'weekly', 'monthly', 'yearly', 'custom'];\n if (recurrenceData.ruleType && !validRuleTypes.includes(recurrenceData.ruleType)) {\n errors.push('重复类型无效');\n }\n\n if (!recurrenceData.interval || recurrenceData.interval < 1) {\n errors.push('重复间隔必须大于0');\n }\n\n // 验证结束条件\n if (recurrenceData.endDate && recurrenceData.count) {\n errors.push('不能同时设置结束日期和重复次数');\n }\n\n if (recurrenceData.endDate) {\n const endDate = new Date(recurrenceData.endDate);\n if (isNaN(endDate.getTime())) {\n errors.push('结束日期格式无效');\n }\n }\n\n if (recurrenceData.count && (recurrenceData.count < 1 || recurrenceData.count > 1000)) {\n errors.push('重复次数必须在1-1000之间');\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n}\n\n/**\n * 生成重复事件的服务端函数\n */\nexport function generateRecurrenceInstances(\n baseEvent: any,\n recurrenceRule: any,\n maxInstances: number = 100\n): Array<{ startTime: Date; endTime: Date }> {\n const instances: Array<{ startTime: Date; endTime: Date }> = [];\n const startTime = new Date(baseEvent.startTime);\n const endTime = new Date(baseEvent.endTime);\n const duration = endTime.getTime() - startTime.getTime();\n\n let currentDate = new Date(startTime);\n let count = 0;\n\n const endDate = recurrenceRule.endDate ? new Date(recurrenceRule.endDate) : null;\n const maxCount = recurrenceRule.count || maxInstances;\n\n while (count < maxCount) {\n // 检查是否超过结束日期\n if (endDate && currentDate > endDate) {\n break;\n }\n\n // 添加实例\n instances.push({\n startTime: new Date(currentDate),\n endTime: new Date(currentDate.getTime() + duration)\n });\n\n count++;\n\n // 计算下一个实例的日期\n switch (recurrenceRule.ruleType) {\n case 'daily':\n currentDate.setDate(currentDate.getDate() + recurrenceRule.interval);\n break;\n case 'weekly':\n currentDate.setDate(currentDate.getDate() + (7 * recurrenceRule.interval));\n break;\n case 'monthly':\n currentDate.setMonth(currentDate.getMonth() + recurrenceRule.interval);\n break;\n case 'yearly':\n currentDate.setFullYear(currentDate.getFullYear() + recurrenceRule.interval);\n break;\n default:\n // 对于自定义规则,需要更复杂的逻辑\n break;\n }\n }\n\n return instances;\n}\n\n/**\n * 获取提醒发送时间\n */\nexport function calculateReminderTime(eventStartTime: Date, reminderOffset: number): Date {\n return new Date(eventStartTime.getTime() - reminderOffset);\n}\n\n/**\n * 格式化错误响应\n */\nexport function createErrorResponse(message: string, errors?: string[]): Response {\n return Response.json(\n {\n success: false,\n error: message,\n errors: errors\n },\n { status: 400 }\n );\n}\n\n/**\n * 格式化成功响应\n */\nexport function createSuccessResponse(data: any, message?: string): Response {\n return Response.json({\n success: true,\n data,\n message\n });\n}\n\n/**\n * 检查用户是否有权限访问事件\n */\nexport async function checkEventPermission(\n eventId: number,\n userId: number,\n requiredPermission: 'read' | 'write' = 'read'\n): Promise<boolean> {\n try {\n // 检查是否是事件创建者\n const event = await calendarDbService.getEventById(eventId);\n if (!event) return false;\n \n // 目前只允许事件创建者访问\n return event.userId === userId;\n } catch (error) {\n console.error('检查事件权限时出错:', error);\n return false;\n }\n}\n\n// ===== 模块信息 =====\nexport const CALENDAR_SERVER_MODULE_VERSION = '1.0.0';\nexport const CALENDAR_SERVER_MODULE_NAME = 'sa2kit/calendar/server'; "]}
@@ -1,5 +1,5 @@
1
- import { calendarDbService } from '../chunk-GVVS4IMM.mjs';
2
- export { calendarConfigs, calendarConfigsRelations, calendarDbService, calendarEvents, calendarEventsRelations, eventShares, eventSharesRelations, recurrenceRules, recurrenceRulesRelations, reminders, remindersRelations } from '../chunk-GVVS4IMM.mjs';
1
+ import { calendarDbService } from '../chunk-PJ4KYAQZ.mjs';
2
+ export { calendarConfigs, calendarConfigsRelations, calendarDbService, calendarEvents, calendarEventsRelations, createBatchDeleteEventsHandler, createConfigHandler, createCreateEventHandler, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler, eventShares, eventSharesRelations, recurrenceRules, recurrenceRulesRelations, reminders, remindersRelations } from '../chunk-PJ4KYAQZ.mjs';
3
3
  import '../chunk-AIKEVVDR.mjs';
4
4
  import '../chunk-WMJKH4XE.mjs';
5
5