ocean-brain 0.3.4 → 0.4.1

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 (255) hide show
  1. package/dist/index.js +5 -0
  2. package/package.json +6 -5
  3. package/scripts/postinstall-prisma.mjs +3 -2
  4. package/server/client/dist/assets/Calendar-D4KkvcU8.js +25 -0
  5. package/server/client/dist/assets/Callout-CaSzc-1y.js +1 -0
  6. package/server/client/dist/assets/Graph-C8pBdJzV.js +1 -0
  7. package/server/client/dist/assets/{Image-ZxF459sC.js → Image-DlJ4MDo3.js} +1 -1
  8. package/server/client/dist/assets/{Image.es-BQfyKc2-.js → Image.es-C8g5NwNt.js} +1 -1
  9. package/server/client/dist/assets/Note-ODOESft3.js +21 -0
  10. package/server/client/dist/assets/Note-W4f6H9K0.css +1 -0
  11. package/server/client/dist/assets/Plus.es-Bkl1ZXE0.js +1 -0
  12. package/server/client/dist/assets/Reminders-FrTR9ny8.js +1 -0
  13. package/server/client/dist/assets/Search-BPf2LO1Y.js +1 -0
  14. package/server/client/dist/assets/{SurfaceCard-nZNf9lyE.js → SurfaceCard-WSk7zWeM.js} +1 -1
  15. package/server/client/dist/assets/Tag-uArdLjo1.js +1 -0
  16. package/server/client/dist/assets/TagNotes-DDvXHB9I.js +1 -0
  17. package/server/client/dist/assets/{Trash.es-BGoN5q9L.js → Trash.es-DumPfiUz.js} +1 -1
  18. package/server/client/dist/assets/ViewNotes-BVu9lEs-.js +1 -0
  19. package/server/client/dist/assets/Views-D4LGh30P.js +1 -0
  20. package/server/client/dist/assets/{image.api-0mMkElZk.js → image.api-D3Ei3fbf.js} +1 -1
  21. package/server/client/dist/assets/index-46ZUXbW5.js +232 -0
  22. package/server/client/dist/assets/index-C7YGbIuA.js +1 -0
  23. package/server/client/dist/assets/{index-DL7pUwq2.css → index-D2gRB1ig.css} +1 -1
  24. package/server/client/dist/assets/manage-image-DiuREdeE.js +1 -0
  25. package/server/client/dist/assets/manage-image-detail-D8Eorq3u.js +1 -0
  26. package/server/client/dist/assets/mcp-CvCGaYSz.js +1 -0
  27. package/server/client/dist/assets/{note-core-BCgMq5QA.js → note-core-GgFcksAF.js} +1 -1
  28. package/server/client/dist/assets/{note-vendor-BofYbzmZ.js → note-vendor-B0t5F04o.js} +5 -5
  29. package/server/client/dist/assets/{placeholder-i-uNe71U.js → placeholder-znZDfNAE.js} +2 -2
  30. package/server/client/dist/assets/trash-R0sww0ur.js +1 -0
  31. package/server/client/dist/assets/{useReminderMutate-tNMwwRnx.js → useReminderMutate-Bkj-oIm4.js} +2 -2
  32. package/server/client/dist/assets/view-dashboard-ClpF_qLM.js +90 -0
  33. package/server/client/dist/index.html +4 -4
  34. package/server/dist/app.js +8 -84
  35. package/server/dist/app.js.map +1 -1
  36. package/server/dist/features/auth/http/api.js +40 -0
  37. package/server/dist/features/auth/http/api.js.map +1 -0
  38. package/server/dist/features/auth/http/login-page.js +28 -0
  39. package/server/dist/features/auth/http/login-page.js.map +1 -0
  40. package/server/dist/features/auth/http/pages.js +50 -0
  41. package/server/dist/features/auth/http/pages.js.map +1 -0
  42. package/server/dist/features/auth/service.js +63 -0
  43. package/server/dist/features/auth/service.js.map +1 -0
  44. package/server/dist/features/cache/graphql/cache.field.resolver.js +5 -0
  45. package/server/dist/features/cache/graphql/cache.field.resolver.js.map +1 -0
  46. package/server/dist/features/cache/graphql/cache.mutation.resolver.js +49 -0
  47. package/server/dist/features/cache/graphql/cache.mutation.resolver.js.map +1 -0
  48. package/server/dist/features/cache/graphql/cache.query.resolver.js +21 -0
  49. package/server/dist/features/cache/graphql/cache.query.resolver.js.map +1 -0
  50. package/server/dist/features/cache/graphql/cache.resolver.js +12 -0
  51. package/server/dist/features/cache/graphql/cache.resolver.js.map +1 -0
  52. package/server/dist/features/cache/graphql/cache.type-defs.js +32 -0
  53. package/server/dist/features/cache/graphql/cache.type-defs.js.map +1 -0
  54. package/server/dist/features/cache/graphql/index.js +21 -0
  55. package/server/dist/features/cache/graphql/index.js.map +1 -0
  56. package/server/dist/features/image/graphql/image.field.resolver.js +14 -0
  57. package/server/dist/features/image/graphql/image.field.resolver.js.map +1 -0
  58. package/server/dist/features/image/graphql/image.mutation.resolver.js +21 -0
  59. package/server/dist/features/image/graphql/image.mutation.resolver.js.map +1 -0
  60. package/server/dist/features/image/graphql/image.query.resolver.js +40 -0
  61. package/server/dist/features/image/graphql/image.query.resolver.js.map +1 -0
  62. package/server/dist/features/image/graphql/image.resolver.js +12 -0
  63. package/server/dist/features/image/graphql/image.resolver.js.map +1 -0
  64. package/server/dist/features/image/graphql/image.type-defs.js +31 -0
  65. package/server/dist/features/image/graphql/image.type-defs.js.map +1 -0
  66. package/server/dist/features/image/graphql/index.js +16 -0
  67. package/server/dist/features/image/graphql/index.js.map +1 -0
  68. package/server/dist/features/image/http/upload.js +48 -0
  69. package/server/dist/features/image/http/upload.js.map +1 -0
  70. package/server/dist/features/image/services/delete.js +52 -0
  71. package/server/dist/features/image/services/delete.js.map +1 -0
  72. package/server/dist/{modules/remote-image.js → features/image/services/remote-fetch.js} +1 -1
  73. package/server/dist/features/image/services/remote-fetch.js.map +1 -0
  74. package/server/dist/{modules/image-upload.js → features/image/services/upload.js} +4 -8
  75. package/server/dist/features/image/services/upload.js.map +1 -0
  76. package/server/dist/{views/mcp-admin.js → features/mcp-admin/http/handlers.js} +3 -3
  77. package/server/dist/features/mcp-admin/http/handlers.js.map +1 -0
  78. package/server/dist/{modules/mcp-admin.js → features/mcp-admin/service.js} +3 -3
  79. package/server/dist/features/mcp-admin/service.js.map +1 -0
  80. package/server/dist/features/note/graphql/index.js +8 -0
  81. package/server/dist/features/note/graphql/index.js.map +1 -0
  82. package/server/dist/features/note/graphql/note.field.resolver.js +12 -0
  83. package/server/dist/features/note/graphql/note.field.resolver.js.map +1 -0
  84. package/server/dist/features/note/graphql/note.graphql.shared.js +23 -0
  85. package/server/dist/features/note/graphql/note.graphql.shared.js.map +1 -0
  86. package/server/dist/features/note/graphql/note.mutation.resolver.js +140 -0
  87. package/server/dist/features/note/graphql/note.mutation.resolver.js.map +1 -0
  88. package/server/dist/features/note/graphql/note.query.resolver.js +385 -0
  89. package/server/dist/features/note/graphql/note.query.resolver.js.map +1 -0
  90. package/server/dist/features/note/graphql/note.resolver.js +14 -0
  91. package/server/dist/features/note/graphql/note.resolver.js.map +1 -0
  92. package/server/dist/features/note/graphql/note.type-defs.js +187 -0
  93. package/server/dist/features/note/graphql/note.type-defs.js.map +1 -0
  94. package/server/dist/{views/note.js → features/note/http/mcp.js} +27 -15
  95. package/server/dist/features/note/http/mcp.js.map +1 -0
  96. package/server/dist/{modules/note-authoring.js → features/note/services/authoring.js} +25 -7
  97. package/server/dist/features/note/services/authoring.js.map +1 -0
  98. package/server/dist/{modules/note-cleanup.js → features/note/services/cleanup.js} +14 -23
  99. package/server/dist/features/note/services/cleanup.js.map +1 -0
  100. package/server/dist/features/note/services/search-backfill.js +84 -0
  101. package/server/dist/features/note/services/search-backfill.js.map +1 -0
  102. package/server/dist/features/note/services/search.js +197 -0
  103. package/server/dist/features/note/services/search.js.map +1 -0
  104. package/server/dist/{modules/note-snapshot.js → features/note/services/snapshot.js} +51 -49
  105. package/server/dist/features/note/services/snapshot.js.map +1 -0
  106. package/server/dist/{modules/note-tag-filter.js → features/note/services/tag-filter.js} +2 -6
  107. package/server/dist/features/note/services/tag-filter.js.map +1 -0
  108. package/server/dist/{modules/note-trash.js → features/note/services/trash.js} +64 -34
  109. package/server/dist/features/note/services/trash.js.map +1 -0
  110. package/server/dist/features/placeholder/graphql/index.js +27 -0
  111. package/server/dist/features/placeholder/graphql/index.js.map +1 -0
  112. package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js +5 -0
  113. package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js.map +1 -0
  114. package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js +72 -0
  115. package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js.map +1 -0
  116. package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js +36 -0
  117. package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js.map +1 -0
  118. package/server/dist/features/placeholder/graphql/placeholder.resolver.js +12 -0
  119. package/server/dist/features/placeholder/graphql/placeholder.resolver.js.map +1 -0
  120. package/server/dist/features/placeholder/graphql/placeholder.type-defs.js +50 -0
  121. package/server/dist/features/placeholder/graphql/placeholder.type-defs.js.map +1 -0
  122. package/server/dist/features/reminder/graphql/index.js +27 -0
  123. package/server/dist/features/reminder/graphql/index.js.map +1 -0
  124. package/server/dist/features/reminder/graphql/reminder.field.resolver.js +10 -0
  125. package/server/dist/features/reminder/graphql/reminder.field.resolver.js.map +1 -0
  126. package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js +59 -0
  127. package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js.map +1 -0
  128. package/server/dist/features/reminder/graphql/reminder.query.resolver.js +79 -0
  129. package/server/dist/features/reminder/graphql/reminder.query.resolver.js.map +1 -0
  130. package/server/dist/features/reminder/graphql/reminder.resolver.js +12 -0
  131. package/server/dist/features/reminder/graphql/reminder.resolver.js.map +1 -0
  132. package/server/dist/features/reminder/graphql/reminder.type-defs.js +51 -0
  133. package/server/dist/features/reminder/graphql/reminder.type-defs.js.map +1 -0
  134. package/server/dist/features/tag/graphql/index.js +14 -0
  135. package/server/dist/features/tag/graphql/index.js.map +1 -0
  136. package/server/dist/features/tag/graphql/tag.field.resolver.js +10 -0
  137. package/server/dist/features/tag/graphql/tag.field.resolver.js.map +1 -0
  138. package/server/dist/features/tag/graphql/tag.mutation.resolver.js +15 -0
  139. package/server/dist/features/tag/graphql/tag.mutation.resolver.js.map +1 -0
  140. package/server/dist/features/tag/graphql/tag.query.resolver.js +26 -0
  141. package/server/dist/features/tag/graphql/tag.query.resolver.js.map +1 -0
  142. package/server/dist/features/tag/graphql/tag.resolver.js +12 -0
  143. package/server/dist/features/tag/graphql/tag.resolver.js.map +1 -0
  144. package/server/dist/features/tag/graphql/tag.type-defs.js +46 -0
  145. package/server/dist/features/tag/graphql/tag.type-defs.js.map +1 -0
  146. package/server/dist/{views/tag.js → features/tag/http/mcp.js} +3 -3
  147. package/server/dist/features/tag/http/mcp.js.map +1 -0
  148. package/server/dist/{modules/tag-organization.js → features/tag/services/organization.js} +38 -8
  149. package/server/dist/features/tag/services/organization.js.map +1 -0
  150. package/server/dist/features/view/graphql/index.js +11 -0
  151. package/server/dist/features/view/graphql/index.js.map +1 -0
  152. package/server/dist/features/view/graphql/view.mutation.resolver.js +53 -0
  153. package/server/dist/features/view/graphql/view.mutation.resolver.js.map +1 -0
  154. package/server/dist/features/view/graphql/view.query.resolver.js +29 -0
  155. package/server/dist/features/view/graphql/view.query.resolver.js.map +1 -0
  156. package/server/dist/features/view/graphql/view.resolver.js +10 -0
  157. package/server/dist/features/view/graphql/view.resolver.js.map +1 -0
  158. package/server/dist/features/view/graphql/view.type-defs.js +63 -0
  159. package/server/dist/features/view/graphql/view.type-defs.js.map +1 -0
  160. package/server/dist/features/view/services/workspace.js +432 -0
  161. package/server/dist/features/view/services/workspace.js.map +1 -0
  162. package/server/dist/main.js +14 -0
  163. package/server/dist/main.js.map +1 -1
  164. package/server/dist/modules/auth-guard.js +16 -21
  165. package/server/dist/modules/auth-guard.js.map +1 -1
  166. package/server/dist/modules/auth-mode.js +16 -41
  167. package/server/dist/modules/auth-mode.js.map +1 -1
  168. package/server/dist/modules/blocknote.js +8 -17
  169. package/server/dist/modules/blocknote.js.map +1 -1
  170. package/server/dist/modules/data-maintenance.js +75 -0
  171. package/server/dist/modules/data-maintenance.js.map +1 -0
  172. package/server/dist/modules/error-handler.js.map +1 -1
  173. package/server/dist/modules/logger.js +5 -23
  174. package/server/dist/modules/logger.js.map +1 -1
  175. package/server/dist/modules/mcp-auth.js +4 -5
  176. package/server/dist/modules/mcp-auth.js.map +1 -1
  177. package/server/dist/modules/mcp-token.js.map +1 -1
  178. package/server/dist/modules/prisma-runtime.js +2 -7
  179. package/server/dist/modules/prisma-runtime.js.map +1 -1
  180. package/server/dist/modules/recovery-retention.js +1 -1
  181. package/server/dist/modules/recovery-retention.js.map +1 -1
  182. package/server/dist/modules/server-events-handler.js +34 -0
  183. package/server/dist/modules/server-events-handler.js.map +1 -0
  184. package/server/dist/modules/server-events.js +32 -0
  185. package/server/dist/modules/server-events.js.map +1 -0
  186. package/server/dist/modules/use-async.js.map +1 -1
  187. package/server/dist/paths.js.map +1 -1
  188. package/server/dist/routes/api.js +34 -0
  189. package/server/dist/routes/api.js.map +1 -0
  190. package/server/dist/routes/auth-pages.js +11 -0
  191. package/server/dist/routes/auth-pages.js.map +1 -0
  192. package/server/dist/routes/client.js +27 -0
  193. package/server/dist/routes/client.js.map +1 -0
  194. package/server/dist/routes/graphql.js +33 -0
  195. package/server/dist/routes/graphql.js.map +1 -0
  196. package/server/dist/routes/index.js +11 -0
  197. package/server/dist/routes/index.js.map +1 -0
  198. package/server/dist/routes/mcp.js +30 -0
  199. package/server/dist/routes/mcp.js.map +1 -0
  200. package/server/dist/schema/index.js +11 -8
  201. package/server/dist/schema/index.js.map +1 -1
  202. package/server/dist/types/index.js.map +1 -1
  203. package/server/prisma/migrations/20260413143000_0014_tag_name_unique/migration.sql +32 -0
  204. package/server/prisma/migrations/20260414143000_0015_note_searchable_text/migration.sql +5 -0
  205. package/server/prisma/migrations/20260416090000_0016_view_workspace/migration.sql +50 -0
  206. package/server/prisma/schema.prisma +66 -12
  207. package/server/client/dist/assets/Calendar-Kjy1PX6L.js +0 -25
  208. package/server/client/dist/assets/Graph-Bl5K2qUw.js +0 -1
  209. package/server/client/dist/assets/ModalActionRow-DyOb58KJ.js +0 -1
  210. package/server/client/dist/assets/Note-BfGma2Qc.css +0 -1
  211. package/server/client/dist/assets/Note-DN_ko2M3.js +0 -1
  212. package/server/client/dist/assets/Reminders-BK-Uv9Ps.js +0 -1
  213. package/server/client/dist/assets/Search-ClHeWvmI.js +0 -1
  214. package/server/client/dist/assets/Tag-Dph4V_kl.js +0 -1
  215. package/server/client/dist/assets/TagNotes-CxP5qHZj.js +0 -1
  216. package/server/client/dist/assets/index-6lIw6jYW.js +0 -1
  217. package/server/client/dist/assets/index-Ba2XPRI8.js +0 -205
  218. package/server/client/dist/assets/manage-image-Br_kKxbb.js +0 -1
  219. package/server/client/dist/assets/manage-image-detail-9DzqbiqI.js +0 -1
  220. package/server/client/dist/assets/mcp-C_So91eX.js +0 -1
  221. package/server/client/dist/assets/trash-Cg3nJ1m5.js +0 -1
  222. package/server/dist/modules/auth.js +0 -25
  223. package/server/dist/modules/auth.js.map +0 -1
  224. package/server/dist/modules/image-upload.js.map +0 -1
  225. package/server/dist/modules/mcp-admin.js.map +0 -1
  226. package/server/dist/modules/note-authoring.js.map +0 -1
  227. package/server/dist/modules/note-cleanup.js.map +0 -1
  228. package/server/dist/modules/note-snapshot.js.map +0 -1
  229. package/server/dist/modules/note-tag-filter.js.map +0 -1
  230. package/server/dist/modules/note-trash.js.map +0 -1
  231. package/server/dist/modules/remote-image.js.map +0 -1
  232. package/server/dist/modules/tag-organization.js.map +0 -1
  233. package/server/dist/schema/cache/index.js +0 -58
  234. package/server/dist/schema/cache/index.js.map +0 -1
  235. package/server/dist/schema/image/index.js +0 -88
  236. package/server/dist/schema/image/index.js.map +0 -1
  237. package/server/dist/schema/note/index.js +0 -582
  238. package/server/dist/schema/note/index.js.map +0 -1
  239. package/server/dist/schema/placeholder/index.js +0 -105
  240. package/server/dist/schema/placeholder/index.js.map +0 -1
  241. package/server/dist/schema/reminder/index.js +0 -161
  242. package/server/dist/schema/reminder/index.js.map +0 -1
  243. package/server/dist/schema/tag/index.js +0 -81
  244. package/server/dist/schema/tag/index.js.map +0 -1
  245. package/server/dist/urls.js +0 -9
  246. package/server/dist/urls.js.map +0 -1
  247. package/server/dist/views/auth.js +0 -305
  248. package/server/dist/views/auth.js.map +0 -1
  249. package/server/dist/views/image.js +0 -44
  250. package/server/dist/views/image.js.map +0 -1
  251. package/server/dist/views/index.js +0 -6
  252. package/server/dist/views/index.js.map +0 -1
  253. package/server/dist/views/mcp-admin.js.map +0 -1
  254. package/server/dist/views/note.js.map +0 -1
  255. package/server/dist/views/tag.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ import { ensureTagByName } from "../../../features/tag/services/organization.js";
2
+ const createTagMutationResolver = (ensureTag = ensureTagByName) => {
3
+ return async (_, { name }) => {
4
+ const result = await ensureTag(name);
5
+ return result.tag;
6
+ };
7
+ };
8
+ const tagMutationResolvers = {
9
+ createTag: createTagMutationResolver()
10
+ };
11
+ export {
12
+ createTagMutationResolver,
13
+ tagMutationResolvers
14
+ };
15
+ //# sourceMappingURL=tag.mutation.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/graphql/tag.mutation.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport { ensureTagByName } from '~/features/tag/services/organization.js';\n\nexport const createTagMutationResolver = (ensureTag = ensureTagByName) => {\n return async (_: unknown, { name }: { name: string }) => {\n const result = await ensureTag(name);\n\n return result.tag;\n };\n};\n\ntype TagMutationResolvers = NonNullable<IResolvers['Mutation']>;\n\nexport const tagMutationResolvers: TagMutationResolvers = {\n createTag: createTagMutationResolver(),\n};\n"],"mappings":"AACA,SAAS,uBAAuB;AAEzB,MAAM,4BAA4B,CAAC,YAAY,oBAAoB;AACtE,SAAO,OAAO,GAAY,EAAE,KAAK,MAAwB;AACrD,UAAM,SAAS,MAAM,UAAU,IAAI;AAEnC,WAAO,OAAO;AAAA,EAClB;AACJ;AAIO,MAAM,uBAA6C;AAAA,EACtD,WAAW,0BAA0B;AACzC;","names":[]}
@@ -0,0 +1,26 @@
1
+ import models from "../../../models.js";
2
+ const tagQueryResolvers = {
3
+ allTags: async (_, {
4
+ searchFilter,
5
+ pagination
6
+ }) => {
7
+ const where = {
8
+ name: { contains: searchFilter.query },
9
+ NOT: { notes: { none: {} } }
10
+ };
11
+ const tags = models.tag.findMany({
12
+ skip: pagination.offset,
13
+ take: pagination.limit,
14
+ where,
15
+ orderBy: { notes: { _count: "desc" } }
16
+ });
17
+ return {
18
+ totalCount: await models.tag.count({ where }),
19
+ tags: await tags
20
+ };
21
+ }
22
+ };
23
+ export {
24
+ tagQueryResolvers
25
+ };
26
+ //# sourceMappingURL=tag.query.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/graphql/tag.query.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport type { Prisma } from '~/models.js';\nimport models from '~/models.js';\nimport type { Pagination, SearchFilter } from '~/types/index.js';\n\ntype TagQueryResolvers = NonNullable<IResolvers['Query']>;\n\nexport const tagQueryResolvers: TagQueryResolvers = {\n allTags: async (\n _,\n {\n searchFilter,\n pagination,\n }: {\n searchFilter: SearchFilter;\n pagination: Pagination;\n },\n ) => {\n const where: Prisma.TagWhereInput = {\n name: { contains: searchFilter.query },\n NOT: { notes: { none: {} } },\n };\n const tags = models.tag.findMany({\n skip: pagination.offset,\n take: pagination.limit,\n where,\n orderBy: { notes: { _count: 'desc' } },\n });\n\n return {\n totalCount: await models.tag.count({ where }),\n tags: await tags,\n };\n },\n};\n"],"mappings":"AAEA,OAAO,YAAY;AAKZ,MAAM,oBAAuC;AAAA,EAChD,SAAS,OACL,GACA;AAAA,IACI;AAAA,IACA;AAAA,EACJ,MAIC;AACD,UAAM,QAA8B;AAAA,MAChC,MAAM,EAAE,UAAU,aAAa,MAAM;AAAA,MACrC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;AAAA,IAC/B;AACA,UAAM,OAAO,OAAO,IAAI,SAAS;AAAA,MAC7B,MAAM,WAAW;AAAA,MACjB,MAAM,WAAW;AAAA,MACjB;AAAA,MACA,SAAS,EAAE,OAAO,EAAE,QAAQ,OAAO,EAAE;AAAA,IACzC,CAAC;AAED,WAAO;AAAA,MACH,YAAY,MAAM,OAAO,IAAI,MAAM,EAAE,MAAM,CAAC;AAAA,MAC5C,MAAM,MAAM;AAAA,IAChB;AAAA,EACJ;AACJ;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { tagFieldResolvers } from "./tag.field.resolver.js";
2
+ import { tagMutationResolvers } from "./tag.mutation.resolver.js";
3
+ import { tagQueryResolvers } from "./tag.query.resolver.js";
4
+ const tagResolvers = {
5
+ Query: tagQueryResolvers,
6
+ Mutation: tagMutationResolvers,
7
+ Tag: tagFieldResolvers
8
+ };
9
+ export {
10
+ tagResolvers
11
+ };
12
+ //# sourceMappingURL=tag.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/graphql/tag.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport { tagFieldResolvers } from './tag.field.resolver.js';\nimport { tagMutationResolvers } from './tag.mutation.resolver.js';\nimport { tagQueryResolvers } from './tag.query.resolver.js';\n\nexport const tagResolvers: IResolvers = {\n Query: tagQueryResolvers,\n Mutation: tagMutationResolvers,\n Tag: tagFieldResolvers,\n};\n"],"mappings":"AACA,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAE3B,MAAM,eAA2B;AAAA,EACpC,OAAO;AAAA,EACP,UAAU;AAAA,EACV,KAAK;AACT;","names":[]}
@@ -0,0 +1,46 @@
1
+ import { gql } from "../../../modules/graphql.js";
2
+ const tagType = gql`
3
+ input PaginationInput {
4
+ limit: Int!
5
+ offset: Int!
6
+ }
7
+
8
+ input SearchFilterInput {
9
+ query: String!
10
+ }
11
+
12
+ type Tag {
13
+ id: ID!
14
+ name: String!
15
+ createdAt: String!
16
+ updatedAt: String!
17
+ referenceCount: Int!
18
+ }
19
+
20
+ type Tags {
21
+ totalCount: Int!
22
+ tags: [Tag!]!
23
+ }
24
+ `;
25
+ const tagQuery = gql`
26
+ type Query {
27
+ allTags(searchFilter: SearchFilterInput, pagination: PaginationInput): Tags!
28
+ }
29
+ `;
30
+ const tagMutation = gql`
31
+ type Mutation {
32
+ createTag(name: String!): Tag!
33
+ }
34
+ `;
35
+ const tagTypeDefs = `
36
+ ${tagType}
37
+ ${tagQuery}
38
+ ${tagMutation}
39
+ `;
40
+ export {
41
+ tagMutation,
42
+ tagQuery,
43
+ tagType,
44
+ tagTypeDefs
45
+ };
46
+ //# sourceMappingURL=tag.type-defs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/graphql/tag.type-defs.ts"],"sourcesContent":["import { gql } from '~/modules/graphql.js';\n\nexport const tagType = gql`\n input PaginationInput {\n limit: Int!\n offset: Int!\n }\n\n input SearchFilterInput {\n query: String!\n }\n\n type Tag {\n id: ID!\n name: String!\n createdAt: String!\n updatedAt: String!\n referenceCount: Int!\n }\n\n type Tags {\n totalCount: Int!\n tags: [Tag!]!\n }\n`;\n\nexport const tagQuery = gql`\n type Query {\n allTags(searchFilter: SearchFilterInput, pagination: PaginationInput): Tags!\n }\n`;\n\nexport const tagMutation = gql`\n type Mutation {\n createTag(name: String!): Tag!\n }\n`;\n\nexport const tagTypeDefs = `\n ${tagType}\n ${tagQuery}\n ${tagMutation}\n`;\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBhB,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAMpB,MAAM,cAAc;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA;","names":[]}
@@ -1,5 +1,5 @@
1
- import { createAppError } from "../modules/error-handler.js";
2
- import { InvalidTagNameError, ensureTagByName } from "../modules/tag-organization.js";
1
+ import { ensureTagByName, InvalidTagNameError } from "../../../features/tag/services/organization.js";
2
+ import { createAppError } from "../../../modules/error-handler.js";
3
3
  const createMcpCreateTagHandler = (ensureTag = ensureTagByName) => {
4
4
  return async (req, res) => {
5
5
  const name = req.body?.name;
@@ -20,4 +20,4 @@ const createMcpCreateTagHandler = (ensureTag = ensureTagByName) => {
20
20
  export {
21
21
  createMcpCreateTagHandler
22
22
  };
23
- //# sourceMappingURL=tag.js.map
23
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/http/mcp.ts"],"sourcesContent":["import { ensureTagByName, InvalidTagNameError } from '~/features/tag/services/organization.js';\nimport { createAppError } from '~/modules/error-handler.js';\nimport type { Controller } from '~/types/index.js';\n\nexport const createMcpCreateTagHandler = (ensureTag = ensureTagByName): Controller => {\n return async (req, res) => {\n const name = req.body?.name;\n\n if (typeof name !== 'string') {\n throw createAppError(400, 'INVALID_TAG_NAME', 'A tag name is required.');\n }\n\n try {\n const result = await ensureTag(name);\n res.status(200).json(result).end();\n } catch (error) {\n if (error instanceof InvalidTagNameError) {\n throw createAppError(400, 'INVALID_TAG_NAME', error.message);\n }\n\n throw error;\n }\n };\n};\n"],"mappings":"AAAA,SAAS,iBAAiB,2BAA2B;AACrD,SAAS,sBAAsB;AAGxB,MAAM,4BAA4B,CAAC,YAAY,oBAAgC;AAClF,SAAO,OAAO,KAAK,QAAQ;AACvB,UAAM,OAAO,IAAI,MAAM;AAEvB,QAAI,OAAO,SAAS,UAAU;AAC1B,YAAM,eAAe,KAAK,oBAAoB,yBAAyB;AAAA,IAC3E;AAEA,QAAI;AACA,YAAM,SAAS,MAAM,UAAU,IAAI;AACnC,UAAI,OAAO,GAAG,EAAE,KAAK,MAAM,EAAE,IAAI;AAAA,IACrC,SAAS,OAAO;AACZ,UAAI,iBAAiB,qBAAqB;AACtC,cAAM,eAAe,KAAK,oBAAoB,MAAM,OAAO;AAAA,MAC/D;AAEA,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;","names":[]}
@@ -1,4 +1,4 @@
1
- import models from "../models.js";
1
+ import models from "../../../models.js";
2
2
  class InvalidTagNameError extends Error {
3
3
  constructor(message) {
4
4
  super(message);
@@ -22,19 +22,49 @@ const serializeTag = (tag) => ({
22
22
  createdAt: tag.createdAt.toISOString(),
23
23
  updatedAt: tag.updatedAt.toISOString()
24
24
  });
25
+ const isTagNameUniqueConflict = (error) => {
26
+ if (typeof error !== "object" || error === null || !("code" in error)) {
27
+ return false;
28
+ }
29
+ if (error.code !== "P2002") {
30
+ return false;
31
+ }
32
+ if (!("meta" in error) || typeof error.meta !== "object" || error.meta === null) {
33
+ return true;
34
+ }
35
+ const rawTarget = "target" in error.meta ? error.meta.target : null;
36
+ const targets = Array.isArray(rawTarget) ? rawTarget.filter((value) => typeof value === "string") : typeof rawTarget === "string" ? [rawTarget] : [];
37
+ return targets.length === 0 || targets.includes("name");
38
+ };
25
39
  const createTagOrganizationService = (deps) => {
26
40
  return {
27
41
  ensureTag: async (name) => {
28
42
  const normalizedName = normalizeTagName(name);
29
- const existingTags = await deps.findTagsByName(normalizedName);
30
- if (existingTags.length > 0) {
43
+ const existingTag = await deps.findTagByName(normalizedName);
44
+ if (existingTag) {
45
+ return {
46
+ created: false,
47
+ normalizedName,
48
+ tag: serializeTag(existingTag)
49
+ };
50
+ }
51
+ let createdTag;
52
+ try {
53
+ createdTag = await deps.createTag(normalizedName);
54
+ } catch (error) {
55
+ if (!isTagNameUniqueConflict(error)) {
56
+ throw error;
57
+ }
58
+ const conflictedTag = await deps.findTagByName(normalizedName);
59
+ if (!conflictedTag) {
60
+ throw error;
61
+ }
31
62
  return {
32
63
  created: false,
33
64
  normalizedName,
34
- tag: serializeTag(existingTags[0])
65
+ tag: serializeTag(conflictedTag)
35
66
  };
36
67
  }
37
- const createdTag = await deps.createTag(normalizedName);
38
68
  return {
39
69
  created: true,
40
70
  normalizedName,
@@ -47,8 +77,8 @@ const defaultTagOrganizationService = createTagOrganizationService({
47
77
  createTag: async (name) => {
48
78
  return models.tag.create({ data: { name } });
49
79
  },
50
- findTagsByName: async (name) => {
51
- return models.tag.findMany({
80
+ findTagByName: async (name) => {
81
+ return models.tag.findFirst({
52
82
  where: { name },
53
83
  orderBy: { createdAt: "asc" }
54
84
  });
@@ -63,4 +93,4 @@ export {
63
93
  ensureTagByName,
64
94
  normalizeTagName
65
95
  };
66
- //# sourceMappingURL=tag-organization.js.map
96
+ //# sourceMappingURL=organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/tag/services/organization.ts"],"sourcesContent":["import models from '~/models.js';\n\ninterface TagRecord {\n id: number;\n name: string;\n createdAt: Date;\n updatedAt: Date;\n}\n\ninterface TagOrganizationDeps {\n createTag: (name: string) => Promise<TagRecord>;\n findTagByName: (name: string) => Promise<TagRecord | null>;\n}\n\nexport interface TagOrganizationResult {\n created: boolean;\n normalizedName: string;\n tag: {\n id: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n };\n}\n\nexport class InvalidTagNameError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidTagNameError';\n }\n}\n\nexport const normalizeTagName = (name: string) => {\n const trimmedName = name.trim();\n\n if (!trimmedName) {\n throw new InvalidTagNameError('A tag name is required.');\n }\n\n const normalizedName = trimmedName.startsWith('@') ? trimmedName : `@${trimmedName}`;\n\n if (normalizedName === '@' || /\\s/.test(normalizedName.slice(1))) {\n throw new InvalidTagNameError('Tag names must be a single token like @project.');\n }\n\n return normalizedName;\n};\n\nconst serializeTag = (tag: TagRecord) => ({\n id: String(tag.id),\n name: tag.name,\n createdAt: tag.createdAt.toISOString(),\n updatedAt: tag.updatedAt.toISOString(),\n});\n\nconst isTagNameUniqueConflict = (error: unknown) => {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false;\n }\n\n if (error.code !== 'P2002') {\n return false;\n }\n\n if (!('meta' in error) || typeof error.meta !== 'object' || error.meta === null) {\n return true;\n }\n\n const rawTarget = 'target' in error.meta ? error.meta.target : null;\n const targets = Array.isArray(rawTarget)\n ? rawTarget.filter((value): value is string => typeof value === 'string')\n : typeof rawTarget === 'string'\n ? [rawTarget]\n : [];\n\n return targets.length === 0 || targets.includes('name');\n};\n\nexport const createTagOrganizationService = (deps: TagOrganizationDeps) => {\n return {\n ensureTag: async (name: string): Promise<TagOrganizationResult> => {\n const normalizedName = normalizeTagName(name);\n const existingTag = await deps.findTagByName(normalizedName);\n\n if (existingTag) {\n return {\n created: false,\n normalizedName,\n tag: serializeTag(existingTag),\n };\n }\n\n let createdTag: TagRecord;\n\n try {\n createdTag = await deps.createTag(normalizedName);\n } catch (error) {\n if (!isTagNameUniqueConflict(error)) {\n throw error;\n }\n\n const conflictedTag = await deps.findTagByName(normalizedName);\n\n if (!conflictedTag) {\n throw error;\n }\n\n return {\n created: false,\n normalizedName,\n tag: serializeTag(conflictedTag),\n };\n }\n\n return {\n created: true,\n normalizedName,\n tag: serializeTag(createdTag),\n };\n },\n };\n};\n\nconst defaultTagOrganizationService = createTagOrganizationService({\n createTag: async (name) => {\n return models.tag.create({ data: { name } });\n },\n findTagByName: async (name) => {\n return models.tag.findFirst({\n where: { name },\n orderBy: { createdAt: 'asc' },\n });\n },\n});\n\nexport const ensureTagByName = async (name: string) => {\n return defaultTagOrganizationService.ensureTag(name);\n};\n"],"mappings":"AAAA,OAAO,YAAY;AAyBZ,MAAM,4BAA4B,MAAM;AAAA,EAC3C,YAAY,SAAiB;AACzB,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,MAAM,mBAAmB,CAAC,SAAiB;AAC9C,QAAM,cAAc,KAAK,KAAK;AAE9B,MAAI,CAAC,aAAa;AACd,UAAM,IAAI,oBAAoB,yBAAyB;AAAA,EAC3D;AAEA,QAAM,iBAAiB,YAAY,WAAW,GAAG,IAAI,cAAc,IAAI,WAAW;AAElF,MAAI,mBAAmB,OAAO,KAAK,KAAK,eAAe,MAAM,CAAC,CAAC,GAAG;AAC9D,UAAM,IAAI,oBAAoB,iDAAiD;AAAA,EACnF;AAEA,SAAO;AACX;AAEA,MAAM,eAAe,CAAC,SAAoB;AAAA,EACtC,IAAI,OAAO,IAAI,EAAE;AAAA,EACjB,MAAM,IAAI;AAAA,EACV,WAAW,IAAI,UAAU,YAAY;AAAA,EACrC,WAAW,IAAI,UAAU,YAAY;AACzC;AAEA,MAAM,0BAA0B,CAAC,UAAmB;AAChD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,EAAE,UAAU,QAAQ;AACnE,WAAO;AAAA,EACX;AAEA,MAAI,MAAM,SAAS,SAAS;AACxB,WAAO;AAAA,EACX;AAEA,MAAI,EAAE,UAAU,UAAU,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,MAAM;AAC7E,WAAO;AAAA,EACX;AAEA,QAAM,YAAY,YAAY,MAAM,OAAO,MAAM,KAAK,SAAS;AAC/D,QAAM,UAAU,MAAM,QAAQ,SAAS,IACjC,UAAU,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IACtE,OAAO,cAAc,WACnB,CAAC,SAAS,IACV,CAAC;AAET,SAAO,QAAQ,WAAW,KAAK,QAAQ,SAAS,MAAM;AAC1D;AAEO,MAAM,+BAA+B,CAAC,SAA8B;AACvE,SAAO;AAAA,IACH,WAAW,OAAO,SAAiD;AAC/D,YAAM,iBAAiB,iBAAiB,IAAI;AAC5C,YAAM,cAAc,MAAM,KAAK,cAAc,cAAc;AAE3D,UAAI,aAAa;AACb,eAAO;AAAA,UACH,SAAS;AAAA,UACT;AAAA,UACA,KAAK,aAAa,WAAW;AAAA,QACjC;AAAA,MACJ;AAEA,UAAI;AAEJ,UAAI;AACA,qBAAa,MAAM,KAAK,UAAU,cAAc;AAAA,MACpD,SAAS,OAAO;AACZ,YAAI,CAAC,wBAAwB,KAAK,GAAG;AACjC,gBAAM;AAAA,QACV;AAEA,cAAM,gBAAgB,MAAM,KAAK,cAAc,cAAc;AAE7D,YAAI,CAAC,eAAe;AAChB,gBAAM;AAAA,QACV;AAEA,eAAO;AAAA,UACH,SAAS;AAAA,UACT;AAAA,UACA,KAAK,aAAa,aAAa;AAAA,QACnC;AAAA,MACJ;AAEA,aAAO;AAAA,QACH,SAAS;AAAA,QACT;AAAA,QACA,KAAK,aAAa,UAAU;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,MAAM,gCAAgC,6BAA6B;AAAA,EAC/D,WAAW,OAAO,SAAS;AACvB,WAAO,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,EAC/C;AAAA,EACA,eAAe,OAAO,SAAS;AAC3B,WAAO,OAAO,IAAI,UAAU;AAAA,MACxB,OAAO,EAAE,KAAK;AAAA,MACd,SAAS,EAAE,WAAW,MAAM;AAAA,IAChC,CAAC;AAAA,EACL;AACJ,CAAC;AAEM,MAAM,kBAAkB,OAAO,SAAiB;AACnD,SAAO,8BAA8B,UAAU,IAAI;AACvD;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { viewMutationResolvers } from "./view.mutation.resolver.js";
2
+ import { viewQueryResolvers } from "./view.query.resolver.js";
3
+ import { viewResolvers } from "./view.resolver.js";
4
+ import { viewTypeDefs } from "./view.type-defs.js";
5
+ export {
6
+ viewMutationResolvers,
7
+ viewQueryResolvers,
8
+ viewResolvers,
9
+ viewTypeDefs
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/view/graphql/index.ts"],"sourcesContent":["export { viewMutationResolvers } from './view.mutation.resolver.js';\nexport { viewQueryResolvers } from './view.query.resolver.js';\nexport { viewResolvers } from './view.resolver.js';\nexport { viewTypeDefs } from './view.type-defs.js';\n"],"mappings":"AAAA,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AACnC,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;","names":[]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ createViewSection,
3
+ createViewTab,
4
+ deleteViewSection,
5
+ deleteViewTab,
6
+ reorderViewSections,
7
+ reorderViewTabs,
8
+ setActiveViewTab,
9
+ updateViewSection,
10
+ updateViewTab
11
+ } from "../../../features/view/services/workspace.js";
12
+ const viewMutationResolvers = {
13
+ createViewTab: async (_, { title }) => {
14
+ return createViewTab(title);
15
+ },
16
+ updateViewTab: async (_, { id, title }) => {
17
+ return updateViewTab(id, title);
18
+ },
19
+ deleteViewTab: async (_, { id }) => {
20
+ return deleteViewTab(id);
21
+ },
22
+ setActiveViewTab: async (_, { id }) => {
23
+ return setActiveViewTab(id);
24
+ },
25
+ reorderViewTabs: async (_, { tabIds }) => {
26
+ return reorderViewTabs(tabIds);
27
+ },
28
+ createViewSection: async (_, {
29
+ tabId,
30
+ input
31
+ }) => {
32
+ return createViewSection(tabId, input);
33
+ },
34
+ updateViewSection: async (_, {
35
+ id,
36
+ input
37
+ }) => {
38
+ return updateViewSection(id, input);
39
+ },
40
+ deleteViewSection: async (_, { id }) => {
41
+ return deleteViewSection(id);
42
+ },
43
+ reorderViewSections: async (_, {
44
+ tabId,
45
+ sectionIds
46
+ }) => {
47
+ return reorderViewSections(tabId, sectionIds);
48
+ }
49
+ };
50
+ export {
51
+ viewMutationResolvers
52
+ };
53
+ //# sourceMappingURL=view.mutation.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/view/graphql/view.mutation.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport {\n createViewSection,\n createViewTab,\n deleteViewSection,\n deleteViewTab,\n reorderViewSections,\n reorderViewTabs,\n setActiveViewTab,\n updateViewSection,\n updateViewTab,\n type ViewSectionInput,\n} from '~/features/view/services/workspace.js';\n\ntype ViewMutationResolvers = NonNullable<IResolvers['Mutation']>;\n\nexport const viewMutationResolvers: ViewMutationResolvers = {\n createViewTab: async (_, { title }: { title: string }) => {\n return createViewTab(title);\n },\n updateViewTab: async (_, { id, title }: { id: string; title: string }) => {\n return updateViewTab(id, title);\n },\n deleteViewTab: async (_, { id }: { id: string }) => {\n return deleteViewTab(id);\n },\n setActiveViewTab: async (_, { id }: { id: string }) => {\n return setActiveViewTab(id);\n },\n reorderViewTabs: async (_, { tabIds }: { tabIds: string[] }) => {\n return reorderViewTabs(tabIds);\n },\n createViewSection: async (\n _,\n {\n tabId,\n input,\n }: {\n tabId: string;\n input: ViewSectionInput;\n },\n ) => {\n return createViewSection(tabId, input);\n },\n updateViewSection: async (\n _,\n {\n id,\n input,\n }: {\n id: string;\n input: ViewSectionInput;\n },\n ) => {\n return updateViewSection(id, input);\n },\n deleteViewSection: async (_, { id }: { id: string }) => {\n return deleteViewSection(id);\n },\n reorderViewSections: async (\n _,\n {\n tabId,\n sectionIds,\n }: {\n tabId: string;\n sectionIds: string[];\n },\n ) => {\n return reorderViewSections(tabId, sectionIds);\n },\n};\n"],"mappings":"AACA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AAIA,MAAM,wBAA+C;AAAA,EACxD,eAAe,OAAO,GAAG,EAAE,MAAM,MAAyB;AACtD,WAAO,cAAc,KAAK;AAAA,EAC9B;AAAA,EACA,eAAe,OAAO,GAAG,EAAE,IAAI,MAAM,MAAqC;AACtE,WAAO,cAAc,IAAI,KAAK;AAAA,EAClC;AAAA,EACA,eAAe,OAAO,GAAG,EAAE,GAAG,MAAsB;AAChD,WAAO,cAAc,EAAE;AAAA,EAC3B;AAAA,EACA,kBAAkB,OAAO,GAAG,EAAE,GAAG,MAAsB;AACnD,WAAO,iBAAiB,EAAE;AAAA,EAC9B;AAAA,EACA,iBAAiB,OAAO,GAAG,EAAE,OAAO,MAA4B;AAC5D,WAAO,gBAAgB,MAAM;AAAA,EACjC;AAAA,EACA,mBAAmB,OACf,GACA;AAAA,IACI;AAAA,IACA;AAAA,EACJ,MAIC;AACD,WAAO,kBAAkB,OAAO,KAAK;AAAA,EACzC;AAAA,EACA,mBAAmB,OACf,GACA;AAAA,IACI;AAAA,IACA;AAAA,EACJ,MAIC;AACD,WAAO,kBAAkB,IAAI,KAAK;AAAA,EACtC;AAAA,EACA,mBAAmB,OAAO,GAAG,EAAE,GAAG,MAAsB;AACpD,WAAO,kBAAkB,EAAE;AAAA,EAC/B;AAAA,EACA,qBAAqB,OACjB,GACA;AAAA,IACI;AAAA,IACA;AAAA,EACJ,MAIC;AACD,WAAO,oBAAoB,OAAO,UAAU;AAAA,EAChD;AACJ;","names":[]}
@@ -0,0 +1,29 @@
1
+ import { getViewSectionById, getViewSectionNotes, getViewWorkspace } from "../../../features/view/services/workspace.js";
2
+ const viewQueryResolvers = {
3
+ viewWorkspace: async () => {
4
+ return getViewWorkspace();
5
+ },
6
+ viewSection: async (_, { id }) => {
7
+ return getViewSectionById(id);
8
+ },
9
+ viewSectionNotes: async (_, {
10
+ id,
11
+ pagination = {
12
+ limit: 25,
13
+ offset: 0
14
+ }
15
+ }) => {
16
+ const sectionNotes = await getViewSectionNotes(id, {
17
+ limit: Number(pagination.limit),
18
+ offset: Number(pagination.offset)
19
+ });
20
+ if (!sectionNotes) {
21
+ throw "NOT FOUND";
22
+ }
23
+ return sectionNotes;
24
+ }
25
+ };
26
+ export {
27
+ viewQueryResolvers
28
+ };
29
+ //# sourceMappingURL=view.query.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/view/graphql/view.query.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport { getViewSectionById, getViewSectionNotes, getViewWorkspace } from '~/features/view/services/workspace.js';\nimport type { Pagination } from '~/types/index.js';\n\ntype ViewQueryResolvers = NonNullable<IResolvers['Query']>;\n\nexport const viewQueryResolvers: ViewQueryResolvers = {\n viewWorkspace: async () => {\n return getViewWorkspace();\n },\n viewSection: async (_, { id }: { id: string }) => {\n return getViewSectionById(id);\n },\n viewSectionNotes: async (\n _,\n {\n id,\n pagination = {\n limit: 25,\n offset: 0,\n },\n }: {\n id: string;\n pagination: Pagination;\n },\n ) => {\n const sectionNotes = await getViewSectionNotes(id, {\n limit: Number(pagination.limit),\n offset: Number(pagination.offset),\n });\n\n if (!sectionNotes) {\n throw 'NOT FOUND';\n }\n\n return sectionNotes;\n },\n};\n"],"mappings":"AACA,SAAS,oBAAoB,qBAAqB,wBAAwB;AAKnE,MAAM,qBAAyC;AAAA,EAClD,eAAe,YAAY;AACvB,WAAO,iBAAiB;AAAA,EAC5B;AAAA,EACA,aAAa,OAAO,GAAG,EAAE,GAAG,MAAsB;AAC9C,WAAO,mBAAmB,EAAE;AAAA,EAChC;AAAA,EACA,kBAAkB,OACd,GACA;AAAA,IACI;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ;AAAA,EACJ,MAIC;AACD,UAAM,eAAe,MAAM,oBAAoB,IAAI;AAAA,MAC/C,OAAO,OAAO,WAAW,KAAK;AAAA,MAC9B,QAAQ,OAAO,WAAW,MAAM;AAAA,IACpC,CAAC;AAED,QAAI,CAAC,cAAc;AACf,YAAM;AAAA,IACV;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -0,0 +1,10 @@
1
+ import { viewMutationResolvers } from "./view.mutation.resolver.js";
2
+ import { viewQueryResolvers } from "./view.query.resolver.js";
3
+ const viewResolvers = {
4
+ Query: viewQueryResolvers,
5
+ Mutation: viewMutationResolvers
6
+ };
7
+ export {
8
+ viewResolvers
9
+ };
10
+ //# sourceMappingURL=view.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/view/graphql/view.resolver.ts"],"sourcesContent":["import { viewMutationResolvers } from './view.mutation.resolver.js';\nimport { viewQueryResolvers } from './view.query.resolver.js';\n\nexport const viewResolvers = {\n Query: viewQueryResolvers,\n Mutation: viewMutationResolvers,\n};\n"],"mappings":"AAAA,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AAE5B,MAAM,gBAAgB;AAAA,EACzB,OAAO;AAAA,EACP,UAAU;AACd;","names":[]}
@@ -0,0 +1,63 @@
1
+ import { gql } from "../../../modules/graphql.js";
2
+ const viewType = gql`
3
+ type ViewWorkspace {
4
+ activeTabId: ID
5
+ tabs: [ViewTab!]!
6
+ }
7
+
8
+ type ViewTab {
9
+ id: ID!
10
+ title: String!
11
+ order: Int!
12
+ sections: [ViewSection!]!
13
+ }
14
+
15
+ type ViewSection {
16
+ id: ID!
17
+ tabId: ID!
18
+ title: String!
19
+ tagNames: [String!]!
20
+ mode: TagMatchMode!
21
+ limit: Int!
22
+ order: Int!
23
+ }
24
+
25
+ input ViewSectionInput {
26
+ title: String
27
+ tagNames: [String!]!
28
+ mode: TagMatchMode
29
+ limit: Int
30
+ }
31
+ `;
32
+ const viewQuery = gql`
33
+ type Query {
34
+ viewWorkspace: ViewWorkspace!
35
+ viewSection(id: ID!): ViewSection
36
+ viewSectionNotes(id: ID!, pagination: PaginationInput): Notes!
37
+ }
38
+ `;
39
+ const viewMutation = gql`
40
+ type Mutation {
41
+ createViewTab(title: String!): ViewTab!
42
+ updateViewTab(id: ID!, title: String!): ViewTab!
43
+ deleteViewTab(id: ID!): Boolean!
44
+ setActiveViewTab(id: ID!): ViewWorkspace!
45
+ reorderViewTabs(tabIds: [ID!]!): [ViewTab!]!
46
+ createViewSection(tabId: ID!, input: ViewSectionInput!): ViewSection!
47
+ updateViewSection(id: ID!, input: ViewSectionInput!): ViewSection!
48
+ deleteViewSection(id: ID!): Boolean!
49
+ reorderViewSections(tabId: ID!, sectionIds: [ID!]!): [ViewSection!]!
50
+ }
51
+ `;
52
+ const viewTypeDefs = `
53
+ ${viewType}
54
+ ${viewQuery}
55
+ ${viewMutation}
56
+ `;
57
+ export {
58
+ viewMutation,
59
+ viewQuery,
60
+ viewType,
61
+ viewTypeDefs
62
+ };
63
+ //# sourceMappingURL=view.type-defs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/view/graphql/view.type-defs.ts"],"sourcesContent":["import { gql } from '~/modules/graphql.js';\n\nexport const viewType = gql`\n type ViewWorkspace {\n activeTabId: ID\n tabs: [ViewTab!]!\n }\n\n type ViewTab {\n id: ID!\n title: String!\n order: Int!\n sections: [ViewSection!]!\n }\n\n type ViewSection {\n id: ID!\n tabId: ID!\n title: String!\n tagNames: [String!]!\n mode: TagMatchMode!\n limit: Int!\n order: Int!\n }\n\n input ViewSectionInput {\n title: String\n tagNames: [String!]!\n mode: TagMatchMode\n limit: Int\n }\n`;\n\nexport const viewQuery = gql`\n type Query {\n viewWorkspace: ViewWorkspace!\n viewSection(id: ID!): ViewSection\n viewSectionNotes(id: ID!, pagination: PaginationInput): Notes!\n }\n`;\n\nexport const viewMutation = gql`\n type Mutation {\n createViewTab(title: String!): ViewTab!\n updateViewTab(id: ID!, title: String!): ViewTab!\n deleteViewTab(id: ID!): Boolean!\n setActiveViewTab(id: ID!): ViewWorkspace!\n reorderViewTabs(tabIds: [ID!]!): [ViewTab!]!\n createViewSection(tabId: ID!, input: ViewSectionInput!): ViewSection!\n updateViewSection(id: ID!, input: ViewSectionInput!): ViewSection!\n deleteViewSection(id: ID!): Boolean!\n reorderViewSections(tabId: ID!, sectionIds: [ID!]!): [ViewSection!]!\n }\n`;\n\nexport const viewTypeDefs = `\n ${viewType}\n ${viewQuery}\n ${viewMutation}\n`;\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BjB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQlB,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrB,MAAM,eAAe;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA;","names":[]}