@cyberskill/shared 3.0.0 → 3.1.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 (354) hide show
  1. package/dist/config/commitlint/index.js +1 -0
  2. package/dist/config/commitlint/index.js.map +1 -0
  3. package/dist/config/config.test.unit.d.ts +1 -0
  4. package/dist/config/config.type.js +1 -0
  5. package/dist/config/config.type.js.map +1 -0
  6. package/dist/config/config.type.test.unit.d.ts +1 -0
  7. package/dist/config/config.util.js +1 -0
  8. package/dist/config/config.util.js.map +1 -0
  9. package/dist/config/env/env.constant.js +1 -0
  10. package/dist/config/env/env.constant.js.map +1 -0
  11. package/dist/config/env/env.util.js +1 -0
  12. package/dist/config/env/env.util.js.map +1 -0
  13. package/dist/config/env/index.js +1 -0
  14. package/dist/config/env/index.js.map +1 -0
  15. package/dist/config/eslint/index.js +1 -0
  16. package/dist/config/eslint/index.js.map +1 -0
  17. package/dist/config/graphql-codegen/graphql-codegen.util.js +1 -0
  18. package/dist/config/graphql-codegen/graphql-codegen.util.js.map +1 -0
  19. package/dist/config/graphql-codegen/index.js +1 -0
  20. package/dist/config/graphql-codegen/index.js.map +1 -0
  21. package/dist/config/index.js +1 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/config/lint-staged/index.js +1 -0
  24. package/dist/config/lint-staged/index.js.map +1 -0
  25. package/dist/config/storybook/index.js +1 -0
  26. package/dist/config/storybook/index.js.map +1 -0
  27. package/dist/config/storybook/storybook.main.js +1 -0
  28. package/dist/config/storybook/storybook.main.js.map +1 -0
  29. package/dist/config/storybook/storybook.preview.js +1 -0
  30. package/dist/config/storybook/storybook.preview.js.map +1 -0
  31. package/dist/config/vitest/index.js +1 -0
  32. package/dist/config/vitest/index.js.map +1 -0
  33. package/dist/config/vitest/vitest.e2e.js +1 -0
  34. package/dist/config/vitest/vitest.e2e.js.map +1 -0
  35. package/dist/config/vitest/vitest.unit.js +1 -0
  36. package/dist/config/vitest/vitest.unit.js.map +1 -0
  37. package/dist/constant/common.js +1 -0
  38. package/dist/constant/common.js.map +1 -0
  39. package/dist/constant/constant.test.unit.d.ts +1 -0
  40. package/dist/constant/index.js +1 -0
  41. package/dist/constant/index.js.map +1 -0
  42. package/dist/constant/response-status.js +1 -0
  43. package/dist/constant/response-status.js.map +1 -0
  44. package/dist/node/apollo-server/apollo-server.util.js +1 -0
  45. package/dist/node/apollo-server/apollo-server.util.js.map +1 -0
  46. package/dist/node/apollo-server/index.js +1 -0
  47. package/dist/node/apollo-server/index.js.map +1 -0
  48. package/dist/node/cli/index.js +1 -0
  49. package/dist/node/cli/index.js.map +1 -0
  50. package/dist/node/command/command.test.unit.d.ts +1 -0
  51. package/dist/node/command/command.type.js +1 -0
  52. package/dist/node/command/command.type.js.map +1 -0
  53. package/dist/node/command/command.util.js +110 -102
  54. package/dist/node/command/command.util.js.map +1 -0
  55. package/dist/node/command/index.js +1 -0
  56. package/dist/node/command/index.js.map +1 -0
  57. package/dist/node/express/express.type.d.ts +4 -0
  58. package/dist/node/express/express.util.js +53 -35
  59. package/dist/node/express/express.util.js.map +1 -0
  60. package/dist/node/express/index.js +1 -0
  61. package/dist/node/express/index.js.map +1 -0
  62. package/dist/node/fs/fs.test.unit.d.ts +1 -0
  63. package/dist/node/fs/fs.util.js +1 -0
  64. package/dist/node/fs/fs.util.js.map +1 -0
  65. package/dist/node/fs/index.js +1 -0
  66. package/dist/node/fs/index.js.map +1 -0
  67. package/dist/node/log/index.js +1 -0
  68. package/dist/node/log/index.js.map +1 -0
  69. package/dist/node/log/log.test.unit.d.ts +1 -0
  70. package/dist/node/log/log.type.js +1 -0
  71. package/dist/node/log/log.type.js.map +1 -0
  72. package/dist/node/log/log.util.js +1 -0
  73. package/dist/node/log/log.util.js.map +1 -0
  74. package/dist/node/mongo/index.d.ts +2 -0
  75. package/dist/node/mongo/index.js +21 -12
  76. package/dist/node/mongo/index.js.map +1 -0
  77. package/dist/node/mongo/mongo.constant.js +1 -0
  78. package/dist/node/mongo/mongo.constant.js.map +1 -0
  79. package/dist/node/mongo/mongo.controller.d.ts +5 -315
  80. package/dist/node/mongo/mongo.controller.mongoose.d.ts +234 -0
  81. package/dist/node/mongo/mongo.controller.mongoose.js +468 -0
  82. package/dist/node/mongo/mongo.controller.mongoose.js.map +1 -0
  83. package/dist/node/mongo/mongo.controller.native.d.ts +84 -0
  84. package/dist/node/mongo/mongo.controller.native.js +214 -0
  85. package/dist/node/mongo/mongo.controller.native.js.map +1 -0
  86. package/dist/node/mongo/mongo.dynamic-populate.d.ts +61 -0
  87. package/dist/node/mongo/mongo.dynamic-populate.js +197 -0
  88. package/dist/node/mongo/mongo.dynamic-populate.js.map +1 -0
  89. package/dist/node/mongo/mongo.populate.d.ts +15 -0
  90. package/dist/node/mongo/mongo.populate.js +269 -0
  91. package/dist/node/mongo/mongo.populate.js.map +1 -0
  92. package/dist/node/mongo/mongo.type.js +1 -0
  93. package/dist/node/mongo/mongo.type.js.map +1 -0
  94. package/dist/node/mongo/mongo.util.d.ts +52 -0
  95. package/dist/node/mongo/mongo.util.js +106 -363
  96. package/dist/node/mongo/mongo.util.js.map +1 -0
  97. package/dist/node/package/index.js +1 -0
  98. package/dist/node/package/index.js.map +1 -0
  99. package/dist/node/package/package.test.unit.d.ts +1 -0
  100. package/dist/node/package/package.type.js +1 -0
  101. package/dist/node/package/package.type.js.map +1 -0
  102. package/dist/node/package/package.util.js +20 -20
  103. package/dist/node/package/package.util.js.map +1 -0
  104. package/dist/node/path/index.js +1 -0
  105. package/dist/node/path/index.js.map +1 -0
  106. package/dist/node/path/path.constant.js +1 -0
  107. package/dist/node/path/path.constant.js.map +1 -0
  108. package/dist/node/path/path.util.js +1 -0
  109. package/dist/node/path/path.util.js.map +1 -0
  110. package/dist/node/storage/index.js +1 -0
  111. package/dist/node/storage/index.js.map +1 -0
  112. package/dist/node/storage/storage.constant.js +1 -0
  113. package/dist/node/storage/storage.constant.js.map +1 -0
  114. package/dist/node/storage/storage.util.js +1 -0
  115. package/dist/node/storage/storage.util.js.map +1 -0
  116. package/dist/node/upload/index.js +1 -0
  117. package/dist/node/upload/index.js.map +1 -0
  118. package/dist/node/upload/upload.constant.js +1 -0
  119. package/dist/node/upload/upload.constant.js.map +1 -0
  120. package/dist/node/upload/upload.type.js +1 -0
  121. package/dist/node/upload/upload.type.js.map +1 -0
  122. package/dist/node/upload/upload.util.js +1 -0
  123. package/dist/node/upload/upload.util.js.map +1 -0
  124. package/dist/node/ws/index.d.ts +1 -1
  125. package/dist/node/ws/index.js +2 -1
  126. package/dist/node/ws/index.js.map +1 -0
  127. package/dist/node/ws/{ts.util.js → ws.util.js} +1 -0
  128. package/dist/node/ws/ws.util.js.map +1 -0
  129. package/dist/node_modules/.pnpm/vitest@4.0.18_@types_node@25.3.3_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/config.js +1 -0
  130. package/dist/node_modules/.pnpm/vitest@4.0.18_@types_node@25.3.3_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/config.js.map +1 -0
  131. package/dist/react/apollo-client/apollo-client.component.js +1 -0
  132. package/dist/react/apollo-client/apollo-client.component.js.map +1 -0
  133. package/dist/react/apollo-client/apollo-client.constant.js +1 -0
  134. package/dist/react/apollo-client/apollo-client.constant.js.map +1 -0
  135. package/dist/react/apollo-client/apollo-client.context.js +1 -0
  136. package/dist/react/apollo-client/apollo-client.context.js.map +1 -0
  137. package/dist/react/apollo-client/apollo-client.module.scss.js +1 -0
  138. package/dist/react/apollo-client/apollo-client.module.scss.js.map +1 -0
  139. package/dist/react/apollo-client/apollo-client.util.js +1 -0
  140. package/dist/react/apollo-client/apollo-client.util.js.map +1 -0
  141. package/dist/react/apollo-client/index.js +1 -0
  142. package/dist/react/apollo-client/index.js.map +1 -0
  143. package/dist/react/apollo-client/links/index.js +1 -0
  144. package/dist/react/apollo-client/links/index.js.map +1 -0
  145. package/dist/react/apollo-client/links/upload.js +1 -0
  146. package/dist/react/apollo-client/links/upload.js.map +1 -0
  147. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.component.js +1 -0
  148. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.component.js.map +1 -0
  149. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.rsc.js +1 -0
  150. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.rsc.js.map +1 -0
  151. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.util.js +1 -0
  152. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.util.js.map +1 -0
  153. package/dist/react/apollo-client-nextjs/index.js +1 -0
  154. package/dist/react/apollo-client-nextjs/index.js.map +1 -0
  155. package/dist/react/apollo-error/apollo-error.component.js +1 -0
  156. package/dist/react/apollo-error/apollo-error.component.js.map +1 -0
  157. package/dist/react/apollo-error/apollo-error.context.js +1 -0
  158. package/dist/react/apollo-error/apollo-error.context.js.map +1 -0
  159. package/dist/react/apollo-error/apollo-error.hook.js +1 -0
  160. package/dist/react/apollo-error/apollo-error.hook.js.map +1 -0
  161. package/dist/react/apollo-error/apollo-error.module.scss.js +1 -0
  162. package/dist/react/apollo-error/apollo-error.module.scss.js.map +1 -0
  163. package/dist/react/apollo-error/apollo-error.provider.js +1 -0
  164. package/dist/react/apollo-error/apollo-error.provider.js.map +1 -0
  165. package/dist/react/apollo-error/apollo-error.util.js +1 -0
  166. package/dist/react/apollo-error/apollo-error.util.js.map +1 -0
  167. package/dist/react/apollo-error/index.js +1 -0
  168. package/dist/react/apollo-error/index.js.map +1 -0
  169. package/dist/react/i18next/i18next.hook.js +1 -0
  170. package/dist/react/i18next/i18next.hook.js.map +1 -0
  171. package/dist/react/i18next/i18next.util.js +1 -0
  172. package/dist/react/i18next/i18next.util.js.map +1 -0
  173. package/dist/react/i18next/index.js +1 -0
  174. package/dist/react/i18next/index.js.map +1 -0
  175. package/dist/react/loading/index.js +1 -0
  176. package/dist/react/loading/index.js.map +1 -0
  177. package/dist/react/loading/loading.component.js +1 -0
  178. package/dist/react/loading/loading.component.js.map +1 -0
  179. package/dist/react/loading/loading.context.js +1 -0
  180. package/dist/react/loading/loading.context.js.map +1 -0
  181. package/dist/react/loading/loading.hook.js +1 -0
  182. package/dist/react/loading/loading.hook.js.map +1 -0
  183. package/dist/react/loading/loading.module.scss.js +1 -0
  184. package/dist/react/loading/loading.module.scss.js.map +1 -0
  185. package/dist/react/loading/loading.provider.js +1 -0
  186. package/dist/react/loading/loading.provider.js.map +1 -0
  187. package/dist/react/log/index.js +1 -0
  188. package/dist/react/log/index.js.map +1 -0
  189. package/dist/react/log/log.util.js +1 -0
  190. package/dist/react/log/log.util.js.map +1 -0
  191. package/dist/react/next-intl/index.js +1 -0
  192. package/dist/react/next-intl/index.js.map +1 -0
  193. package/dist/react/next-intl/next-intl.constant.js +1 -0
  194. package/dist/react/next-intl/next-intl.constant.js.map +1 -0
  195. package/dist/react/next-intl/next-intl.context.js +1 -0
  196. package/dist/react/next-intl/next-intl.context.js.map +1 -0
  197. package/dist/react/next-intl/next-intl.hoc.js +1 -0
  198. package/dist/react/next-intl/next-intl.hoc.js.map +1 -0
  199. package/dist/react/next-intl/next-intl.hook.js +1 -0
  200. package/dist/react/next-intl/next-intl.hook.js.map +1 -0
  201. package/dist/react/next-intl/next-intl.provider.js +1 -0
  202. package/dist/react/next-intl/next-intl.provider.js.map +1 -0
  203. package/dist/react/storage/index.js +1 -0
  204. package/dist/react/storage/index.js.map +1 -0
  205. package/dist/react/storage/storage.hook.js +1 -0
  206. package/dist/react/storage/storage.hook.js.map +1 -0
  207. package/dist/react/storage/storage.test.unit.d.ts +1 -0
  208. package/dist/react/storage/storage.util.js +1 -0
  209. package/dist/react/storage/storage.util.js.map +1 -0
  210. package/dist/react/toast/index.js +1 -0
  211. package/dist/react/toast/index.js.map +1 -0
  212. package/dist/react/userback/index.js +1 -0
  213. package/dist/react/userback/index.js.map +1 -0
  214. package/dist/react/userback/userback.component.js +1 -0
  215. package/dist/react/userback/userback.component.js.map +1 -0
  216. package/dist/typescript/common.type.js +1 -0
  217. package/dist/typescript/common.type.js.map +1 -0
  218. package/dist/typescript/index.js +1 -0
  219. package/dist/typescript/index.js.map +1 -0
  220. package/dist/typescript/typescript.test.unit.d.ts +1 -0
  221. package/dist/util/common/common.util.js +1 -0
  222. package/dist/util/common/common.util.js.map +1 -0
  223. package/dist/util/common/index.js +1 -0
  224. package/dist/util/common/index.js.map +1 -0
  225. package/dist/util/index.js +1 -0
  226. package/dist/util/index.js.map +1 -0
  227. package/dist/util/object/index.js +1 -0
  228. package/dist/util/object/index.js.map +1 -0
  229. package/dist/util/object/object.util.js +1 -0
  230. package/dist/util/object/object.util.js.map +1 -0
  231. package/dist/util/serializer/index.js +1 -0
  232. package/dist/util/serializer/index.js.map +1 -0
  233. package/dist/util/serializer/serializer.util.js +1 -0
  234. package/dist/util/serializer/serializer.util.js.map +1 -0
  235. package/dist/util/string/index.js +1 -0
  236. package/dist/util/string/index.js.map +1 -0
  237. package/dist/util/string/string.util.js +1 -0
  238. package/dist/util/string/string.util.js.map +1 -0
  239. package/dist/util/validate/index.js +1 -0
  240. package/dist/util/validate/index.js.map +1 -0
  241. package/dist/util/validate/validate.util.js +1 -0
  242. package/dist/util/validate/validate.util.js.map +1 -0
  243. package/package.json +58 -87
  244. package/dist/config/commitlint/index.cjs +0 -1
  245. package/dist/config/config.type.cjs +0 -1
  246. package/dist/config/config.util.cjs +0 -1
  247. package/dist/config/env/env.constant.cjs +0 -1
  248. package/dist/config/env/env.util.cjs +0 -1
  249. package/dist/config/env/index.cjs +0 -1
  250. package/dist/config/eslint/index.cjs +0 -1
  251. package/dist/config/graphql-codegen/graphql-codegen.util.cjs +0 -1
  252. package/dist/config/graphql-codegen/index.cjs +0 -1
  253. package/dist/config/index.cjs +0 -1
  254. package/dist/config/lint-staged/index.cjs +0 -1
  255. package/dist/config/storybook/index.cjs +0 -1
  256. package/dist/config/storybook/storybook.main.cjs +0 -1
  257. package/dist/config/storybook/storybook.preview.cjs +0 -1
  258. package/dist/config/vitest/index.cjs +0 -1
  259. package/dist/config/vitest/vitest.e2e.cjs +0 -1
  260. package/dist/config/vitest/vitest.unit.cjs +0 -1
  261. package/dist/constant/common.cjs +0 -1
  262. package/dist/constant/index.cjs +0 -1
  263. package/dist/constant/response-status.cjs +0 -1
  264. package/dist/node/apollo-server/apollo-server.util.cjs +0 -1
  265. package/dist/node/apollo-server/index.cjs +0 -1
  266. package/dist/node/cli/index.cjs +0 -3
  267. package/dist/node/command/command.type.cjs +0 -1
  268. package/dist/node/command/command.util.cjs +0 -2
  269. package/dist/node/command/index.cjs +0 -1
  270. package/dist/node/express/express.util.cjs +0 -1
  271. package/dist/node/express/index.cjs +0 -1
  272. package/dist/node/fs/fs.util.cjs +0 -4
  273. package/dist/node/fs/index.cjs +0 -1
  274. package/dist/node/log/index.cjs +0 -1
  275. package/dist/node/log/log.type.cjs +0 -1
  276. package/dist/node/log/log.util.cjs +0 -1
  277. package/dist/node/mongo/index.cjs +0 -1
  278. package/dist/node/mongo/mongo.constant.cjs +0 -1
  279. package/dist/node/mongo/mongo.controller.cjs +0 -1
  280. package/dist/node/mongo/mongo.controller.js +0 -858
  281. package/dist/node/mongo/mongo.type.cjs +0 -1
  282. package/dist/node/mongo/mongo.util.cjs +0 -2
  283. package/dist/node/package/index.cjs +0 -1
  284. package/dist/node/package/package.type.cjs +0 -1
  285. package/dist/node/package/package.util.cjs +0 -1
  286. package/dist/node/path/index.cjs +0 -1
  287. package/dist/node/path/path.constant.cjs +0 -1
  288. package/dist/node/path/path.util.cjs +0 -1
  289. package/dist/node/storage/index.cjs +0 -1
  290. package/dist/node/storage/storage.constant.cjs +0 -1
  291. package/dist/node/storage/storage.util.cjs +0 -1
  292. package/dist/node/upload/index.cjs +0 -1
  293. package/dist/node/upload/upload.constant.cjs +0 -1
  294. package/dist/node/upload/upload.type.cjs +0 -1
  295. package/dist/node/upload/upload.util.cjs +0 -1
  296. package/dist/node/ws/index.cjs +0 -1
  297. package/dist/node/ws/ts.util.cjs +0 -1
  298. package/dist/node_modules/.pnpm/vitest@4.0.18_@types_node@25.3.3_jiti@2.6.1_jsdom@28.1.0_@noble_hashes@1.8.0__sass@1.97.3_tsx@4.21.0_yaml@2.8.2/node_modules/vitest/dist/config.cjs +0 -1
  299. package/dist/react/apollo-client/apollo-client.component.cjs +0 -1
  300. package/dist/react/apollo-client/apollo-client.constant.cjs +0 -1
  301. package/dist/react/apollo-client/apollo-client.context.cjs +0 -1
  302. package/dist/react/apollo-client/apollo-client.module.scss.cjs +0 -1
  303. package/dist/react/apollo-client/apollo-client.util.cjs +0 -1
  304. package/dist/react/apollo-client/index.cjs +0 -1
  305. package/dist/react/apollo-client/links/index.cjs +0 -1
  306. package/dist/react/apollo-client/links/upload.cjs +0 -1
  307. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.component.cjs +0 -1
  308. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.rsc.cjs +0 -1
  309. package/dist/react/apollo-client-nextjs/apollo-client-nextjs.util.cjs +0 -1
  310. package/dist/react/apollo-client-nextjs/index.cjs +0 -1
  311. package/dist/react/apollo-error/apollo-error.component.cjs +0 -1
  312. package/dist/react/apollo-error/apollo-error.context.cjs +0 -1
  313. package/dist/react/apollo-error/apollo-error.hook.cjs +0 -1
  314. package/dist/react/apollo-error/apollo-error.module.scss.cjs +0 -1
  315. package/dist/react/apollo-error/apollo-error.provider.cjs +0 -1
  316. package/dist/react/apollo-error/apollo-error.util.cjs +0 -1
  317. package/dist/react/apollo-error/index.cjs +0 -1
  318. package/dist/react/i18next/i18next.hook.cjs +0 -1
  319. package/dist/react/i18next/i18next.util.cjs +0 -1
  320. package/dist/react/i18next/index.cjs +0 -1
  321. package/dist/react/loading/index.cjs +0 -1
  322. package/dist/react/loading/loading.component.cjs +0 -6
  323. package/dist/react/loading/loading.context.cjs +0 -1
  324. package/dist/react/loading/loading.hook.cjs +0 -1
  325. package/dist/react/loading/loading.module.scss.cjs +0 -1
  326. package/dist/react/loading/loading.provider.cjs +0 -1
  327. package/dist/react/log/index.cjs +0 -1
  328. package/dist/react/log/log.util.cjs +0 -1
  329. package/dist/react/next-intl/index.cjs +0 -1
  330. package/dist/react/next-intl/next-intl.constant.cjs +0 -1
  331. package/dist/react/next-intl/next-intl.context.cjs +0 -1
  332. package/dist/react/next-intl/next-intl.hoc.cjs +0 -1
  333. package/dist/react/next-intl/next-intl.hook.cjs +0 -1
  334. package/dist/react/next-intl/next-intl.provider.cjs +0 -1
  335. package/dist/react/storage/index.cjs +0 -1
  336. package/dist/react/storage/storage.hook.cjs +0 -1
  337. package/dist/react/storage/storage.util.cjs +0 -1
  338. package/dist/react/toast/index.cjs +0 -1
  339. package/dist/react/userback/index.cjs +0 -1
  340. package/dist/react/userback/userback.component.cjs +0 -1
  341. package/dist/typescript/common.type.cjs +0 -1
  342. package/dist/typescript/index.cjs +0 -1
  343. package/dist/util/common/common.util.cjs +0 -1
  344. package/dist/util/common/index.cjs +0 -1
  345. package/dist/util/index.cjs +0 -1
  346. package/dist/util/object/index.cjs +0 -1
  347. package/dist/util/object/object.util.cjs +0 -1
  348. package/dist/util/serializer/index.cjs +0 -1
  349. package/dist/util/serializer/serializer.util.cjs +0 -1
  350. package/dist/util/string/index.cjs +0 -1
  351. package/dist/util/string/string.util.cjs +0 -1
  352. package/dist/util/validate/index.cjs +0 -1
  353. package/dist/util/validate/validate.util.cjs +0 -1
  354. /package/dist/node/ws/{ts.util.d.ts → ws.util.d.ts} +0 -0
@@ -0,0 +1,269 @@
1
+ import { convertEnumToModelName as F } from "./mongo.util.js";
2
+ async function $(f, o, a, c, n) {
3
+ if (!o.length || !a)
4
+ return o;
5
+ const r = Array.isArray(a) ? a : [a];
6
+ for (const i of r)
7
+ typeof i == "string" ? await k(f, o, i, c, n) : i && typeof i == "object" && await I(f, o, i, c, n);
8
+ return o;
9
+ }
10
+ async function k(f, o, a, c, n) {
11
+ const r = a.split(".");
12
+ if (r.length < 2) {
13
+ for (const d of o)
14
+ await w(f, d, a, c, void 0, n);
15
+ return;
16
+ }
17
+ const i = r[0];
18
+ if (!i || i.trim() === "")
19
+ return;
20
+ const j = r.slice(1).join(".");
21
+ for (const d of o) {
22
+ const h = d, p = h[i];
23
+ if (p && typeof p == "object") {
24
+ let b = n;
25
+ const l = b;
26
+ if (n && n.schema && n.schema.virtuals) {
27
+ const s = n.schema.virtuals[i];
28
+ if (s && s.options && s.options.ref) {
29
+ let e;
30
+ if (typeof s.options.ref == "function" ? e = s.options.ref(h) : typeof s.options.ref == "string" && (e = s.options.ref), e) {
31
+ const t = F(e);
32
+ f.models[t] && (b = f.models[t]);
33
+ }
34
+ }
35
+ }
36
+ if (!b) {
37
+ const s = n?.schema?.statics ?? {}, t = (n?._virtualConfigs || s._dynamicVirtuals || []).find((y) => y.name === i);
38
+ if (t && t.options && t.options.ref) {
39
+ let y;
40
+ if (typeof t.options.ref == "function" ? y = t.options.ref(h) : typeof t.options.ref == "string" && (y = t.options.ref), y) {
41
+ const m = F(y);
42
+ f.models[m] && (b = f.models[m]);
43
+ }
44
+ }
45
+ }
46
+ if (b === l) {
47
+ const s = n?.schema?.statics ?? {}, t = (n?._virtualConfigs || s._dynamicVirtuals || []).find((y) => y.name === i);
48
+ if (t && t.options && t.options.ref) {
49
+ let y;
50
+ if (typeof t.options.ref == "function" ? y = t.options.ref(h) : typeof t.options.ref == "string" && (y = t.options.ref), y) {
51
+ const m = F(y);
52
+ f.models[m] && (b = f.models[m]);
53
+ }
54
+ }
55
+ }
56
+ if (Array.isArray(p))
57
+ for (const s of p)
58
+ s && typeof s == "object" && await w(f, s, j, c, i, b);
59
+ else p && typeof p == "object" && await w(f, p, j, c, i, b);
60
+ }
61
+ }
62
+ }
63
+ async function I(f, o, a, c, n) {
64
+ const { path: r, populate: i } = a;
65
+ if (!r)
66
+ return;
67
+ if (!i) {
68
+ await k(f, o, r, c, n);
69
+ return;
70
+ }
71
+ const j = r;
72
+ for (const d of o) {
73
+ const h = d, p = h[j];
74
+ let b = n;
75
+ if (n && n.schema && n.schema.virtuals) {
76
+ const l = n.schema.virtuals[j];
77
+ if (l && l.options && l.options.ref) {
78
+ let s;
79
+ if (typeof l.options.ref == "function" ? s = l.options.ref(h) : typeof l.options.ref == "string" && (s = l.options.ref), s) {
80
+ const e = F(s);
81
+ f.models[e] && (b = f.models[e]);
82
+ }
83
+ }
84
+ }
85
+ if (!b && typeof p == "object" && p && "entityType" in p) {
86
+ const l = F(String(p.entityType));
87
+ f.models[l] && (b = f.models[l]);
88
+ }
89
+ if (p && typeof p == "object")
90
+ if (Array.isArray(p))
91
+ for (const l of p)
92
+ l && typeof l == "object" && await $(f, [l], i, c, b);
93
+ else p && typeof p == "object" && await $(f, [p], i, c, b);
94
+ }
95
+ }
96
+ function R(f, o, a, c) {
97
+ if (!a || !o || !o.schema)
98
+ return;
99
+ const n = a.split(".");
100
+ let r = o.schema;
101
+ for (let i = 0; i < n.length; i++) {
102
+ const j = n[i];
103
+ if (r && r.virtuals && j) {
104
+ const d = r.virtuals[j];
105
+ if (d && d.options && d.options.ref) {
106
+ let h;
107
+ if (typeof d.options.ref == "function" ? h = d.options.ref(c) : typeof d.options.ref == "string" && (h = d.options.ref), h && typeof h == "string") {
108
+ if (i === n.length - 1)
109
+ return h;
110
+ const p = f.models[h];
111
+ if (p && p.schema) {
112
+ r = p.schema;
113
+ continue;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ if (r && r.paths && j) {
119
+ const d = r.paths[j];
120
+ if (d && d.schema) {
121
+ r = d.schema;
122
+ continue;
123
+ }
124
+ }
125
+ return;
126
+ }
127
+ }
128
+ function S(f, o) {
129
+ if (o)
130
+ for (const a of Object.keys(f.models)) {
131
+ const c = f.models[a], n = c?.schema;
132
+ if (n && (n.paths && n.paths[o] || n.virtuals && n.virtuals[o]))
133
+ return c;
134
+ }
135
+ }
136
+ function _(f, o) {
137
+ const a = (o || "").split(".")[0] || "";
138
+ if (a)
139
+ for (const c of Object.keys(f.models)) {
140
+ const n = f.models[c], r = n?.schema;
141
+ if (r && (r.paths && r.paths[a] || r.virtuals && r.virtuals[a]))
142
+ return n;
143
+ }
144
+ }
145
+ async function w(f, o, a, c, n, r) {
146
+ let i = o.__t;
147
+ if (!i) {
148
+ if (r) {
149
+ const s = n ? `${n}.${a}` : a, e = (s || "").split(".")[0] || "";
150
+ let t = r;
151
+ if (!!!(t?.schema?.paths && t.schema.paths[e] || t?.schema?.virtuals && t.schema.virtuals[e])) {
152
+ const N = _(f, s);
153
+ N && (t = N);
154
+ }
155
+ const m = R(f, t, s, o);
156
+ if (m)
157
+ i = m;
158
+ else {
159
+ const N = (s.includes(".") ? s.split(".").pop() : s) || "";
160
+ if (N) {
161
+ const V = S(f, N);
162
+ if (V) {
163
+ const O = R(f, V, s, o);
164
+ O && (i = O);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ if (c && c.length > 0) {
170
+ const s = a.split(".").pop() || "", e = c.find((t) => t.name === s);
171
+ if (e && e.options.ref) {
172
+ let t;
173
+ typeof e.options.ref == "function" ? t = e.options.ref(o) : typeof e.options.ref == "string" && (t = e.options.ref), t && typeof t == "string" && (i = t);
174
+ }
175
+ }
176
+ if (!i) {
177
+ for (const [s, e] of Object.entries(o))
178
+ if (s === "entityType" && typeof e == "string") {
179
+ i = e;
180
+ break;
181
+ }
182
+ if (i && f.models[i]) {
183
+ const s = f.models[i];
184
+ if (s && s.schema) {
185
+ const e = s.schema, t = a.split(".").pop() || "", y = (N, V = "root") => {
186
+ if (!N || !N.virtuals)
187
+ return;
188
+ const O = N.virtuals;
189
+ for (const v of Object.keys(O))
190
+ if (v === t) {
191
+ const u = O[v];
192
+ if (u && u.options && u.options.ref) {
193
+ let A;
194
+ if (typeof u.options.ref == "function" ? A = u.options.ref(o) : typeof u.options.ref == "string" && (A = u.options.ref), A && typeof A == "string")
195
+ return A;
196
+ }
197
+ }
198
+ if (N.paths)
199
+ for (const v of Object.keys(N.paths)) {
200
+ const u = N.paths[v];
201
+ if (u && u.schema) {
202
+ const A = y(u.schema, `${V}.${v}`);
203
+ if (A)
204
+ return A;
205
+ }
206
+ }
207
+ }, m = y(e);
208
+ m && (i = m);
209
+ }
210
+ }
211
+ }
212
+ if (!i) {
213
+ const s = a.split(".").pop() || "";
214
+ if (r && r.schema) {
215
+ const e = r.schema, t = (m, N = "root") => {
216
+ if (!m || !m.virtuals)
217
+ return;
218
+ const V = m.virtuals;
219
+ for (const O of Object.keys(V))
220
+ if (O === s) {
221
+ const v = V[O];
222
+ if (v && v.options && v.options.ref) {
223
+ let u;
224
+ if (typeof v.options.ref == "function" ? u = v.options.ref(o) : typeof v.options.ref == "string" && (u = v.options.ref), u && typeof u == "string")
225
+ return u;
226
+ }
227
+ }
228
+ if (m.paths)
229
+ for (const O of Object.keys(m.paths)) {
230
+ const v = m.paths[O];
231
+ if (v && v.schema) {
232
+ const u = t(v.schema, `${N}.${O}`);
233
+ if (u)
234
+ return u;
235
+ }
236
+ }
237
+ }, y = t(e);
238
+ y && (i = y);
239
+ }
240
+ if (!i && r) {
241
+ const e = R(f, r, a, o);
242
+ e && (i = e);
243
+ }
244
+ if (!i && c && c.length > 0) {
245
+ const e = c.find((t) => t.name === s);
246
+ if (e && e.options.ref) {
247
+ let t;
248
+ typeof e.options.ref == "function" ? t = e.options.ref(o) : typeof e.options.ref == "string" && (t = e.options.ref), t && typeof t == "string" && (i = t);
249
+ }
250
+ }
251
+ }
252
+ if (!i) {
253
+ const s = a.split(".").pop() || "", e = s ? s.charAt(0).toUpperCase() + s.slice(1) : "";
254
+ e && f.models[e] && (i = e);
255
+ }
256
+ }
257
+ const j = f.models[i];
258
+ if (!j)
259
+ return;
260
+ const d = `${a}Id`, h = `${a}Ids`, p = o[d] || o[h] || o[a];
261
+ if (!p)
262
+ return;
263
+ const b = Array.isArray(p) ? p : [p], l = await j.find({ id: { $in: b } }).lean();
264
+ l.length > 0 && (Array.isArray(p) ? o[a] = l : o[a] = l[0]);
265
+ }
266
+ export {
267
+ $ as applyNestedPopulate
268
+ };
269
+ //# sourceMappingURL=mongo.populate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.populate.js","sources":["../../../src/node/mongo/mongo.populate.ts"],"sourcesContent":["import type mongooseRaw from 'mongoose';\n\nimport type { I_DynamicVirtualConfig, T_Input_Populate } from './mongo.type.js';\n\nimport { convertEnumToModelName } from './mongo.util.js';\n\n/**\n * Recursively applies nested populate options to populated documents.\n * This function handles cases where a populated field needs further population.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to apply nested populations to\n * @param populateOptions - The populate options to apply\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n * @returns Promise with documents that have nested populations applied\n */\nexport async function applyNestedPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOptions: T_Input_Populate,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<T[]> {\n if (!documents.length || !populateOptions) {\n return documents;\n }\n\n const populateArray = Array.isArray(populateOptions) ? populateOptions : [populateOptions];\n\n for (const populateOption of populateArray) {\n if (typeof populateOption === 'string') {\n await applyStringPopulate(mongoose, documents, populateOption, virtualConfigs, currentModel);\n }\n else if (populateOption && typeof populateOption === 'object') {\n const popObj = populateOption as { path?: string; populate?: T_Input_Populate;[key: string]: unknown };\n\n await applyObjectPopulate(mongoose, documents, popObj, virtualConfigs, currentModel);\n }\n }\n\n return documents;\n}\n\n/**\n * Applies string-based populate options (e.g., \"field.subfield\") to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populatePath - The populate path string\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyStringPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populatePath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const pathParts = populatePath.split('.');\n\n if (pathParts.length < 2) {\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n\n await populateNestedFieldOnParent(mongoose, docObj, populatePath, virtualConfigs, undefined, currentModel);\n }\n\n return;\n }\n\n const mainField = pathParts[0];\n\n if (!mainField || mainField.trim() === '') {\n return;\n }\n\n const nestedPath = pathParts.slice(1).join('.');\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const mainValue = docObj[mainField];\n\n if (mainValue && typeof mainValue === 'object') {\n let nextModelForChildren = currentModel;\n const originalModelForChildren = nextModelForChildren;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[mainField];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (!nextModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (nextModelForChildren === originalModelForChildren) {\n const schemaStatics = (currentModel?.schema?.statics ?? {}) as Record<string, unknown>;\n const dynamicVirtuals = ((currentModel as any)?._virtualConfigs as Array<{ name: string; options?: { ref?: unknown } }>)\n || (schemaStatics['_dynamicVirtuals'] as Array<{ name: string; options?: { ref?: unknown } }> | undefined)\n || [];\n const dyn = (dynamicVirtuals as Array<{ name: string; options?: { ref?: unknown } }>).find(v => v.name === mainField);\n\n if (dyn && dyn.options && dyn.options.ref) {\n let refResult: string | undefined;\n\n if (typeof dyn.options.ref === 'function') {\n refResult = (dyn.options.ref as (d: unknown) => string | undefined)(docObj);\n }\n else if (typeof dyn.options.ref === 'string') {\n refResult = dyn.options.ref as string;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n\n if (Array.isArray(mainValue)) {\n for (const item of mainValue) {\n if (item && typeof item === 'object') {\n await populateNestedFieldOnParent(mongoose, item as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n else if (mainValue && typeof mainValue === 'object') {\n await populateNestedFieldOnParent(mongoose, mainValue as { [key: string]: unknown }, nestedPath, virtualConfigs, mainField, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Applies object-based populate options with nested populate to documents.\n *\n * @template T - The document type\n * @param mongoose - The Mongoose instance\n * @param documents - The documents to populate\n * @param populateOption - The populate option object\n * @param populateOption.path - The path to populate\n * @param populateOption.populate - The nested populate options\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function applyObjectPopulate<T extends object>(\n mongoose: typeof mongooseRaw,\n documents: T[],\n populateOption: { path?: string; populate?: T_Input_Populate;[key: string]: unknown },\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n currentModel?: any,\n): Promise<void> {\n const { path, populate: nestedPopulate } = populateOption;\n\n if (!path) {\n return;\n }\n\n if (!nestedPopulate) {\n await applyStringPopulate(mongoose, documents, path, virtualConfigs, currentModel);\n\n return;\n }\n\n const pathString = path;\n\n for (const doc of documents) {\n const docObj = doc as { [key: string]: unknown };\n const fieldValue = docObj[pathString];\n\n let nextModelForChildren = currentModel;\n\n if (currentModel && currentModel.schema && currentModel.schema.virtuals) {\n const virtual = currentModel.schema.virtuals[pathString];\n\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(docObj);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult) {\n const modelName = convertEnumToModelName(refResult);\n if (mongoose.models[modelName]) {\n nextModelForChildren = mongoose.models[modelName];\n }\n }\n }\n }\n if (!nextModelForChildren && typeof fieldValue === 'object' && fieldValue && 'entityType' in (fieldValue as object)) {\n const maybeModel = convertEnumToModelName(String((fieldValue as { [k: string]: unknown })['entityType']));\n\n if (mongoose.models[maybeModel]) {\n nextModelForChildren = mongoose.models[maybeModel];\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n if (Array.isArray(fieldValue)) {\n for (const item of fieldValue) {\n if (item && typeof item === 'object') {\n await applyNestedPopulate(mongoose, [item as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n else if (fieldValue && typeof fieldValue === 'object') {\n await applyNestedPopulate(mongoose, [fieldValue as { [key: string]: unknown }], nestedPopulate, virtualConfigs, nextModelForChildren);\n }\n }\n }\n}\n\n/**\n * Resolves the target model for a given populate path by following the path step by step.\n * This function traverses the schema hierarchy to find the correct model for population.\n *\n * @param mongoose - The Mongoose instance\n * @param startModel - The starting model (usually the model containing the document)\n * @param path - The populate path to resolve (e.g., \"entity.partner1.gallery\")\n * @param document - The document being populated (for dynamic virtual resolution)\n * @returns The resolved model name or undefined if not found\n */\nfunction resolveModelFromPath(\n mongoose: typeof mongooseRaw,\n startModel: any,\n path: string,\n document: { [key: string]: unknown },\n): string | undefined {\n if (!path || !startModel || !startModel.schema) {\n return undefined;\n }\n\n const pathParts = path.split('.');\n let currentSchema = startModel.schema;\n\n for (let i = 0; i < pathParts.length; i++) {\n const pathPart = pathParts[i];\n\n if (currentSchema && currentSchema.virtuals && pathPart) {\n const virtual = currentSchema.virtuals[pathPart];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n if (i === pathParts.length - 1) {\n return refResult;\n }\n\n const nextModel = mongoose.models[refResult];\n\n if (nextModel && nextModel.schema) {\n currentSchema = nextModel.schema;\n continue;\n }\n }\n }\n }\n\n if (currentSchema && currentSchema.paths && pathPart) {\n const pathSchema = currentSchema.paths[pathPart];\n\n if (pathSchema && pathSchema.schema) {\n currentSchema = pathSchema.schema;\n continue;\n }\n }\n\n return undefined;\n }\n\n return undefined;\n}\n\n/**\n * Attempts to find a model whose schema contains the given field\n * either as a direct path or a virtual. Searches only at the root level\n * of each model schema.\n */\nfunction findModelBySchemaField(\n mongoose: typeof mongooseRaw,\n fieldName: string,\n): any | undefined {\n if (!fieldName) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[fieldName]) || (schema.virtuals && schema.virtuals[fieldName])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Finds a start model whose root schema contains the first segment of the path\n * as either a direct path or a virtual. Useful to jump into the correct model\n * when the current model context is misaligned (e.g., 'partner1.*' should start from User).\n */\nfunction findStartModelByFirstSegment(\n mongoose: typeof mongooseRaw,\n fullPath: string,\n): any | undefined {\n const first = (fullPath || '').split('.')[0] || '';\n\n if (!first) {\n return undefined;\n }\n for (const modelName of Object.keys(mongoose.models)) {\n const Model = mongoose.models[modelName];\n const schema = Model?.schema as any;\n\n if (!schema) {\n continue;\n }\n if ((schema.paths && schema.paths[first]) || (schema.virtuals && schema.virtuals[first])) {\n return Model;\n }\n }\n\n return undefined;\n}\n\n/**\n * Populates a nested field on the parent object by finding the referenced document and applying populate options.\n *\n * @param mongoose - The Mongoose instance\n * @param document - The document containing the field to populate\n * @param nestedPath - The nested populate path\n * @param virtualConfigs - Optional virtual configurations for model inference\n * @param pathPrefix - The parent path prefix (if nested within another populated field)\n * @param currentModel - The current model context (which model's schema to search for virtuals)\n */\nasync function populateNestedFieldOnParent(\n mongoose: typeof mongooseRaw,\n document: { [key: string]: unknown },\n nestedPath: string,\n virtualConfigs?: I_DynamicVirtualConfig<unknown, string>[],\n pathPrefix?: string,\n currentModel?: any,\n): Promise<void> {\n let modelName = document['__t'];\n\n if (!modelName) {\n if (currentModel) {\n const fullPath = pathPrefix ? `${pathPrefix}.${nestedPath}` : nestedPath;\n\n const firstSegment = (fullPath || '').split('.')[0] || '';\n let startModel = currentModel;\n const hasFirstOnCurrent = Boolean(\n (startModel?.schema?.paths && startModel.schema.paths[firstSegment])\n || (startModel?.schema?.virtuals && startModel.schema.virtuals[firstSegment]),\n );\n\n if (!hasFirstOnCurrent) {\n const betterStart = findStartModelByFirstSegment(mongoose, fullPath);\n\n if (betterStart) {\n startModel = betterStart;\n }\n }\n\n const resolvedFromPath = resolveModelFromPath(mongoose, startModel, fullPath, document);\n\n if (resolvedFromPath) {\n modelName = resolvedFromPath;\n }\n else {\n const lastSegment = (fullPath.includes('.') ? fullPath.split('.').pop() : fullPath) || '';\n\n if (lastSegment) {\n const candidateModel = findModelBySchemaField(mongoose, lastSegment);\n\n if (candidateModel) {\n const rerun = resolveModelFromPath(mongoose, candidateModel, fullPath, document);\n\n if (rerun) {\n modelName = rerun;\n }\n }\n }\n }\n }\n\n if (virtualConfigs && virtualConfigs.length > 0) {\n const fieldName = nestedPath.split('.').pop() || '';\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n\n if (!modelName) {\n for (const [key, value] of Object.entries(document as Record<string, unknown>)) {\n if (key === 'entityType' && typeof value === 'string') {\n modelName = value;\n break;\n }\n }\n\n if (modelName && mongoose.models[modelName as string]) {\n const Model = mongoose.models[modelName as string];\n\n if (Model && Model.schema) {\n const schema = Model.schema;\n const fieldName = nestedPath.split('.').pop() || '';\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n\n if (currentModel && currentModel.schema) {\n const schema = currentModel.schema;\n\n const searchVirtualsInSchema = (schemaToSearch: any, schemaPath = 'root'): string | undefined => {\n if (!schemaToSearch || !schemaToSearch.virtuals) {\n return undefined;\n }\n\n const virtuals = schemaToSearch.virtuals;\n\n for (const virtualName of Object.keys(virtuals)) {\n if (virtualName === fieldName) {\n const virtual = virtuals[virtualName];\n if (virtual && virtual.options && virtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof virtual.options.ref === 'function') {\n refResult = virtual.options.ref(document);\n }\n else if (typeof virtual.options.ref === 'string') {\n refResult = virtual.options.ref;\n }\n\n if (refResult && typeof refResult === 'string') {\n return refResult;\n }\n }\n }\n }\n\n if (schemaToSearch.paths) {\n for (const pathName of Object.keys(schemaToSearch.paths)) {\n const pathSchema = schemaToSearch.paths[pathName];\n\n if (pathSchema && pathSchema.schema) {\n const nestedResult = searchVirtualsInSchema(pathSchema.schema, `${schemaPath}.${pathName}`);\n\n if (nestedResult) {\n return nestedResult;\n }\n }\n }\n }\n\n return undefined;\n };\n\n const foundModelName = searchVirtualsInSchema(schema);\n if (foundModelName) {\n modelName = foundModelName;\n }\n }\n\n if (!modelName) {\n if (currentModel) {\n const resolvedModel = resolveModelFromPath(mongoose, currentModel, nestedPath, document);\n\n if (resolvedModel) {\n modelName = resolvedModel;\n }\n }\n }\n\n if (!modelName && virtualConfigs && virtualConfigs.length > 0) {\n const matchingVirtual = virtualConfigs.find(v => v.name === fieldName);\n\n if (matchingVirtual && matchingVirtual.options.ref) {\n let refResult: string | undefined;\n\n if (typeof matchingVirtual.options.ref === 'function') {\n refResult = matchingVirtual.options.ref(document);\n }\n else if (typeof matchingVirtual.options.ref === 'string') {\n refResult = matchingVirtual.options.ref;\n }\n if (refResult && typeof refResult === 'string') {\n modelName = refResult;\n }\n }\n }\n }\n\n if (!modelName) {\n const fieldName = nestedPath.split('.').pop() || '';\n const candidate = fieldName ? fieldName.charAt(0).toUpperCase() + fieldName.slice(1) : '';\n\n if (candidate && mongoose.models[candidate]) {\n modelName = candidate;\n }\n }\n }\n\n const Model = mongoose.models[modelName as string];\n\n if (!Model) {\n return;\n }\n\n const fieldIdKey = `${nestedPath}Id`;\n const fieldIdsKey = `${nestedPath}Ids`;\n\n const docIds = document[fieldIdKey] || document[fieldIdsKey] || document[nestedPath];\n\n if (!docIds) {\n return;\n }\n\n const idsArray = Array.isArray(docIds) ? docIds : [docIds];\n\n const populatedDocs = await Model.find({ id: { $in: idsArray } }).lean();\n\n if (populatedDocs.length > 0) {\n if (Array.isArray(docIds)) {\n document[nestedPath] = populatedDocs;\n }\n else {\n document[nestedPath] = populatedDocs[0];\n }\n }\n}\n"],"names":["applyNestedPopulate","mongoose","documents","populateOptions","virtualConfigs","currentModel","populateArray","populateOption","applyStringPopulate","applyObjectPopulate","populatePath","pathParts","doc","populateNestedFieldOnParent","mainField","nestedPath","docObj","mainValue","nextModelForChildren","originalModelForChildren","virtual","refResult","modelName","convertEnumToModelName","schemaStatics","dyn","v","item","path","nestedPopulate","pathString","fieldValue","maybeModel","resolveModelFromPath","startModel","document","currentSchema","pathPart","nextModel","pathSchema","findModelBySchemaField","fieldName","Model","schema","findStartModelByFirstSegment","fullPath","first","pathPrefix","firstSegment","betterStart","resolvedFromPath","lastSegment","candidateModel","rerun","matchingVirtual","key","value","searchVirtualsInSchema","schemaToSearch","schemaPath","virtuals","virtualName","pathName","nestedResult","foundModelName","resolvedModel","candidate","fieldIdKey","fieldIdsKey","docIds","idsArray","populatedDocs"],"mappings":"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"}
@@ -14,3 +14,4 @@ export {
14
14
  m as C_Document,
15
15
  C as C_Model
16
16
  };
17
+ //# sourceMappingURL=mongo.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.type.js","sources":["../../../src/node/mongo/mongo.type.ts"],"sourcesContent":["import type {\n DeleteResult,\n Filter,\n InsertManyResult,\n InsertOneResult,\n OptionalUnlessRequiredId,\n UpdateResult,\n WithId,\n} from 'mongodb';\nimport type {\n AggregatePaginateModel,\n AggregatePaginateResult,\n ClientSession,\n ErrorHandlingMiddlewareFunction,\n ErrorHandlingMiddlewareWithOption,\n InsertManyOptions,\n PaginateModel,\n PaginateOptions,\n PaginateResult,\n PipelineStage,\n PopulateOption,\n PopulateOptions,\n PostMiddlewareFunction,\n PreMiddlewareFunction,\n PreSaveMiddlewareFunction,\n ProjectionType,\n QueryFilter,\n QueryOptions,\n QueryWithHelpers,\n Schema,\n SchemaDefinition,\n UpdateQuery,\n UpdateWriteOpResult,\n} from 'mongoose';\nimport type mongoose from 'mongoose';\n\nimport { Collection, Db } from 'mongodb';\nimport {\n Document,\n Model,\n} from 'mongoose';\n\nexport class C_Db extends Db { }\n\nexport type T_Filter<T> = Filter<T>;\n\nexport type T_InsertOneResult<T> = InsertOneResult<T>;\n\nexport type T_InsertManyResult<T> = InsertManyResult<T>;\n\nexport type T_UpdateResult = UpdateResult | UpdateWriteOpResult;\n\nexport type T_DeleteResult = DeleteResult;\n\nexport type T_WithId<T> = WithId<T>;\n\nexport type T_OptionalUnlessRequiredId<T> = OptionalUnlessRequiredId<T>;\n\nexport class C_Document extends Document { }\n\nexport class C_Model extends Model { }\n\nexport class C_Collection<\n T extends Partial<C_Document>,\n> extends Collection<T> { }\n\nexport interface I_ExtendedModel<T extends Partial<C_Document>>\n extends Model<T>, PaginateModel<T>,\n AggregatePaginateModel<T> { }\n\nexport type T_QueryFilter<T> = QueryFilter<T>;\n\nexport type T_ProjectionType<T> = ProjectionType<T>;\n\nexport type T_QueryOptions<T> = QueryOptions<T>;\n\nexport type T_PaginateOptions = PaginateOptions;\n\nexport type T_PopulateOption = PopulateOption;\n\nexport type T_PopulateOptions = PopulateOptions;\n\nexport type T_PipelineStage = PipelineStage;\n\nexport type T_PaginateResult<T> = PaginateResult<T>;\n\nexport type T_AggregatePaginateResult<T> = AggregatePaginateResult<T>;\n\nexport type T_InsertManyOptions = InsertManyOptions;\n\nexport type T_UpdateQuery<T> = UpdateQuery<T>;\n\nexport type T_QueryWithHelpers<T> = QueryWithHelpers<T, T>;\n\nexport type T_PreMiddlewareFunction<T> = PreMiddlewareFunction<T>;\n\nexport type T_PreSaveMiddlewareFunction<T> = PreSaveMiddlewareFunction<T>;\n\nexport type T_PostMiddlewareFunction<T> = PostMiddlewareFunction<T>;\n\nexport type T_ErrorHandlingMiddlewareFunction<T> = ErrorHandlingMiddlewareFunction<T>;\n\nexport type T_ErrorHandlingMiddlewareWithOption<T> = ErrorHandlingMiddlewareWithOption<T>;\n\nexport type T_MongooseShema<T> = mongoose.Schema<T>;\n\nexport type T_Input_MongooseSchema<T> = SchemaDefinition<T>;\n\nexport type T_MongoosePlugin = (schema: Schema, options?: Record<string, unknown>) => void;\n\nexport interface I_GenericDocument extends Partial<C_Document> {\n id: string;\n isDel: boolean;\n createdAt: string | Date;\n updatedAt: string | Date;\n}\n\nexport type T_Omit_Create = 'id' | 'isDel' | 'createdAt' | 'updatedAt';\n\nexport type T_Omit_Update = 'id' | 'createdAt' | 'updatedAt';\n\ninterface I_VirtualNestedOptions {\n [key: string]: I_VirtualNestedOptions | number | string | boolean;\n}\n\n/**\n * Function type for dynamically determining the reference model name.\n * Can return either a string (model name) or an enum value that represents the model.\n * The function can also return undefined, which will be handled gracefully.\n * This allows for optional properties in documents without requiring non-null assertions.\n *\n * @template T - The document type\n * @template R - The return type (string or enum)\n */\ntype T_DynamicRefFunction<T = unknown, R extends string = string> = (doc: T) => R | undefined;\n\ninterface I_VirtualBaseOptions {\n localField: string;\n foreignField: string;\n count?: boolean;\n justOne?: boolean;\n options?: I_VirtualNestedOptions;\n}\n\ninterface I_VirtualOptions extends I_VirtualBaseOptions {\n ref: string;\n}\n\nexport interface I_DynamicVirtualOptions<T, R extends string = string> extends I_VirtualBaseOptions {\n ref: T_DynamicRefFunction<T, R>;\n}\n\nexport type T_VirtualOptions<T, R extends string = string> = I_VirtualOptions | I_DynamicVirtualOptions<T, R>;\n\nexport interface I_DynamicVirtualConfig<T, R extends string = string> {\n name: string;\n options: I_DynamicVirtualOptions<T, R>;\n}\n\ninterface I_MongooseOptions<T, R extends string = string> {\n mongoose: typeof mongoose;\n virtuals?: {\n name: keyof T | string;\n options?: T_VirtualOptions<T, R>;\n get?: (this: T) => void;\n }[];\n}\n\nexport interface I_CreateSchemaOptions<T, R extends string = string>\n extends I_MongooseOptions<T, R> {\n schema: T_Input_MongooseSchema<T>;\n standalone?: boolean;\n}\n\nexport type T_MongooseMiddlewareMethod = string | RegExp;\n\nexport type T_MongooseMiddlewarePreFunction<T> = T_PreMiddlewareFunction<T> & T_PreSaveMiddlewareFunction<T>;\n\nexport type T_MongooseMiddlewarePostFunction<T> = T_PostMiddlewareFunction<T> & T_ErrorHandlingMiddlewareFunction<T> & T_ErrorHandlingMiddlewareWithOption<T>;\n\nexport interface I_MongooseModelMiddleware<T extends Partial<C_Document>> {\n method: T_MongooseMiddlewareMethod;\n pre?: T_MongooseMiddlewarePreFunction<T & T_QueryWithHelpers<T>>;\n post?: T_MongooseMiddlewarePostFunction<T>;\n}\n\nexport interface I_CreateModelOptions<T extends Partial<C_Document>, R extends string = string>\n extends I_MongooseOptions<T, R> {\n schema: T_Input_MongooseSchema<T>;\n name: string;\n pagination?: boolean;\n aggregate?: boolean;\n middlewares?: I_MongooseModelMiddleware<T>[];\n}\n\nexport type T_Input_Populate = string | string[] | T_PopulateOptions | T_PopulateOptions[];\n\nexport interface I_PaginateOptionsWithPopulate\n extends T_PaginateOptions,\n Omit<T_PopulateOption, 'populate'> {\n populate?: T_Input_Populate;\n}\n\nexport interface I_Input_FindOne<T> extends T_PopulateOption {\n filter: T_QueryFilter<T>;\n projection?: T_ProjectionType<T>;\n options?: T_QueryOptions<T>;\n}\n\nexport interface I_Input_FindAll<T> extends T_PopulateOption {\n filter: T_QueryFilter<T>;\n projection?: T_ProjectionType<T>;\n options?: T_QueryOptions<T>;\n}\n\nexport interface I_Input_FindPaging<T = undefined> {\n filter?: T_QueryFilter<T>;\n options?: I_PaginateOptionsWithPopulate;\n};\n\nexport interface I_Input_FindPagingAggregate {\n pipeline: T_PipelineStage[];\n options?: I_PaginateOptionsWithPopulate;\n}\n\nexport interface I_Input_CreateOne<T> {\n doc: T;\n}\n\nexport interface I_Input_CreateMany<T> {\n docs: T[];\n}\n\nexport interface I_UpdateOptionsExtended extends Omit<QueryOptions, 'session'> {\n session?: ClientSession;\n}\n\nexport interface I_Input_UpdateOne<T> extends T_PopulateOption {\n filter: T_QueryFilter<T>;\n update: T_UpdateQuery<T>;\n options?: I_UpdateOptionsExtended;\n}\n\nexport interface I_Input_UpdateMany<T> extends T_PopulateOption {\n filter: T_QueryFilter<T>;\n update: T_UpdateQuery<T>;\n options?: I_UpdateOptionsExtended;\n}\n\nexport interface I_DeleteOptionsExtended extends Omit<QueryOptions, 'session'> {\n session?: ClientSession;\n}\n\nexport interface I_Input_DeleteOne<T> {\n filter: T_QueryFilter<T>;\n options?: I_DeleteOptionsExtended;\n}\n\nexport interface I_Input_DeleteMany<T> {\n filter: T_QueryFilter<T>;\n options?: I_DeleteOptionsExtended;\n}\n\nexport interface I_InputSlug<T> {\n field: string;\n filter?: T_QueryFilter<T>;\n haveHistory?: boolean;\n}\n\nexport interface I_Input_CreateSlug<T> extends I_InputSlug<T> {\n from: T;\n}\n\nexport interface I_Input_CheckSlug<T> extends I_InputSlug<T> {\n slug: string;\n from: T;\n}\n\nexport interface I_Input_GenerateSlug<T> extends I_InputSlug<T> {\n slug: string;\n isObject: boolean;\n haveHistory?: boolean;\n}\n"],"names":["C_Db","Db","C_Document","Document","C_Model","Model","C_Collection","Collection"],"mappings":";;AA0CO,MAAMA,UAAaC,EAAG;AAAE;AAgBxB,MAAMC,UAAmBC,EAAS;AAAE;AAEpC,MAAMC,UAAgBC,EAAM;AAAE;AAE9B,MAAMC,UAEHC,EAAc;AAAE;"}
@@ -0,0 +1,52 @@
1
+ import { default as mongooseRaw } from 'mongoose';
2
+ import { default as migrate } from 'migrate-mongo';
3
+ import { MongoController } from './mongo.controller.js';
4
+ import { C_Document, I_CreateModelOptions, I_CreateSchemaOptions, I_DynamicVirtualOptions, I_ExtendedModel, I_GenericDocument, I_MongooseModelMiddleware, T_MongoosePlugin, T_MongooseShema, T_QueryFilter, T_VirtualOptions, T_WithId } from './mongo.type.js';
5
+ /**
6
+ * Converts enum values to proper model names.
7
+ * Handles common naming conventions like converting 'USER' to 'User'.
8
+ *
9
+ * @param enumValue - The enum value to convert
10
+ * @returns The converted model name
11
+ */
12
+ export declare function convertEnumToModelName(enumValue: string): string;
13
+ /**
14
+ * Interface for the MongoDB utility object to enable explicit type annotation.
15
+ * Required to avoid TS7056 (inferred type exceeds maximum serialization length).
16
+ */
17
+ interface I_MongoUtils {
18
+ createGenericFields(): I_GenericDocument;
19
+ applyPlugins<T>(schema: T_MongooseShema<T>, plugins: Array<T_MongoosePlugin | false>): void;
20
+ applyMiddlewares<T extends Partial<C_Document>>(schema: T_MongooseShema<T>, middlewares: I_MongooseModelMiddleware<T>[]): void;
21
+ createGenericSchema(mongoose: typeof mongooseRaw): T_MongooseShema<I_GenericDocument>;
22
+ createSchema<T, R extends string>(options: I_CreateSchemaOptions<T, R>): T_MongooseShema<T>;
23
+ createModel<T extends Partial<C_Document>, R extends string>(options: I_CreateModelOptions<T, R>): I_ExtendedModel<T>;
24
+ validator: {
25
+ isRequired<T>(): (this: T, value: unknown) => Promise<boolean>;
26
+ isUnique<T extends {
27
+ constructor: {
28
+ exists: (query: {
29
+ [key: string]: unknown;
30
+ }) => Promise<unknown>;
31
+ };
32
+ }>(fields: string[]): (this: T, value: unknown) => Promise<boolean>;
33
+ matchesRegex(regexArray: RegExp[]): (value: string) => Promise<boolean>;
34
+ };
35
+ migrate: {
36
+ getModule(): Promise<typeof migrate>;
37
+ setConfig: (options: Partial<migrate.config.Config> & {
38
+ moduleSystem?: 'commonjs' | 'esm';
39
+ }) => void;
40
+ };
41
+ regexify<T>(filter?: T_QueryFilter<T>, fields?: (keyof T | string)[]): T_QueryFilter<T>;
42
+ isDynamicVirtual<T, R extends string>(options?: T_VirtualOptions<T, R>): options is I_DynamicVirtualOptions<T, R>;
43
+ getNewRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean): Promise<T[]>;
44
+ getExistingRecords<T extends I_GenericDocument>(controller: MongoController<T>, recordsToCheck: T[], filterFn: (existingRecord: T_WithId<T>, newRecord: T) => boolean): Promise<T_WithId<T>[]>;
45
+ }
46
+ /**
47
+ * MongoDB utility object providing comprehensive database operations and utilities.
48
+ * This object contains methods for creating generic fields, applying plugins and middlewares,
49
+ * creating schemas and models, validation functions, migration utilities, and regex filtering.
50
+ */
51
+ export declare const mongo: I_MongoUtils;
52
+ export { applyNestedPopulate } from './mongo.populate.js';