@s-hirano-ist/s-core 0.0.0

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 (232) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +124 -0
  3. package/dist/articles/entities/article-entity.d.ts +75 -0
  4. package/dist/articles/entities/article-entity.d.ts.map +1 -0
  5. package/dist/articles/entities/article-entity.js +84 -0
  6. package/dist/articles/entities/article-entity.js.map +1 -0
  7. package/dist/articles/events/article-created-event.d.ts +12 -0
  8. package/dist/articles/events/article-created-event.d.ts.map +1 -0
  9. package/dist/articles/events/article-created-event.js +15 -0
  10. package/dist/articles/events/article-created-event.js.map +1 -0
  11. package/dist/articles/events/article-deleted-event.d.ts +9 -0
  12. package/dist/articles/events/article-deleted-event.d.ts.map +1 -0
  13. package/dist/articles/events/article-deleted-event.js +12 -0
  14. package/dist/articles/events/article-deleted-event.js.map +1 -0
  15. package/dist/articles/events/article-updated-event.d.ts +12 -0
  16. package/dist/articles/events/article-updated-event.d.ts.map +1 -0
  17. package/dist/articles/events/article-updated-event.js +15 -0
  18. package/dist/articles/events/article-updated-event.js.map +1 -0
  19. package/dist/articles/index.d.ts +12 -0
  20. package/dist/articles/index.d.ts.map +1 -0
  21. package/dist/articles/index.js +17 -0
  22. package/dist/articles/index.js.map +1 -0
  23. package/dist/articles/repositories/articles-command-repository.interface.d.ts +8 -0
  24. package/dist/articles/repositories/articles-command-repository.interface.d.ts.map +1 -0
  25. package/dist/articles/repositories/articles-command-repository.interface.js +2 -0
  26. package/dist/articles/repositories/articles-command-repository.interface.js.map +1 -0
  27. package/dist/articles/repositories/articles-query-repository.interface.d.ts +44 -0
  28. package/dist/articles/repositories/articles-query-repository.interface.d.ts.map +1 -0
  29. package/dist/articles/repositories/articles-query-repository.interface.js +2 -0
  30. package/dist/articles/repositories/articles-query-repository.interface.js.map +1 -0
  31. package/dist/articles/repositories/category-query-repository.interface.d.ts +9 -0
  32. package/dist/articles/repositories/category-query-repository.interface.d.ts.map +1 -0
  33. package/dist/articles/repositories/category-query-repository.interface.js +2 -0
  34. package/dist/articles/repositories/category-query-repository.interface.js.map +1 -0
  35. package/dist/articles/services/articles-domain-service.d.ts +18 -0
  36. package/dist/articles/services/articles-domain-service.d.ts.map +1 -0
  37. package/dist/articles/services/articles-domain-service.js +58 -0
  38. package/dist/articles/services/articles-domain-service.js.map +1 -0
  39. package/dist/articles/types/cache-strategy.d.ts +6 -0
  40. package/dist/articles/types/cache-strategy.d.ts.map +1 -0
  41. package/dist/articles/types/cache-strategy.js +2 -0
  42. package/dist/articles/types/cache-strategy.js.map +1 -0
  43. package/dist/articles/types/query-params.d.ts +23 -0
  44. package/dist/articles/types/query-params.d.ts.map +1 -0
  45. package/dist/articles/types/query-params.js +2 -0
  46. package/dist/articles/types/query-params.js.map +1 -0
  47. package/dist/articles/types/sort-order.d.ts +2 -0
  48. package/dist/articles/types/sort-order.d.ts.map +1 -0
  49. package/dist/articles/types/sort-order.js +2 -0
  50. package/dist/articles/types/sort-order.js.map +1 -0
  51. package/dist/books/entities/books-entity.d.ts +84 -0
  52. package/dist/books/entities/books-entity.d.ts.map +1 -0
  53. package/dist/books/entities/books-entity.js +71 -0
  54. package/dist/books/entities/books-entity.js.map +1 -0
  55. package/dist/books/events/book-created-event.d.ts +10 -0
  56. package/dist/books/events/book-created-event.d.ts.map +1 -0
  57. package/dist/books/events/book-created-event.js +13 -0
  58. package/dist/books/events/book-created-event.js.map +1 -0
  59. package/dist/books/events/book-deleted-event.d.ts +9 -0
  60. package/dist/books/events/book-deleted-event.d.ts.map +1 -0
  61. package/dist/books/events/book-deleted-event.js +12 -0
  62. package/dist/books/events/book-deleted-event.js.map +1 -0
  63. package/dist/books/events/book-updated-event.d.ts +10 -0
  64. package/dist/books/events/book-updated-event.d.ts.map +1 -0
  65. package/dist/books/events/book-updated-event.js +13 -0
  66. package/dist/books/events/book-updated-event.js.map +1 -0
  67. package/dist/books/index.d.ts +11 -0
  68. package/dist/books/index.d.ts.map +1 -0
  69. package/dist/books/index.js +16 -0
  70. package/dist/books/index.js.map +1 -0
  71. package/dist/books/repositories/books-command-repository.interface.d.ts +9 -0
  72. package/dist/books/repositories/books-command-repository.interface.d.ts.map +1 -0
  73. package/dist/books/repositories/books-command-repository.interface.js +2 -0
  74. package/dist/books/repositories/books-command-repository.interface.js.map +1 -0
  75. package/dist/books/repositories/books-query-repository.interface.d.ts +54 -0
  76. package/dist/books/repositories/books-query-repository.interface.d.ts.map +1 -0
  77. package/dist/books/repositories/books-query-repository.interface.js +2 -0
  78. package/dist/books/repositories/books-query-repository.interface.js.map +1 -0
  79. package/dist/books/services/books-domain-service.d.ts +18 -0
  80. package/dist/books/services/books-domain-service.d.ts.map +1 -0
  81. package/dist/books/services/books-domain-service.js +57 -0
  82. package/dist/books/services/books-domain-service.js.map +1 -0
  83. package/dist/books/types/cache-strategy.d.ts +6 -0
  84. package/dist/books/types/cache-strategy.d.ts.map +1 -0
  85. package/dist/books/types/cache-strategy.js +2 -0
  86. package/dist/books/types/cache-strategy.js.map +1 -0
  87. package/dist/books/types/query-params.d.ts +14 -0
  88. package/dist/books/types/query-params.d.ts.map +1 -0
  89. package/dist/books/types/query-params.js +2 -0
  90. package/dist/books/types/query-params.js.map +1 -0
  91. package/dist/books/types/sort-order.d.ts +2 -0
  92. package/dist/books/types/sort-order.d.ts.map +1 -0
  93. package/dist/books/types/sort-order.js +2 -0
  94. package/dist/books/types/sort-order.js.map +1 -0
  95. package/dist/common/entities/common-entity.d.ts +25 -0
  96. package/dist/common/entities/common-entity.d.ts.map +1 -0
  97. package/dist/common/entities/common-entity.js +38 -0
  98. package/dist/common/entities/common-entity.js.map +1 -0
  99. package/dist/common/events/base-domain-event.d.ts +15 -0
  100. package/dist/common/events/base-domain-event.d.ts.map +1 -0
  101. package/dist/common/events/base-domain-event.js +14 -0
  102. package/dist/common/events/base-domain-event.js.map +1 -0
  103. package/dist/common/events/domain-event.interface.d.ts +13 -0
  104. package/dist/common/events/domain-event.interface.d.ts.map +1 -0
  105. package/dist/common/events/domain-event.interface.js +2 -0
  106. package/dist/common/events/domain-event.interface.js.map +1 -0
  107. package/dist/common/events/system-error-event.d.ts +12 -0
  108. package/dist/common/events/system-error-event.d.ts.map +1 -0
  109. package/dist/common/events/system-error-event.js +15 -0
  110. package/dist/common/events/system-error-event.js.map +1 -0
  111. package/dist/common/events/system-warning-event.d.ts +12 -0
  112. package/dist/common/events/system-warning-event.d.ts.map +1 -0
  113. package/dist/common/events/system-warning-event.js +15 -0
  114. package/dist/common/events/system-warning-event.js.map +1 -0
  115. package/dist/common/index.d.ts +9 -0
  116. package/dist/common/index.d.ts.map +1 -0
  117. package/dist/common/index.js +13 -0
  118. package/dist/common/index.js.map +1 -0
  119. package/dist/common/services/entity-factory.d.ts +2 -0
  120. package/dist/common/services/entity-factory.d.ts.map +1 -0
  121. package/dist/common/services/entity-factory.js +13 -0
  122. package/dist/common/services/entity-factory.js.map +1 -0
  123. package/dist/common/services/id-generator.d.ts +5 -0
  124. package/dist/common/services/id-generator.d.ts.map +1 -0
  125. package/dist/common/services/id-generator.js +4 -0
  126. package/dist/common/services/id-generator.js.map +1 -0
  127. package/dist/common/types/search-types.d.ts +31 -0
  128. package/dist/common/types/search-types.d.ts.map +1 -0
  129. package/dist/common/types/search-types.js +2 -0
  130. package/dist/common/types/search-types.js.map +1 -0
  131. package/dist/errors/error-classes.d.ts +16 -0
  132. package/dist/errors/error-classes.d.ts.map +1 -0
  133. package/dist/errors/error-classes.js +31 -0
  134. package/dist/errors/error-classes.js.map +1 -0
  135. package/dist/errors/index.d.ts +2 -0
  136. package/dist/errors/index.d.ts.map +1 -0
  137. package/dist/errors/index.js +3 -0
  138. package/dist/errors/index.js.map +1 -0
  139. package/dist/images/entities/image-entity.d.ts +98 -0
  140. package/dist/images/entities/image-entity.d.ts.map +1 -0
  141. package/dist/images/entities/image-entity.js +90 -0
  142. package/dist/images/entities/image-entity.js.map +1 -0
  143. package/dist/images/events/image-created-event.d.ts +9 -0
  144. package/dist/images/events/image-created-event.d.ts.map +1 -0
  145. package/dist/images/events/image-created-event.js +12 -0
  146. package/dist/images/events/image-created-event.js.map +1 -0
  147. package/dist/images/events/image-deleted-event.d.ts +9 -0
  148. package/dist/images/events/image-deleted-event.d.ts.map +1 -0
  149. package/dist/images/events/image-deleted-event.js +12 -0
  150. package/dist/images/events/image-deleted-event.js.map +1 -0
  151. package/dist/images/events/image-updated-event.d.ts +10 -0
  152. package/dist/images/events/image-updated-event.d.ts.map +1 -0
  153. package/dist/images/events/image-updated-event.js +13 -0
  154. package/dist/images/events/image-updated-event.js.map +1 -0
  155. package/dist/images/index.d.ts +11 -0
  156. package/dist/images/index.d.ts.map +1 -0
  157. package/dist/images/index.js +16 -0
  158. package/dist/images/index.js.map +1 -0
  159. package/dist/images/repositories/images-command-repository.interface.d.ts +9 -0
  160. package/dist/images/repositories/images-command-repository.interface.d.ts.map +1 -0
  161. package/dist/images/repositories/images-command-repository.interface.js +2 -0
  162. package/dist/images/repositories/images-command-repository.interface.js.map +1 -0
  163. package/dist/images/repositories/images-query-repository.interface.d.ts +26 -0
  164. package/dist/images/repositories/images-query-repository.interface.d.ts.map +1 -0
  165. package/dist/images/repositories/images-query-repository.interface.js +2 -0
  166. package/dist/images/repositories/images-query-repository.interface.js.map +1 -0
  167. package/dist/images/services/images-domain-service.d.ts +17 -0
  168. package/dist/images/services/images-domain-service.d.ts.map +1 -0
  169. package/dist/images/services/images-domain-service.js +42 -0
  170. package/dist/images/services/images-domain-service.js.map +1 -0
  171. package/dist/images/types/cache-strategy.d.ts +6 -0
  172. package/dist/images/types/cache-strategy.d.ts.map +1 -0
  173. package/dist/images/types/cache-strategy.js +2 -0
  174. package/dist/images/types/cache-strategy.js.map +1 -0
  175. package/dist/images/types/query-params.d.ts +14 -0
  176. package/dist/images/types/query-params.d.ts.map +1 -0
  177. package/dist/images/types/query-params.js +2 -0
  178. package/dist/images/types/query-params.js.map +1 -0
  179. package/dist/images/types/sort-order.d.ts +2 -0
  180. package/dist/images/types/sort-order.d.ts.map +1 -0
  181. package/dist/images/types/sort-order.js +2 -0
  182. package/dist/images/types/sort-order.js.map +1 -0
  183. package/dist/index.d.ts +7 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +8 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/notes/entities/note-entity.d.ts +43 -0
  188. package/dist/notes/entities/note-entity.d.ts.map +1 -0
  189. package/dist/notes/entities/note-entity.js +48 -0
  190. package/dist/notes/entities/note-entity.js.map +1 -0
  191. package/dist/notes/events/note-created-event.d.ts +10 -0
  192. package/dist/notes/events/note-created-event.d.ts.map +1 -0
  193. package/dist/notes/events/note-created-event.js +13 -0
  194. package/dist/notes/events/note-created-event.js.map +1 -0
  195. package/dist/notes/events/note-deleted-event.d.ts +9 -0
  196. package/dist/notes/events/note-deleted-event.d.ts.map +1 -0
  197. package/dist/notes/events/note-deleted-event.js +12 -0
  198. package/dist/notes/events/note-deleted-event.js.map +1 -0
  199. package/dist/notes/events/note-updated-event.d.ts +10 -0
  200. package/dist/notes/events/note-updated-event.d.ts.map +1 -0
  201. package/dist/notes/events/note-updated-event.js +13 -0
  202. package/dist/notes/events/note-updated-event.js.map +1 -0
  203. package/dist/notes/index.d.ts +11 -0
  204. package/dist/notes/index.d.ts.map +1 -0
  205. package/dist/notes/index.js +16 -0
  206. package/dist/notes/index.js.map +1 -0
  207. package/dist/notes/repositories/notes-command-repository.interface.d.ts +8 -0
  208. package/dist/notes/repositories/notes-command-repository.interface.d.ts.map +1 -0
  209. package/dist/notes/repositories/notes-command-repository.interface.js +2 -0
  210. package/dist/notes/repositories/notes-command-repository.interface.js.map +1 -0
  211. package/dist/notes/repositories/notes-query-repository.interface.d.ts +22 -0
  212. package/dist/notes/repositories/notes-query-repository.interface.d.ts.map +1 -0
  213. package/dist/notes/repositories/notes-query-repository.interface.js +2 -0
  214. package/dist/notes/repositories/notes-query-repository.interface.js.map +1 -0
  215. package/dist/notes/services/notes-domain-service.d.ts +15 -0
  216. package/dist/notes/services/notes-domain-service.d.ts.map +1 -0
  217. package/dist/notes/services/notes-domain-service.js +42 -0
  218. package/dist/notes/services/notes-domain-service.js.map +1 -0
  219. package/dist/notes/types/cache-strategy.d.ts +6 -0
  220. package/dist/notes/types/cache-strategy.d.ts.map +1 -0
  221. package/dist/notes/types/cache-strategy.js +2 -0
  222. package/dist/notes/types/cache-strategy.js.map +1 -0
  223. package/dist/notes/types/query-params.d.ts +14 -0
  224. package/dist/notes/types/query-params.d.ts.map +1 -0
  225. package/dist/notes/types/query-params.js +2 -0
  226. package/dist/notes/types/query-params.js.map +1 -0
  227. package/dist/notes/types/sort-order.d.ts +2 -0
  228. package/dist/notes/types/sort-order.d.ts.map +1 -0
  229. package/dist/notes/types/sort-order.js +2 -0
  230. package/dist/notes/types/sort-order.js.map +1 -0
  231. package/dist/tsconfig.tsbuildinfo +1 -0
  232. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-order.d.ts","sourceRoot":"","sources":["../../../books/types/sort-order.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sort-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-order.js","sourceRoot":"","sources":["../../../books/types/sort-order.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ export declare const Id: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
3
+ export type Id = z.infer<typeof Id>;
4
+ export declare const makeId: (id?: string) => Id;
5
+ export declare const UserId: z.core.$ZodBranded<z.ZodString, "UserId">;
6
+ export type UserId = z.infer<typeof UserId>;
7
+ export declare const makeUserId: (v: string) => UserId;
8
+ export declare const CreatedAt: z.core.$ZodBranded<z.ZodDate, "CreatedAt">;
9
+ export type CreatedAt = z.infer<typeof CreatedAt>;
10
+ export declare const makeCreatedAt: (createdAt?: Date) => CreatedAt;
11
+ export declare const UnexportedStatus: z.ZodLiteral<"UNEXPORTED">;
12
+ export type UnexportedStatus = z.infer<typeof UnexportedStatus>;
13
+ export declare const makeUnexportedStatus: () => UnexportedStatus;
14
+ export declare const ExportedAt: z.core.$ZodBranded<z.ZodDate, "ExportedAt">;
15
+ export type ExportedAt = z.infer<typeof ExportedAt>;
16
+ export declare const makeExportedAt: (exportedAt?: Date) => ExportedAt;
17
+ export declare const ExportedStatus: z.ZodObject<{
18
+ status: z.ZodLiteral<"EXPORTED">;
19
+ exportedAt: z.core.$ZodBranded<z.ZodDate, "ExportedAt">;
20
+ }, z.core.$strip>;
21
+ export type ExportedStatus = z.infer<typeof ExportedStatus>;
22
+ export declare const makeExportedStatus: () => ExportedStatus;
23
+ export type Status = UnexportedStatus | ExportedStatus["status"];
24
+ export declare const makeStatus: (status: "UNEXPORTED" | "EXPORTED") => Status;
25
+ //# sourceMappingURL=common-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-entity.d.ts","sourceRoot":"","sources":["../../../common/entities/common-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,EAAE,mDAGA,CAAC;AAChB,MAAM,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,KAAG,EAGpC,CAAC;AAEF,eAAO,MAAM,MAAM,2CAAkD,CAAC;AACtE,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAC5C,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,KAAG,MAAyB,CAAC;AAEjE,eAAO,MAAM,SAAS,4CAAgC,CAAC;AACvD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,eAAO,MAAM,aAAa,GAAI,YAAY,IAAI,KAAG,SAGhD,CAAC;AAEF,eAAO,MAAM,gBAAgB,4BAA0B,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,eAAO,MAAM,oBAAoB,QAAO,gBACH,CAAC;AAEtC,eAAO,MAAM,UAAU,6CAAiC,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,eAAO,MAAM,cAAc,GAAI,aAAa,IAAI,KAAG,UAGlD,CAAC;AAEF,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAO,MAAM,kBAAkB,QAAO,cAC+B,CAAC;AAEtE,MAAM,MAAM,MAAM,GAAG,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAGjE,eAAO,MAAM,UAAU,GAAI,QAAQ,YAAY,GAAG,UAAU,KAAG,MAE9D,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { idGenerator } from "../services/id-generator";
3
+ // common value objects
4
+ export const Id = z
5
+ .uuid({ version: "v7" })
6
+ .default(() => idGenerator.uuidv7())
7
+ .brand();
8
+ export const makeId = (id) => {
9
+ if (!id)
10
+ return Id.parse(idGenerator.uuidv7());
11
+ return Id.parse(id);
12
+ };
13
+ export const UserId = z.string().min(1, "required").brand();
14
+ export const makeUserId = (v) => UserId.parse(v);
15
+ export const CreatedAt = z.date().brand();
16
+ export const makeCreatedAt = (createdAt) => {
17
+ if (!createdAt)
18
+ return CreatedAt.parse(new Date());
19
+ return CreatedAt.parse(createdAt);
20
+ };
21
+ export const UnexportedStatus = z.literal("UNEXPORTED");
22
+ export const makeUnexportedStatus = () => UnexportedStatus.parse("UNEXPORTED");
23
+ export const ExportedAt = z.date().brand();
24
+ export const makeExportedAt = (exportedAt) => {
25
+ if (!exportedAt)
26
+ return ExportedAt.parse(new Date());
27
+ return ExportedAt.parse(exportedAt);
28
+ };
29
+ export const ExportedStatus = z.object({
30
+ status: z.literal("EXPORTED"),
31
+ exportedAt: ExportedAt,
32
+ });
33
+ export const makeExportedStatus = () => ExportedStatus.parse({ status: "EXPORTED", exportedAt: new Date() });
34
+ // Legacy compatibility - will be removed in future
35
+ export const makeStatus = (status) => {
36
+ return status;
37
+ };
38
+ //# sourceMappingURL=common-entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-entity.js","sourceRoot":"","sources":["../../../common/entities/common-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,uBAAuB;AAEvB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KACjB,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACvB,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;KACnC,KAAK,EAAQ,CAAC;AAEhB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAW,EAAM,EAAE;IACzC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,EAAY,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAgB,EAAa,EAAE;IAC5D,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAqB,EAAE,CAC1D,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAgB,CAAC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAiB,EAAc,EAAE;IAC/D,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7B,UAAU,EAAE,UAAU;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAmB,EAAE,CACtD,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AAItE,mDAAmD;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAiC,EAAU,EAAE;IACvE,OAAO,MAAgB,CAAC;AACzB,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { DomainEvent } from "./domain-event.interface";
2
+ export declare abstract class BaseDomainEvent implements DomainEvent {
3
+ readonly eventType: string;
4
+ readonly payload: Record<string, unknown>;
5
+ readonly metadata: {
6
+ timestamp: Date;
7
+ caller: string;
8
+ userId: string;
9
+ };
10
+ constructor(eventType: string, payload: Record<string, unknown>, metadata: {
11
+ caller: string;
12
+ userId: string;
13
+ });
14
+ }
15
+ //# sourceMappingURL=base-domain-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-domain-event.d.ts","sourceRoot":"","sources":["../../../common/events/base-domain-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,8BAAsB,eAAgB,YAAW,WAAW;IAC3D,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,SAAgB,QAAQ,EAAE;QACzB,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;gBAGD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf;CASF"}
@@ -0,0 +1,14 @@
1
+ export class BaseDomainEvent {
2
+ eventType;
3
+ payload;
4
+ metadata;
5
+ constructor(eventType, payload, metadata) {
6
+ this.eventType = eventType;
7
+ this.payload = payload;
8
+ this.metadata = {
9
+ ...metadata,
10
+ timestamp: new Date(),
11
+ };
12
+ }
13
+ }
14
+ //# sourceMappingURL=base-domain-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-domain-event.js","sourceRoot":"","sources":["../../../common/events/base-domain-event.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,eAAe;IACpB,SAAS,CAAS;IAClB,OAAO,CAA0B;IACjC,QAAQ,CAItB;IAEF,YACC,SAAiB,EACjB,OAAgC,EAChC,QAGC;QAED,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG;YACf,GAAG,QAAQ;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;SACrB,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,13 @@
1
+ export type DomainEvent = {
2
+ eventType: string;
3
+ payload: Record<string, unknown>;
4
+ metadata: {
5
+ timestamp: Date;
6
+ caller: string;
7
+ userId: string;
8
+ };
9
+ };
10
+ export type DomainEventHandler = {
11
+ handle(event: DomainEvent): Promise<void>;
12
+ };
13
+ //# sourceMappingURL=domain-event.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event.interface.d.ts","sourceRoot":"","sources":["../../../common/events/domain-event.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE;QACT,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=domain-event.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-event.interface.js","sourceRoot":"","sources":["../../../common/events/domain-event.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { BaseDomainEvent } from "./base-domain-event";
2
+ export declare class SystemErrorEvent extends BaseDomainEvent {
3
+ constructor(data: {
4
+ message: string;
5
+ status: number;
6
+ caller: string;
7
+ userId?: string;
8
+ extraData?: unknown;
9
+ shouldNotify?: boolean;
10
+ });
11
+ }
12
+ //# sourceMappingURL=system-error-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-error-event.d.ts","sourceRoot":"","sources":["../../../common/events/system-error-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,gBAAiB,SAAQ,eAAe;gBACxC,IAAI,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;KACvB;CAeD"}
@@ -0,0 +1,15 @@
1
+ import { BaseDomainEvent } from "./base-domain-event";
2
+ export class SystemErrorEvent extends BaseDomainEvent {
3
+ constructor(data) {
4
+ super("system.error", {
5
+ message: data.message,
6
+ status: data.status,
7
+ extraData: data.extraData,
8
+ shouldNotify: data.shouldNotify ?? false,
9
+ }, {
10
+ caller: data.caller,
11
+ userId: data.userId ?? "system",
12
+ });
13
+ }
14
+ }
15
+ //# sourceMappingURL=system-error-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-error-event.js","sourceRoot":"","sources":["../../../common/events/system-error-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IACpD,YAAY,IAOX;QACA,KAAK,CACJ,cAAc,EACd;YACC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK;SACxC,EACD;YACC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;SAC/B,CACD,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ import { BaseDomainEvent } from "./base-domain-event";
2
+ export declare class SystemWarningEvent extends BaseDomainEvent {
3
+ constructor(data: {
4
+ message: string;
5
+ status: number;
6
+ caller: string;
7
+ userId?: string;
8
+ extraData?: unknown;
9
+ shouldNotify?: boolean;
10
+ });
11
+ }
12
+ //# sourceMappingURL=system-warning-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-warning-event.d.ts","sourceRoot":"","sources":["../../../common/events/system-warning-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,kBAAmB,SAAQ,eAAe;gBAC1C,IAAI,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;KACvB;CAeD"}
@@ -0,0 +1,15 @@
1
+ import { BaseDomainEvent } from "./base-domain-event";
2
+ export class SystemWarningEvent extends BaseDomainEvent {
3
+ constructor(data) {
4
+ super("system.warning", {
5
+ message: data.message,
6
+ status: data.status,
7
+ extraData: data.extraData,
8
+ shouldNotify: data.shouldNotify ?? false,
9
+ }, {
10
+ caller: data.caller,
11
+ userId: data.userId ?? "system",
12
+ });
13
+ }
14
+ }
15
+ //# sourceMappingURL=system-warning-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-warning-event.js","sourceRoot":"","sources":["../../../common/events/system-warning-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IACtD,YAAY,IAOX;QACA,KAAK,CACJ,gBAAgB,EAChB;YACC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK;SACxC,EACD;YACC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;SAC/B,CACD,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,9 @@
1
+ export * from "./entities/common-entity";
2
+ export * from "./events/base-domain-event";
3
+ export * from "./events/domain-event.interface";
4
+ export * from "./events/system-error-event";
5
+ export * from "./events/system-warning-event";
6
+ export * from "./services/entity-factory";
7
+ export * from "./services/id-generator";
8
+ export * from "./types/search-types";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../common/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AAGzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ // Entities
2
+ export * from "./entities/common-entity";
3
+ // Events
4
+ export * from "./events/base-domain-event";
5
+ export * from "./events/domain-event.interface";
6
+ export * from "./events/system-error-event";
7
+ export * from "./events/system-warning-event";
8
+ // Services
9
+ export * from "./services/entity-factory";
10
+ export * from "./services/id-generator";
11
+ // Types
12
+ export * from "./types/search-types";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../common/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,0BAA0B,CAAC;AAEzC,SAAS;AACT,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAE9C,WAAW;AACX,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAExC,QAAQ;AACR,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const createEntityWithErrorHandling: <T>(factory: () => T) => T;
2
+ //# sourceMappingURL=entity-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-factory.d.ts","sourceRoot":"","sources":["../../../common/services/entity-factory.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,6BAA6B,GAAI,CAAC,EAAE,SAAS,MAAM,CAAC,KAAG,CAOnE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { ZodError } from "zod";
2
+ import { InvalidFormatError, UnexpectedError, } from "../../errors/error-classes";
3
+ export const createEntityWithErrorHandling = (factory) => {
4
+ try {
5
+ return factory();
6
+ }
7
+ catch (error) {
8
+ if (error instanceof ZodError)
9
+ throw new InvalidFormatError();
10
+ throw new UnexpectedError();
11
+ }
12
+ };
13
+ //# sourceMappingURL=entity-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-factory.js","sourceRoot":"","sources":["../../../common/services/entity-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EACN,kBAAkB,EAClB,eAAe,GACf,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAI,OAAgB,EAAK,EAAE;IACvE,IAAI,CAAC;QACJ,OAAO,OAAO,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,QAAQ;YAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9D,MAAM,IAAI,eAAe,EAAE,CAAC;IAC7B,CAAC;AACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const uuidv7: () => string;
2
+ export declare const idGenerator: {
3
+ uuidv7: () => string;
4
+ };
5
+ //# sourceMappingURL=id-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../../../common/services/id-generator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,QAAO,MAAc,CAAC;AAEzC,eAAO,MAAM,WAAW;kBAFE,MAAM;CAEK,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { v7 } from "uuid";
2
+ export const uuidv7 = () => v7();
3
+ export const idGenerator = { uuidv7 };
4
+ //# sourceMappingURL=id-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../../common/services/id-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,EAAE,EAAE,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ export type ContentType = "articles" | "books" | "notes";
2
+ export type SearchResult = {
3
+ href: string;
4
+ contentType: ContentType;
5
+ title: string;
6
+ snippet: string;
7
+ url?: string;
8
+ rating?: number | null;
9
+ tags?: string[];
10
+ category?: {
11
+ id: string;
12
+ name: string;
13
+ };
14
+ };
15
+ export type SearchQuery = {
16
+ query: string;
17
+ contentTypes?: ContentType[];
18
+ limit?: number;
19
+ };
20
+ export type SearchResultGroup = {
21
+ contentType: ContentType;
22
+ results: SearchResult[];
23
+ totalCount: number;
24
+ };
25
+ export type UnifiedSearchResults = {
26
+ results: SearchResult[];
27
+ groups: SearchResultGroup[];
28
+ totalCount: number;
29
+ query: string;
30
+ };
31
+ //# sourceMappingURL=search-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-types.d.ts","sourceRoot":"","sources":["../../../common/types/search-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-types.js","sourceRoot":"","sources":["../../../common/types/search-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export declare class PushoverError extends Error {
2
+ constructor();
3
+ }
4
+ export declare class UnexpectedError extends Error {
5
+ constructor();
6
+ }
7
+ export declare class InvalidFormatError extends Error {
8
+ constructor();
9
+ }
10
+ export declare class DuplicateError extends Error {
11
+ constructor();
12
+ }
13
+ export declare class FileNotAllowedError extends Error {
14
+ constructor();
15
+ }
16
+ //# sourceMappingURL=error-classes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-classes.d.ts","sourceRoot":"","sources":["../../errors/error-classes.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;;CAKvC;AAED,qBAAa,eAAgB,SAAQ,KAAK;;CAKzC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;;CAK5C;AAED,qBAAa,cAAe,SAAQ,KAAK;;CAKxC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;;CAK7C"}
@@ -0,0 +1,31 @@
1
+ export class PushoverError extends Error {
2
+ constructor() {
3
+ super("pushoverSend");
4
+ this.name = "PushoverError";
5
+ }
6
+ }
7
+ export class UnexpectedError extends Error {
8
+ constructor() {
9
+ super("unexpected");
10
+ this.name = "UnexpectedError";
11
+ }
12
+ }
13
+ export class InvalidFormatError extends Error {
14
+ constructor() {
15
+ super("invalidFormat");
16
+ this.name = "InvalidFormatError";
17
+ }
18
+ }
19
+ export class DuplicateError extends Error {
20
+ constructor() {
21
+ super("duplicate");
22
+ this.name = "DuplicateError";
23
+ }
24
+ }
25
+ export class FileNotAllowedError extends Error {
26
+ constructor() {
27
+ super("invalidFileFormat");
28
+ this.name = "FileNotAllowedError";
29
+ }
30
+ }
31
+ //# sourceMappingURL=error-classes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-classes.js","sourceRoot":"","sources":["../../errors/error-classes.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACvC;QACC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC7B,CAAC;CACD;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACzC;QACC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC/B,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC5C;QACC,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC;QACC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC9B,CAAC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC7C;QACC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACnC,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export * from "./error-classes";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../errors/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Error classes
2
+ export * from "./error-classes";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../errors/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,98 @@
1
+ import sharp from "sharp";
2
+ import z from "zod";
3
+ import { UserId } from "../../common/entities/common-entity";
4
+ export declare const Path: z.core.$ZodBranded<z.ZodString, "Path">;
5
+ export type Path = z.infer<typeof Path>;
6
+ export declare const makePath: (v: string, sanitizeAndUnique: boolean) => Path;
7
+ export declare const ContentType: z.core.$ZodBranded<z.ZodEnum<{
8
+ "image/jpeg": "image/jpeg";
9
+ "image/png": "image/png";
10
+ "image/gif": "image/gif";
11
+ jpeg: "jpeg";
12
+ png: "png";
13
+ }>, "ContentType">;
14
+ export type ContentType = z.infer<typeof ContentType>;
15
+ export declare const makeContentType: (v: string) => ContentType;
16
+ export declare const FileSize: z.core.$ZodBranded<z.ZodNumber, "FileSize">;
17
+ export type FileSize = z.infer<typeof FileSize>;
18
+ export declare const makeFileSize: (v: number) => FileSize;
19
+ export declare const Pixel: z.core.$ZodBranded<z.ZodOptional<z.ZodNumber>, "Pixel">;
20
+ export type Pixel = z.infer<typeof Pixel>;
21
+ export declare const makePixel: (v: number) => Pixel;
22
+ export declare const Tag: z.core.$ZodBranded<z.ZodString, "Tag">;
23
+ export type Tag = z.infer<typeof Tag>;
24
+ export declare const makeTag: (v: string) => Tag;
25
+ export declare const Description: z.core.$ZodBranded<z.ZodOptional<z.ZodString>, "Description">;
26
+ export type Description = z.infer<typeof Description>;
27
+ export declare const makeDescription: (v: string) => Description;
28
+ export declare const makeOriginalBuffer: (file: File) => Promise<Buffer<ArrayBuffer>>;
29
+ export declare const makeThumbnailBufferFromFile: (file: File) => Promise<Buffer<ArrayBufferLike>>;
30
+ export declare const makeThumbnailBufferFromBuffer: (buffer: Buffer) => Promise<Buffer<ArrayBufferLike>>;
31
+ export declare const makeMetadata: (buffer: Buffer) => Promise<sharp.Metadata>;
32
+ export declare const UnexportedImage: z.ZodObject<{
33
+ id: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
34
+ userId: z.core.$ZodBranded<z.ZodString, "UserId">;
35
+ path: z.core.$ZodBranded<z.ZodString, "Path">;
36
+ contentType: z.core.$ZodBranded<z.ZodEnum<{
37
+ "image/jpeg": "image/jpeg";
38
+ "image/png": "image/png";
39
+ "image/gif": "image/gif";
40
+ jpeg: "jpeg";
41
+ png: "png";
42
+ }>, "ContentType">;
43
+ fileSize: z.core.$ZodBranded<z.ZodNumber, "FileSize">;
44
+ width: z.core.$ZodBranded<z.ZodOptional<z.ZodNumber>, "Pixel">;
45
+ height: z.core.$ZodBranded<z.ZodOptional<z.ZodNumber>, "Pixel">;
46
+ tags: z.ZodOptional<z.ZodArray<z.core.$ZodBranded<z.ZodString, "Tag">>>;
47
+ description: z.core.$ZodBranded<z.ZodOptional<z.ZodString>, "Description">;
48
+ createdAt: z.core.$ZodBranded<z.ZodDate, "CreatedAt">;
49
+ status: z.ZodLiteral<"UNEXPORTED">;
50
+ }, z.core.$strip>;
51
+ export type UnexportedImage = Readonly<z.infer<typeof UnexportedImage>>;
52
+ declare const ExportedImage: z.ZodObject<{
53
+ id: z.core.$ZodBranded<z.ZodDefault<z.ZodUUID>, "Id">;
54
+ userId: z.core.$ZodBranded<z.ZodString, "UserId">;
55
+ path: z.core.$ZodBranded<z.ZodString, "Path">;
56
+ contentType: z.core.$ZodBranded<z.ZodEnum<{
57
+ "image/jpeg": "image/jpeg";
58
+ "image/png": "image/png";
59
+ "image/gif": "image/gif";
60
+ jpeg: "jpeg";
61
+ png: "png";
62
+ }>, "ContentType">;
63
+ fileSize: z.core.$ZodBranded<z.ZodNumber, "FileSize">;
64
+ width: z.core.$ZodBranded<z.ZodOptional<z.ZodNumber>, "Pixel">;
65
+ height: z.core.$ZodBranded<z.ZodOptional<z.ZodNumber>, "Pixel">;
66
+ tags: z.ZodOptional<z.ZodArray<z.core.$ZodBranded<z.ZodString, "Tag">>>;
67
+ description: z.core.$ZodBranded<z.ZodOptional<z.ZodString>, "Description">;
68
+ createdAt: z.core.$ZodBranded<z.ZodDate, "CreatedAt">;
69
+ status: z.ZodLiteral<"EXPORTED">;
70
+ exportedAt: z.core.$ZodBranded<z.ZodDate, "ExportedAt">;
71
+ }, z.core.$strip>;
72
+ type ExportedImage = Readonly<z.infer<typeof ExportedImage>>;
73
+ type CreateImageArgs = Readonly<{
74
+ userId: UserId;
75
+ path: Path;
76
+ contentType: ContentType;
77
+ fileSize: FileSize;
78
+ width?: Pixel;
79
+ height?: Pixel;
80
+ tags?: Array<Tag>;
81
+ description?: Description;
82
+ }>;
83
+ type UpdateImageArgs = Readonly<{
84
+ path?: Path;
85
+ contentType?: ContentType;
86
+ fileSize?: FileSize;
87
+ width?: Pixel;
88
+ height?: Pixel;
89
+ tags?: Array<Tag>;
90
+ description?: Description;
91
+ }>;
92
+ export declare const imageEntity: {
93
+ create: (args: CreateImageArgs) => UnexportedImage;
94
+ update: (image: UnexportedImage, args: UpdateImageArgs) => UnexportedImage;
95
+ export: (image: UnexportedImage) => ExportedImage;
96
+ };
97
+ export {};
98
+ //# sourceMappingURL=image-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-entity.d.ts","sourceRoot":"","sources":["../../../images/entities/image-entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import sharp from "sharp";
2
+ import z from "zod";
3
+ import { CreatedAt, ExportedStatus, Id, makeCreatedAt, makeExportedStatus, makeId, UnexportedStatus, UserId, } from "../../common/entities/common-entity";
4
+ import { createEntityWithErrorHandling } from "../../common/services/entity-factory";
5
+ import { idGenerator } from "../../common/services/id-generator";
6
+ // NOTE: sync with s-contents/update-db.ts
7
+ const THUMBNAIL_WIDTH = 192;
8
+ const THUMBNAIL_HEIGHT = 192;
9
+ // Value objects
10
+ export const Path = z.string().min(1).brand();
11
+ export const makePath = (v, sanitizeAndUnique) => {
12
+ if (sanitizeAndUnique) {
13
+ const sanitizedFileName = v.replaceAll(/[^a-zA-Z0-9._-]/g, "");
14
+ const path = `${idGenerator.uuidv7()}-${sanitizedFileName}`;
15
+ return Path.parse(path);
16
+ }
17
+ return Path.parse(v);
18
+ };
19
+ export const ContentType = z
20
+ .enum(["image/jpeg", "image/png", "image/gif", "jpeg", "png"])
21
+ .brand();
22
+ export const makeContentType = (v) => ContentType.parse(v);
23
+ export const FileSize = z
24
+ .number()
25
+ .int()
26
+ .nonnegative()
27
+ .max(100 * 1024 * 1024) // 100MB
28
+ .brand();
29
+ export const makeFileSize = (v) => FileSize.parse(v);
30
+ export const Pixel = z.number().int().positive().optional().brand();
31
+ export const makePixel = (v) => Pixel.parse(v);
32
+ export const Tag = z.string().min(1).brand();
33
+ export const makeTag = (v) => Tag.parse(v);
34
+ export const Description = z.string().min(1).optional().brand();
35
+ export const makeDescription = (v) => Description.parse(v);
36
+ export const makeOriginalBuffer = async (file) => {
37
+ return Buffer.from(await file.arrayBuffer());
38
+ };
39
+ export const makeThumbnailBufferFromFile = async (file) => {
40
+ const originalBuffer = Buffer.from(await file.arrayBuffer());
41
+ return await sharp(originalBuffer)
42
+ .resize(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT)
43
+ .toBuffer();
44
+ };
45
+ export const makeThumbnailBufferFromBuffer = async (buffer) => {
46
+ return await sharp(buffer)
47
+ .resize(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT)
48
+ .toBuffer();
49
+ };
50
+ export const makeMetadata = async (buffer) => {
51
+ return sharp(buffer).metadata();
52
+ };
53
+ // Entities
54
+ const Base = z.object({
55
+ id: Id,
56
+ userId: UserId,
57
+ path: Path,
58
+ contentType: ContentType,
59
+ fileSize: FileSize,
60
+ width: Pixel,
61
+ height: Pixel,
62
+ tags: z.array(Tag).optional(),
63
+ description: Description,
64
+ createdAt: CreatedAt,
65
+ });
66
+ export const UnexportedImage = Base.extend({ status: UnexportedStatus });
67
+ const ExportedImage = Base.extend(ExportedStatus.shape);
68
+ export const imageEntity = {
69
+ create: (args) => {
70
+ return createEntityWithErrorHandling(() => Object.freeze({
71
+ id: makeId(),
72
+ status: "UNEXPORTED",
73
+ createdAt: makeCreatedAt(),
74
+ ...args,
75
+ }));
76
+ },
77
+ update: (image, args) => {
78
+ return createEntityWithErrorHandling(() => Object.freeze({ ...image, ...args }));
79
+ },
80
+ export: (image) => {
81
+ return createEntityWithErrorHandling(() => {
82
+ const exportedStatus = makeExportedStatus();
83
+ return Object.freeze({
84
+ ...image,
85
+ ...exportedStatus,
86
+ });
87
+ });
88
+ },
89
+ };
90
+ //# sourceMappingURL=image-entity.js.map