@intlayer/backend 3.5.5 → 3.5.7

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 (253) hide show
  1. package/dist/cjs/controllers/ai.controller.cjs +175 -7
  2. package/dist/cjs/controllers/ai.controller.cjs.map +1 -1
  3. package/dist/cjs/controllers/dictionary.controller.cjs +50 -17
  4. package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -1
  5. package/dist/cjs/controllers/project.controller.cjs +2 -6
  6. package/dist/cjs/controllers/project.controller.cjs.map +1 -1
  7. package/dist/cjs/controllers/tag.controller.cjs +235 -0
  8. package/dist/cjs/controllers/tag.controller.cjs.map +1 -0
  9. package/dist/cjs/controllers/user.controller.cjs +1 -0
  10. package/dist/cjs/controllers/user.controller.cjs.map +1 -1
  11. package/dist/cjs/export.cjs.map +1 -1
  12. package/dist/cjs/index.cjs +2 -0
  13. package/dist/cjs/index.cjs.map +1 -1
  14. package/dist/cjs/models/tag.model.cjs +31 -0
  15. package/dist/cjs/models/tag.model.cjs.map +1 -0
  16. package/dist/cjs/routes/ai.routes.cjs +37 -4
  17. package/dist/cjs/routes/ai.routes.cjs.map +1 -1
  18. package/dist/cjs/routes/dictionary.routes.cjs +4 -4
  19. package/dist/cjs/routes/dictionary.routes.cjs.map +1 -1
  20. package/dist/cjs/routes/tags.routes.cjs +60 -0
  21. package/dist/cjs/routes/tags.routes.cjs.map +1 -0
  22. package/dist/cjs/schemas/dictionary.schema.cjs +31 -6
  23. package/dist/cjs/schemas/dictionary.schema.cjs.map +1 -1
  24. package/dist/cjs/schemas/project.schema.cjs +5 -0
  25. package/dist/cjs/schemas/project.schema.cjs.map +1 -1
  26. package/dist/cjs/schemas/tag.schema.cjs +64 -0
  27. package/dist/cjs/schemas/tag.schema.cjs.map +1 -0
  28. package/dist/cjs/services/dictionary.service.cjs +138 -27
  29. package/dist/cjs/services/dictionary.service.cjs.map +1 -1
  30. package/dist/cjs/services/project.service.cjs +13 -5
  31. package/dist/cjs/services/project.service.cjs.map +1 -1
  32. package/dist/cjs/services/tag.service.cjs +91 -0
  33. package/dist/cjs/services/tag.service.cjs.map +1 -0
  34. package/dist/cjs/types/dictionary.types.cjs.map +1 -1
  35. package/dist/cjs/types/tag.types.cjs +17 -0
  36. package/dist/cjs/types/tag.types.cjs.map +1 -0
  37. package/dist/cjs/utils/AI/askDocQuestion.cjs +185 -0
  38. package/dist/cjs/utils/AI/askDocQuestion.cjs.map +1 -0
  39. package/dist/cjs/utils/AI/embeddings.json +150583 -0
  40. package/dist/cjs/utils/{audit → auditDictionary}/PROMPT.md +6 -1
  41. package/dist/cjs/utils/{audit → auditDictionary}/index.cjs +10 -8
  42. package/dist/cjs/utils/auditDictionary/index.cjs.map +1 -0
  43. package/dist/cjs/utils/auditDictionaryField/PROMPT.md +115 -0
  44. package/dist/cjs/utils/auditDictionaryField/index.cjs +80 -0
  45. package/dist/cjs/utils/auditDictionaryField/index.cjs.map +1 -0
  46. package/dist/cjs/utils/auditDictionaryMetadata/PROMPT.md +76 -0
  47. package/dist/cjs/utils/auditDictionaryMetadata/index.cjs +76 -0
  48. package/dist/cjs/utils/auditDictionaryMetadata/index.cjs.map +1 -0
  49. package/dist/cjs/utils/auditTag/PROMPT.md +34 -0
  50. package/dist/cjs/utils/auditTag/index.cjs +72 -0
  51. package/dist/cjs/utils/auditTag/index.cjs.map +1 -0
  52. package/dist/cjs/utils/ensureArrayQueryFilter.cjs +39 -0
  53. package/dist/cjs/utils/ensureArrayQueryFilter.cjs.map +1 -0
  54. package/dist/cjs/utils/ensureMongoDocumentToObject.cjs +35 -0
  55. package/dist/cjs/utils/ensureMongoDocumentToObject.cjs.map +1 -0
  56. package/dist/cjs/utils/errors/errorCodes.cjs +91 -0
  57. package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -1
  58. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs +10 -11
  59. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs.map +1 -1
  60. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs +6 -10
  61. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +1 -1
  62. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs +6 -10
  63. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +1 -1
  64. package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs +51 -0
  65. package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs.map +1 -0
  66. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +2 -9
  67. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +1 -1
  68. package/dist/cjs/utils/mapper/dictionary.cjs +8 -4
  69. package/dist/cjs/utils/mapper/dictionary.cjs.map +1 -1
  70. package/dist/cjs/utils/mapper/organization.cjs +2 -4
  71. package/dist/cjs/utils/mapper/organization.cjs.map +1 -1
  72. package/dist/cjs/utils/mapper/project.cjs +2 -4
  73. package/dist/cjs/utils/mapper/project.cjs.map +1 -1
  74. package/dist/cjs/utils/mapper/tag.cjs +37 -0
  75. package/dist/cjs/utils/mapper/tag.cjs.map +1 -0
  76. package/dist/cjs/utils/mapper/user.cjs +2 -4
  77. package/dist/cjs/utils/mapper/user.cjs.map +1 -1
  78. package/dist/cjs/utils/removeObjectKeys.cjs +35 -0
  79. package/dist/cjs/utils/removeObjectKeys.cjs.map +1 -0
  80. package/dist/cjs/utils/validation/validateProject.cjs +17 -10
  81. package/dist/cjs/utils/validation/validateProject.cjs.map +1 -1
  82. package/dist/cjs/utils/validation/validateTag.cjs +93 -0
  83. package/dist/cjs/utils/validation/validateTag.cjs.map +1 -0
  84. package/dist/esm/controllers/ai.controller.mjs +170 -6
  85. package/dist/esm/controllers/ai.controller.mjs.map +1 -1
  86. package/dist/esm/controllers/dictionary.controller.mjs +50 -17
  87. package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
  88. package/dist/esm/controllers/project.controller.mjs +2 -6
  89. package/dist/esm/controllers/project.controller.mjs.map +1 -1
  90. package/dist/esm/controllers/tag.controller.mjs +203 -0
  91. package/dist/esm/controllers/tag.controller.mjs.map +1 -0
  92. package/dist/esm/controllers/user.controller.mjs +1 -0
  93. package/dist/esm/controllers/user.controller.mjs.map +1 -1
  94. package/dist/esm/export.mjs.map +1 -1
  95. package/dist/esm/index.mjs +2 -0
  96. package/dist/esm/index.mjs.map +1 -1
  97. package/dist/esm/models/tag.model.mjs +7 -0
  98. package/dist/esm/models/tag.model.mjs.map +1 -0
  99. package/dist/esm/routes/ai.routes.mjs +44 -5
  100. package/dist/esm/routes/ai.routes.mjs.map +1 -1
  101. package/dist/esm/routes/dictionary.routes.mjs +4 -4
  102. package/dist/esm/routes/dictionary.routes.mjs.map +1 -1
  103. package/dist/esm/routes/tags.routes.mjs +40 -0
  104. package/dist/esm/routes/tags.routes.mjs.map +1 -0
  105. package/dist/esm/schemas/dictionary.schema.mjs +31 -6
  106. package/dist/esm/schemas/dictionary.schema.mjs.map +1 -1
  107. package/dist/esm/schemas/project.schema.mjs +5 -0
  108. package/dist/esm/schemas/project.schema.mjs.map +1 -1
  109. package/dist/esm/schemas/tag.schema.mjs +45 -0
  110. package/dist/esm/schemas/tag.schema.mjs.map +1 -0
  111. package/dist/esm/services/dictionary.service.mjs +136 -27
  112. package/dist/esm/services/dictionary.service.mjs.map +1 -1
  113. package/dist/esm/services/project.service.mjs +13 -5
  114. package/dist/esm/services/project.service.mjs.map +1 -1
  115. package/dist/esm/services/tag.service.mjs +61 -0
  116. package/dist/esm/services/tag.service.mjs.map +1 -0
  117. package/dist/esm/types/tag.types.mjs +1 -0
  118. package/dist/esm/types/tag.types.mjs.map +1 -0
  119. package/dist/esm/utils/AI/askDocQuestion.mjs +148 -0
  120. package/dist/esm/utils/AI/askDocQuestion.mjs.map +1 -0
  121. package/dist/esm/utils/AI/embeddings.json +150583 -0
  122. package/dist/esm/utils/{audit → auditDictionary}/PROMPT.md +6 -1
  123. package/dist/esm/utils/{audit → auditDictionary}/index.mjs +6 -4
  124. package/dist/esm/utils/auditDictionary/index.mjs.map +1 -0
  125. package/dist/esm/utils/auditDictionaryField/PROMPT.md +115 -0
  126. package/dist/esm/utils/auditDictionaryField/index.mjs +55 -0
  127. package/dist/esm/utils/auditDictionaryField/index.mjs.map +1 -0
  128. package/dist/esm/utils/auditDictionaryMetadata/PROMPT.md +76 -0
  129. package/dist/esm/utils/auditDictionaryMetadata/index.mjs +51 -0
  130. package/dist/esm/utils/auditDictionaryMetadata/index.mjs.map +1 -0
  131. package/dist/esm/utils/auditTag/PROMPT.md +34 -0
  132. package/dist/esm/utils/auditTag/index.mjs +47 -0
  133. package/dist/esm/utils/auditTag/index.mjs.map +1 -0
  134. package/dist/esm/utils/ensureArrayQueryFilter.mjs +15 -0
  135. package/dist/esm/utils/ensureArrayQueryFilter.mjs.map +1 -0
  136. package/dist/esm/utils/ensureMongoDocumentToObject.mjs +11 -0
  137. package/dist/esm/utils/ensureMongoDocumentToObject.mjs.map +1 -0
  138. package/dist/esm/utils/errors/errorCodes.mjs +91 -0
  139. package/dist/esm/utils/errors/errorCodes.mjs.map +1 -1
  140. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs +10 -11
  141. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs.map +1 -1
  142. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs +6 -10
  143. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs.map +1 -1
  144. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs +6 -10
  145. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs.map +1 -1
  146. package/dist/esm/utils/filtersAndPagination/getTagFiltersAndPagination.mjs +29 -0
  147. package/dist/esm/utils/filtersAndPagination/getTagFiltersAndPagination.mjs.map +1 -0
  148. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs +2 -9
  149. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs.map +1 -1
  150. package/dist/esm/utils/mapper/dictionary.mjs +8 -4
  151. package/dist/esm/utils/mapper/dictionary.mjs.map +1 -1
  152. package/dist/esm/utils/mapper/organization.mjs +2 -4
  153. package/dist/esm/utils/mapper/organization.mjs.map +1 -1
  154. package/dist/esm/utils/mapper/project.mjs +2 -4
  155. package/dist/esm/utils/mapper/project.mjs.map +1 -1
  156. package/dist/esm/utils/mapper/tag.mjs +12 -0
  157. package/dist/esm/utils/mapper/tag.mjs.map +1 -0
  158. package/dist/esm/utils/mapper/user.mjs +2 -4
  159. package/dist/esm/utils/mapper/user.mjs.map +1 -1
  160. package/dist/esm/utils/removeObjectKeys.mjs +11 -0
  161. package/dist/esm/utils/removeObjectKeys.mjs.map +1 -0
  162. package/dist/esm/utils/validation/validateProject.mjs +17 -10
  163. package/dist/esm/utils/validation/validateProject.mjs.map +1 -1
  164. package/dist/esm/utils/validation/validateTag.mjs +65 -0
  165. package/dist/esm/utils/validation/validateTag.mjs.map +1 -0
  166. package/dist/types/controllers/ai.controller.d.ts +51 -4
  167. package/dist/types/controllers/ai.controller.d.ts.map +1 -1
  168. package/dist/types/controllers/dictionary.controller.d.ts +6 -3
  169. package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
  170. package/dist/types/controllers/project.controller.d.ts +2 -4
  171. package/dist/types/controllers/project.controller.d.ts.map +1 -1
  172. package/dist/types/controllers/tag.controller.d.ts +39 -0
  173. package/dist/types/controllers/tag.controller.d.ts.map +1 -0
  174. package/dist/types/controllers/user.controller.d.ts.map +1 -1
  175. package/dist/types/export.d.ts +2 -0
  176. package/dist/types/export.d.ts.map +1 -1
  177. package/dist/types/index.d.ts.map +1 -1
  178. package/dist/types/models/dictionary.model.d.ts +1 -0
  179. package/dist/types/models/dictionary.model.d.ts.map +1 -1
  180. package/dist/types/models/tag.model.d.ts +3 -0
  181. package/dist/types/models/tag.model.d.ts.map +1 -0
  182. package/dist/types/routes/ai.routes.d.ts +21 -1
  183. package/dist/types/routes/ai.routes.d.ts.map +1 -1
  184. package/dist/types/routes/dictionary.routes.d.ts +6 -2
  185. package/dist/types/routes/dictionary.routes.d.ts.map +1 -1
  186. package/dist/types/routes/tags.routes.d.ts +29 -0
  187. package/dist/types/routes/tags.routes.d.ts.map +1 -0
  188. package/dist/types/schemas/dictionary.schema.d.ts +1 -0
  189. package/dist/types/schemas/dictionary.schema.d.ts.map +1 -1
  190. package/dist/types/schemas/project.schema.d.ts.map +1 -1
  191. package/dist/types/schemas/tag.schema.d.ts +16 -0
  192. package/dist/types/schemas/tag.schema.d.ts.map +1 -0
  193. package/dist/types/services/dictionary.service.d.ts +10 -2
  194. package/dist/types/services/dictionary.service.d.ts.map +1 -1
  195. package/dist/types/services/project.service.d.ts.map +1 -1
  196. package/dist/types/services/tag.service.d.ts +45 -0
  197. package/dist/types/services/tag.service.d.ts.map +1 -0
  198. package/dist/types/types/dictionary.types.d.ts +14 -4
  199. package/dist/types/types/dictionary.types.d.ts.map +1 -1
  200. package/dist/types/types/tag.types.d.ts +26 -0
  201. package/dist/types/types/tag.types.d.ts.map +1 -0
  202. package/dist/types/utils/AI/askDocQuestion.d.ts +38 -0
  203. package/dist/types/utils/AI/askDocQuestion.d.ts.map +1 -0
  204. package/dist/types/utils/auditDictionary/index.d.ts +24 -0
  205. package/dist/types/utils/auditDictionary/index.d.ts.map +1 -0
  206. package/dist/types/utils/auditDictionaryField/index.d.ts +24 -0
  207. package/dist/types/utils/auditDictionaryField/index.d.ts.map +1 -0
  208. package/dist/types/utils/auditDictionaryMetadata/index.d.ts +21 -0
  209. package/dist/types/utils/auditDictionaryMetadata/index.d.ts.map +1 -0
  210. package/dist/types/utils/{audit → auditTag}/index.d.ts +5 -6
  211. package/dist/types/utils/auditTag/index.d.ts.map +1 -0
  212. package/dist/types/utils/ensureArrayQueryFilter.d.ts +2 -0
  213. package/dist/types/utils/ensureArrayQueryFilter.d.ts.map +1 -0
  214. package/dist/types/utils/ensureMongoDocumentToObject.d.ts +8 -0
  215. package/dist/types/utils/ensureMongoDocumentToObject.d.ts.map +1 -0
  216. package/dist/types/utils/errors/errorCodes.d.ts +91 -0
  217. package/dist/types/utils/errors/errorCodes.d.ts.map +1 -1
  218. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts +2 -0
  219. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts.map +1 -1
  220. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts.map +1 -1
  221. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts.map +1 -1
  222. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts +24 -0
  223. package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts.map +1 -0
  224. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts.map +1 -1
  225. package/dist/types/utils/mapper/dictionary.d.ts +1 -1
  226. package/dist/types/utils/mapper/dictionary.d.ts.map +1 -1
  227. package/dist/types/utils/mapper/organization.d.ts.map +1 -1
  228. package/dist/types/utils/mapper/project.d.ts.map +1 -1
  229. package/dist/types/utils/mapper/tag.d.ts +16 -0
  230. package/dist/types/utils/mapper/tag.d.ts.map +1 -0
  231. package/dist/types/utils/mapper/user.d.ts +2 -2
  232. package/dist/types/utils/mapper/user.d.ts.map +1 -1
  233. package/dist/types/utils/removeObjectKeys.d.ts +2 -0
  234. package/dist/types/utils/removeObjectKeys.d.ts.map +1 -0
  235. package/dist/types/utils/validation/validateProject.d.ts.map +1 -1
  236. package/dist/types/utils/validation/validateTag.d.ts +16 -0
  237. package/dist/types/utils/validation/validateTag.d.ts.map +1 -0
  238. package/package.json +11 -10
  239. package/dist/cjs/utils/audit/index.cjs.map +0 -1
  240. package/dist/esm/utils/audit/index.mjs.map +0 -1
  241. package/dist/types/utils/audit/index.d.ts.map +0 -1
  242. /package/dist/cjs/utils/{audit → auditDictionary}/CJS_FORMAT.md +0 -0
  243. /package/dist/cjs/utils/{audit → auditDictionary}/JSON_FORMAT.md +0 -0
  244. /package/dist/cjs/utils/{audit → auditDictionary}/JSX_FORMAT.md +0 -0
  245. /package/dist/cjs/utils/{audit → auditDictionary}/MJS_FORMAT.md +0 -0
  246. /package/dist/cjs/utils/{audit → auditDictionary}/TSX_FORMAT.md +0 -0
  247. /package/dist/cjs/utils/{audit → auditDictionary}/TS_FORMAT.md +0 -0
  248. /package/dist/esm/utils/{audit → auditDictionary}/CJS_FORMAT.md +0 -0
  249. /package/dist/esm/utils/{audit → auditDictionary}/JSON_FORMAT.md +0 -0
  250. /package/dist/esm/utils/{audit → auditDictionary}/JSX_FORMAT.md +0 -0
  251. /package/dist/esm/utils/{audit → auditDictionary}/MJS_FORMAT.md +0 -0
  252. /package/dist/esm/utils/{audit → auditDictionary}/TSX_FORMAT.md +0 -0
  253. /package/dist/esm/utils/{audit → auditDictionary}/TS_FORMAT.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/filtersAndPagination/getProjectFiltersAndPagination.ts"],"sourcesContent":["import type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\nimport type { Project } from '@/types/project.types';\n\nexport type ProjectFiltersParams = {\n ids?: string | string[];\n name?: string;\n organizationId?: string;\n membersIds?: string[];\n};\nexport type ProjectFilters = RootFilterQuery<Project>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getProjectFiltersAndPagination = (\n req: Request<FiltersAndPagination<ProjectFiltersParams>>\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<ProjectFiltersParams>(req);\n\n let filters: ProjectFilters = {};\n\n if (Object.keys(filtersRequest).length > 0) {\n const { name, ids, organizationId, membersIds } = filtersRequest;\n\n filters = {};\n\n if (ids) {\n let idsArray: string[];\n\n if (typeof ids === 'string') {\n idsArray = ids.split(',');\n } else if (Array.isArray(ids)) {\n idsArray = ids;\n } else {\n idsArray = [ids];\n }\n\n filters = { ...filters, _id: { $in: idsArray } };\n }\n\n if (name) {\n filters = { ...filters, name: new RegExp(name, 'i') };\n }\n\n if (organizationId) {\n filters = { ...filters, organizationId };\n }\n\n if (membersIds) {\n filters = { ...filters, membersIds: { $in: membersIds } };\n }\n }\n\n return { filters, ...pagination };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6CAGO;AAgBA,MAAM,iCAAiC,CAC5C,QACG;AACH,QAAM,EAAE,SAAS,gBAAgB,GAAG,WAAW,QAC7C,wEAAsD,GAAG;AAE3D,MAAI,UAA0B,CAAC;AAE/B,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,GAAG;AAC1C,UAAM,EAAE,MAAM,KAAK,gBAAgB,WAAW,IAAI;AAElD,cAAU,CAAC;AAEX,QAAI,KAAK;AACP,UAAI;AAEJ,UAAI,OAAO,QAAQ,UAAU;AAC3B,mBAAW,IAAI,MAAM,GAAG;AAAA,MAC1B,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,mBAAW;AAAA,MACb,OAAO;AACL,mBAAW,CAAC,GAAG;AAAA,MACjB;AAEA,gBAAU,EAAE,GAAG,SAAS,KAAK,EAAE,KAAK,SAAS,EAAE;AAAA,IACjD;AAEA,QAAI,MAAM;AACR,gBAAU,EAAE,GAAG,SAAS,MAAM,IAAI,OAAO,MAAM,GAAG,EAAE;AAAA,IACtD;AAEA,QAAI,gBAAgB;AAClB,gBAAU,EAAE,GAAG,SAAS,eAAe;AAAA,IACzC;AAEA,QAAI,YAAY;AACd,gBAAU,EAAE,GAAG,SAAS,YAAY,EAAE,KAAK,WAAW,EAAE;AAAA,IAC1D;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,WAAW;AAClC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/filtersAndPagination/getProjectFiltersAndPagination.ts"],"sourcesContent":["import { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\nimport type { Project } from '@/types/project.types';\n\nexport type ProjectFiltersParams = {\n ids?: string | string[];\n name?: string;\n organizationId?: string;\n membersIds?: string[];\n};\nexport type ProjectFilters = RootFilterQuery<Project>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getProjectFiltersAndPagination = (\n req: Request<FiltersAndPagination<ProjectFiltersParams>>\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<ProjectFiltersParams>(req);\n\n let filters: ProjectFilters = {};\n\n if (Object.keys(filtersRequest).length > 0) {\n const { name, ids, organizationId, membersIds } = filtersRequest;\n\n filters = {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (name) {\n filters = { ...filters, name: new RegExp(name, 'i') };\n }\n\n if (organizationId) {\n filters = { ...filters, organizationId };\n }\n\n if (membersIds) {\n filters = {\n ...filters,\n membersIds: { $in: ensureArrayQueryFilter(membersIds) },\n };\n }\n }\n\n return { filters, ...pagination };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAuC;AAGvC,6CAGO;AAgBA,MAAM,iCAAiC,CAC5C,QACG;AACH,QAAM,EAAE,SAAS,gBAAgB,GAAG,WAAW,QAC7C,wEAAsD,GAAG;AAE3D,MAAI,UAA0B,CAAC;AAE/B,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,GAAG;AAC1C,UAAM,EAAE,MAAM,KAAK,gBAAgB,WAAW,IAAI;AAElD,cAAU,CAAC;AAEX,QAAI,KAAK;AACP,gBAAU,EAAE,GAAG,SAAS,KAAK,EAAE,SAAK,sDAAuB,GAAG,EAAE,EAAE;AAAA,IACpE;AAEA,QAAI,MAAM;AACR,gBAAU,EAAE,GAAG,SAAS,MAAM,IAAI,OAAO,MAAM,GAAG,EAAE;AAAA,IACtD;AAEA,QAAI,gBAAgB;AAClB,gBAAU,EAAE,GAAG,SAAS,eAAe;AAAA,IACzC;AAEA,QAAI,YAAY;AACd,gBAAU;AAAA,QACR,GAAG;AAAA,QACH,YAAY,EAAE,SAAK,sDAAuB,UAAU,EAAE;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,WAAW;AAClC;","names":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var getTagFiltersAndPagination_exports = {};
20
+ __export(getTagFiltersAndPagination_exports, {
21
+ getTagFiltersAndPagination: () => getTagFiltersAndPagination
22
+ });
23
+ module.exports = __toCommonJS(getTagFiltersAndPagination_exports);
24
+ var import_ensureArrayQueryFilter = require('./../../utils/ensureArrayQueryFilter.cjs');
25
+ var import_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
26
+ const getTagFiltersAndPagination = (req) => {
27
+ const { filters: filtersRequest, ...pagination } = (0, import_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody)(req);
28
+ let filters = {};
29
+ if (Object.keys(filtersRequest).length > 0) {
30
+ const { name, ids, keys, organizationId } = filtersRequest;
31
+ filters = {};
32
+ if (ids) {
33
+ filters = { ...filters, _id: { $in: (0, import_ensureArrayQueryFilter.ensureArrayQueryFilter)(ids) } };
34
+ }
35
+ if (keys) {
36
+ filters = { ...filters, key: { $in: (0, import_ensureArrayQueryFilter.ensureArrayQueryFilter)(keys) } };
37
+ }
38
+ if (name) {
39
+ filters = { ...filters, name: new RegExp(name, "i") };
40
+ }
41
+ if (organizationId) {
42
+ filters = { ...filters, organizationId };
43
+ }
44
+ }
45
+ return { filters, ...pagination };
46
+ };
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ getTagFiltersAndPagination
50
+ });
51
+ //# sourceMappingURL=getTagFiltersAndPagination.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/filtersAndPagination/getTagFiltersAndPagination.ts"],"sourcesContent":["import { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\nimport type { Tag } from '@/types/tag.types';\n\nexport type TagFiltersParams = {\n ids?: string | string[];\n keys?: string | string[];\n name?: string;\n organizationId?: string;\n};\nexport type TagFilters = RootFilterQuery<Tag>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getTagFiltersAndPagination = (\n req: Request<FiltersAndPagination<TagFiltersParams>>\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<TagFiltersParams>(req);\n\n let filters: TagFilters = {};\n\n if (Object.keys(filtersRequest).length > 0) {\n const { name, ids, keys, organizationId } = filtersRequest;\n\n filters = {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (keys) {\n filters = { ...filters, key: { $in: ensureArrayQueryFilter(keys) } };\n }\n\n if (name) {\n filters = { ...filters, name: new RegExp(name, 'i') };\n }\n\n if (organizationId) {\n filters = { ...filters, organizationId };\n }\n }\n\n return { filters, ...pagination };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAuC;AAGvC,6CAGO;AAgBA,MAAM,6BAA6B,CACxC,QACG;AACH,QAAM,EAAE,SAAS,gBAAgB,GAAG,WAAW,QAC7C,wEAAkD,GAAG;AAEvD,MAAI,UAAsB,CAAC;AAE3B,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,GAAG;AAC1C,UAAM,EAAE,MAAM,KAAK,MAAM,eAAe,IAAI;AAE5C,cAAU,CAAC;AAEX,QAAI,KAAK;AACP,gBAAU,EAAE,GAAG,SAAS,KAAK,EAAE,SAAK,sDAAuB,GAAG,EAAE,EAAE;AAAA,IACpE;AAEA,QAAI,MAAM;AACR,gBAAU,EAAE,GAAG,SAAS,KAAK,EAAE,SAAK,sDAAuB,IAAI,EAAE,EAAE;AAAA,IACrE;AAEA,QAAI,MAAM;AACR,gBAAU,EAAE,GAAG,SAAS,MAAM,IAAI,OAAO,MAAM,GAAG,EAAE;AAAA,IACtD;AAEA,QAAI,gBAAgB;AAClB,gBAAU,EAAE,GAAG,SAAS,eAAe;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,WAAW;AAClC;","names":[]}
@@ -21,6 +21,7 @@ __export(getUserFiltersAndPagination_exports, {
21
21
  getUserFiltersAndPagination: () => getUserFiltersAndPagination
22
22
  });
23
23
  module.exports = __toCommonJS(getUserFiltersAndPagination_exports);
24
+ var import_ensureArrayQueryFilter = require('./../../utils/ensureArrayQueryFilter.cjs');
24
25
  var import_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
25
26
  const getUserFiltersAndPagination = (req) => {
26
27
  const { filters: filtersRequest, ...pagination } = (0, import_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody)(req);
@@ -29,15 +30,7 @@ const getUserFiltersAndPagination = (req) => {
29
30
  const { firstName, ids } = filtersRequest;
30
31
  filters = {};
31
32
  if (ids) {
32
- let idsArray;
33
- if (typeof ids === "string") {
34
- idsArray = ids.split(",");
35
- } else if (Array.isArray(ids)) {
36
- idsArray = ids;
37
- } else {
38
- idsArray = [ids];
39
- }
40
- filters = { ...filters, id: { $in: idsArray } };
33
+ filters = { ...filters, id: { $in: (0, import_ensureArrayQueryFilter.ensureArrayQueryFilter)(ids) } };
41
34
  }
42
35
  if (firstName) {
43
36
  filters = { ...filters, firstName: new RegExp(firstName, "i") };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/filtersAndPagination/getUserFiltersAndPagination.ts"],"sourcesContent":["import type { Request } from 'express';\nimport type { ObjectId, RootFilterQuery } from 'mongoose';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\nimport type { User } from '@/types/user.types';\n\nexport type UserFiltersParam = {\n ids?: string | string[];\n firstName?: string;\n};\nexport type UserFilters = RootFilterQuery<User>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getUserFiltersAndPagination = (\n req: Request<FiltersAndPagination<UserFiltersParam>>\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<UserFiltersParam>(req);\n\n let filters = {};\n\n if (Object.keys(filtersRequest).length > 0) {\n const { firstName, ids } = filtersRequest;\n\n filters = {};\n\n if (ids) {\n let idsArray: string[] | ObjectId[];\n\n if (typeof ids === 'string') {\n idsArray = ids.split(',');\n } else if (Array.isArray(ids)) {\n idsArray = ids;\n } else {\n idsArray = [ids];\n }\n\n filters = { ...filters, id: { $in: idsArray } };\n }\n\n if (firstName) {\n filters = { ...filters, firstName: new RegExp(firstName, 'i') };\n }\n }\n\n return { filters, ...pagination };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6CAGO;AAcA,MAAM,8BAA8B,CACzC,QACG;AACH,QAAM,EAAE,SAAS,gBAAgB,GAAG,WAAW,QAC7C,wEAAkD,GAAG;AAEvD,MAAI,UAAU,CAAC;AAEf,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,GAAG;AAC1C,UAAM,EAAE,WAAW,IAAI,IAAI;AAE3B,cAAU,CAAC;AAEX,QAAI,KAAK;AACP,UAAI;AAEJ,UAAI,OAAO,QAAQ,UAAU;AAC3B,mBAAW,IAAI,MAAM,GAAG;AAAA,MAC1B,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,mBAAW;AAAA,MACb,OAAO;AACL,mBAAW,CAAC,GAAG;AAAA,MACjB;AAEA,gBAAU,EAAE,GAAG,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE;AAAA,IAChD;AAEA,QAAI,WAAW;AACb,gBAAU,EAAE,GAAG,SAAS,WAAW,IAAI,OAAO,WAAW,GAAG,EAAE;AAAA,IAChE;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,WAAW;AAClC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/filtersAndPagination/getUserFiltersAndPagination.ts"],"sourcesContent":["import { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\nimport type { User } from '@/types/user.types';\n\nexport type UserFiltersParam = {\n ids?: string | string[];\n firstName?: string;\n};\nexport type UserFilters = RootFilterQuery<User>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getUserFiltersAndPagination = (\n req: Request<FiltersAndPagination<UserFiltersParam>>\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<UserFiltersParam>(req);\n\n let filters = {};\n\n if (Object.keys(filtersRequest).length > 0) {\n const { firstName, ids } = filtersRequest;\n\n filters = {};\n\n if (ids) {\n filters = { ...filters, id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (firstName) {\n filters = { ...filters, firstName: new RegExp(firstName, 'i') };\n }\n }\n\n return { filters, ...pagination };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAuC;AAGvC,6CAGO;AAcA,MAAM,8BAA8B,CACzC,QACG;AACH,QAAM,EAAE,SAAS,gBAAgB,GAAG,WAAW,QAC7C,wEAAkD,GAAG;AAEvD,MAAI,UAAU,CAAC;AAEf,MAAI,OAAO,KAAK,cAAc,EAAE,SAAS,GAAG;AAC1C,UAAM,EAAE,WAAW,IAAI,IAAI;AAE3B,cAAU,CAAC;AAEX,QAAI,KAAK;AACP,gBAAU,EAAE,GAAG,SAAS,IAAI,EAAE,SAAK,sDAAuB,GAAG,EAAE,EAAE;AAAA,IACnE;AAEA,QAAI,WAAW;AACb,gBAAU,EAAE,GAAG,SAAS,WAAW,IAAI,OAAO,WAAW,GAAG,EAAE;AAAA,IAChE;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,WAAW;AAClC;","names":[]}
@@ -21,12 +21,16 @@ __export(dictionary_exports, {
21
21
  mapDictionaryToAPI: () => mapDictionaryToAPI
22
22
  });
23
23
  module.exports = __toCommonJS(dictionary_exports);
24
+ var import_ensureMongoDocumentToObject = require('./../../utils/ensureMongoDocumentToObject.cjs');
24
25
  const mapDictionaryToAPI = (dictionary, projectId, version) => {
25
- let dictionaryObject = dictionary;
26
- if (typeof dictionary.toObject === "function") {
27
- dictionaryObject = dictionary.toObject();
26
+ const dictionaryObject = (0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(dictionary);
27
+ let returnedVersion = version;
28
+ if (!returnedVersion) {
29
+ const versionList = dictionaryObject.availableVersions ?? [];
30
+ const lastVersion = versionList[versionList.length - 1];
31
+ returnedVersion = lastVersion;
28
32
  }
29
- const content = dictionaryObject.content[version ?? 0];
33
+ const content = dictionaryObject.content[returnedVersion]?.content;
30
34
  return {
31
35
  ...dictionaryObject,
32
36
  content,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/mapper/dictionary.ts"],"sourcesContent":["import {\n Dictionary,\n DictionaryAPI,\n DictionaryDocument,\n} from '@/types/dictionary.types';\nimport { Project } from '@/types/project.types';\n\n/**\n * Maps a dictionary to an API response.\n * If the version is not provided, the latest version is used.\n *\n * @param dictionary - The dictionary to map.\n * @param projectId - The ID of the project the dictionary belongs to.\n * @returns The dictionary mapped to an API response.\n */\nexport const mapDictionaryToAPI = (\n dictionary: Dictionary,\n projectId: string | Project['_id'],\n version?: number\n): DictionaryAPI => {\n let dictionaryObject: Dictionary = dictionary;\n\n // If the dictionary is a mongoose document, convert it to an object\n if (typeof (dictionary as DictionaryDocument).toObject === 'function') {\n dictionaryObject = (dictionary as DictionaryDocument).toObject();\n }\n\n const content = dictionaryObject.content[version ?? 0];\n\n return {\n ...dictionaryObject,\n content,\n filePath: dictionaryObject.filePath?.[String(projectId)],\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeO,MAAM,qBAAqB,CAChC,YACA,WACA,YACkB;AAClB,MAAI,mBAA+B;AAGnC,MAAI,OAAQ,WAAkC,aAAa,YAAY;AACrE,uBAAoB,WAAkC,SAAS;AAAA,EACjE;AAEA,QAAM,UAAU,iBAAiB,QAAQ,WAAW,CAAC;AAErD,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,UAAU,iBAAiB,WAAW,OAAO,SAAS,CAAC;AAAA,EACzD;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/mapper/dictionary.ts"],"sourcesContent":["import { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { Dictionary, DictionaryAPI } from '@/types/dictionary.types';\nimport { Project } from '@/types/project.types';\n\n/**\n * Maps a dictionary to an API response.\n * If the version is not provided, the latest version is used.\n *\n * @param dictionary - The dictionary to map.\n * @param projectId - The ID of the project the dictionary belongs to.\n * @returns The dictionary mapped to an API response.\n */\nexport const mapDictionaryToAPI = (\n dictionary: Dictionary,\n projectId: string | Project['_id'],\n version?: string\n): DictionaryAPI => {\n const dictionaryObject = ensureMongoDocumentToObject<Dictionary>(dictionary);\n\n let returnedVersion = version;\n\n if (!returnedVersion) {\n const versionList = dictionaryObject.availableVersions ?? [];\n const lastVersion = versionList[versionList.length - 1];\n returnedVersion = lastVersion;\n }\n\n const content = dictionaryObject.content[returnedVersion]?.content;\n\n return {\n ...dictionaryObject,\n content,\n filePath: dictionaryObject.filePath?.[String(projectId)],\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAA4C;AAYrC,MAAM,qBAAqB,CAChC,YACA,WACA,YACkB;AAClB,QAAM,uBAAmB,gEAAwC,UAAU;AAE3E,MAAI,kBAAkB;AAEtB,MAAI,CAAC,iBAAiB;AACpB,UAAM,cAAc,iBAAiB,qBAAqB,CAAC;AAC3D,UAAM,cAAc,YAAY,YAAY,SAAS,CAAC;AACtD,sBAAkB;AAAA,EACpB;AAEA,QAAM,UAAU,iBAAiB,QAAQ,eAAe,GAAG;AAE3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,UAAU,iBAAiB,WAAW,OAAO,SAAS,CAAC;AAAA,EACzD;AACF;","names":[]}
@@ -21,11 +21,9 @@ __export(organization_exports, {
21
21
  mapOrganizationToAPI: () => mapOrganizationToAPI
22
22
  });
23
23
  module.exports = __toCommonJS(organization_exports);
24
+ var import_ensureMongoDocumentToObject = require('./../../utils/ensureMongoDocumentToObject.cjs');
24
25
  const mapOrganizationToAPI = (organization, isOrganizationAdmin) => {
25
- let organizationObject = organization;
26
- if (typeof organization.toObject === "function") {
27
- organizationObject = organization.toObject();
28
- }
26
+ const organizationObject = (0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(organization);
29
27
  if (isOrganizationAdmin) {
30
28
  return organizationObject;
31
29
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/mapper/organization.ts"],"sourcesContent":["import {\n Organization,\n OrganizationAPI,\n OrganizationDocument,\n} from '@/types/organization.types';\n\n/**\n * Maps an organization to an API response.\n * @param organization - The organization to map.\n * @param isOrganizationAdmin - Whether the user is an admin of the organization.\n * @returns The organization mapped to an API response.\n */\nexport const mapOrganizationToAPI = (\n organization: Organization,\n isOrganizationAdmin: boolean | null\n): OrganizationAPI => {\n let organizationObject: Organization = organization;\n\n // If the organization is a mongoose document, convert it to an object\n if (typeof (organization as OrganizationDocument).toObject === 'function') {\n organizationObject = (organization as OrganizationDocument).toObject();\n }\n\n if (isOrganizationAdmin) {\n return organizationObject;\n }\n\n const { adminsIds, ...organizationAPI } = organizationObject;\n return organizationAPI;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,MAAM,uBAAuB,CAClC,cACA,wBACoB;AACpB,MAAI,qBAAmC;AAGvC,MAAI,OAAQ,aAAsC,aAAa,YAAY;AACzE,yBAAsB,aAAsC,SAAS;AAAA,EACvE;AAEA,MAAI,qBAAqB;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,WAAW,GAAG,gBAAgB,IAAI;AAC1C,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/mapper/organization.ts"],"sourcesContent":["import { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { Organization, OrganizationAPI } from '@/types/organization.types';\n\n/**\n * Maps an organization to an API response.\n * @param organization - The organization to map.\n * @param isOrganizationAdmin - Whether the user is an admin of the organization.\n * @returns The organization mapped to an API response.\n */\nexport const mapOrganizationToAPI = (\n organization: Organization,\n isOrganizationAdmin: boolean | null\n): OrganizationAPI => {\n const organizationObject =\n ensureMongoDocumentToObject<Organization>(organization);\n\n if (isOrganizationAdmin) {\n return organizationObject;\n }\n\n const { adminsIds, ...organizationAPI } = organizationObject;\n return organizationAPI;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAA4C;AASrC,MAAM,uBAAuB,CAClC,cACA,wBACoB;AACpB,QAAM,yBACJ,gEAA0C,YAAY;AAExD,MAAI,qBAAqB;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,WAAW,GAAG,gBAAgB,IAAI;AAC1C,SAAO;AACT;","names":[]}
@@ -22,11 +22,9 @@ __export(project_exports, {
22
22
  mapProjectsToAPI: () => mapProjectsToAPI
23
23
  });
24
24
  module.exports = __toCommonJS(project_exports);
25
+ var import_ensureMongoDocumentToObject = require('./../../utils/ensureMongoDocumentToObject.cjs');
25
26
  const mapProjectToAPI = (project, user, isProjectAdmin) => {
26
- let projectObject = project;
27
- if (typeof project.toObject === "function") {
28
- projectObject = project.toObject();
29
- }
27
+ let projectObject = (0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(project);
30
28
  projectObject = {
31
29
  ...projectObject,
32
30
  oAuth2Access: projectObject.oAuth2Access.filter((token) => token.userId !== user?._id).map((token) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/mapper/project.ts"],"sourcesContent":["import { Project, ProjectAPI, ProjectDocument } from '@/types/project.types';\nimport { User } from '@/types/user.types';\n\n/**\n * Maps a project to an API response.\n * @param project - The project to map.\n * @param isProjectAdmin - Whether the user is an admin of the project.\n * @returns The project mapped to an API response.\n */\nexport const mapProjectToAPI = (\n project: Project,\n user: User | null,\n isProjectAdmin: boolean | null\n): ProjectAPI => {\n let projectObject: Project = project;\n\n // If the project is a mongoose document, convert it to an object\n if (typeof (project as ProjectDocument).toObject === 'function') {\n projectObject = (project as ProjectDocument).toObject();\n }\n\n projectObject = {\n ...projectObject,\n oAuth2Access: projectObject.oAuth2Access\n .filter((token) => token.userId !== user?._id)\n .map((token) => {\n const isJustUpdated =\n new Date().getTime() - new Date(token.updatedAt).getTime() <\n 1000 * 60 * 5; // 5 min\n\n if (isJustUpdated) {\n return token;\n }\n\n return {\n ...token,\n clientSecret: `${token.clientSecret.substring(0, 10)}${'*'.repeat(token.clientSecret.length - 10)}`,\n };\n }),\n };\n\n if (isProjectAdmin) {\n return projectObject;\n }\n\n const { adminsIds, ...projectAPI } = projectObject;\n return projectAPI;\n};\n\n/**\n * Formats an array of projects for API response. Removes sensitive information.\n * @param projects - The array of project objects to format.\n * @param user - The user object.\n * @param isProjectAdmin - Whether the user is an admin of the project.\n * @returns The formatted array of user objects.\n */\nexport const mapProjectsToAPI = (\n projects: Project[],\n user: User,\n isProjectAdmin: boolean | null\n): ProjectAPI[] =>\n projects.map((project) => mapProjectToAPI(project, user, isProjectAdmin));\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASO,MAAM,kBAAkB,CAC7B,SACA,MACA,mBACe;AACf,MAAI,gBAAyB;AAG7B,MAAI,OAAQ,QAA4B,aAAa,YAAY;AAC/D,oBAAiB,QAA4B,SAAS;AAAA,EACxD;AAEA,kBAAgB;AAAA,IACd,GAAG;AAAA,IACH,cAAc,cAAc,aACzB,OAAO,CAAC,UAAU,MAAM,WAAW,MAAM,GAAG,EAC5C,IAAI,CAAC,UAAU;AACd,YAAM,iBACJ,oBAAI,KAAK,GAAE,QAAQ,IAAI,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,IACzD,MAAO,KAAK;AAEd,UAAI,eAAe;AACjB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,cAAc,GAAG,MAAM,aAAa,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI,OAAO,MAAM,aAAa,SAAS,EAAE,CAAC;AAAA,MACnG;AAAA,IACF,CAAC;AAAA,EACL;AAEA,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,WAAW,GAAG,WAAW,IAAI;AACrC,SAAO;AACT;AASO,MAAM,mBAAmB,CAC9B,UACA,MACA,mBAEA,SAAS,IAAI,CAAC,YAAY,gBAAgB,SAAS,MAAM,cAAc,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/mapper/project.ts"],"sourcesContent":["import { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { Project, ProjectAPI } from '@/types/project.types';\nimport { User } from '@/types/user.types';\n\n/**\n * Maps a project to an API response.\n * @param project - The project to map.\n * @param isProjectAdmin - Whether the user is an admin of the project.\n * @returns The project mapped to an API response.\n */\nexport const mapProjectToAPI = (\n project: Project,\n user: User | null,\n isProjectAdmin: boolean | null\n): ProjectAPI => {\n let projectObject = ensureMongoDocumentToObject<Project>(project);\n\n projectObject = {\n ...projectObject,\n oAuth2Access: projectObject.oAuth2Access\n .filter((token) => token.userId !== user?._id)\n .map((token) => {\n const isJustUpdated =\n new Date().getTime() - new Date(token.updatedAt).getTime() <\n 1000 * 60 * 5; // 5 min\n\n if (isJustUpdated) {\n return token;\n }\n\n return {\n ...token,\n clientSecret: `${token.clientSecret.substring(0, 10)}${'*'.repeat(token.clientSecret.length - 10)}`,\n };\n }),\n };\n\n if (isProjectAdmin) {\n return projectObject;\n }\n\n const { adminsIds, ...projectAPI } = projectObject;\n return projectAPI;\n};\n\n/**\n * Formats an array of projects for API response. Removes sensitive information.\n * @param projects - The array of project objects to format.\n * @param user - The user object.\n * @param isProjectAdmin - Whether the user is an admin of the project.\n * @returns The formatted array of user objects.\n */\nexport const mapProjectsToAPI = (\n projects: Project[],\n user: User,\n isProjectAdmin: boolean | null\n): ProjectAPI[] =>\n projects.map((project) => mapProjectToAPI(project, user, isProjectAdmin));\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAA4C;AAUrC,MAAM,kBAAkB,CAC7B,SACA,MACA,mBACe;AACf,MAAI,oBAAgB,gEAAqC,OAAO;AAEhE,kBAAgB;AAAA,IACd,GAAG;AAAA,IACH,cAAc,cAAc,aACzB,OAAO,CAAC,UAAU,MAAM,WAAW,MAAM,GAAG,EAC5C,IAAI,CAAC,UAAU;AACd,YAAM,iBACJ,oBAAI,KAAK,GAAE,QAAQ,IAAI,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,IACzD,MAAO,KAAK;AAEd,UAAI,eAAe;AACjB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,cAAc,GAAG,MAAM,aAAa,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI,OAAO,MAAM,aAAa,SAAS,EAAE,CAAC;AAAA,MACnG;AAAA,IACF,CAAC;AAAA,EACL;AAEA,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,WAAW,GAAG,WAAW,IAAI;AACrC,SAAO;AACT;AASO,MAAM,mBAAmB,CAC9B,UACA,MACA,mBAEA,SAAS,IAAI,CAAC,YAAY,gBAAgB,SAAS,MAAM,cAAc,CAAC;","names":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var tag_exports = {};
20
+ __export(tag_exports, {
21
+ mapTagToAPI: () => mapTagToAPI,
22
+ mapTagsToAPI: () => mapTagsToAPI
23
+ });
24
+ module.exports = __toCommonJS(tag_exports);
25
+ var import_ensureMongoDocumentToObject = require('./../../utils/ensureMongoDocumentToObject.cjs');
26
+ const mapTagToAPI = (tag) => {
27
+ const tagObject = (0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(tag);
28
+ const { ...tagAPI } = tagObject;
29
+ return tagAPI;
30
+ };
31
+ const mapTagsToAPI = (tags) => tags.map((tag) => mapTagToAPI(tag));
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ mapTagToAPI,
35
+ mapTagsToAPI
36
+ });
37
+ //# sourceMappingURL=tag.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/mapper/tag.ts"],"sourcesContent":["import { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { Tag, TagAPI } from '@/types/tag.types';\n\n/**\n * Maps a tag to an API response.\n * @param tag - The tag to map.\n * @returns The tag mapped to an API response.\n */\nexport const mapTagToAPI = (tag: Tag): TagAPI => {\n const tagObject = ensureMongoDocumentToObject(tag);\n\n const { ...tagAPI } = tagObject;\n return tagAPI;\n};\n\n/**\n * Formats an array of tags for API response. Removes sensitive information.\n * @param tags - The array of tag objects to format.\n * @param user - The user object.\n * @param isTagAdmin - Whether the user is an admin of the tag.\n * @returns The formatted array of user objects.\n */\nexport const mapTagsToAPI = (tags: Tag[]): TagAPI[] =>\n tags.map((tag) => mapTagToAPI(tag));\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAA4C;AAQrC,MAAM,cAAc,CAAC,QAAqB;AAC/C,QAAM,gBAAY,gEAA4B,GAAG;AAEjD,QAAM,EAAE,GAAG,OAAO,IAAI;AACtB,SAAO;AACT;AASO,MAAM,eAAe,CAAC,SAC3B,KAAK,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC;","names":[]}
@@ -22,11 +22,9 @@ __export(user_exports, {
22
22
  mapUsersToAPI: () => mapUsersToAPI
23
23
  });
24
24
  module.exports = __toCommonJS(user_exports);
25
+ var import_ensureMongoDocumentToObject = require('./../../utils/ensureMongoDocumentToObject.cjs');
25
26
  const mapUserToAPI = (user) => {
26
- let userObject = user;
27
- if (typeof user.toObject === "function") {
28
- userObject = user.toObject();
29
- }
27
+ const userObject = (0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(user);
30
28
  const { provider, session, createdAt, ...userAPI } = userObject;
31
29
  return { ...userAPI, role: "user" };
32
30
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/mapper/user.ts"],"sourcesContent":["import { User, UserAPI, UserDocument } from '@/types/user.types';\n\n/**\n * Formats a user for API response. Removes sensitive information and adds role.\n * @param user - The user object to format.\n * @returns The formatted user object.\n */\nexport const mapUserToAPI = (user: User | UserAPI | UserDocument): UserAPI => {\n let userObject: User = user as User;\n\n // If the user is a mongoose document, convert it to an object\n if (typeof (user as UserDocument).toObject === 'function') {\n userObject = (user as UserDocument).toObject();\n }\n\n const { provider, session, createdAt, ...userAPI } = userObject;\n\n return { ...userAPI, role: 'user' };\n};\n\n/**\n * Formats an array of users for API response. Removes sensitive information and adds role.\n * @param users - The array of user objects to format.\n * @returns The formatted array of user objects.\n */\nexport const mapUsersToAPI = (users: User[]): UserAPI[] =>\n users.map(mapUserToAPI);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,MAAM,eAAe,CAAC,SAAiD;AAC5E,MAAI,aAAmB;AAGvB,MAAI,OAAQ,KAAsB,aAAa,YAAY;AACzD,iBAAc,KAAsB,SAAS;AAAA,EAC/C;AAEA,QAAM,EAAE,UAAU,SAAS,WAAW,GAAG,QAAQ,IAAI;AAErD,SAAO,EAAE,GAAG,SAAS,MAAM,OAAO;AACpC;AAOO,MAAM,gBAAgB,CAAC,UAC5B,MAAM,IAAI,YAAY;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/mapper/user.ts"],"sourcesContent":["import { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { User, UserAPI, UserDocument } from '@/types/user.types';\n\n/**\n * Formats a user for API response. Removes sensitive information and adds role.\n * @param user - The user object to format.\n * @returns The formatted user object.\n */\nexport const mapUserToAPI = (user: User | UserAPI): UserAPI => {\n const userObject = ensureMongoDocumentToObject(user);\n\n const { provider, session, createdAt, ...userAPI } =\n userObject as UserDocument;\n\n return { ...userAPI, role: 'user' };\n};\n\n/**\n * Formats an array of users for API response. Removes sensitive information and adds role.\n * @param users - The array of user objects to format.\n * @returns The formatted array of user objects.\n */\nexport const mapUsersToAPI = (users: User[]): UserAPI[] =>\n users.map(mapUserToAPI);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAA4C;AAQrC,MAAM,eAAe,CAAC,SAAkC;AAC7D,QAAM,iBAAa,gEAA4B,IAAI;AAEnD,QAAM,EAAE,UAAU,SAAS,WAAW,GAAG,QAAQ,IAC/C;AAEF,SAAO,EAAE,GAAG,SAAS,MAAM,OAAO;AACpC;AAOO,MAAM,gBAAgB,CAAC,UAC5B,MAAM,IAAI,YAAY;","names":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var removeObjectKeys_exports = {};
20
+ __export(removeObjectKeys_exports, {
21
+ removeObjectKeys: () => removeObjectKeys
22
+ });
23
+ module.exports = __toCommonJS(removeObjectKeys_exports);
24
+ const removeObjectKeys = (obj, keys) => {
25
+ const result = { ...obj };
26
+ for (const key of keys) {
27
+ delete result[key];
28
+ }
29
+ return result;
30
+ };
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ removeObjectKeys
34
+ });
35
+ //# sourceMappingURL=removeObjectKeys.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/removeObjectKeys.ts"],"sourcesContent":["export const removeObjectKeys = <\n T extends Record<string, unknown>,\n K extends (keyof T)[],\n>(\n obj: T,\n keys: K\n): Omit<T, K[number]> => {\n const result = { ...obj };\n for (const key of keys) {\n delete result[key];\n }\n\n return result;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,mBAAmB,CAI9B,KACA,SACuB;AACvB,QAAM,SAAS,EAAE,GAAG,IAAI;AACxB,aAAW,OAAO,MAAM;AACtB,WAAO,OAAO,GAAG;AAAA,EACnB;AAEA,SAAO;AACT;","names":[]}
@@ -39,7 +39,6 @@ const MEMBERS_MIN_LENGTH = 1;
39
39
  const validateProject = async (project, fieldsToCheck = defaultFieldsToCheck) => {
40
40
  const errors = {};
41
41
  const fieldsToValidate = new Set(fieldsToCheck);
42
- const organization = await (0, import_organization.getOrganizationById)(project.organizationId ?? "");
43
42
  for (const field of fieldsToValidate) {
44
43
  const value = project[field];
45
44
  errors[field] = [];
@@ -55,6 +54,7 @@ const validateProject = async (project, fieldsToCheck = defaultFieldsToCheck) =>
55
54
  }
56
55
  }
57
56
  if (field === "organizationId") {
57
+ const organization = await (0, import_organization.getOrganizationById)(field);
58
58
  const organizationErrors = [];
59
59
  if (typeof value !== "string") {
60
60
  organizationErrors.push("Organization id must be a string");
@@ -70,15 +70,22 @@ const validateProject = async (project, fieldsToCheck = defaultFieldsToCheck) =>
70
70
  }
71
71
  }
72
72
  if (field === "membersIds" || field === "adminsIds") {
73
- const membersErrors = (0, import_validateArray.validateArray)(
74
- value,
75
- "Members",
76
- "string",
77
- (item) => (organization?.membersIds).includes(item),
78
- MEMBERS_MIN_LENGTH
79
- );
80
- if (membersErrors.length > 0) {
81
- errors[field] = membersErrors;
73
+ if (!project.organizationId) {
74
+ errors[field] = [
75
+ "Organization id is required to validate project members"
76
+ ];
77
+ } else {
78
+ const organization = await (0, import_organization.getOrganizationById)(project.organizationId);
79
+ const membersErrors = (0, import_validateArray.validateArray)(
80
+ value,
81
+ "Members",
82
+ "string",
83
+ (item) => (organization?.membersIds).includes(item),
84
+ MEMBERS_MIN_LENGTH
85
+ );
86
+ if (membersErrors.length > 0) {
87
+ errors[field] = membersErrors;
88
+ }
82
89
  }
83
90
  }
84
91
  if (errors[field].length === 0) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/validation/validateProject.ts"],"sourcesContent":["/* eslint-disable sonarjs/cognitive-complexity */\nimport { getOrganizationById } from '@services/organization.service';\nimport { validateArray } from './validateArray';\nimport { validateString } from './validateString';\nimport type { Project } from '@/types/project.types';\n\nexport type ProjectFields = (keyof Project)[];\n\nconst defaultFieldsToCheck: ProjectFields = [\n 'name',\n 'membersIds',\n 'adminsIds',\n 'organizationId',\n];\n\ntype FieldsToCheck = (typeof defaultFieldsToCheck)[number];\ntype ValidationErrors = Partial<\n Record<(typeof defaultFieldsToCheck)[number], string[]>\n>;\n\nexport const NAME_MIN_LENGTH = 4;\nexport const NAME_MAX_LENGTH = 100;\n\nexport const MEMBERS_MIN_LENGTH = 1;\n\n/**\n * Validates an project object.\n * @param project The project object to validate.\n * @returns An object containing the validation errors for each field.\n */\nexport const validateProject = async (\n project: Partial<Project>,\n fieldsToCheck = defaultFieldsToCheck\n): Promise<ValidationErrors> => {\n const errors: ValidationErrors = {};\n\n // Define the fields to validate\n const fieldsToValidate = new Set<FieldsToCheck>(fieldsToCheck);\n\n const organization = await getOrganizationById(project.organizationId ?? '');\n\n // Validate each field\n for (const field of fieldsToValidate) {\n const value = project[field];\n\n // Initialize error array for the field\n errors[field] = [];\n\n // Check for name validity\n if (field === 'name') {\n const nameErrors = validateString(\n value,\n 'Name',\n NAME_MIN_LENGTH,\n NAME_MAX_LENGTH\n );\n\n if (nameErrors.length > 0) {\n errors[field] = nameErrors;\n }\n }\n\n if (field === 'organizationId') {\n const organizationErrors: string[] = [];\n\n if (typeof value !== 'string') {\n organizationErrors.push('Organization id must be a string');\n }\n\n if (!value) {\n organizationErrors.push('Organization id is required');\n }\n\n if (!organization) {\n organizationErrors.push('Organization not found');\n }\n\n if (organizationErrors.length > 0) {\n errors[field] = organizationErrors;\n }\n }\n\n if (field === 'membersIds' || field === 'adminsIds') {\n const membersErrors = validateArray<string>(\n value as unknown as string[],\n 'Members',\n 'string',\n (item) =>\n (organization?.membersIds as unknown as string[]).includes(item),\n MEMBERS_MIN_LENGTH\n );\n\n if (membersErrors.length > 0) {\n errors[field] = membersErrors;\n }\n }\n\n // Remove the error field if there are no errors\n if (errors[field].length === 0) {\n delete errors[field];\n }\n }\n\n return errors;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAAoC;AACpC,2BAA8B;AAC9B,4BAA+B;AAK/B,MAAM,uBAAsC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AAExB,MAAM,qBAAqB;AAO3B,MAAM,kBAAkB,OAC7B,SACA,gBAAgB,yBACc;AAC9B,QAAM,SAA2B,CAAC;AAGlC,QAAM,mBAAmB,IAAI,IAAmB,aAAa;AAE7D,QAAM,eAAe,UAAM,yCAAoB,QAAQ,kBAAkB,EAAE;AAG3E,aAAW,SAAS,kBAAkB;AACpC,UAAM,QAAQ,QAAQ,KAAK;AAG3B,WAAO,KAAK,IAAI,CAAC;AAGjB,QAAI,UAAU,QAAQ;AACpB,YAAM,iBAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,WAAW,SAAS,GAAG;AACzB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,UAAU,kBAAkB;AAC9B,YAAM,qBAA+B,CAAC;AAEtC,UAAI,OAAO,UAAU,UAAU;AAC7B,2BAAmB,KAAK,kCAAkC;AAAA,MAC5D;AAEA,UAAI,CAAC,OAAO;AACV,2BAAmB,KAAK,6BAA6B;AAAA,MACvD;AAEA,UAAI,CAAC,cAAc;AACjB,2BAAmB,KAAK,wBAAwB;AAAA,MAClD;AAEA,UAAI,mBAAmB,SAAS,GAAG;AACjC,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,UAAU,gBAAgB,UAAU,aAAa;AACnD,YAAM,oBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,UACE,cAAc,YAAmC,SAAS,IAAI;AAAA,QACjE;AAAA,MACF;AAEA,UAAI,cAAc,SAAS,GAAG;AAC5B,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAGA,QAAI,OAAO,KAAK,EAAE,WAAW,GAAG;AAC9B,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/utils/validation/validateProject.ts"],"sourcesContent":["import { getOrganizationById } from '@services/organization.service';\nimport { validateArray } from './validateArray';\nimport { validateString } from './validateString';\nimport type { Project } from '@/types/project.types';\n\nexport type ProjectFields = (keyof Project)[];\n\nconst defaultFieldsToCheck: ProjectFields = [\n 'name',\n 'membersIds',\n 'adminsIds',\n 'organizationId',\n];\n\ntype FieldsToCheck = (typeof defaultFieldsToCheck)[number];\ntype ValidationErrors = Partial<\n Record<(typeof defaultFieldsToCheck)[number], string[]>\n>;\n\nexport const NAME_MIN_LENGTH = 4;\nexport const NAME_MAX_LENGTH = 100;\n\nexport const MEMBERS_MIN_LENGTH = 1;\n\n/**\n * Validates an project object.\n * @param project The project object to validate.\n * @returns An object containing the validation errors for each field.\n */\nexport const validateProject = async (\n project: Partial<Project>,\n fieldsToCheck = defaultFieldsToCheck\n): Promise<ValidationErrors> => {\n const errors: ValidationErrors = {};\n\n // Define the fields to validate\n const fieldsToValidate = new Set<FieldsToCheck>(fieldsToCheck);\n\n // Validate each field\n for (const field of fieldsToValidate) {\n const value = project[field];\n\n // Initialize error array for the field\n errors[field] = [];\n\n // Check for name validity\n if (field === 'name') {\n const nameErrors = validateString(\n value,\n 'Name',\n NAME_MIN_LENGTH,\n NAME_MAX_LENGTH\n );\n\n if (nameErrors.length > 0) {\n errors[field] = nameErrors;\n }\n }\n\n if (field === 'organizationId') {\n const organization = await getOrganizationById(field);\n const organizationErrors: string[] = [];\n\n if (typeof value !== 'string') {\n organizationErrors.push('Organization id must be a string');\n }\n\n if (!value) {\n organizationErrors.push('Organization id is required');\n }\n\n if (!organization) {\n organizationErrors.push('Organization not found');\n }\n\n if (organizationErrors.length > 0) {\n errors[field] = organizationErrors;\n }\n }\n\n if (field === 'membersIds' || field === 'adminsIds') {\n if (!project.organizationId) {\n errors[field] = [\n 'Organization id is required to validate project members',\n ];\n } else {\n const organization = await getOrganizationById(project.organizationId);\n const membersErrors = validateArray<string>(\n value as unknown as string[],\n 'Members',\n 'string',\n (item) =>\n (organization?.membersIds as unknown as string[]).includes(item),\n MEMBERS_MIN_LENGTH\n );\n\n if (membersErrors.length > 0) {\n errors[field] = membersErrors;\n }\n }\n }\n\n // Remove the error field if there are no errors\n if (errors[field].length === 0) {\n delete errors[field];\n }\n }\n\n return errors;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAoC;AACpC,2BAA8B;AAC9B,4BAA+B;AAK/B,MAAM,uBAAsC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AAExB,MAAM,qBAAqB;AAO3B,MAAM,kBAAkB,OAC7B,SACA,gBAAgB,yBACc;AAC9B,QAAM,SAA2B,CAAC;AAGlC,QAAM,mBAAmB,IAAI,IAAmB,aAAa;AAG7D,aAAW,SAAS,kBAAkB;AACpC,UAAM,QAAQ,QAAQ,KAAK;AAG3B,WAAO,KAAK,IAAI,CAAC;AAGjB,QAAI,UAAU,QAAQ;AACpB,YAAM,iBAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,WAAW,SAAS,GAAG;AACzB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,UAAU,kBAAkB;AAC9B,YAAM,eAAe,UAAM,yCAAoB,KAAK;AACpD,YAAM,qBAA+B,CAAC;AAEtC,UAAI,OAAO,UAAU,UAAU;AAC7B,2BAAmB,KAAK,kCAAkC;AAAA,MAC5D;AAEA,UAAI,CAAC,OAAO;AACV,2BAAmB,KAAK,6BAA6B;AAAA,MACvD;AAEA,UAAI,CAAC,cAAc;AACjB,2BAAmB,KAAK,wBAAwB;AAAA,MAClD;AAEA,UAAI,mBAAmB,SAAS,GAAG;AACjC,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,UAAU,gBAAgB,UAAU,aAAa;AACnD,UAAI,CAAC,QAAQ,gBAAgB;AAC3B,eAAO,KAAK,IAAI;AAAA,UACd;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,eAAe,UAAM,yCAAoB,QAAQ,cAAc;AACrE,cAAM,oBAAgB;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,UACE,cAAc,YAAmC,SAAS,IAAI;AAAA,UACjE;AAAA,QACF;AAEA,YAAI,cAAc,SAAS,GAAG;AAC5B,iBAAO,KAAK,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,OAAO,KAAK,EAAE,WAAW,GAAG;AAC9B,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var validateTag_exports = {};
20
+ __export(validateTag_exports, {
21
+ KEY_MAX_LENGTH: () => KEY_MAX_LENGTH,
22
+ KEY_MIN_LENGTH: () => KEY_MIN_LENGTH,
23
+ NAME_MAX_LENGTH: () => NAME_MAX_LENGTH,
24
+ NAME_MIN_LENGTH: () => NAME_MIN_LENGTH,
25
+ validateTag: () => validateTag
26
+ });
27
+ module.exports = __toCommonJS(validateTag_exports);
28
+ var import_organization = require('./../../services/organization.service.cjs');
29
+ var import_validateString = require('./validateString.cjs');
30
+ const defaultFieldsToCheck = ["name"];
31
+ const KEY_MIN_LENGTH = 4;
32
+ const KEY_MAX_LENGTH = 20;
33
+ const NAME_MIN_LENGTH = 4;
34
+ const NAME_MAX_LENGTH = 50;
35
+ const validateTag = async (tag, fieldsToCheck = defaultFieldsToCheck) => {
36
+ const errors = {};
37
+ const fieldsToValidate = new Set(fieldsToCheck);
38
+ for (const field of fieldsToValidate) {
39
+ const value = tag[field];
40
+ errors[field] = [];
41
+ if (field === "key") {
42
+ const nameErrors = (0, import_validateString.validateString)(
43
+ value,
44
+ "Key",
45
+ KEY_MIN_LENGTH,
46
+ KEY_MAX_LENGTH
47
+ );
48
+ if (nameErrors.length > 0) {
49
+ errors[field] = nameErrors;
50
+ }
51
+ }
52
+ if (field === "name") {
53
+ const nameErrors = (0, import_validateString.validateString)(
54
+ value,
55
+ "Name",
56
+ NAME_MIN_LENGTH,
57
+ NAME_MAX_LENGTH
58
+ );
59
+ if (nameErrors.length > 0) {
60
+ errors[field] = nameErrors;
61
+ }
62
+ }
63
+ if (field === "organizationId") {
64
+ const organizationErrors = [];
65
+ if (typeof value !== "string") {
66
+ organizationErrors.push("Organization id must be a string");
67
+ }
68
+ if (!value) {
69
+ organizationErrors.push("Organization id is required");
70
+ }
71
+ const organization = await (0, import_organization.getOrganizationById)(field);
72
+ if (!organization) {
73
+ organizationErrors.push("Organization not found");
74
+ }
75
+ if (organizationErrors.length > 0) {
76
+ errors[field] = organizationErrors;
77
+ }
78
+ }
79
+ if (errors[field].length === 0) {
80
+ delete errors[field];
81
+ }
82
+ }
83
+ return errors;
84
+ };
85
+ // Annotate the CommonJS export names for ESM import in node:
86
+ 0 && (module.exports = {
87
+ KEY_MAX_LENGTH,
88
+ KEY_MIN_LENGTH,
89
+ NAME_MAX_LENGTH,
90
+ NAME_MIN_LENGTH,
91
+ validateTag
92
+ });
93
+ //# sourceMappingURL=validateTag.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/validation/validateTag.ts"],"sourcesContent":["import { getOrganizationById } from '@services/organization.service';\nimport { validateString } from './validateString';\nimport type { Tag } from '@/types/tag.types';\n\nexport type TagFields = (keyof Tag)[];\n\nconst defaultFieldsToCheck: TagFields = ['name'];\n\ntype FieldsToCheck = (typeof defaultFieldsToCheck)[number];\ntype ValidationErrors = Partial<\n Record<(typeof defaultFieldsToCheck)[number], string[]>\n>;\n\nexport const KEY_MIN_LENGTH = 4;\nexport const KEY_MAX_LENGTH = 20;\n\nexport const NAME_MIN_LENGTH = 4;\nexport const NAME_MAX_LENGTH = 50;\n\n/**\n * Validates an tag object.\n * @param tag The tag object to validate.\n * @returns An object containing the validation errors for each field.\n */\nexport const validateTag = async (\n tag: Partial<Tag>,\n fieldsToCheck = defaultFieldsToCheck\n): Promise<ValidationErrors> => {\n const errors: ValidationErrors = {};\n\n // Define the fields to validate\n const fieldsToValidate = new Set<FieldsToCheck>(fieldsToCheck);\n\n // Validate each field\n for (const field of fieldsToValidate) {\n const value = tag[field];\n\n // Initialize error array for the field\n errors[field] = [];\n\n // Check for name validity\n if (field === 'key') {\n const nameErrors = validateString(\n value,\n 'Key',\n KEY_MIN_LENGTH,\n KEY_MAX_LENGTH\n );\n\n if (nameErrors.length > 0) {\n errors[field] = nameErrors;\n }\n }\n\n // Check for name validity\n if (field === 'name') {\n const nameErrors = validateString(\n value,\n 'Name',\n NAME_MIN_LENGTH,\n NAME_MAX_LENGTH\n );\n\n if (nameErrors.length > 0) {\n errors[field] = nameErrors;\n }\n }\n\n if (field === 'organizationId') {\n const organizationErrors: string[] = [];\n\n if (typeof value !== 'string') {\n organizationErrors.push('Organization id must be a string');\n }\n\n if (!value) {\n organizationErrors.push('Organization id is required');\n }\n\n const organization = await getOrganizationById(field);\n if (!organization) {\n organizationErrors.push('Organization not found');\n }\n\n if (organizationErrors.length > 0) {\n errors[field] = organizationErrors;\n }\n }\n\n // Remove the error field if there are no errors\n if (errors[field].length === 0) {\n delete errors[field];\n }\n }\n\n return errors;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAoC;AACpC,4BAA+B;AAK/B,MAAM,uBAAkC,CAAC,MAAM;AAOxC,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AAOxB,MAAM,cAAc,OACzB,KACA,gBAAgB,yBACc;AAC9B,QAAM,SAA2B,CAAC;AAGlC,QAAM,mBAAmB,IAAI,IAAmB,aAAa;AAG7D,aAAW,SAAS,kBAAkB;AACpC,UAAM,QAAQ,IAAI,KAAK;AAGvB,WAAO,KAAK,IAAI,CAAC;AAGjB,QAAI,UAAU,OAAO;AACnB,YAAM,iBAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,WAAW,SAAS,GAAG;AACzB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAGA,QAAI,UAAU,QAAQ;AACpB,YAAM,iBAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,WAAW,SAAS,GAAG;AACzB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,UAAU,kBAAkB;AAC9B,YAAM,qBAA+B,CAAC;AAEtC,UAAI,OAAO,UAAU,UAAU;AAC7B,2BAAmB,KAAK,kCAAkC;AAAA,MAC5D;AAEA,UAAI,CAAC,OAAO;AACV,2BAAmB,KAAK,6BAA6B;AAAA,MACvD;AAEA,YAAM,eAAe,UAAM,yCAAoB,KAAK;AACpD,UAAI,CAAC,cAAc;AACjB,2BAAmB,KAAK,wBAAwB;AAAA,MAClD;AAEA,UAAI,mBAAmB,SAAS,GAAG;AACjC,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAGA,QAAI,OAAO,KAAK,EAAE,WAAW,GAAG;AAC9B,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}