payload 3.89.0 → 3.90.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/dist/admin/forms/Field.d.ts +2 -0
  2. package/dist/admin/forms/Field.d.ts.map +1 -1
  3. package/dist/admin/forms/Field.js.map +1 -1
  4. package/dist/admin/forms/Form.d.ts +2 -0
  5. package/dist/admin/forms/Form.d.ts.map +1 -1
  6. package/dist/admin/forms/Form.js.map +1 -1
  7. package/dist/admin/functions/index.d.ts +3 -1
  8. package/dist/admin/functions/index.d.ts.map +1 -1
  9. package/dist/admin/functions/index.js.map +1 -1
  10. package/dist/admin/views/dashboard.d.ts +1 -1
  11. package/dist/admin/views/dashboard.d.ts.map +1 -1
  12. package/dist/admin/views/dashboard.js.map +1 -1
  13. package/dist/auth/applyUserReadAccess.d.ts +15 -0
  14. package/dist/auth/applyUserReadAccess.d.ts.map +1 -0
  15. package/dist/auth/applyUserReadAccess.js +41 -0
  16. package/dist/auth/applyUserReadAccess.js.map +1 -0
  17. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts +4 -0
  18. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts.map +1 -0
  19. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js +20 -0
  20. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js.map +1 -0
  21. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts +4 -0
  22. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts.map +1 -0
  23. package/dist/auth/baseFields/apiKey/encryptAPIKey.js +16 -0
  24. package/dist/auth/baseFields/apiKey/encryptAPIKey.js.map +1 -0
  25. package/dist/auth/baseFields/apiKey/index.d.ts +6 -0
  26. package/dist/auth/baseFields/apiKey/index.d.ts.map +1 -0
  27. package/dist/auth/baseFields/apiKey/index.js +112 -0
  28. package/dist/auth/baseFields/apiKey/index.js.map +1 -0
  29. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts +4 -0
  30. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts.map +1 -0
  31. package/dist/auth/baseFields/apiKey/omitAPIKey.js +8 -0
  32. package/dist/auth/baseFields/apiKey/omitAPIKey.js.map +1 -0
  33. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts +4 -0
  34. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts.map +1 -0
  35. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js +5 -0
  36. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js.map +1 -0
  37. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts +4 -0
  38. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts.map +1 -0
  39. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js +5 -0
  40. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js.map +1 -0
  41. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts +4 -0
  42. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts.map +1 -0
  43. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js +17 -0
  44. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js.map +1 -0
  45. package/dist/auth/baseFields/auth.d.ts +1 -0
  46. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  47. package/dist/auth/baseFields/auth.js +9 -0
  48. package/dist/auth/baseFields/auth.js.map +1 -1
  49. package/dist/auth/defaultUnlockAccess.d.ts +3 -0
  50. package/dist/auth/defaultUnlockAccess.d.ts.map +1 -0
  51. package/dist/auth/defaultUnlockAccess.js +8 -0
  52. package/dist/auth/defaultUnlockAccess.js.map +1 -0
  53. package/dist/auth/endpoints/index.d.ts +1 -0
  54. package/dist/auth/endpoints/index.d.ts.map +1 -1
  55. package/dist/auth/endpoints/index.js +8 -0
  56. package/dist/auth/endpoints/index.js.map +1 -1
  57. package/dist/auth/endpoints/revealAPIKey.d.ts +7 -0
  58. package/dist/auth/endpoints/revealAPIKey.d.ts.map +1 -0
  59. package/dist/auth/endpoints/revealAPIKey.js +120 -0
  60. package/dist/auth/endpoints/revealAPIKey.js.map +1 -0
  61. package/dist/auth/executeAccess.d.ts +3 -1
  62. package/dist/auth/executeAccess.d.ts.map +1 -1
  63. package/dist/auth/executeAccess.js +2 -1
  64. package/dist/auth/executeAccess.js.map +1 -1
  65. package/dist/auth/getAuthFields.d.ts +1 -1
  66. package/dist/auth/getAuthFields.d.ts.map +1 -1
  67. package/dist/auth/getAuthFields.js +7 -4
  68. package/dist/auth/getAuthFields.js.map +1 -1
  69. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  70. package/dist/auth/getFieldsToSign.js +17 -10
  71. package/dist/auth/getFieldsToSign.js.map +1 -1
  72. package/dist/auth/getFieldsToSign.spec.js +114 -0
  73. package/dist/auth/getFieldsToSign.spec.js.map +1 -0
  74. package/dist/auth/jwt.d.ts.map +1 -1
  75. package/dist/auth/jwt.js +2 -0
  76. package/dist/auth/jwt.js.map +1 -1
  77. package/dist/auth/jwt.spec.js +24 -0
  78. package/dist/auth/jwt.spec.js.map +1 -0
  79. package/dist/auth/jwtAuth.d.ts +9 -0
  80. package/dist/auth/jwtAuth.d.ts.map +1 -0
  81. package/dist/auth/jwtAuth.js +8 -0
  82. package/dist/auth/jwtAuth.js.map +1 -0
  83. package/dist/auth/operations/auth.d.ts.map +1 -1
  84. package/dist/auth/operations/auth.js +2 -1
  85. package/dist/auth/operations/auth.js.map +1 -1
  86. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  87. package/dist/auth/operations/forgotPassword.js +95 -7
  88. package/dist/auth/operations/forgotPassword.js.map +1 -1
  89. package/dist/auth/operations/local/auth.js +3 -1
  90. package/dist/auth/operations/local/auth.js.map +1 -1
  91. package/dist/auth/operations/login.d.ts.map +1 -1
  92. package/dist/auth/operations/login.js +48 -26
  93. package/dist/auth/operations/login.js.map +1 -1
  94. package/dist/auth/operations/refresh.d.ts.map +1 -1
  95. package/dist/auth/operations/refresh.js +32 -9
  96. package/dist/auth/operations/refresh.js.map +1 -1
  97. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  98. package/dist/auth/operations/registerFirstUser.js +3 -4
  99. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  100. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  101. package/dist/auth/operations/resetPassword.js +31 -22
  102. package/dist/auth/operations/resetPassword.js.map +1 -1
  103. package/dist/auth/operations/unlock.d.ts.map +1 -1
  104. package/dist/auth/operations/unlock.js +1 -0
  105. package/dist/auth/operations/unlock.js.map +1 -1
  106. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  107. package/dist/auth/strategies/apiKey.js +15 -1
  108. package/dist/auth/strategies/apiKey.js.map +1 -1
  109. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  110. package/dist/auth/strategies/jwt.js +61 -10
  111. package/dist/auth/strategies/jwt.js.map +1 -1
  112. package/dist/auth/strategies/jwt.spec.js +281 -0
  113. package/dist/auth/strategies/jwt.spec.js.map +1 -0
  114. package/dist/auth/strategies/local/authenticate.d.ts +5 -1
  115. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  116. package/dist/auth/strategies/local/authenticate.js +8 -3
  117. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  118. package/dist/auth/strategies/local/authenticate.spec.js +37 -10
  119. package/dist/auth/strategies/local/authenticate.spec.js.map +1 -1
  120. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +9 -1
  121. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  122. package/dist/auth/strategies/local/generatePasswordSaltHash.js +61 -34
  123. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  124. package/dist/auth/types.d.ts +16 -1
  125. package/dist/auth/types.d.ts.map +1 -1
  126. package/dist/auth/types.js.map +1 -1
  127. package/dist/collections/config/client.d.ts +1 -0
  128. package/dist/collections/config/client.d.ts.map +1 -1
  129. package/dist/collections/config/client.js +3 -0
  130. package/dist/collections/config/client.js.map +1 -1
  131. package/dist/collections/config/defaults.d.ts.map +1 -1
  132. package/dist/collections/config/defaults.js +4 -2
  133. package/dist/collections/config/defaults.js.map +1 -1
  134. package/dist/collections/config/sanitize.d.ts.map +1 -1
  135. package/dist/collections/config/sanitize.js +17 -6
  136. package/dist/collections/config/sanitize.js.map +1 -1
  137. package/dist/collections/endpoints/index.d.ts +1 -0
  138. package/dist/collections/endpoints/index.d.ts.map +1 -1
  139. package/dist/collections/endpoints/index.js +6 -5
  140. package/dist/collections/endpoints/index.js.map +1 -1
  141. package/dist/collections/operations/create.d.ts.map +1 -1
  142. package/dist/collections/operations/create.js +105 -8
  143. package/dist/collections/operations/create.js.map +1 -1
  144. package/dist/collections/operations/deleteByID.js +13 -13
  145. package/dist/collections/operations/deleteByID.js.map +1 -1
  146. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  147. package/dist/collections/operations/findDistinct.js +96 -18
  148. package/dist/collections/operations/findDistinct.js.map +1 -1
  149. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  150. package/dist/collections/operations/restoreVersion.js +47 -13
  151. package/dist/collections/operations/restoreVersion.js.map +1 -1
  152. package/dist/collections/operations/update.d.ts.map +1 -1
  153. package/dist/collections/operations/update.js +118 -18
  154. package/dist/collections/operations/update.js.map +1 -1
  155. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  156. package/dist/collections/operations/updateByID.js +62 -2
  157. package/dist/collections/operations/updateByID.js.map +1 -1
  158. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  159. package/dist/collections/operations/utilities/update.js +71 -15
  160. package/dist/collections/operations/utilities/update.js.map +1 -1
  161. package/dist/config/orderable/index.d.ts.map +1 -1
  162. package/dist/config/orderable/index.js +67 -14
  163. package/dist/config/orderable/index.js.map +1 -1
  164. package/dist/config/sanitize.d.ts.map +1 -1
  165. package/dist/config/sanitize.js +1 -1
  166. package/dist/config/sanitize.js.map +1 -1
  167. package/dist/config/types.d.ts +13 -1
  168. package/dist/config/types.d.ts.map +1 -1
  169. package/dist/config/types.js.map +1 -1
  170. package/dist/database/getLocalizedPaths.d.ts +2 -1
  171. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  172. package/dist/database/getLocalizedPaths.js +12 -3
  173. package/dist/database/getLocalizedPaths.js.map +1 -1
  174. package/dist/database/isNestedRelationshipQuery.d.ts +9 -0
  175. package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
  176. package/dist/database/isNestedRelationshipQuery.js +14 -0
  177. package/dist/database/isNestedRelationshipQuery.js.map +1 -0
  178. package/dist/database/prefixWherePaths.d.ts +6 -0
  179. package/dist/database/prefixWherePaths.d.ts.map +1 -0
  180. package/dist/database/prefixWherePaths.js +19 -0
  181. package/dist/database/prefixWherePaths.js.map +1 -0
  182. package/dist/database/prefixWherePaths.spec.js +46 -0
  183. package/dist/database/prefixWherePaths.spec.js.map +1 -0
  184. package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -1
  185. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  186. package/dist/database/queryValidation/validateQueryPaths.js +4 -1
  187. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  188. package/dist/database/queryValidation/validateSearchParams.d.ts +2 -1
  189. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  190. package/dist/database/queryValidation/validateSearchParams.js +87 -4
  191. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  192. package/dist/database/types.d.ts +5 -0
  193. package/dist/database/types.d.ts.map +1 -1
  194. package/dist/database/types.js.map +1 -1
  195. package/dist/email/normalizeSendEmailOptions.js.map +1 -1
  196. package/dist/email/types.d.ts +4 -1
  197. package/dist/email/types.d.ts.map +1 -1
  198. package/dist/email/types.js.map +1 -1
  199. package/dist/exports/internal.d.ts +7 -0
  200. package/dist/exports/internal.d.ts.map +1 -1
  201. package/dist/exports/internal.js +7 -1
  202. package/dist/exports/internal.js.map +1 -1
  203. package/dist/exports/shared.d.ts +3 -0
  204. package/dist/exports/shared.d.ts.map +1 -1
  205. package/dist/exports/shared.js +3 -0
  206. package/dist/exports/shared.js.map +1 -1
  207. package/dist/fields/config/types.d.ts +7 -5
  208. package/dist/fields/config/types.d.ts.map +1 -1
  209. package/dist/fields/config/types.js.map +1 -1
  210. package/dist/fields/hooks/beforeChange/index.d.ts +7 -1
  211. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/index.js +4 -2
  213. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  214. package/dist/fields/hooks/beforeChange/index.spec.js +206 -0
  215. package/dist/fields/hooks/beforeChange/index.spec.js.map +1 -0
  216. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  217. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  218. package/dist/fields/hooks/beforeChange/promise.js +51 -9
  219. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  220. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  221. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeChange/traverseFields.js +3 -2
  223. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  224. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  225. package/dist/fields/hooks/beforeDuplicate/promise.js +4 -0
  226. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  227. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts +2 -1
  228. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts.map +1 -1
  229. package/dist/fields/hooks/beforeValidate/getFallbackValue.js +2 -2
  230. package/dist/fields/hooks/beforeValidate/getFallbackValue.js.map +1 -1
  231. package/dist/fields/hooks/beforeValidate/index.d.ts +6 -1
  232. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  233. package/dist/fields/hooks/beforeValidate/index.js +3 -1
  234. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  235. package/dist/fields/hooks/beforeValidate/index.spec.js +90 -0
  236. package/dist/fields/hooks/beforeValidate/index.spec.js.map +1 -0
  237. package/dist/fields/hooks/beforeValidate/promise.d.ts +6 -1
  238. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  239. package/dist/fields/hooks/beforeValidate/promise.js +23 -8
  240. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  241. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +6 -1
  242. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  243. package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
  244. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  245. package/dist/fields/validations.d.ts.map +1 -1
  246. package/dist/fields/validations.js +3 -1
  247. package/dist/fields/validations.js.map +1 -1
  248. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  249. package/dist/globals/operations/restoreVersion.js +45 -11
  250. package/dist/globals/operations/restoreVersion.js.map +1 -1
  251. package/dist/globals/operations/update.d.ts.map +1 -1
  252. package/dist/globals/operations/update.js +95 -16
  253. package/dist/globals/operations/update.js.map +1 -1
  254. package/dist/index.bundled.d.ts +102 -24
  255. package/dist/index.d.ts +3 -1
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +2 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/preferences/config.d.ts.map +1 -1
  260. package/dist/preferences/config.js +2 -1
  261. package/dist/preferences/config.js.map +1 -1
  262. package/dist/query-presets/access.d.ts.map +1 -1
  263. package/dist/query-presets/access.js +2 -1
  264. package/dist/query-presets/access.js.map +1 -1
  265. package/dist/queues/config/types/index.d.ts +2 -1
  266. package/dist/queues/config/types/index.d.ts.map +1 -1
  267. package/dist/queues/config/types/index.js.map +1 -1
  268. package/dist/uploads/assertClientUploadAccess.d.ts +7 -0
  269. package/dist/uploads/assertClientUploadAccess.d.ts.map +1 -0
  270. package/dist/uploads/assertClientUploadAccess.js +27 -0
  271. package/dist/uploads/assertClientUploadAccess.js.map +1 -0
  272. package/dist/uploads/assertClientUploadAllowed.d.ts +11 -0
  273. package/dist/uploads/assertClientUploadAllowed.d.ts.map +1 -0
  274. package/dist/uploads/assertClientUploadAllowed.js +46 -0
  275. package/dist/uploads/assertClientUploadAllowed.js.map +1 -0
  276. package/dist/uploads/assertClientUploadAllowed.spec.js +91 -0
  277. package/dist/uploads/assertClientUploadAllowed.spec.js.map +1 -0
  278. package/dist/uploads/checkFileRestrictions.d.ts +4 -1
  279. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  280. package/dist/uploads/checkFileRestrictions.js +66 -26
  281. package/dist/uploads/checkFileRestrictions.js.map +1 -1
  282. package/dist/uploads/clientUploadReceipt.d.ts +23 -0
  283. package/dist/uploads/clientUploadReceipt.d.ts.map +1 -0
  284. package/dist/uploads/clientUploadReceipt.js +55 -0
  285. package/dist/uploads/clientUploadReceipt.js.map +1 -0
  286. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  287. package/dist/uploads/deleteAssociatedFiles.js +33 -8
  288. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  289. package/dist/uploads/deleteAssociatedFiles.spec.js +124 -0
  290. package/dist/uploads/deleteAssociatedFiles.spec.js.map +1 -0
  291. package/dist/uploads/detectSvgFromXml.d.ts +1 -3
  292. package/dist/uploads/detectSvgFromXml.d.ts.map +1 -1
  293. package/dist/uploads/detectSvgFromXml.js +3 -40
  294. package/dist/uploads/detectSvgFromXml.js.map +1 -1
  295. package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
  296. package/dist/uploads/endpoints/getFile.js +5 -3
  297. package/dist/uploads/endpoints/getFile.js.map +1 -1
  298. package/dist/uploads/fetchAPI-multipart/handlers.d.ts +2 -2
  299. package/dist/uploads/fetchAPI-multipart/handlers.d.ts.map +1 -1
  300. package/dist/uploads/fetchAPI-multipart/handlers.js +18 -5
  301. package/dist/uploads/fetchAPI-multipart/handlers.js.map +1 -1
  302. package/dist/uploads/fetchAPI-multipart/index.d.ts.map +1 -1
  303. package/dist/uploads/fetchAPI-multipart/index.js +24 -2
  304. package/dist/uploads/fetchAPI-multipart/index.js.map +1 -1
  305. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +0 -6
  306. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  307. package/dist/uploads/fetchAPI-multipart/processMultipart.js +146 -126
  308. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  309. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js +663 -0
  310. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js.map +1 -0
  311. package/dist/uploads/generateFileData.d.ts +3 -1
  312. package/dist/uploads/generateFileData.d.ts.map +1 -1
  313. package/dist/uploads/generateFileData.js +29 -16
  314. package/dist/uploads/generateFileData.js.map +1 -1
  315. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  316. package/dist/uploads/getBaseFields.js +3 -1
  317. package/dist/uploads/getBaseFields.js.map +1 -1
  318. package/dist/uploads/getExternalFile.d.ts +1 -1
  319. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  320. package/dist/uploads/getExternalFile.js +60 -15
  321. package/dist/uploads/getExternalFile.js.map +1 -1
  322. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  323. package/dist/uploads/getFileTypeFallback.js +3 -1
  324. package/dist/uploads/getFileTypeFallback.js.map +1 -1
  325. package/dist/uploads/getFileTypeIdentity.d.ts +19 -0
  326. package/dist/uploads/getFileTypeIdentity.d.ts.map +1 -0
  327. package/dist/uploads/getFileTypeIdentity.js +34 -0
  328. package/dist/uploads/getFileTypeIdentity.js.map +1 -0
  329. package/dist/uploads/getFileTypeIdentity.spec.js +43 -0
  330. package/dist/uploads/getFileTypeIdentity.spec.js.map +1 -0
  331. package/dist/uploads/isProcessableImage.d.ts +2 -0
  332. package/dist/uploads/isProcessableImage.d.ts.map +1 -0
  333. package/dist/uploads/isProcessableImage.js +7 -0
  334. package/dist/uploads/isProcessableImage.js.map +1 -0
  335. package/dist/uploads/safeFetch.d.ts.map +1 -1
  336. package/dist/uploads/safeFetch.js +3 -2
  337. package/dist/uploads/safeFetch.js.map +1 -1
  338. package/dist/uploads/sanitizeUploadData.d.ts +26 -0
  339. package/dist/uploads/sanitizeUploadData.d.ts.map +1 -0
  340. package/dist/uploads/sanitizeUploadData.js +159 -0
  341. package/dist/uploads/sanitizeUploadData.js.map +1 -0
  342. package/dist/uploads/sanitizeUploadData.spec.js +255 -0
  343. package/dist/uploads/sanitizeUploadData.spec.js.map +1 -0
  344. package/dist/uploads/types.d.ts +11 -3
  345. package/dist/uploads/types.d.ts.map +1 -1
  346. package/dist/uploads/types.js.map +1 -1
  347. package/dist/uploads/uploadContentSecurityPolicy.d.ts +2 -0
  348. package/dist/uploads/uploadContentSecurityPolicy.d.ts.map +1 -0
  349. package/dist/uploads/uploadContentSecurityPolicy.js +3 -0
  350. package/dist/uploads/uploadContentSecurityPolicy.js.map +1 -0
  351. package/dist/uploads/validateISOBaseMediaFile.d.ts +4 -0
  352. package/dist/uploads/validateISOBaseMediaFile.d.ts.map +1 -0
  353. package/dist/uploads/validateISOBaseMediaFile.js +91 -0
  354. package/dist/uploads/validateISOBaseMediaFile.js.map +1 -0
  355. package/dist/uploads/validateISOBaseMediaFile.spec.js +130 -0
  356. package/dist/uploads/validateISOBaseMediaFile.spec.js.map +1 -0
  357. package/dist/uploads/validateSvg.d.ts +10 -4
  358. package/dist/uploads/validateSvg.d.ts.map +1 -1
  359. package/dist/uploads/validateSvg.js +280 -40
  360. package/dist/uploads/validateSvg.js.map +1 -1
  361. package/dist/uploads/validateSvg.spec.js +123 -0
  362. package/dist/uploads/validateSvg.spec.js.map +1 -0
  363. package/dist/uploads/validateUploadFilename.d.ts +3 -0
  364. package/dist/uploads/validateUploadFilename.d.ts.map +1 -0
  365. package/dist/uploads/validateUploadFilename.js +13 -0
  366. package/dist/uploads/validateUploadFilename.js.map +1 -0
  367. package/dist/uploads/validateUploadFilename.spec.js +24 -0
  368. package/dist/uploads/validateUploadFilename.spec.js.map +1 -0
  369. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  370. package/dist/utilities/addDataAndFileToRequest.js +28 -1
  371. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  372. package/dist/utilities/addDataAndFileToRequest.spec.js +158 -0
  373. package/dist/utilities/addDataAndFileToRequest.spec.js.map +1 -1
  374. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  375. package/dist/utilities/createPayloadRequest.js +2 -1
  376. package/dist/utilities/createPayloadRequest.js.map +1 -1
  377. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  378. package/dist/utilities/deepCopyObject.js +110 -19
  379. package/dist/utilities/deepCopyObject.js.map +1 -1
  380. package/dist/utilities/deepCopyObject.spec.js +216 -0
  381. package/dist/utilities/deepCopyObject.spec.js.map +1 -0
  382. package/dist/utilities/fieldPath.d.ts +13 -0
  383. package/dist/utilities/fieldPath.d.ts.map +1 -0
  384. package/dist/utilities/fieldPath.js +51 -0
  385. package/dist/utilities/fieldPath.js.map +1 -0
  386. package/dist/utilities/fieldPath.spec.js +155 -0
  387. package/dist/utilities/fieldPath.spec.js.map +1 -0
  388. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  389. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
  390. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  391. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  392. package/dist/utilities/getObjectDotNotation.js +7 -1
  393. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  394. package/dist/utilities/getObjectDotNotation.spec.js +33 -0
  395. package/dist/utilities/getObjectDotNotation.spec.js.map +1 -0
  396. package/dist/utilities/getSafeRedirect.spec.js +14 -0
  397. package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
  398. package/dist/utilities/getTopLevelFieldNames.d.ts +2 -0
  399. package/dist/utilities/getTopLevelFieldNames.d.ts.map +1 -0
  400. package/dist/utilities/getTopLevelFieldNames.js +3 -0
  401. package/dist/utilities/getTopLevelFieldNames.js.map +1 -0
  402. package/dist/utilities/getTopLevelFieldNames.spec.js +18 -0
  403. package/dist/utilities/getTopLevelFieldNames.spec.js.map +1 -0
  404. package/dist/utilities/handleEndpoints.js +1 -1
  405. package/dist/utilities/handleEndpoints.js.map +1 -1
  406. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  407. package/dist/utilities/parseParams/index.js +3 -1
  408. package/dist/utilities/parseParams/index.js.map +1 -1
  409. package/dist/utilities/parseParams/index.spec.js +8 -0
  410. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  411. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts +4 -0
  412. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts.map +1 -0
  413. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js +248 -0
  414. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -0
  415. package/dist/utilities/telemetry/featureInfo/types.d.ts +62 -0
  416. package/dist/utilities/telemetry/featureInfo/types.d.ts.map +1 -0
  417. package/dist/utilities/telemetry/featureInfo/types.js +3 -0
  418. package/dist/utilities/telemetry/featureInfo/types.js.map +1 -0
  419. package/dist/utilities/telemetry/getProjectContext.d.ts +14 -0
  420. package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
  421. package/dist/utilities/telemetry/getProjectContext.js +36 -0
  422. package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
  423. package/dist/utilities/telemetry/index.d.ts +7 -1
  424. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  425. package/dist/utilities/telemetry/index.js +22 -0
  426. package/dist/utilities/telemetry/index.js.map +1 -1
  427. package/dist/utilities/traverseFields.d.ts.map +1 -1
  428. package/dist/utilities/traverseFields.js +5 -14
  429. package/dist/utilities/traverseFields.js.map +1 -1
  430. package/dist/utilities/unflatten.d.ts.map +1 -1
  431. package/dist/utilities/unflatten.js +21 -9
  432. package/dist/utilities/unflatten.js.map +1 -1
  433. package/dist/utilities/unflatten.spec.js +38 -0
  434. package/dist/utilities/unflatten.spec.js.map +1 -0
  435. package/dist/versions/allLocalesPublicationStatus.d.ts +38 -0
  436. package/dist/versions/allLocalesPublicationStatus.d.ts.map +1 -0
  437. package/dist/versions/allLocalesPublicationStatus.js +57 -0
  438. package/dist/versions/allLocalesPublicationStatus.js.map +1 -0
  439. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  440. package/dist/versions/getLatestGlobalVersion.js +10 -2
  441. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  442. package/dist/versions/getRestoredStatusesToAuthorize.d.ts +9 -0
  443. package/dist/versions/getRestoredStatusesToAuthorize.d.ts.map +1 -0
  444. package/dist/versions/getRestoredStatusesToAuthorize.js +22 -0
  445. package/dist/versions/getRestoredStatusesToAuthorize.js.map +1 -0
  446. package/dist/versions/getRestoredStatusesToAuthorize.spec.js +50 -0
  447. package/dist/versions/getRestoredStatusesToAuthorize.spec.js.map +1 -0
  448. package/dist/versions/schedule/job.d.ts +2 -2
  449. package/dist/versions/schedule/job.d.ts.map +1 -1
  450. package/dist/versions/schedule/job.js +11 -7
  451. package/dist/versions/schedule/job.js.map +1 -1
  452. package/dist/versions/schedule/types.d.ts +5 -1
  453. package/dist/versions/schedule/types.d.ts.map +1 -1
  454. package/dist/versions/schedule/types.js.map +1 -1
  455. package/package.json +4 -2
  456. package/dist/auth/baseFields/apiKey.d.ts +0 -3
  457. package/dist/auth/baseFields/apiKey.d.ts.map +0 -1
  458. package/dist/auth/baseFields/apiKey.js +0 -59
  459. package/dist/auth/baseFields/apiKey.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utilities/parseParams/index.spec.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { describe, it, expect } from 'vitest'\nimport { parseParams, booleanParams, numberParams } from './index.js'\n\ndescribe('parseParams', () => {\n describe('boolean parameters', () => {\n booleanParams.forEach((param) => {\n describe(param, () => {\n it('should parse string \"true\" to boolean true', () => {\n const result = parseParams({ [param]: 'true' })\n expect(result[param]).toBe(true)\n })\n\n it('should parse string \"false\" to boolean false', () => {\n const result = parseParams({ [param]: 'false' })\n expect(result[param]).toBe(false)\n })\n\n it('should parse boolean true to boolean true', () => {\n const result = parseParams({ [param]: true })\n expect(result[param]).toBe(true)\n })\n\n it('should parse boolean false to boolean false', () => {\n const result = parseParams({ [param]: false })\n expect(result[param]).toBe(false)\n })\n\n it('should return undefined for truthy strings (not exact \"true\")', () => {\n const result = parseParams({ [param]: '1' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for falsy strings (not exact \"false\")', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBeUndefined()\n })\n })\n })\n })\n\n describe('number parameters', () => {\n numberParams.forEach((param) => {\n describe(param, () => {\n it('should parse valid number string to number', () => {\n const result = parseParams({ [param]: '42' })\n expect(result[param]).toBe(42)\n })\n\n it('should parse zero string to zero', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBe(0)\n })\n\n it('should parse negative number string to negative number', () => {\n const result = parseParams({ [param]: '-5' })\n expect(result[param]).toBe(-5)\n })\n\n it('should parse decimal number string to decimal number', () => {\n const result = parseParams({ [param]: '3.14' })\n expect(result[param]).toBe(3.14)\n })\n\n it('should not parse invalid number strings', () => {\n const result = parseParams({ [param]: 'not-a-number' })\n expect(result[param]).toBe('not-a-number') // remains as string\n })\n\n it('should not parse empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBe('') // remains as string\n })\n\n it('should handle already numeric values', () => {\n const result = parseParams({ [param]: 123 })\n expect(result[param]).toBe(123)\n })\n })\n })\n })\n\n describe('sort parameter', () => {\n it('should parse comma-separated string to array', () => {\n const result = parseParams({ sort: 'name,createdAt,-updatedAt' })\n expect(result.sort).toEqual(['name', 'createdAt', '-updatedAt'])\n })\n\n it('should parse single value string to array with one element', () => {\n const result = parseParams({ sort: 'name' })\n expect(result.sort).toEqual(['name'])\n })\n\n it('should handle empty string', () => {\n const result = parseParams({ sort: '' })\n expect(result.sort).toEqual([''])\n })\n\n it('should handle comma-separated string with spaces', () => {\n const result = parseParams({ sort: 'name, createdAt , -updatedAt' })\n expect(result.sort).toEqual(['name', ' createdAt ', ' -updatedAt'])\n })\n\n it('should parse array of strings', () => {\n const result = parseParams({ sort: ['name', '-createdAt'] })\n expect(result.sort).toEqual(['name', '-createdAt'])\n })\n\n it('should return undefined for non-string sort values', () => {\n const result = parseParams({ sort: 123 as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should return undefined for array with non-string sort values', () => {\n const result = parseParams({ sort: ['name', 123] as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should handle qs-esm array sort parsing', () => {\n const query = qs.stringify({ sort: ['title', '-createdAt'] })\n const parsed = qs.parse(query)\n const result = parseParams(parsed)\n expect(result.sort).toEqual(['title', '-createdAt'])\n })\n\n it('should return undefined for null sort values', () => {\n const result = parseParams({ sort: null as any })\n expect(result.sort).toBeUndefined()\n })\n })\n\n describe('data parameter', () => {\n it('should parse valid JSON string', () => {\n const data = { name: 'test', value: 42 }\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should parse empty object JSON string', () => {\n const result = parseParams({ data: '{}' })\n expect(result.data).toEqual({})\n })\n\n it('should parse array JSON string', () => {\n const data = [1, 2, 3]\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should not process empty string', () => {\n const result = parseParams({ data: '' })\n expect(result.data).toBe('') // empty string is not processed, remains as string\n })\n\n it('should throw error for invalid JSON', () => {\n expect(() => {\n parseParams({ data: 'invalid-json' })\n }).toThrow()\n })\n\n it('should not process non-string data values', () => {\n const result = parseParams({ data: { already: 'parsed' } as any })\n expect(result.data).toEqual({ already: 'parsed' })\n })\n })\n\n describe('special parameters', () => {\n it('should handle populate parameter', () => {\n const result = parseParams({ populate: 'field1,field2' })\n expect(result).toHaveProperty('populate')\n // Note: actual sanitization logic is tested in sanitizePopulateParam tests\n })\n\n it('should handle select parameter', () => {\n const result = parseParams({ select: 'field1,field2' })\n expect(result).toHaveProperty('select')\n // Note: actual sanitization logic is tested in sanitizeSelectParam tests\n })\n\n it('should handle joins parameter', () => {\n const joins = { collection: 'posts' }\n const result = parseParams({ joins })\n expect(result).toHaveProperty('joins')\n // Note: actual sanitization logic is tested in sanitizeJoinParams tests\n })\n })\n\n describe('selectedLocales parameter', () => {\n it('should pass through selectedLocales as-is', () => {\n const selectedLocales = 'en,es,fr'\n const result = parseParams({ selectedLocales })\n expect(result.selectedLocales).toBe(selectedLocales)\n })\n })\n\n describe('publishSpecificLocale parameter', () => {\n it('should pass through publishSpecificLocale as-is', () => {\n const publishSpecificLocale = 'en'\n const result = parseParams({ publishSpecificLocale })\n expect(result.publishSpecificLocale).toBe(publishSpecificLocale)\n })\n })\n\n describe('field parameter', () => {\n it('should pass through field as-is', () => {\n const field = 'myField'\n const result = parseParams({ field })\n expect(result.field).toBe(field)\n })\n })\n\n describe('where parameter', () => {\n it('should pass through where as-is', () => {\n const where = { name: { equals: 'test' } }\n const result = parseParams({ where })\n expect(result.where).toBe(where)\n })\n\n it('should parse where when it is a JSON string', () => {\n const where = { read: { equals: false } }\n const result = parseParams({ where: JSON.stringify(where) })\n expect(result.where).toEqual(where)\n })\n\n it('should not process empty string where', () => {\n const result = parseParams({ where: '' })\n expect(result.where).toBe('')\n })\n\n it('should throw error for invalid JSON where', () => {\n expect(() => {\n parseParams({ where: 'invalid-json' })\n }).toThrow()\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty params object', () => {\n const result = parseParams({})\n expect(result).toEqual({})\n })\n\n it('should throw error for null params (current implementation bug)', () => {\n expect(() => {\n parseParams(null as any)\n }).toThrow(TypeError)\n })\n\n it('should throw error for undefined params (current implementation bug)', () => {\n expect(() => {\n parseParams(undefined as any)\n }).toThrow(TypeError)\n })\n\n it('should preserve unknown parameters', () => {\n const result = parseParams({ customParam: 'customValue' })\n expect(result.customParam).toBe('customValue')\n })\n\n it('should handle mixed parameter types', () => {\n const result = parseParams({\n draft: 'true',\n depth: '5',\n sort: 'name,createdAt',\n data: '{\"test\": true}',\n customParam: 'custom',\n })\n\n expect(result.draft).toBe(true)\n expect(result.depth).toBe(5)\n expect(result.sort).toEqual(['name', 'createdAt'])\n expect(result.data).toEqual({ test: true })\n expect(result.customParam).toBe('custom')\n })\n })\n\n describe('parameter preservation', () => {\n it('should not modify parameters that are not in known lists', () => {\n const params = {\n unknownBoolean: 'true',\n unknownNumber: '42',\n unknownString: 'test',\n }\n const result = parseParams(params)\n\n expect(result.unknownBoolean).toBe('true') // should remain string\n expect(result.unknownNumber).toBe('42') // should remain string\n expect(result.unknownString).toBe('test')\n })\n\n it('should only process parameters that exist in the input', () => {\n const result = parseParams({ draft: 'true' })\n\n expect(result.draft).toBe(true)\n expect(result).not.toHaveProperty('autosave')\n expect(result).not.toHaveProperty('depth')\n expect(result).not.toHaveProperty('sort')\n })\n })\n})\n"],"names":["qs","describe","it","expect","parseParams","booleanParams","numberParams","forEach","param","result","toBe","toBeUndefined","sort","toEqual","query","stringify","parsed","parse","data","name","value","JSON","toThrow","already","populate","toHaveProperty","select","joins","collection","selectedLocales","publishSpecificLocale","field","where","equals","read","TypeError","undefined","customParam","draft","depth","test","params","unknownBoolean","unknownNumber","unknownString","not"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utilities/parseParams/index.spec.ts"],"sourcesContent":["import * as qs from 'qs-esm'\nimport { describe, it, expect } from 'vitest'\nimport { parseParams, booleanParams, numberParams } from './index.js'\n\ndescribe('parseParams', () => {\n describe('boolean parameters', () => {\n it('should parse disabled all-locale publication flags as false', () => {\n const result = parseParams({\n publishAllLocales: 'false',\n unpublishAllLocales: 'false',\n })\n\n expect(result.publishAllLocales).toBe(false)\n expect(result.unpublishAllLocales).toBe(false)\n })\n\n booleanParams.forEach((param) => {\n describe(param, () => {\n it('should parse string \"true\" to boolean true', () => {\n const result = parseParams({ [param]: 'true' })\n expect(result[param]).toBe(true)\n })\n\n it('should parse string \"false\" to boolean false', () => {\n const result = parseParams({ [param]: 'false' })\n expect(result[param]).toBe(false)\n })\n\n it('should parse boolean true to boolean true', () => {\n const result = parseParams({ [param]: true })\n expect(result[param]).toBe(true)\n })\n\n it('should parse boolean false to boolean false', () => {\n const result = parseParams({ [param]: false })\n expect(result[param]).toBe(false)\n })\n\n it('should return undefined for truthy strings (not exact \"true\")', () => {\n const result = parseParams({ [param]: '1' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for falsy strings (not exact \"false\")', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBeUndefined()\n })\n\n it('should return undefined for empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBeUndefined()\n })\n })\n })\n })\n\n describe('number parameters', () => {\n numberParams.forEach((param) => {\n describe(param, () => {\n it('should parse valid number string to number', () => {\n const result = parseParams({ [param]: '42' })\n expect(result[param]).toBe(42)\n })\n\n it('should parse zero string to zero', () => {\n const result = parseParams({ [param]: '0' })\n expect(result[param]).toBe(0)\n })\n\n it('should parse negative number string to negative number', () => {\n const result = parseParams({ [param]: '-5' })\n expect(result[param]).toBe(-5)\n })\n\n it('should parse decimal number string to decimal number', () => {\n const result = parseParams({ [param]: '3.14' })\n expect(result[param]).toBe(3.14)\n })\n\n it('should not parse invalid number strings', () => {\n const result = parseParams({ [param]: 'not-a-number' })\n expect(result[param]).toBe('not-a-number') // remains as string\n })\n\n it('should not parse empty string', () => {\n const result = parseParams({ [param]: '' })\n expect(result[param]).toBe('') // remains as string\n })\n\n it('should handle already numeric values', () => {\n const result = parseParams({ [param]: 123 })\n expect(result[param]).toBe(123)\n })\n })\n })\n })\n\n describe('sort parameter', () => {\n it('should parse comma-separated string to array', () => {\n const result = parseParams({ sort: 'name,createdAt,-updatedAt' })\n expect(result.sort).toEqual(['name', 'createdAt', '-updatedAt'])\n })\n\n it('should parse single value string to array with one element', () => {\n const result = parseParams({ sort: 'name' })\n expect(result.sort).toEqual(['name'])\n })\n\n it('should handle empty string', () => {\n const result = parseParams({ sort: '' })\n expect(result.sort).toEqual([''])\n })\n\n it('should handle comma-separated string with spaces', () => {\n const result = parseParams({ sort: 'name, createdAt , -updatedAt' })\n expect(result.sort).toEqual(['name', ' createdAt ', ' -updatedAt'])\n })\n\n it('should parse array of strings', () => {\n const result = parseParams({ sort: ['name', '-createdAt'] })\n expect(result.sort).toEqual(['name', '-createdAt'])\n })\n\n it('should return undefined for non-string sort values', () => {\n const result = parseParams({ sort: 123 as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should return undefined for array with non-string sort values', () => {\n const result = parseParams({ sort: ['name', 123] as any })\n expect(result.sort).toBeUndefined()\n })\n\n it('should handle qs-esm array sort parsing', () => {\n const query = qs.stringify({ sort: ['title', '-createdAt'] })\n const parsed = qs.parse(query)\n const result = parseParams(parsed)\n expect(result.sort).toEqual(['title', '-createdAt'])\n })\n\n it('should return undefined for null sort values', () => {\n const result = parseParams({ sort: null as any })\n expect(result.sort).toBeUndefined()\n })\n })\n\n describe('data parameter', () => {\n it('should parse valid JSON string', () => {\n const data = { name: 'test', value: 42 }\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should parse empty object JSON string', () => {\n const result = parseParams({ data: '{}' })\n expect(result.data).toEqual({})\n })\n\n it('should parse array JSON string', () => {\n const data = [1, 2, 3]\n const result = parseParams({ data: JSON.stringify(data) })\n expect(result.data).toEqual(data)\n })\n\n it('should not process empty string', () => {\n const result = parseParams({ data: '' })\n expect(result.data).toBe('') // empty string is not processed, remains as string\n })\n\n it('should throw error for invalid JSON', () => {\n expect(() => {\n parseParams({ data: 'invalid-json' })\n }).toThrow()\n })\n\n it('should not process non-string data values', () => {\n const result = parseParams({ data: { already: 'parsed' } as any })\n expect(result.data).toEqual({ already: 'parsed' })\n })\n })\n\n describe('special parameters', () => {\n it('should handle populate parameter', () => {\n const result = parseParams({ populate: 'field1,field2' })\n expect(result).toHaveProperty('populate')\n // Note: actual sanitization logic is tested in sanitizePopulateParam tests\n })\n\n it('should handle select parameter', () => {\n const result = parseParams({ select: 'field1,field2' })\n expect(result).toHaveProperty('select')\n // Note: actual sanitization logic is tested in sanitizeSelectParam tests\n })\n\n it('should handle joins parameter', () => {\n const joins = { collection: 'posts' }\n const result = parseParams({ joins })\n expect(result).toHaveProperty('joins')\n // Note: actual sanitization logic is tested in sanitizeJoinParams tests\n })\n })\n\n describe('selectedLocales parameter', () => {\n it('should pass through selectedLocales as-is', () => {\n const selectedLocales = 'en,es,fr'\n const result = parseParams({ selectedLocales })\n expect(result.selectedLocales).toBe(selectedLocales)\n })\n })\n\n describe('publishSpecificLocale parameter', () => {\n it('should pass through publishSpecificLocale as-is', () => {\n const publishSpecificLocale = 'en'\n const result = parseParams({ publishSpecificLocale })\n expect(result.publishSpecificLocale).toBe(publishSpecificLocale)\n })\n })\n\n describe('field parameter', () => {\n it('should pass through field as-is', () => {\n const field = 'myField'\n const result = parseParams({ field })\n expect(result.field).toBe(field)\n })\n })\n\n describe('where parameter', () => {\n it('should pass through where as-is', () => {\n const where = { name: { equals: 'test' } }\n const result = parseParams({ where })\n expect(result.where).toBe(where)\n })\n\n it('should parse where when it is a JSON string', () => {\n const where = { read: { equals: false } }\n const result = parseParams({ where: JSON.stringify(where) })\n expect(result.where).toEqual(where)\n })\n\n it('should not process empty string where', () => {\n const result = parseParams({ where: '' })\n expect(result.where).toBe('')\n })\n\n it('should throw error for invalid JSON where', () => {\n expect(() => {\n parseParams({ where: 'invalid-json' })\n }).toThrow()\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty params object', () => {\n const result = parseParams({})\n expect(result).toEqual({})\n })\n\n it('should throw error for null params (current implementation bug)', () => {\n expect(() => {\n parseParams(null as any)\n }).toThrow(TypeError)\n })\n\n it('should throw error for undefined params (current implementation bug)', () => {\n expect(() => {\n parseParams(undefined as any)\n }).toThrow(TypeError)\n })\n\n it('should preserve unknown parameters', () => {\n const result = parseParams({ customParam: 'customValue' })\n expect(result.customParam).toBe('customValue')\n })\n\n it('should handle mixed parameter types', () => {\n const result = parseParams({\n draft: 'true',\n depth: '5',\n sort: 'name,createdAt',\n data: '{\"test\": true}',\n customParam: 'custom',\n })\n\n expect(result.draft).toBe(true)\n expect(result.depth).toBe(5)\n expect(result.sort).toEqual(['name', 'createdAt'])\n expect(result.data).toEqual({ test: true })\n expect(result.customParam).toBe('custom')\n })\n })\n\n describe('parameter preservation', () => {\n it('should not modify parameters that are not in known lists', () => {\n const params = {\n unknownBoolean: 'true',\n unknownNumber: '42',\n unknownString: 'test',\n }\n const result = parseParams(params)\n\n expect(result.unknownBoolean).toBe('true') // should remain string\n expect(result.unknownNumber).toBe('42') // should remain string\n expect(result.unknownString).toBe('test')\n })\n\n it('should only process parameters that exist in the input', () => {\n const result = parseParams({ draft: 'true' })\n\n expect(result.draft).toBe(true)\n expect(result).not.toHaveProperty('autosave')\n expect(result).not.toHaveProperty('depth')\n expect(result).not.toHaveProperty('sort')\n })\n })\n})\n"],"names":["qs","describe","it","expect","parseParams","booleanParams","numberParams","result","publishAllLocales","unpublishAllLocales","toBe","forEach","param","toBeUndefined","sort","toEqual","query","stringify","parsed","parse","data","name","value","JSON","toThrow","already","populate","toHaveProperty","select","joins","collection","selectedLocales","publishSpecificLocale","field","where","equals","read","TypeError","undefined","customParam","draft","depth","test","params","unknownBoolean","unknownNumber","unknownString","not"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SanitizedConfig } from '../../../config/types.js';
2
+ import type { FeatureInfo } from './types.js';
3
+ export declare const getFeatureInfo: (config: SanitizedConfig) => FeatureInfo;
4
+ //# sourceMappingURL=getFeatureInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeatureInfo.d.ts","sourceRoot":"","sources":["../../../../src/utilities/telemetry/featureInfo/getFeatureInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAA;AAI9D,eAAO,MAAM,cAAc,WAAY,eAAe,KAAG,WAoBxD,CAAA"}
@@ -0,0 +1,248 @@
1
+ import { defaultUserCollection } from '../../../auth/defaultUser.js';
2
+ export const getFeatureInfo = (config)=>{
3
+ const telemetryConfig = sanitizeTelemetryConfig(config);
4
+ return Object.assign({}, ...[
5
+ collectAdminCustomization,
6
+ collectAuthentication,
7
+ collectBasicDenominators,
8
+ collectI18n,
9
+ collectJobsAndQueues,
10
+ collectOrdering,
11
+ collectPreviewAndLivePreview,
12
+ collectQueryPresets,
13
+ collectTrash,
14
+ collectUploadAndMedia,
15
+ collectVersionsAndDrafts,
16
+ collectRichTextFeatures
17
+ ].map((collect)=>safelyCollect(()=>collect(telemetryConfig))));
18
+ };
19
+ const safelyCollect = (collect)=>{
20
+ try {
21
+ return collect();
22
+ } catch (_) {
23
+ return {};
24
+ }
25
+ };
26
+ // sanitization adds 3 system widgets that we need to account for
27
+ const SYSTEM_WIDGET_COUNT = 3;
28
+ const SYSTEM_COLLECTION_SLUGS = [
29
+ 'payload-locked-documents',
30
+ 'payload-migrations',
31
+ 'payload-preferences',
32
+ 'payload-query-presets'
33
+ ];
34
+ const SYSTEM_GLOBAL_SLUGS = new Set([
35
+ 'payload-jobs-stats'
36
+ ]);
37
+ /**
38
+ * Payload adds internal collections, globals and tasks during config sanitization.
39
+ * Remove them from the telemetry view so feature metrics represent user config.
40
+ */ const sanitizeTelemetryConfig = (config)=>{
41
+ try {
42
+ const collections = config.collections ?? [];
43
+ const systemCollectionSlugs = new Set(SYSTEM_COLLECTION_SLUGS);
44
+ const kvCollectionSlug = config.kv?.kvCollection?.slug;
45
+ if (kvCollectionSlug) {
46
+ systemCollectionSlugs.add(kvCollectionSlug);
47
+ }
48
+ if (config.jobs?.enabled) {
49
+ // uses SYSTEM_COLLECTION_SLUGS (not the Set) to exclude kv slug from position detection
50
+ const firstCollectionAfterJobs = collections.findIndex(({ slug })=>SYSTEM_COLLECTION_SLUGS.includes(slug));
51
+ if (firstCollectionAfterJobs > 0) {
52
+ systemCollectionSlugs.add(collections[firstCollectionAfterJobs - 1].slug);
53
+ } else {
54
+ systemCollectionSlugs.add('payload-jobs');
55
+ }
56
+ }
57
+ const tasks = [
58
+ ...config.jobs?.tasks ?? []
59
+ ];
60
+ if (getDraftEntities(config).some(hasScheduledPublishing)) {
61
+ for(let index = tasks.length - 1; index >= 0; index--){
62
+ if (tasks[index]?.slug === 'schedulePublish') {
63
+ tasks.splice(index, 1);
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ return {
69
+ ...config,
70
+ collections: collections.filter((collection)=>collection !== defaultUserCollection && !systemCollectionSlugs.has(collection.slug)),
71
+ globals: (config.globals ?? []).filter(({ slug })=>!SYSTEM_GLOBAL_SLUGS.has(slug)),
72
+ jobs: {
73
+ ...config.jobs,
74
+ tasks
75
+ }
76
+ };
77
+ } catch (_) {
78
+ return config;
79
+ }
80
+ };
81
+ const collectAdminCustomization = (config)=>({
82
+ adminCustomization: {
83
+ customAdminComponentCount: countRootAdminComponents(config),
84
+ customAdminViewCount: Object.keys(config.admin?.components?.views ?? {}).length,
85
+ customDashboardWidgetCount: Math.max(0, (config.admin?.dashboard?.widgets?.length ?? 0) - SYSTEM_WIDGET_COUNT)
86
+ }
87
+ });
88
+ const collectAuthentication = (config)=>{
89
+ const authCollections = (config.collections ?? []).filter(({ auth })=>Boolean(auth));
90
+ return {
91
+ authentication: {
92
+ apiKeyCollectionCount: authCollections.filter(({ auth })=>isObject(auth) && Boolean(auth.useAPIKey)).length,
93
+ authCollectionCount: authCollections.length,
94
+ customAuthStrategyCount: authCollections.reduce((count, { auth })=>count + (isObject(auth) && Array.isArray(auth.strategies) ? auth.strategies.length : 0), 0),
95
+ localAuthDisabledCollectionCount: authCollections.filter(({ auth })=>isObject(auth) && Boolean(auth.disableLocalStrategy)).length,
96
+ sessionsDisabledCollectionCount: authCollections.filter(({ auth })=>isObject(auth) && auth.useSessions === false).length,
97
+ usernameCollectionCount: authCollections.filter(({ auth })=>isObject(auth) && Boolean(auth.loginWithUsername)).length,
98
+ verifiedCollectionCount: authCollections.filter(({ auth })=>isObject(auth) && Boolean(auth.verify)).length
99
+ }
100
+ };
101
+ };
102
+ const collectBasicDenominators = (config)=>({
103
+ basicDenominators: {
104
+ collectionCount: config.collections?.length ?? 0,
105
+ globalCount: config.globals?.length ?? 0
106
+ }
107
+ });
108
+ const collectI18n = (config)=>({
109
+ i18n: {
110
+ hasCustomAdminTranslations: Object.keys(config.i18n?.translations ?? {}).length > 0,
111
+ supportedAdminLanguageCount: config.i18n?.supportedLanguages ? Object.keys(config.i18n.supportedLanguages).length : 1
112
+ }
113
+ });
114
+ const collectJobsAndQueues = (config)=>{
115
+ const tasks = Array.isArray(config.jobs?.tasks) ? config.jobs.tasks : [];
116
+ const workflows = Array.isArray(config.jobs?.workflows) ? config.jobs.workflows : [];
117
+ const tasksAndWorkflows = [
118
+ ...tasks,
119
+ ...workflows
120
+ ];
121
+ const scheduledPublishingEntityCount = getDraftEntities(config).filter(hasScheduledPublishing).length;
122
+ return {
123
+ jobsAndQueues: {
124
+ jobsAutoRunConfigured: config.jobs?.autoRun !== undefined,
125
+ jobsConcurrencyEnabled: tasksAndWorkflows.some(({ concurrency })=>Boolean(concurrency)),
126
+ jobsEnabled: tasks.length > 0 || workflows.length > 0 || scheduledPublishingEntityCount > 0,
127
+ jobsSchedulingEnabled: tasksAndWorkflows.some(({ schedule })=>Boolean(schedule)),
128
+ taskCount: tasks.length,
129
+ workflowCount: workflows.length
130
+ }
131
+ };
132
+ };
133
+ const collectOrdering = (config)=>({
134
+ orderableCollectionCount: (config.collections ?? []).filter(({ orderable })=>Boolean(orderable)).length
135
+ });
136
+ const collectPreviewAndLivePreview = (config)=>{
137
+ const collections = config.collections ?? [];
138
+ const globals = config.globals ?? [];
139
+ const livePreviewCollections = new Set([
140
+ ...config.admin?.livePreview?.collections ?? [],
141
+ ...collections.filter((c)=>c.admin?.livePreview).map((c)=>c.slug)
142
+ ]);
143
+ const livePreviewGlobals = new Set([
144
+ ...config.admin?.livePreview?.globals ?? [],
145
+ ...globals.filter((g)=>g.admin?.livePreview).map((g)=>g.slug)
146
+ ]);
147
+ return {
148
+ previewAndLivePreview: {
149
+ livePreviewCollectionCount: collections.filter(({ slug })=>livePreviewCollections.has(slug)).length,
150
+ livePreviewGlobalCount: globals.filter(({ slug })=>livePreviewGlobals.has(slug)).length,
151
+ previewCollectionCount: collections.filter(({ admin })=>Boolean(admin?.preview)).length,
152
+ previewGlobalCount: globals.filter(({ admin })=>Boolean(admin?.preview)).length
153
+ }
154
+ };
155
+ };
156
+ const collectQueryPresets = (config)=>({
157
+ queryPresetCollectionCount: (config.collections ?? []).filter(({ enableQueryPresets })=>Boolean(enableQueryPresets)).length
158
+ });
159
+ const collectRichTextFeatures = (config)=>{
160
+ const editor = config.editor;
161
+ const features = isObject(editor) && isObject(editor.editorConfig) ? editor.editorConfig.features : undefined;
162
+ const raw = isObject(features) && Array.isArray(features.enabledFeatures) ? features.enabledFeatures : [];
163
+ const featureSet = new Set(raw.filter((f)=>typeof f === 'string'));
164
+ // per-field editor overrides are not checked; root editor covers the vast majority of projects
165
+ return {
166
+ richTextFeatures: [
167
+ 'blocks',
168
+ 'table',
169
+ 'upload',
170
+ 'relationship'
171
+ ].filter((f)=>featureSet.has(f))
172
+ };
173
+ };
174
+ const collectTrash = (config)=>({
175
+ trashCollectionCount: (config.collections ?? []).filter(({ trash })=>Boolean(trash)).length
176
+ });
177
+ const collectUploadAndMedia = (config)=>{
178
+ const collections = config.collections ?? [];
179
+ return {
180
+ uploadAndMedia: {
181
+ cropDisabledCollectionCount: collections.filter(({ upload })=>isObject(upload) && upload.crop === false).length,
182
+ focalPointDisabledCollectionCount: collections.filter(({ upload })=>isObject(upload) && upload.focalPoint === false).length,
183
+ imageSizesCollectionCount: collections.filter(({ upload })=>isObject(upload) && Boolean(upload.imageSizes?.length)).length,
184
+ mimeRestrictedCollectionCount: collections.filter(({ upload })=>isObject(upload) && Boolean(upload.mimeTypes?.length)).length,
185
+ uploadCollectionCount: collections.filter(({ upload })=>Boolean(upload)).length
186
+ }
187
+ };
188
+ };
189
+ const collectVersionsAndDrafts = (config)=>{
190
+ const collections = config.collections ?? [];
191
+ const globals = config.globals ?? [];
192
+ const draftCollections = collections.filter(hasDrafts);
193
+ const draftGlobals = globals.filter(hasDrafts);
194
+ const draftEntities = [
195
+ ...draftCollections,
196
+ ...draftGlobals
197
+ ];
198
+ return {
199
+ versionsAndDrafts: {
200
+ autosaveEntityCount: draftEntities.filter(hasAutosave).length,
201
+ draftCollectionCount: draftCollections.length,
202
+ draftGlobalCount: draftGlobals.length,
203
+ scheduledPublishingEntityCount: draftEntities.filter(hasScheduledPublishing).length,
204
+ versionsDisabledCollectionCount: collections.filter(({ versions })=>!versions).length,
205
+ versionsDisabledGlobalCount: globals.filter(({ versions })=>!versions).length
206
+ }
207
+ };
208
+ };
209
+ const getDraftEntities = (config)=>[
210
+ ...(config.collections ?? []).filter(hasDrafts),
211
+ ...(config.globals ?? []).filter(hasDrafts)
212
+ ];
213
+ const hasDrafts = ({ versions })=>isObject(versions) && Boolean(versions.drafts);
214
+ const getDraftOptions = ({ versions })=>isObject(versions) && isObject(versions.drafts) ? versions.drafts : undefined;
215
+ const hasAutosave = (entity)=>Boolean(getDraftOptions(entity)?.autosave);
216
+ const hasScheduledPublishing = (entity)=>Boolean(getDraftOptions(entity)?.schedulePublish);
217
+ const countRootAdminComponents = (config)=>{
218
+ const admin = config.admin;
219
+ const customAvatarCount = Number(Boolean(admin?.avatar && typeof admin.avatar === 'object' && admin.avatar.Component));
220
+ const components = admin?.components;
221
+ if (!components) {
222
+ return customAvatarCount;
223
+ }
224
+ const componentArrays = [
225
+ components.actions,
226
+ components.afterDashboard,
227
+ components.afterLogin,
228
+ components.afterNav,
229
+ components.afterNavLinks,
230
+ components.beforeDashboard,
231
+ components.beforeLogin,
232
+ components.beforeNav,
233
+ components.beforeNavLinks,
234
+ components.header,
235
+ components.providers,
236
+ components.settingsMenu
237
+ ];
238
+ const directComponents = [
239
+ components.graphics?.Icon,
240
+ components.graphics?.Logo,
241
+ components.logout?.Button,
242
+ components.Nav
243
+ ];
244
+ return customAvatarCount + componentArrays.reduce((count, items)=>count + (items?.length ?? 0), 0) + directComponents.filter(Boolean).length;
245
+ };
246
+ const isObject = (value)=>value !== null && typeof value === 'object';
247
+
248
+ //# sourceMappingURL=getFeatureInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utilities/telemetry/featureInfo/getFeatureInfo.ts"],"sourcesContent":["import type { SanitizedConfig } from '../../../config/types.js'\nimport type { IncomingDrafts } from '../../../versions/types.js'\nimport type { FeatureInfo, RichTextFeature } from './types.js'\n\nimport { defaultUserCollection } from '../../../auth/defaultUser.js'\n\nexport const getFeatureInfo = (config: SanitizedConfig): FeatureInfo => {\n const telemetryConfig = sanitizeTelemetryConfig(config)\n\n return Object.assign(\n {},\n ...[\n collectAdminCustomization,\n collectAuthentication,\n collectBasicDenominators,\n collectI18n,\n collectJobsAndQueues,\n collectOrdering,\n collectPreviewAndLivePreview,\n collectQueryPresets,\n collectTrash,\n collectUploadAndMedia,\n collectVersionsAndDrafts,\n collectRichTextFeatures,\n ].map((collect) => safelyCollect(() => collect(telemetryConfig))),\n )\n}\n\nconst safelyCollect = (collect: () => FeatureInfo): FeatureInfo => {\n try {\n return collect()\n } catch (_) {\n return {}\n }\n}\n\n// sanitization adds 3 system widgets that we need to account for\nconst SYSTEM_WIDGET_COUNT = 3\nconst SYSTEM_COLLECTION_SLUGS = [\n 'payload-locked-documents',\n 'payload-migrations',\n 'payload-preferences',\n 'payload-query-presets',\n]\nconst SYSTEM_GLOBAL_SLUGS = new Set(['payload-jobs-stats'])\n\n/**\n * Payload adds internal collections, globals and tasks during config sanitization.\n * Remove them from the telemetry view so feature metrics represent user config.\n */\nconst sanitizeTelemetryConfig = (config: SanitizedConfig): SanitizedConfig => {\n try {\n const collections = config.collections ?? []\n const systemCollectionSlugs = new Set(SYSTEM_COLLECTION_SLUGS)\n const kvCollectionSlug = config.kv?.kvCollection?.slug\n\n if (kvCollectionSlug) {\n systemCollectionSlugs.add(kvCollectionSlug)\n }\n\n if (config.jobs?.enabled) {\n // uses SYSTEM_COLLECTION_SLUGS (not the Set) to exclude kv slug from position detection\n const firstCollectionAfterJobs = collections.findIndex(({ slug }) =>\n SYSTEM_COLLECTION_SLUGS.includes(slug),\n )\n\n if (firstCollectionAfterJobs > 0) {\n systemCollectionSlugs.add(collections[firstCollectionAfterJobs - 1]!.slug)\n } else {\n systemCollectionSlugs.add('payload-jobs')\n }\n }\n\n const tasks = [...(config.jobs?.tasks ?? [])]\n\n if (getDraftEntities(config).some(hasScheduledPublishing)) {\n for (let index = tasks.length - 1; index >= 0; index--) {\n if (tasks[index]?.slug === 'schedulePublish') {\n tasks.splice(index, 1)\n break\n }\n }\n }\n\n return {\n ...config,\n collections: collections.filter(\n (collection) =>\n collection !== defaultUserCollection && !systemCollectionSlugs.has(collection.slug),\n ),\n globals: (config.globals ?? []).filter(({ slug }) => !SYSTEM_GLOBAL_SLUGS.has(slug)),\n jobs: {\n ...config.jobs,\n tasks,\n },\n }\n } catch (_) {\n return config\n }\n}\n\nconst collectAdminCustomization = (config: SanitizedConfig): FeatureInfo => ({\n adminCustomization: {\n customAdminComponentCount: countRootAdminComponents(config),\n customAdminViewCount: Object.keys(config.admin?.components?.views ?? {}).length,\n customDashboardWidgetCount: Math.max(\n 0,\n (config.admin?.dashboard?.widgets?.length ?? 0) - SYSTEM_WIDGET_COUNT,\n ),\n },\n})\n\nconst collectAuthentication = (config: SanitizedConfig): FeatureInfo => {\n const authCollections = (config.collections ?? []).filter(({ auth }) => Boolean(auth))\n\n return {\n authentication: {\n apiKeyCollectionCount: authCollections.filter(\n ({ auth }) => isObject(auth) && Boolean(auth.useAPIKey),\n ).length,\n authCollectionCount: authCollections.length,\n customAuthStrategyCount: authCollections.reduce(\n (count, { auth }) =>\n count + (isObject(auth) && Array.isArray(auth.strategies) ? auth.strategies.length : 0),\n 0,\n ),\n localAuthDisabledCollectionCount: authCollections.filter(\n ({ auth }) => isObject(auth) && Boolean(auth.disableLocalStrategy),\n ).length,\n sessionsDisabledCollectionCount: authCollections.filter(\n ({ auth }) => isObject(auth) && auth.useSessions === false,\n ).length,\n usernameCollectionCount: authCollections.filter(\n ({ auth }) => isObject(auth) && Boolean(auth.loginWithUsername),\n ).length,\n verifiedCollectionCount: authCollections.filter(\n ({ auth }) => isObject(auth) && Boolean(auth.verify),\n ).length,\n },\n }\n}\n\nconst collectBasicDenominators = (config: SanitizedConfig): FeatureInfo => ({\n basicDenominators: {\n collectionCount: config.collections?.length ?? 0,\n globalCount: config.globals?.length ?? 0,\n },\n})\n\nconst collectI18n = (config: SanitizedConfig): FeatureInfo => ({\n i18n: {\n hasCustomAdminTranslations: Object.keys(config.i18n?.translations ?? {}).length > 0,\n supportedAdminLanguageCount: config.i18n?.supportedLanguages\n ? Object.keys(config.i18n.supportedLanguages).length\n : 1,\n },\n})\n\nconst collectJobsAndQueues = (config: SanitizedConfig): FeatureInfo => {\n const tasks = Array.isArray(config.jobs?.tasks) ? config.jobs.tasks : []\n const workflows = Array.isArray(config.jobs?.workflows) ? config.jobs.workflows : []\n const tasksAndWorkflows = [...tasks, ...workflows]\n const scheduledPublishingEntityCount =\n getDraftEntities(config).filter(hasScheduledPublishing).length\n\n return {\n jobsAndQueues: {\n jobsAutoRunConfigured: config.jobs?.autoRun !== undefined,\n jobsConcurrencyEnabled: tasksAndWorkflows.some(({ concurrency }) => Boolean(concurrency)),\n jobsEnabled: tasks.length > 0 || workflows.length > 0 || scheduledPublishingEntityCount > 0,\n jobsSchedulingEnabled: tasksAndWorkflows.some(({ schedule }) => Boolean(schedule)),\n taskCount: tasks.length,\n workflowCount: workflows.length,\n },\n }\n}\n\nconst collectOrdering = (config: SanitizedConfig): FeatureInfo => ({\n orderableCollectionCount: (config.collections ?? []).filter(({ orderable }) => Boolean(orderable))\n .length,\n})\n\nconst collectPreviewAndLivePreview = (config: SanitizedConfig): FeatureInfo => {\n const collections = config.collections ?? []\n const globals = config.globals ?? []\n const livePreviewCollections = new Set([\n ...(config.admin?.livePreview?.collections ?? []),\n ...collections.filter((c) => c.admin?.livePreview).map((c) => c.slug),\n ])\n const livePreviewGlobals = new Set([\n ...(config.admin?.livePreview?.globals ?? []),\n ...globals.filter((g) => g.admin?.livePreview).map((g) => g.slug),\n ])\n\n return {\n previewAndLivePreview: {\n livePreviewCollectionCount: collections.filter(({ slug }) => livePreviewCollections.has(slug))\n .length,\n livePreviewGlobalCount: globals.filter(({ slug }) => livePreviewGlobals.has(slug)).length,\n previewCollectionCount: collections.filter(({ admin }) => Boolean(admin?.preview)).length,\n previewGlobalCount: globals.filter(({ admin }) => Boolean(admin?.preview)).length,\n },\n }\n}\n\nconst collectQueryPresets = (config: SanitizedConfig): FeatureInfo => ({\n queryPresetCollectionCount: (config.collections ?? []).filter(({ enableQueryPresets }) =>\n Boolean(enableQueryPresets),\n ).length,\n})\n\nconst collectRichTextFeatures = (config: SanitizedConfig): FeatureInfo => {\n const editor: unknown = config.editor\n const features =\n isObject(editor) && isObject(editor.editorConfig) ? editor.editorConfig.features : undefined\n const raw =\n isObject(features) && Array.isArray(features.enabledFeatures) ? features.enabledFeatures : []\n const featureSet = new Set(raw.filter((f): f is string => typeof f === 'string'))\n // per-field editor overrides are not checked; root editor covers the vast majority of projects\n return {\n richTextFeatures: (['blocks', 'table', 'upload', 'relationship'] as const).filter((f) =>\n featureSet.has(f),\n ) as RichTextFeature[],\n }\n}\n\nconst collectTrash = (config: SanitizedConfig): FeatureInfo => ({\n trashCollectionCount: (config.collections ?? []).filter(({ trash }) => Boolean(trash)).length,\n})\n\nconst collectUploadAndMedia = (config: SanitizedConfig): FeatureInfo => {\n const collections = config.collections ?? []\n\n return {\n uploadAndMedia: {\n cropDisabledCollectionCount: collections.filter(\n ({ upload }) => isObject(upload) && upload.crop === false,\n ).length,\n focalPointDisabledCollectionCount: collections.filter(\n ({ upload }) => isObject(upload) && upload.focalPoint === false,\n ).length,\n imageSizesCollectionCount: collections.filter(\n ({ upload }) => isObject(upload) && Boolean(upload.imageSizes?.length),\n ).length,\n mimeRestrictedCollectionCount: collections.filter(\n ({ upload }) => isObject(upload) && Boolean(upload.mimeTypes?.length),\n ).length,\n uploadCollectionCount: collections.filter(({ upload }) => Boolean(upload)).length,\n },\n }\n}\n\nconst collectVersionsAndDrafts = (config: SanitizedConfig): FeatureInfo => {\n const collections = config.collections ?? []\n const globals = config.globals ?? []\n const draftCollections = collections.filter(hasDrafts)\n const draftGlobals = globals.filter(hasDrafts)\n const draftEntities = [...draftCollections, ...draftGlobals]\n\n return {\n versionsAndDrafts: {\n autosaveEntityCount: draftEntities.filter(hasAutosave).length,\n draftCollectionCount: draftCollections.length,\n draftGlobalCount: draftGlobals.length,\n scheduledPublishingEntityCount: draftEntities.filter(hasScheduledPublishing).length,\n versionsDisabledCollectionCount: collections.filter(({ versions }) => !versions).length,\n versionsDisabledGlobalCount: globals.filter(({ versions }) => !versions).length,\n },\n }\n}\n\nconst getDraftEntities = (config: SanitizedConfig) => [\n ...(config.collections ?? []).filter(hasDrafts),\n ...(config.globals ?? []).filter(hasDrafts),\n]\n\nconst hasDrafts = ({ versions }: { versions?: { drafts?: unknown } | boolean }): boolean =>\n isObject(versions) && Boolean(versions.drafts)\n\nconst getDraftOptions = ({\n versions,\n}: {\n versions?: { drafts?: boolean | IncomingDrafts } | boolean\n}): IncomingDrafts | undefined =>\n isObject(versions) && isObject(versions.drafts) ? versions.drafts : undefined\n\nconst hasAutosave = (entity: Parameters<typeof getDraftOptions>[0]): boolean =>\n Boolean(getDraftOptions(entity)?.autosave)\n\nconst hasScheduledPublishing = (entity: Parameters<typeof getDraftOptions>[0]): boolean =>\n Boolean(getDraftOptions(entity)?.schedulePublish)\n\nconst countRootAdminComponents = (config: SanitizedConfig): number => {\n const admin = config.admin\n const customAvatarCount = Number(\n Boolean(admin?.avatar && typeof admin.avatar === 'object' && admin.avatar.Component),\n )\n const components = admin?.components\n\n if (!components) {\n return customAvatarCount\n }\n\n const componentArrays = [\n components.actions,\n components.afterDashboard,\n components.afterLogin,\n components.afterNav,\n components.afterNavLinks,\n components.beforeDashboard,\n components.beforeLogin,\n components.beforeNav,\n components.beforeNavLinks,\n components.header,\n components.providers,\n components.settingsMenu,\n ]\n const directComponents = [\n components.graphics?.Icon,\n components.graphics?.Logo,\n components.logout?.Button,\n components.Nav,\n ]\n return (\n customAvatarCount +\n componentArrays.reduce((count, items) => count + (items?.length ?? 0), 0) +\n directComponents.filter(Boolean).length\n )\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object'\n"],"names":["defaultUserCollection","getFeatureInfo","config","telemetryConfig","sanitizeTelemetryConfig","Object","assign","collectAdminCustomization","collectAuthentication","collectBasicDenominators","collectI18n","collectJobsAndQueues","collectOrdering","collectPreviewAndLivePreview","collectQueryPresets","collectTrash","collectUploadAndMedia","collectVersionsAndDrafts","collectRichTextFeatures","map","collect","safelyCollect","_","SYSTEM_WIDGET_COUNT","SYSTEM_COLLECTION_SLUGS","SYSTEM_GLOBAL_SLUGS","Set","collections","systemCollectionSlugs","kvCollectionSlug","kv","kvCollection","slug","add","jobs","enabled","firstCollectionAfterJobs","findIndex","includes","tasks","getDraftEntities","some","hasScheduledPublishing","index","length","splice","filter","collection","has","globals","adminCustomization","customAdminComponentCount","countRootAdminComponents","customAdminViewCount","keys","admin","components","views","customDashboardWidgetCount","Math","max","dashboard","widgets","authCollections","auth","Boolean","authentication","apiKeyCollectionCount","isObject","useAPIKey","authCollectionCount","customAuthStrategyCount","reduce","count","Array","isArray","strategies","localAuthDisabledCollectionCount","disableLocalStrategy","sessionsDisabledCollectionCount","useSessions","usernameCollectionCount","loginWithUsername","verifiedCollectionCount","verify","basicDenominators","collectionCount","globalCount","i18n","hasCustomAdminTranslations","translations","supportedAdminLanguageCount","supportedLanguages","workflows","tasksAndWorkflows","scheduledPublishingEntityCount","jobsAndQueues","jobsAutoRunConfigured","autoRun","undefined","jobsConcurrencyEnabled","concurrency","jobsEnabled","jobsSchedulingEnabled","schedule","taskCount","workflowCount","orderableCollectionCount","orderable","livePreviewCollections","livePreview","c","livePreviewGlobals","g","previewAndLivePreview","livePreviewCollectionCount","livePreviewGlobalCount","previewCollectionCount","preview","previewGlobalCount","queryPresetCollectionCount","enableQueryPresets","editor","features","editorConfig","raw","enabledFeatures","featureSet","f","richTextFeatures","trashCollectionCount","trash","uploadAndMedia","cropDisabledCollectionCount","upload","crop","focalPointDisabledCollectionCount","focalPoint","imageSizesCollectionCount","imageSizes","mimeRestrictedCollectionCount","mimeTypes","uploadCollectionCount","draftCollections","hasDrafts","draftGlobals","draftEntities","versionsAndDrafts","autosaveEntityCount","hasAutosave","draftCollectionCount","draftGlobalCount","versionsDisabledCollectionCount","versions","versionsDisabledGlobalCount","drafts","getDraftOptions","entity","autosave","schedulePublish","customAvatarCount","Number","avatar","Component","componentArrays","actions","afterDashboard","afterLogin","afterNav","afterNavLinks","beforeDashboard","beforeLogin","beforeNav","beforeNavLinks","header","providers","settingsMenu","directComponents","graphics","Icon","Logo","logout","Button","Nav","items","value"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export type RichTextFeature = 'blocks' | 'relationship' | 'table' | 'upload';
2
+ type CompleteFeatureInfo = {
3
+ adminCustomization: {
4
+ customAdminComponentCount: number;
5
+ customAdminViewCount: number;
6
+ customDashboardWidgetCount: number;
7
+ };
8
+ authentication: {
9
+ apiKeyCollectionCount: number;
10
+ authCollectionCount: number;
11
+ customAuthStrategyCount: number;
12
+ localAuthDisabledCollectionCount: number;
13
+ sessionsDisabledCollectionCount: number;
14
+ usernameCollectionCount: number;
15
+ verifiedCollectionCount: number;
16
+ };
17
+ basicDenominators: {
18
+ collectionCount: number;
19
+ globalCount: number;
20
+ };
21
+ i18n: {
22
+ hasCustomAdminTranslations: boolean;
23
+ supportedAdminLanguageCount: number;
24
+ };
25
+ jobsAndQueues: {
26
+ jobsAutoRunConfigured: boolean;
27
+ jobsConcurrencyEnabled: boolean;
28
+ jobsEnabled: boolean;
29
+ jobsSchedulingEnabled: boolean;
30
+ taskCount: number;
31
+ workflowCount: number;
32
+ };
33
+ orderableCollectionCount: number;
34
+ previewAndLivePreview: {
35
+ livePreviewCollectionCount: number;
36
+ livePreviewGlobalCount: number;
37
+ previewCollectionCount: number;
38
+ previewGlobalCount: number;
39
+ };
40
+ queryPresetCollectionCount: number;
41
+ richTextFeatures: RichTextFeature[];
42
+ trashCollectionCount: number;
43
+ uploadAndMedia: {
44
+ cropDisabledCollectionCount: number;
45
+ focalPointDisabledCollectionCount: number;
46
+ imageSizesCollectionCount: number;
47
+ mimeRestrictedCollectionCount: number;
48
+ uploadCollectionCount: number;
49
+ };
50
+ versionsAndDrafts: {
51
+ autosaveEntityCount: number;
52
+ draftCollectionCount: number;
53
+ draftGlobalCount: number;
54
+ scheduledPublishingEntityCount: number;
55
+ versionsDisabledCollectionCount: number;
56
+ versionsDisabledGlobalCount: number;
57
+ };
58
+ };
59
+ /** Feature families are omitted individually if their collection fails. */
60
+ export type FeatureInfo = Partial<CompleteFeatureInfo>;
61
+ export {};
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utilities/telemetry/featureInfo/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5E,KAAK,mBAAmB,GAAG;IACzB,kBAAkB,EAAE;QAClB,yBAAyB,EAAE,MAAM,CAAA;QACjC,oBAAoB,EAAE,MAAM,CAAA;QAC5B,0BAA0B,EAAE,MAAM,CAAA;KACnC,CAAA;IACD,cAAc,EAAE;QACd,qBAAqB,EAAE,MAAM,CAAA;QAC7B,mBAAmB,EAAE,MAAM,CAAA;QAC3B,uBAAuB,EAAE,MAAM,CAAA;QAC/B,gCAAgC,EAAE,MAAM,CAAA;QACxC,+BAA+B,EAAE,MAAM,CAAA;QACvC,uBAAuB,EAAE,MAAM,CAAA;QAC/B,uBAAuB,EAAE,MAAM,CAAA;KAChC,CAAA;IACD,iBAAiB,EAAE;QACjB,eAAe,EAAE,MAAM,CAAA;QACvB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,IAAI,EAAE;QACJ,0BAA0B,EAAE,OAAO,CAAA;QACnC,2BAA2B,EAAE,MAAM,CAAA;KACpC,CAAA;IACD,aAAa,EAAE;QACb,qBAAqB,EAAE,OAAO,CAAA;QAC9B,sBAAsB,EAAE,OAAO,CAAA;QAC/B,WAAW,EAAE,OAAO,CAAA;QACpB,qBAAqB,EAAE,OAAO,CAAA;QAC9B,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,wBAAwB,EAAE,MAAM,CAAA;IAChC,qBAAqB,EAAE;QACrB,0BAA0B,EAAE,MAAM,CAAA;QAClC,sBAAsB,EAAE,MAAM,CAAA;QAC9B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,0BAA0B,EAAE,MAAM,CAAA;IAClC,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE;QACd,2BAA2B,EAAE,MAAM,CAAA;QACnC,iCAAiC,EAAE,MAAM,CAAA;QACzC,yBAAyB,EAAE,MAAM,CAAA;QACjC,6BAA6B,EAAE,MAAM,CAAA;QACrC,qBAAqB,EAAE,MAAM,CAAA;KAC9B,CAAA;IACD,iBAAiB,EAAE;QACjB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,oBAAoB,EAAE,MAAM,CAAA;QAC5B,gBAAgB,EAAE,MAAM,CAAA;QACxB,8BAA8B,EAAE,MAAM,CAAA;QACtC,+BAA+B,EAAE,MAAM,CAAA;QACvC,2BAA2B,EAAE,MAAM,CAAA;KACpC,CAAA;CACF,CAAA;AAED,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Feature families are omitted individually if their collection fails. */ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utilities/telemetry/featureInfo/types.ts"],"sourcesContent":["export type RichTextFeature = 'blocks' | 'relationship' | 'table' | 'upload'\n\ntype CompleteFeatureInfo = {\n adminCustomization: {\n customAdminComponentCount: number\n customAdminViewCount: number\n customDashboardWidgetCount: number\n }\n authentication: {\n apiKeyCollectionCount: number\n authCollectionCount: number\n customAuthStrategyCount: number\n localAuthDisabledCollectionCount: number\n sessionsDisabledCollectionCount: number\n usernameCollectionCount: number\n verifiedCollectionCount: number\n }\n basicDenominators: {\n collectionCount: number\n globalCount: number\n }\n i18n: {\n hasCustomAdminTranslations: boolean\n supportedAdminLanguageCount: number\n }\n jobsAndQueues: {\n jobsAutoRunConfigured: boolean\n jobsConcurrencyEnabled: boolean\n jobsEnabled: boolean\n jobsSchedulingEnabled: boolean\n taskCount: number\n workflowCount: number\n }\n orderableCollectionCount: number\n previewAndLivePreview: {\n livePreviewCollectionCount: number\n livePreviewGlobalCount: number\n previewCollectionCount: number\n previewGlobalCount: number\n }\n queryPresetCollectionCount: number\n richTextFeatures: RichTextFeature[]\n trashCollectionCount: number\n uploadAndMedia: {\n cropDisabledCollectionCount: number\n focalPointDisabledCollectionCount: number\n imageSizesCollectionCount: number\n mimeRestrictedCollectionCount: number\n uploadCollectionCount: number\n }\n versionsAndDrafts: {\n autosaveEntityCount: number\n draftCollectionCount: number\n draftGlobalCount: number\n scheduledPublishingEntityCount: number\n versionsDisabledCollectionCount: number\n versionsDisabledGlobalCount: number\n }\n}\n\n/** Feature families are omitted individually if their collection fails. */\nexport type FeatureInfo = Partial<CompleteFeatureInfo>\n"],"names":[],"mappings":"AA4DA,yEAAyE,GACzE,WAAsD"}
@@ -0,0 +1,14 @@
1
+ import type { Payload } from '../../types/index.js';
2
+ export type ProjectCohort = 'cloud' | 'enterprise' | 'oss';
3
+ type Args = {
4
+ env?: NodeJS.ProcessEnv;
5
+ packages?: string[];
6
+ payload: Payload;
7
+ plugins: string[];
8
+ };
9
+ export declare const enterprisePackageNames: Set<string>;
10
+ export declare const getProjectContext: ({ env, packages, payload, plugins, }: Args) => {
11
+ projectCohorts: ProjectCohort[];
12
+ };
13
+ export {};
14
+ //# sourceMappingURL=getProjectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectContext.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/getProjectContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,KAAK,CAAA;AAE1D,KAAK,IAAI,GAAG;IACV,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,sBAAsB,aAcjC,CAAA;AAEF,eAAO,MAAM,iBAAiB,yCAK3B,IAAI,KAAG;IAAE,cAAc,EAAE,aAAa,EAAE,CAAA;CAoB1C,CAAA"}
@@ -0,0 +1,36 @@
1
+ export const enterprisePackageNames = new Set([
2
+ '@payloadcms/ai-model-adapter',
3
+ '@payloadcms/plugin-ab-testing',
4
+ '@payloadcms/plugin-admin-only',
5
+ '@payloadcms/plugin-ai-embeddings',
6
+ '@payloadcms/plugin-ai-translate',
7
+ '@payloadcms/plugin-audit-logs',
8
+ '@payloadcms/plugin-csm',
9
+ '@payloadcms/plugin-email-builder',
10
+ '@payloadcms/plugin-environments',
11
+ '@payloadcms/plugin-oauth2',
12
+ '@payloadcms/plugin-publication-workflows',
13
+ '@payloadcms/plugin-visual-editing',
14
+ '@payloadcms/visual-editing'
15
+ ]);
16
+ export const getProjectContext = ({ env = process.env, packages = [], payload, plugins })=>{
17
+ const projectCohorts = [];
18
+ if ([
19
+ ...packages,
20
+ ...plugins
21
+ ].some((name)=>enterprisePackageNames.has(name))) {
22
+ projectCohorts.push('enterprise');
23
+ }
24
+ const hasPayloadCloudConfig = payload.config.globals.some((global)=>global.slug === 'payload-cloud-instance');
25
+ if (env.PAYLOAD_CLOUD === 'true' && hasPayloadCloudConfig) {
26
+ projectCohorts.push('cloud');
27
+ }
28
+ if (projectCohorts.length === 0) {
29
+ projectCohorts.push('oss');
30
+ }
31
+ return {
32
+ projectCohorts
33
+ };
34
+ };
35
+
36
+ //# sourceMappingURL=getProjectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utilities/telemetry/getProjectContext.ts"],"sourcesContent":["import type { Payload } from '../../types/index.js'\n\nexport type ProjectCohort = 'cloud' | 'enterprise' | 'oss'\n\ntype Args = {\n env?: NodeJS.ProcessEnv\n packages?: string[]\n payload: Payload\n plugins: string[]\n}\n\nexport const enterprisePackageNames = new Set([\n '@payloadcms/ai-model-adapter',\n '@payloadcms/plugin-ab-testing',\n '@payloadcms/plugin-admin-only',\n '@payloadcms/plugin-ai-embeddings',\n '@payloadcms/plugin-ai-translate',\n '@payloadcms/plugin-audit-logs',\n '@payloadcms/plugin-csm',\n '@payloadcms/plugin-email-builder',\n '@payloadcms/plugin-environments',\n '@payloadcms/plugin-oauth2',\n '@payloadcms/plugin-publication-workflows',\n '@payloadcms/plugin-visual-editing',\n '@payloadcms/visual-editing',\n])\n\nexport const getProjectContext = ({\n env = process.env,\n packages = [],\n payload,\n plugins,\n}: Args): { projectCohorts: ProjectCohort[] } => {\n const projectCohorts: ProjectCohort[] = []\n\n if ([...packages, ...plugins].some((name) => enterprisePackageNames.has(name))) {\n projectCohorts.push('enterprise')\n }\n\n const hasPayloadCloudConfig = payload.config.globals.some(\n (global) => global.slug === 'payload-cloud-instance',\n )\n\n if (env.PAYLOAD_CLOUD === 'true' && hasPayloadCloudConfig) {\n projectCohorts.push('cloud')\n }\n\n if (projectCohorts.length === 0) {\n projectCohorts.push('oss')\n }\n\n return { projectCohorts }\n}\n"],"names":["enterprisePackageNames","Set","getProjectContext","env","process","packages","payload","plugins","projectCohorts","some","name","has","push","hasPayloadCloudConfig","config","globals","global","slug","PAYLOAD_CLOUD","length"],"mappings":"AAWA,OAAO,MAAMA,yBAAyB,IAAIC,IAAI;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD,EAAC;AAEF,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAMC,QAAQD,GAAG,EACjBE,WAAW,EAAE,EACbC,OAAO,EACPC,OAAO,EACF;IACL,MAAMC,iBAAkC,EAAE;IAE1C,IAAI;WAAIH;WAAaE;KAAQ,CAACE,IAAI,CAAC,CAACC,OAASV,uBAAuBW,GAAG,CAACD,QAAQ;QAC9EF,eAAeI,IAAI,CAAC;IACtB;IAEA,MAAMC,wBAAwBP,QAAQQ,MAAM,CAACC,OAAO,CAACN,IAAI,CACvD,CAACO,SAAWA,OAAOC,IAAI,KAAK;IAG9B,IAAId,IAAIe,aAAa,KAAK,UAAUL,uBAAuB;QACzDL,eAAeI,IAAI,CAAC;IACtB;IAEA,IAAIJ,eAAeW,MAAM,KAAK,GAAG;QAC/BX,eAAeI,IAAI,CAAC;IACtB;IAEA,OAAO;QAAEJ;IAAe;AAC1B,EAAC"}
@@ -1,11 +1,14 @@
1
1
  import type { Payload } from '../../types/index.js';
2
2
  import type { AdminInitEvent } from './events/adminInit.js';
3
3
  import type { ServerInitEvent } from './events/serverInit.js';
4
+ import type { FeatureInfo } from './featureInfo/types.js';
5
+ import type { ProjectCohort } from './getProjectContext.js';
4
6
  export type BaseEvent = {
5
7
  ciName: null | string;
6
8
  dbAdapter: string;
7
9
  emailAdapter: null | string;
8
10
  envID: string;
11
+ frameworkAdapter: 'next' | 'tanstack-start' | 'unknown';
9
12
  isCI: boolean;
10
13
  locales: string[];
11
14
  localizationDefaultLocale: null | string;
@@ -13,10 +16,12 @@ export type BaseEvent = {
13
16
  nodeEnv: string;
14
17
  nodeVersion: string;
15
18
  payloadVersion: string;
19
+ plugins: string[];
20
+ projectCohorts: ProjectCohort[];
16
21
  projectID: string;
17
22
  projectIDSource: 'cwd' | 'git' | 'packageJSON' | 'serverURL';
18
23
  uploadAdapters: string[];
19
- };
24
+ } & FeatureInfo;
20
25
  type PackageJSON = {
21
26
  dependencies: Record<string, string | undefined>;
22
27
  name: string;
@@ -28,6 +33,7 @@ type Args = {
28
33
  };
29
34
  export declare const sendEvent: ({ event, payload }: Args) => Promise<void>;
30
35
  export declare const getPayloadVersion: (packageJSON: PackageJSON) => string;
36
+ export declare const getInstalledPluginSlugs: (payload: Payload) => string[];
31
37
  export declare const getLocalizationInfo: (payload: Payload) => Pick<BaseEvent, "locales" | "localizationDefaultLocale" | "localizationEnabled">;
32
38
  export {};
33
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAM7D,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,IAAI,GAAG,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yBAAyB,EAAE,IAAI,GAAG,MAAM,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAA;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,eAAO,MAAM,SAAS,uBAA8B,IAAI,KAAG,OAAO,CAAC,IAAI,CA2CtE,CAAA;AAiFD,eAAO,MAAM,iBAAiB,gBAAiB,WAAW,KAAG,MAE5D,CAAA;AAED,eAAO,MAAM,mBAAmB,YACrB,OAAO,KACf,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,2BAA2B,GAAG,qBAAqB,CAcjF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAQ3D,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,IAAI,GAAG,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACvD,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yBAAyB,EAAE,IAAI,GAAG,MAAM,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAA;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,GAAG,WAAW,CAAA;AAEf,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,eAAO,MAAM,SAAS,uBAA8B,IAAI,KAAG,OAAO,CAAC,IAAI,CAiDtE,CAAA;AAiFD,eAAO,MAAM,iBAAiB,gBAAiB,WAAW,KAAG,MAE5D,CAAA;AAcD,eAAO,MAAM,uBAAuB,YAAa,OAAO,KAAG,MAAM,EAGiC,CAAA;AAElG,eAAO,MAAM,mBAAmB,YACrB,OAAO,KACf,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,2BAA2B,GAAG,qBAAqB,CAcjF,CAAA"}