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
@@ -35,15 +35,35 @@ function cloneArray(a, fn) {
35
35
  const k = keys[i];
36
36
  const cur = a[k];
37
37
  if (typeof cur !== 'object' || cur === null) {
38
- a2[k] = cur;
38
+ setClonedValue({
39
+ key: k,
40
+ target: a2,
41
+ value: cur
42
+ });
39
43
  } else if (cur instanceof RegExp) {
40
- a2[k] = new RegExp(cur.source, cur.flags);
44
+ setClonedValue({
45
+ key: k,
46
+ target: a2,
47
+ value: new RegExp(cur.source, cur.flags)
48
+ });
41
49
  } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {
42
- a2[k] = handler(cur, fn);
50
+ setClonedValue({
51
+ key: k,
52
+ target: a2,
53
+ value: handler(cur, fn)
54
+ });
43
55
  } else if (ArrayBuffer.isView(cur)) {
44
- a2[k] = copyBuffer(cur);
56
+ setClonedValue({
57
+ key: k,
58
+ target: a2,
59
+ value: copyBuffer(cur)
60
+ });
45
61
  } else {
46
- a2[k] = fn(cur);
62
+ setClonedValue({
63
+ key: k,
64
+ target: a2,
65
+ value: fn(cur)
66
+ });
47
67
  }
48
68
  }
49
69
  return a2;
@@ -68,15 +88,35 @@ export const deepCopyObject = (o)=>{
68
88
  }
69
89
  const cur = o[k];
70
90
  if (typeof cur !== 'object' || cur === null) {
71
- o2[k] = cur;
91
+ setClonedValue({
92
+ key: k,
93
+ target: o2,
94
+ value: cur
95
+ });
72
96
  } else if (cur instanceof RegExp) {
73
- o2[k] = new RegExp(cur.source, cur.flags);
97
+ setClonedValue({
98
+ key: k,
99
+ target: o2,
100
+ value: new RegExp(cur.source, cur.flags)
101
+ });
74
102
  } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {
75
- o2[k] = handler(cur, deepCopyObject);
103
+ setClonedValue({
104
+ key: k,
105
+ target: o2,
106
+ value: handler(cur, deepCopyObject)
107
+ });
76
108
  } else if (ArrayBuffer.isView(cur)) {
77
- o2[k] = copyBuffer(cur);
109
+ setClonedValue({
110
+ key: k,
111
+ target: o2,
112
+ value: copyBuffer(cur)
113
+ });
78
114
  } else {
79
- o2[k] = deepCopyObject(cur);
115
+ setClonedValue({
116
+ key: k,
117
+ target: o2,
118
+ value: deepCopyObject(cur)
119
+ });
80
120
  }
81
121
  }
82
122
  return o2;
@@ -98,18 +138,35 @@ Benchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/b
98
138
  if (typeof value !== 'object' || value === null) {
99
139
  return value;
100
140
  } else if (Array.isArray(value)) {
101
- return value.map((e)=>typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined));
141
+ const clone = new Array(value.length);
142
+ for(let index = 0; index < value.length; index++){
143
+ if (!Object.hasOwn(value, index)) {
144
+ continue;
145
+ }
146
+ const element = value[index];
147
+ setClonedValue({
148
+ key: index,
149
+ target: clone,
150
+ value: typeof element !== 'object' || element === null ? element : deepCopyObjectSimple(element, filterUndefined)
151
+ });
152
+ }
153
+ return clone;
102
154
  } else {
103
155
  if (value instanceof Date) {
104
156
  return new Date(value);
105
157
  }
106
158
  const ret = {};
107
- for(const k in value){
108
- const v = value[k];
159
+ const objectValue = value;
160
+ for (const k of Object.keys(objectValue)){
161
+ const v = objectValue[k];
109
162
  if (filterUndefined && v === undefined) {
110
163
  continue;
111
164
  }
112
- ret[k] = typeof v !== 'object' || v === null ? v : deepCopyObjectSimple(v, filterUndefined);
165
+ setClonedValue({
166
+ key: k,
167
+ target: ret,
168
+ value: typeof v !== 'object' || v === null ? v : deepCopyObjectSimple(v, filterUndefined)
169
+ });
113
170
  }
114
171
  return ret;
115
172
  }
@@ -120,7 +177,19 @@ export function deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {
120
177
  } else if (typeof value !== 'object' || value === null) {
121
178
  return value;
122
179
  } else if (Array.isArray(value)) {
123
- return value.map((e)=>typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e, opts));
180
+ const clone = new Array(value.length);
181
+ for(let index = 0; index < value.length; index++){
182
+ if (!Object.hasOwn(value, index)) {
183
+ continue;
184
+ }
185
+ const element = value[index];
186
+ setClonedValue({
187
+ key: index,
188
+ target: clone,
189
+ value: typeof element !== 'object' || element === null ? element : deepCopyObjectSimpleWithoutReactComponents(element, opts)
190
+ });
191
+ }
192
+ return clone;
124
193
  } else {
125
194
  // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided
126
195
  if (value instanceof File) {
@@ -133,9 +202,14 @@ export function deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {
133
202
  return new Date(value);
134
203
  }
135
204
  const ret = {};
136
- for(const k in value){
137
- const v = value[k];
138
- ret[k] = typeof v !== 'object' || v === null ? v : deepCopyObjectSimpleWithoutReactComponents(v, opts);
205
+ const objectValue = value;
206
+ for (const k of Object.keys(objectValue)){
207
+ const v = objectValue[k];
208
+ setClonedValue({
209
+ key: k,
210
+ target: ret,
211
+ value: typeof v !== 'object' || v === null ? v : deepCopyObjectSimpleWithoutReactComponents(v, opts)
212
+ });
139
213
  }
140
214
  return ret;
141
215
  }
@@ -189,7 +263,11 @@ export function deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {
189
263
  cache.set(object, clonedObject);
190
264
  for(const key in object){
191
265
  if (Object.prototype.hasOwnProperty.call(object, key) || Object.getOwnPropertySymbols(object).includes(key)) {
192
- clonedObject[key] = deepCopyObjectComplex(object[key], cache);
266
+ setClonedValue({
267
+ key,
268
+ target: clonedObject,
269
+ value: deepCopyObjectComplex(object[key], cache)
270
+ });
193
271
  }
194
272
  }
195
273
  return clonedObject;
@@ -197,5 +275,18 @@ export function deepCopyObjectSimpleWithoutReactComponents(value, opts = {}) {
197
275
  // Handle all other cases
198
276
  return object;
199
277
  }
278
+ function setClonedValue({ key, target, value }) {
279
+ if (key === '__proto__' || !Object.hasOwn(target, key) && key in target) {
280
+ Object.defineProperty(target, key, {
281
+ configurable: true,
282
+ enumerable: true,
283
+ value,
284
+ writable: true
285
+ });
286
+ } else if (!Reflect.set(target, key, value)) {
287
+ throw new TypeError(`Cannot assign to property ${String(key)}`);
288
+ }
289
+ return target;
290
+ }
200
291
 
201
292
  //# sourceMappingURL=deepCopyObject.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur instanceof RegExp) {\n a2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur instanceof RegExp) {\n o2[k] = new RegExp(cur.source, cur.flags) as any\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, deepCopyObject)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = deepCopyObject(cur)\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimple(e, filterUndefined),\n ) as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any)\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(\n value: T,\n opts: {\n excludeFiles?: boolean\n } = {},\n): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n return value.map((e) =>\n typeof e !== 'object' || e === null ? e : deepCopyObjectSimpleWithoutReactComponents(e, opts),\n ) as T\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided\n if (value instanceof File) {\n if (opts.excludeFiles) {\n return undefined!\n }\n\n return value as unknown as T\n }\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n for (const k in value) {\n const v = value[k]\n ret[k] =\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T, opts) as any)\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n clonedObject[key] = deepCopyObjectComplex(object[key], cache)\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","value","filterUndefined","map","e","ret","v","undefined","deepCopyObjectSimpleWithoutReactComponents","opts","$$typeof","File","excludeFiles","deepCopyObjectComplex","object","cache","WeakMap","has","getTime","clonedMap","key","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/deepCopyObject.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { JsonValue } from '../types/index.js'\n\n/*\nMain deepCopyObject handling - from rfdc: https://github.com/davidmarkclements/rfdc/blob/master/index.js\n\nCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n*/\n\nfunction copyBuffer(cur: any) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nconst constructorHandlers = new Map()\nconstructorHandlers.set(Date, (o: any) => new Date(o))\nconstructorHandlers.set(Map, (o: any, fn: any) => new Map(cloneArray<any>(Array.from(o), fn)))\nconstructorHandlers.set(Set, (o: any, fn: any) => new Set(cloneArray(Array.from(o), fn)))\nconstructorHandlers.set(RegExp, (regex: RegExp) => new RegExp(regex.source, regex.flags))\n\nlet handler: ((o: any, fn: any) => any) | null = null\n\nfunction cloneArray<T extends object>(a: T, fn: (o: any) => any): T {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length) as T\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof a\n const cur = a[k] as any\n if (typeof cur !== 'object' || cur === null) {\n setClonedValue({ key: k, target: a2, value: cur })\n } else if (cur instanceof RegExp) {\n setClonedValue({ key: k, target: a2, value: new RegExp(cur.source, cur.flags) })\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n setClonedValue({ key: k, target: a2, value: handler(cur, fn) })\n } else if (ArrayBuffer.isView(cur)) {\n setClonedValue({ key: k, target: a2, value: copyBuffer(cur) })\n } else {\n setClonedValue({ key: k, target: a2, value: fn(cur) })\n }\n }\n return a2\n}\n\nexport const deepCopyObject = <T>(o: T): T => {\n if (typeof o !== 'object' || o === null) {\n return o\n }\n if (Array.isArray(o)) {\n return cloneArray(o, deepCopyObject)\n }\n if (o instanceof RegExp) {\n return new RegExp(o.source, o.flags) as T\n }\n\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, deepCopyObject)\n }\n const o2 = {} as T\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) {\n continue\n }\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n setClonedValue({ key: k, target: o2 as Record<PropertyKey, any>, value: cur })\n } else if (cur instanceof RegExp) {\n setClonedValue({\n key: k,\n target: o2 as Record<PropertyKey, any>,\n value: new RegExp(cur.source, cur.flags),\n })\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n setClonedValue({\n key: k,\n target: o2 as Record<PropertyKey, any>,\n value: handler(cur, deepCopyObject),\n })\n } else if (ArrayBuffer.isView(cur)) {\n setClonedValue({\n key: k,\n target: o2 as Record<PropertyKey, any>,\n value: copyBuffer(cur),\n })\n } else {\n setClonedValue({\n key: k,\n target: o2 as Record<PropertyKey, any>,\n value: deepCopyObject(cur),\n })\n }\n }\n return o2\n}\n\n/*\nFast deepCopyObjectSimple handling - from fast-json-clone: https://github.com/rhysd/fast-json-clone\n\nBenchmark: https://github.com/AlessioGr/fastest-deep-clone-json/blob/main/test/benchmark.js\n*/\n\n/**\n * A deepCopyObject implementation which only works for JSON objects and arrays, and is faster than\n * JSON.parse(JSON.stringify(obj))\n *\n * @param value The JSON value to be cloned. There are two invariants. 1) It must not contain circles\n * as JSON does not allow it. This function will cause infinite loop for such values by\n * design. 2) It must contain JSON values only. Other values like `Date`, `Regexp`, `Map`,\n * `Set`, `Buffer`, ... are not allowed.\n * @returns The cloned JSON value.\n */\nexport function deepCopyObjectSimple<T extends JsonValue>(value: T, filterUndefined = false): T {\n if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n const clone = new Array(value.length)\n\n for (let index = 0; index < value.length; index++) {\n if (!Object.hasOwn(value, index)) {\n continue\n }\n\n const element = value[index]\n setClonedValue({\n key: index,\n target: clone,\n value:\n typeof element !== 'object' || element === null\n ? element\n : deepCopyObjectSimple(element, filterUndefined),\n })\n }\n\n return clone as T\n } else {\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n const objectValue = value as Record<string, T>\n for (const k of Object.keys(objectValue)) {\n const v = objectValue[k]\n if (filterUndefined && v === undefined) {\n continue\n }\n setClonedValue({\n key: k,\n target: ret,\n value:\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimple(v as T, filterUndefined) as any),\n })\n }\n return ret as unknown as T\n }\n}\n\nexport function deepCopyObjectSimpleWithoutReactComponents<T extends JsonValue>(\n value: T,\n opts: {\n excludeFiles?: boolean\n } = {},\n): T {\n if (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n typeof value.$$typeof === 'symbol'\n ) {\n return undefined!\n } else if (typeof value !== 'object' || value === null) {\n return value\n } else if (Array.isArray(value)) {\n const clone = new Array(value.length)\n\n for (let index = 0; index < value.length; index++) {\n if (!Object.hasOwn(value, index)) {\n continue\n }\n\n const element = value[index]\n setClonedValue({\n key: index,\n target: clone,\n value:\n typeof element !== 'object' || element === null\n ? element\n : deepCopyObjectSimpleWithoutReactComponents(element, opts),\n })\n }\n\n return clone as T\n } else {\n // Handle File objects by returning them as-is (don't serialize to plain object) or exclude if excludeFiles is provided\n if (value instanceof File) {\n if (opts.excludeFiles) {\n return undefined!\n }\n\n return value as unknown as T\n }\n if (value instanceof Date) {\n return new Date(value) as unknown as T\n }\n const ret: { [key: string]: T } = {}\n const objectValue = value as Record<string, T>\n for (const k of Object.keys(objectValue)) {\n const v = objectValue[k]\n setClonedValue({\n key: k,\n target: ret,\n value:\n typeof v !== 'object' || v === null\n ? v\n : (deepCopyObjectSimpleWithoutReactComponents(v as T, opts) as any),\n })\n }\n return ret as unknown as T\n }\n}\n\n/**\n * A deepCopyObject implementation which is slower than deepCopyObject, but more correct.\n * Can be used if correctness is more important than speed. Supports circular dependencies\n */\nexport function deepCopyObjectComplex<T>(object: T, cache: WeakMap<any, any> = new WeakMap()): T {\n if (object === null) {\n return null!\n }\n\n if (cache.has(object)) {\n return cache.get(object)\n }\n\n // Handle File\n if (object instanceof File) {\n return object as unknown as T\n }\n\n // Handle Date\n if (object instanceof Date) {\n return new Date(object.getTime()) as unknown as T\n }\n\n // Handle RegExp\n if (object instanceof RegExp) {\n return new RegExp(object.source, object.flags) as unknown as T\n }\n\n // Handle Map\n if (object instanceof Map) {\n const clonedMap = new Map()\n cache.set(object, clonedMap)\n for (const [key, value] of object.entries()) {\n clonedMap.set(key, deepCopyObjectComplex(value, cache))\n }\n return clonedMap as unknown as T\n }\n\n // Handle Set\n if (object instanceof Set) {\n const clonedSet = new Set()\n cache.set(object, clonedSet)\n for (const value of object.values()) {\n clonedSet.add(deepCopyObjectComplex(value, cache))\n }\n return clonedSet as unknown as T\n }\n\n // Handle Array and Object\n if (typeof object === 'object' && object !== null) {\n if ('$$typeof' in object && typeof object.$$typeof === 'symbol') {\n return object\n }\n\n const clonedObject: any = Array.isArray(object)\n ? []\n : Object.create(Object.getPrototypeOf(object))\n cache.set(object, clonedObject)\n\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) ||\n Object.getOwnPropertySymbols(object).includes(key as any)\n ) {\n setClonedValue({\n key,\n target: clonedObject,\n value: deepCopyObjectComplex(object[key], cache),\n })\n }\n }\n\n return clonedObject as T\n }\n\n // Handle all other cases\n return object\n}\n\nfunction setClonedValue<TTarget extends Record<PropertyKey, any>>({\n key,\n target,\n value,\n}: {\n key: PropertyKey\n target: TTarget\n value: any\n}): TTarget {\n if (key === '__proto__' || (!Object.hasOwn(target, key) && key in target)) {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n })\n } else if (!Reflect.set(target, key, value)) {\n throw new TypeError(`Cannot assign to property ${String(key)}`)\n }\n\n return target\n}\n"],"names":["copyBuffer","cur","Buffer","from","buffer","slice","byteOffset","length","constructorHandlers","Map","set","Date","o","fn","cloneArray","Array","Set","RegExp","regex","source","flags","handler","a","keys","Object","a2","i","k","setClonedValue","key","target","value","get","ArrayBuffer","isView","deepCopyObject","isArray","o2","hasOwnProperty","call","deepCopyObjectSimple","filterUndefined","clone","index","hasOwn","element","ret","objectValue","v","undefined","deepCopyObjectSimpleWithoutReactComponents","opts","$$typeof","File","excludeFiles","deepCopyObjectComplex","object","cache","WeakMap","has","getTime","clonedMap","entries","clonedSet","values","add","clonedObject","create","getPrototypeOf","prototype","getOwnPropertySymbols","includes","defineProperty","configurable","enumerable","writable","Reflect","TypeError","String"],"mappings":"AAAA,qDAAqD,GAGrD;;;;;;;;;;;;;;;;;;AAkBA,GAEA,SAASA,WAAWC,GAAQ;IAC1B,IAAIA,eAAeC,QAAQ;QACzB,OAAOA,OAAOC,IAAI,CAACF;IACrB;IAEA,OAAO,IAAIA,IAAI,WAAW,CAACA,IAAIG,MAAM,CAACC,KAAK,IAAIJ,IAAIK,UAAU,EAAEL,IAAIM,MAAM;AAC3E;AAEA,MAAMC,sBAAsB,IAAIC;AAChCD,oBAAoBE,GAAG,CAACC,MAAM,CAACC,IAAW,IAAID,KAAKC;AACnDJ,oBAAoBE,GAAG,CAACD,KAAK,CAACG,GAAQC,KAAY,IAAIJ,IAAIK,WAAgBC,MAAMZ,IAAI,CAACS,IAAIC;AACzFL,oBAAoBE,GAAG,CAACM,KAAK,CAACJ,GAAQC,KAAY,IAAIG,IAAIF,WAAWC,MAAMZ,IAAI,CAACS,IAAIC;AACpFL,oBAAoBE,GAAG,CAACO,QAAQ,CAACC,QAAkB,IAAID,OAAOC,MAAMC,MAAM,EAAED,MAAME,KAAK;AAEvF,IAAIC,UAA6C;AAEjD,SAASP,WAA6BQ,CAAI,EAAET,EAAmB;IAC7D,MAAMU,OAAOC,OAAOD,IAAI,CAACD;IACzB,MAAMG,KAAK,IAAIV,MAAMQ,KAAKhB,MAAM;IAChC,IAAK,IAAImB,IAAI,GAAGA,IAAIH,KAAKhB,MAAM,EAAEmB,IAAK;QACpC,MAAMC,IAAIJ,IAAI,CAACG,EAAE;QACjB,MAAMzB,MAAMqB,CAAC,CAACK,EAAE;QAChB,IAAI,OAAO1B,QAAQ,YAAYA,QAAQ,MAAM;YAC3C2B,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQL;gBAAIM,OAAO9B;YAAI;QAClD,OAAO,IAAIA,eAAegB,QAAQ;YAChCW,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQL;gBAAIM,OAAO,IAAId,OAAOhB,IAAIkB,MAAM,EAAElB,IAAImB,KAAK;YAAE;QAChF,OAAO,IAAInB,IAAI,WAAW,KAAKuB,UAAWH,CAAAA,UAAUb,oBAAoBwB,GAAG,CAAC/B,IAAI,WAAW,CAAA,GAAI;YAC7F2B,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQL;gBAAIM,OAAOV,QAAQpB,KAAKY;YAAI;QAC/D,OAAO,IAAIoB,YAAYC,MAAM,CAACjC,MAAM;YAClC2B,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQL;gBAAIM,OAAO/B,WAAWC;YAAK;QAC9D,OAAO;YACL2B,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQL;gBAAIM,OAAOlB,GAAGZ;YAAK;QACtD;IACF;IACA,OAAOwB;AACT;AAEA,OAAO,MAAMU,iBAAiB,CAAIvB;IAChC,IAAI,OAAOA,MAAM,YAAYA,MAAM,MAAM;QACvC,OAAOA;IACT;IACA,IAAIG,MAAMqB,OAAO,CAACxB,IAAI;QACpB,OAAOE,WAAWF,GAAGuB;IACvB;IACA,IAAIvB,aAAaK,QAAQ;QACvB,OAAO,IAAIA,OAAOL,EAAEO,MAAM,EAAEP,EAAEQ,KAAK;IACrC;IAEA,IAAIR,EAAE,WAAW,KAAKY,UAAWH,CAAAA,UAAUb,oBAAoBwB,GAAG,CAACpB,EAAE,WAAW,CAAA,GAAI;QAClF,OAAOS,QAAQT,GAAGuB;IACpB;IACA,MAAME,KAAK,CAAC;IACZ,IAAK,MAAMV,KAAKf,EAAG;QACjB,IAAIY,OAAOc,cAAc,CAACC,IAAI,CAAC3B,GAAGe,OAAO,OAAO;YAC9C;QACF;QACA,MAAM1B,MAAMW,CAAC,CAACe,EAAE;QAChB,IAAI,OAAO1B,QAAQ,YAAYA,QAAQ,MAAM;YAC3C2B,eAAe;gBAAEC,KAAKF;gBAAGG,QAAQO;gBAAgCN,OAAO9B;YAAI;QAC9E,OAAO,IAAIA,eAAegB,QAAQ;YAChCW,eAAe;gBACbC,KAAKF;gBACLG,QAAQO;gBACRN,OAAO,IAAId,OAAOhB,IAAIkB,MAAM,EAAElB,IAAImB,KAAK;YACzC;QACF,OAAO,IAAInB,IAAI,WAAW,KAAKuB,UAAWH,CAAAA,UAAUb,oBAAoBwB,GAAG,CAAC/B,IAAI,WAAW,CAAA,GAAI;YAC7F2B,eAAe;gBACbC,KAAKF;gBACLG,QAAQO;gBACRN,OAAOV,QAAQpB,KAAKkC;YACtB;QACF,OAAO,IAAIF,YAAYC,MAAM,CAACjC,MAAM;YAClC2B,eAAe;gBACbC,KAAKF;gBACLG,QAAQO;gBACRN,OAAO/B,WAAWC;YACpB;QACF,OAAO;YACL2B,eAAe;gBACbC,KAAKF;gBACLG,QAAQO;gBACRN,OAAOI,eAAelC;YACxB;QACF;IACF;IACA,OAAOoC;AACT,EAAC;AAED;;;;AAIA,GAEA;;;;;;;;;CASC,GACD,OAAO,SAASG,qBAA0CT,KAAQ,EAAEU,kBAAkB,KAAK;IACzF,IAAI,OAAOV,UAAU,YAAYA,UAAU,MAAM;QAC/C,OAAOA;IACT,OAAO,IAAIhB,MAAMqB,OAAO,CAACL,QAAQ;QAC/B,MAAMW,QAAQ,IAAI3B,MAAMgB,MAAMxB,MAAM;QAEpC,IAAK,IAAIoC,QAAQ,GAAGA,QAAQZ,MAAMxB,MAAM,EAAEoC,QAAS;YACjD,IAAI,CAACnB,OAAOoB,MAAM,CAACb,OAAOY,QAAQ;gBAChC;YACF;YAEA,MAAME,UAAUd,KAAK,CAACY,MAAM;YAC5Bf,eAAe;gBACbC,KAAKc;gBACLb,QAAQY;gBACRX,OACE,OAAOc,YAAY,YAAYA,YAAY,OACvCA,UACAL,qBAAqBK,SAASJ;YACtC;QACF;QAEA,OAAOC;IACT,OAAO;QACL,IAAIX,iBAAiBpB,MAAM;YACzB,OAAO,IAAIA,KAAKoB;QAClB;QACA,MAAMe,MAA4B,CAAC;QACnC,MAAMC,cAAchB;QACpB,KAAK,MAAMJ,KAAKH,OAAOD,IAAI,CAACwB,aAAc;YACxC,MAAMC,IAAID,WAAW,CAACpB,EAAE;YACxB,IAAIc,mBAAmBO,MAAMC,WAAW;gBACtC;YACF;YACArB,eAAe;gBACbC,KAAKF;gBACLG,QAAQgB;gBACRf,OACE,OAAOiB,MAAM,YAAYA,MAAM,OAC3BA,IACCR,qBAAqBQ,GAAQP;YACtC;QACF;QACA,OAAOK;IACT;AACF;AAEA,OAAO,SAASI,2CACdnB,KAAQ,EACRoB,OAEI,CAAC,CAAC;IAEN,IACE,OAAOpB,UAAU,YACjBA,UAAU,QACV,cAAcA,SACd,OAAOA,MAAMqB,QAAQ,KAAK,UAC1B;QACA,OAAOH;IACT,OAAO,IAAI,OAAOlB,UAAU,YAAYA,UAAU,MAAM;QACtD,OAAOA;IACT,OAAO,IAAIhB,MAAMqB,OAAO,CAACL,QAAQ;QAC/B,MAAMW,QAAQ,IAAI3B,MAAMgB,MAAMxB,MAAM;QAEpC,IAAK,IAAIoC,QAAQ,GAAGA,QAAQZ,MAAMxB,MAAM,EAAEoC,QAAS;YACjD,IAAI,CAACnB,OAAOoB,MAAM,CAACb,OAAOY,QAAQ;gBAChC;YACF;YAEA,MAAME,UAAUd,KAAK,CAACY,MAAM;YAC5Bf,eAAe;gBACbC,KAAKc;gBACLb,QAAQY;gBACRX,OACE,OAAOc,YAAY,YAAYA,YAAY,OACvCA,UACAK,2CAA2CL,SAASM;YAC5D;QACF;QAEA,OAAOT;IACT,OAAO;QACL,uHAAuH;QACvH,IAAIX,iBAAiBsB,MAAM;YACzB,IAAIF,KAAKG,YAAY,EAAE;gBACrB,OAAOL;YACT;YAEA,OAAOlB;QACT;QACA,IAAIA,iBAAiBpB,MAAM;YACzB,OAAO,IAAIA,KAAKoB;QAClB;QACA,MAAMe,MAA4B,CAAC;QACnC,MAAMC,cAAchB;QACpB,KAAK,MAAMJ,KAAKH,OAAOD,IAAI,CAACwB,aAAc;YACxC,MAAMC,IAAID,WAAW,CAACpB,EAAE;YACxBC,eAAe;gBACbC,KAAKF;gBACLG,QAAQgB;gBACRf,OACE,OAAOiB,MAAM,YAAYA,MAAM,OAC3BA,IACCE,2CAA2CF,GAAQG;YAC5D;QACF;QACA,OAAOL;IACT;AACF;AAEA;;;CAGC,GACD,OAAO,SAASS,sBAAyBC,MAAS,EAAEC,QAA2B,IAAIC,SAAS;IAC1F,IAAIF,WAAW,MAAM;QACnB,OAAO;IACT;IAEA,IAAIC,MAAME,GAAG,CAACH,SAAS;QACrB,OAAOC,MAAMzB,GAAG,CAACwB;IACnB;IAEA,cAAc;IACd,IAAIA,kBAAkBH,MAAM;QAC1B,OAAOG;IACT;IAEA,cAAc;IACd,IAAIA,kBAAkB7C,MAAM;QAC1B,OAAO,IAAIA,KAAK6C,OAAOI,OAAO;IAChC;IAEA,gBAAgB;IAChB,IAAIJ,kBAAkBvC,QAAQ;QAC5B,OAAO,IAAIA,OAAOuC,OAAOrC,MAAM,EAAEqC,OAAOpC,KAAK;IAC/C;IAEA,aAAa;IACb,IAAIoC,kBAAkB/C,KAAK;QACzB,MAAMoD,YAAY,IAAIpD;QACtBgD,MAAM/C,GAAG,CAAC8C,QAAQK;QAClB,KAAK,MAAM,CAAChC,KAAKE,MAAM,IAAIyB,OAAOM,OAAO,GAAI;YAC3CD,UAAUnD,GAAG,CAACmB,KAAK0B,sBAAsBxB,OAAO0B;QAClD;QACA,OAAOI;IACT;IAEA,aAAa;IACb,IAAIL,kBAAkBxC,KAAK;QACzB,MAAM+C,YAAY,IAAI/C;QACtByC,MAAM/C,GAAG,CAAC8C,QAAQO;QAClB,KAAK,MAAMhC,SAASyB,OAAOQ,MAAM,GAAI;YACnCD,UAAUE,GAAG,CAACV,sBAAsBxB,OAAO0B;QAC7C;QACA,OAAOM;IACT;IAEA,0BAA0B;IAC1B,IAAI,OAAOP,WAAW,YAAYA,WAAW,MAAM;QACjD,IAAI,cAAcA,UAAU,OAAOA,OAAOJ,QAAQ,KAAK,UAAU;YAC/D,OAAOI;QACT;QAEA,MAAMU,eAAoBnD,MAAMqB,OAAO,CAACoB,UACpC,EAAE,GACFhC,OAAO2C,MAAM,CAAC3C,OAAO4C,cAAc,CAACZ;QACxCC,MAAM/C,GAAG,CAAC8C,QAAQU;QAElB,IAAK,MAAMrC,OAAO2B,OAAQ;YACxB,IACEhC,OAAO6C,SAAS,CAAC/B,cAAc,CAACC,IAAI,CAACiB,QAAQ3B,QAC7CL,OAAO8C,qBAAqB,CAACd,QAAQe,QAAQ,CAAC1C,MAC9C;gBACAD,eAAe;oBACbC;oBACAC,QAAQoC;oBACRnC,OAAOwB,sBAAsBC,MAAM,CAAC3B,IAAI,EAAE4B;gBAC5C;YACF;QACF;QAEA,OAAOS;IACT;IAEA,yBAAyB;IACzB,OAAOV;AACT;AAEA,SAAS5B,eAAyD,EAChEC,GAAG,EACHC,MAAM,EACNC,KAAK,EAKN;IACC,IAAIF,QAAQ,eAAgB,CAACL,OAAOoB,MAAM,CAACd,QAAQD,QAAQA,OAAOC,QAAS;QACzEN,OAAOgD,cAAc,CAAC1C,QAAQD,KAAK;YACjC4C,cAAc;YACdC,YAAY;YACZ3C;YACA4C,UAAU;QACZ;IACF,OAAO,IAAI,CAACC,QAAQlE,GAAG,CAACoB,QAAQD,KAAKE,QAAQ;QAC3C,MAAM,IAAI8C,UAAU,CAAC,0BAA0B,EAAEC,OAAOjD,MAAM;IAChE;IAEA,OAAOC;AACT"}
@@ -0,0 +1,216 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { deepCopyObject, deepCopyObjectComplex, deepCopyObjectSimple, deepCopyObjectSimpleWithoutReactComponents } from './deepCopyObject.js';
3
+ describe('deepCopyObject utilities', ()=>{
4
+ it('should copy special JSON keys as own data', ()=>{
5
+ const input = JSON.parse('{"__proto__":{"managedValue":"value"},"constructor":"constructor-value","prototype":"prototype-value"}');
6
+ const cloneFunctions = [
7
+ deepCopyObject,
8
+ deepCopyObjectSimple,
9
+ deepCopyObjectSimpleWithoutReactComponents,
10
+ deepCopyObjectComplex
11
+ ];
12
+ for (const cloneFunction of cloneFunctions){
13
+ const clone = cloneFunction(input);
14
+ expect(Object.getPrototypeOf(clone)).toBe(Object.prototype);
15
+ expect(Object.hasOwn(clone, '__proto__')).toBe(true);
16
+ expect(Reflect.get(clone, '__proto__')).toEqual({
17
+ managedValue: 'value'
18
+ });
19
+ expect(Object.getOwnPropertyDescriptor(clone, '__proto__')).toEqual({
20
+ configurable: true,
21
+ enumerable: true,
22
+ value: {
23
+ managedValue: 'value'
24
+ },
25
+ writable: true
26
+ });
27
+ expect(Object.hasOwn(clone, 'constructor')).toBe(true);
28
+ expect(Reflect.get(clone, 'constructor')).toBe('constructor-value');
29
+ expect(Object.hasOwn(clone, 'prototype')).toBe(true);
30
+ expect(Reflect.get(clone, 'prototype')).toBe('prototype-value');
31
+ expect(Reflect.get(clone, 'managedValue')).toBeUndefined();
32
+ }
33
+ });
34
+ it('should copy only own enumerable JSON data', ()=>{
35
+ const input = Object.assign(Object.create({
36
+ inheritedValue: 'inherited'
37
+ }), {
38
+ ownValue: 'own'
39
+ });
40
+ for (const cloneFunction of [
41
+ deepCopyObjectSimple,
42
+ deepCopyObjectSimpleWithoutReactComponents
43
+ ]){
44
+ const clone = cloneFunction(input);
45
+ expect(clone).toEqual({
46
+ ownValue: 'own'
47
+ });
48
+ expect(Object.hasOwn(clone, 'inheritedValue')).toBe(false);
49
+ }
50
+ });
51
+ it('should ignore inherited array elements', ()=>{
52
+ let inheritedGetterCalls = 0;
53
+ const inheritedElements = [];
54
+ const input = [];
55
+ Object.defineProperty(inheritedElements, 0, {
56
+ configurable: true,
57
+ enumerable: true,
58
+ get () {
59
+ inheritedGetterCalls += 1;
60
+ return {
61
+ value: 'inherited'
62
+ };
63
+ }
64
+ });
65
+ input.length = 1;
66
+ Object.setPrototypeOf(input, inheritedElements);
67
+ for (const cloneFunction of [
68
+ deepCopyObjectSimple,
69
+ deepCopyObjectSimpleWithoutReactComponents
70
+ ]){
71
+ const clone = cloneFunction(input);
72
+ expect(clone).toHaveLength(1);
73
+ expect(Object.hasOwn(clone, 0)).toBe(false);
74
+ }
75
+ expect(inheritedGetterCalls).toBe(0);
76
+ });
77
+ it('should create owned array elements without invoking inherited setters', ()=>{
78
+ let inheritedSetterCalls = 0;
79
+ const input = [];
80
+ Object.defineProperty(input, 0, {
81
+ configurable: true,
82
+ enumerable: true,
83
+ value: {
84
+ value: 'owned'
85
+ },
86
+ writable: true
87
+ });
88
+ const originalArrayIndexDescriptor = Object.getOwnPropertyDescriptor(Array.prototype, 0);
89
+ let clones = [];
90
+ try {
91
+ Object.defineProperty(Array.prototype, 0, {
92
+ configurable: true,
93
+ set () {
94
+ inheritedSetterCalls += 1;
95
+ }
96
+ });
97
+ clones = [
98
+ deepCopyObjectSimple(input),
99
+ deepCopyObjectSimpleWithoutReactComponents(input)
100
+ ];
101
+ } finally{
102
+ if (originalArrayIndexDescriptor) {
103
+ Object.defineProperty(Array.prototype, 0, originalArrayIndexDescriptor);
104
+ } else {
105
+ delete Array.prototype[0];
106
+ }
107
+ }
108
+ expect(inheritedSetterCalls).toBe(0);
109
+ for (const clone of clones){
110
+ expect(Object.hasOwn(clone, 0)).toBe(true);
111
+ expect(clone[0]).toEqual({
112
+ value: 'owned'
113
+ });
114
+ }
115
+ });
116
+ it('should preserve supported object values', ()=>{
117
+ const buffer = Buffer.from('value');
118
+ const date = new Date('2026-01-01T00:00:00.000Z');
119
+ const map = new Map([
120
+ [
121
+ 'key',
122
+ {
123
+ nested: true
124
+ }
125
+ ]
126
+ ]);
127
+ const regexp = /value/gi;
128
+ const set = new Set([
129
+ {
130
+ nested: true
131
+ }
132
+ ]);
133
+ const typedArray = new Uint8Array([
134
+ 1,
135
+ 2,
136
+ 3
137
+ ]);
138
+ const clone = deepCopyObject({
139
+ buffer,
140
+ date,
141
+ map,
142
+ regexp,
143
+ set,
144
+ typedArray
145
+ });
146
+ expect(clone.buffer).not.toBe(buffer);
147
+ expect(clone.buffer).toEqual(buffer);
148
+ expect(clone.date).not.toBe(date);
149
+ expect(clone.date).toEqual(date);
150
+ expect(clone.map).not.toBe(map);
151
+ expect(clone.map).toEqual(map);
152
+ expect(clone.regexp).not.toBe(regexp);
153
+ expect(clone.regexp).toEqual(regexp);
154
+ expect(clone.set).not.toBe(set);
155
+ expect(clone.set).toEqual(set);
156
+ expect(clone.typedArray).not.toBe(typedArray);
157
+ expect(clone.typedArray).toEqual(typedArray);
158
+ });
159
+ it('should preserve simple clone options', ()=>{
160
+ const input = {
161
+ date: new Date('2026-01-01T00:00:00.000Z'),
162
+ keep: 'value',
163
+ nested: [
164
+ {
165
+ value: true
166
+ }
167
+ ],
168
+ omit: undefined
169
+ };
170
+ const clone = deepCopyObjectSimple(input, true);
171
+ expect(clone).toEqual({
172
+ date: input.date,
173
+ keep: 'value',
174
+ nested: [
175
+ {
176
+ value: true
177
+ }
178
+ ]
179
+ });
180
+ expect(clone.date).not.toBe(input.date);
181
+ expect(clone.nested).not.toBe(input.nested);
182
+ expect(clone.nested[0]).not.toBe(input.nested[0]);
183
+ });
184
+ it('should preserve React component and file handling', ()=>{
185
+ const reactComponent = {
186
+ $$typeof: Symbol.for('react.element'),
187
+ type: 'div'
188
+ };
189
+ const file = new File([
190
+ 'value'
191
+ ], 'value.txt');
192
+ expect(deepCopyObjectSimpleWithoutReactComponents(reactComponent)).toBeUndefined();
193
+ expect(deepCopyObjectSimpleWithoutReactComponents(file)).toBe(file);
194
+ expect(deepCopyObjectSimpleWithoutReactComponents(file, {
195
+ excludeFiles: true
196
+ })).toBeUndefined();
197
+ });
198
+ it('should preserve circular references and custom prototypes', ()=>{
199
+ const prototype = {
200
+ inheritedValue: 'value'
201
+ };
202
+ const input = Object.assign(Object.create(prototype), {
203
+ ownValue: 'own'
204
+ });
205
+ input.self = input;
206
+ const clone = deepCopyObjectComplex(input);
207
+ expect(clone).not.toBe(input);
208
+ expect(Object.getPrototypeOf(clone)).toBe(prototype);
209
+ expect(clone.inheritedValue).toBe('value');
210
+ expect(Object.hasOwn(clone, 'inheritedValue')).toBe(false);
211
+ expect(clone.ownValue).toBe('own');
212
+ expect(clone.self).toBe(clone);
213
+ });
214
+ });
215
+
216
+ //# sourceMappingURL=deepCopyObject.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/deepCopyObject.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport {\n deepCopyObject,\n deepCopyObjectComplex,\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n} from './deepCopyObject.js'\n\ndescribe('deepCopyObject utilities', () => {\n it('should copy special JSON keys as own data', () => {\n const input = JSON.parse(\n '{\"__proto__\":{\"managedValue\":\"value\"},\"constructor\":\"constructor-value\",\"prototype\":\"prototype-value\"}',\n )\n const cloneFunctions = [\n deepCopyObject,\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n deepCopyObjectComplex,\n ]\n\n for (const cloneFunction of cloneFunctions) {\n const clone = cloneFunction(input)\n\n expect(Object.getPrototypeOf(clone)).toBe(Object.prototype)\n expect(Object.hasOwn(clone, '__proto__')).toBe(true)\n expect(Reflect.get(clone, '__proto__')).toEqual({ managedValue: 'value' })\n expect(Object.getOwnPropertyDescriptor(clone, '__proto__')).toEqual({\n configurable: true,\n enumerable: true,\n value: { managedValue: 'value' },\n writable: true,\n })\n expect(Object.hasOwn(clone, 'constructor')).toBe(true)\n expect(Reflect.get(clone, 'constructor')).toBe('constructor-value')\n expect(Object.hasOwn(clone, 'prototype')).toBe(true)\n expect(Reflect.get(clone, 'prototype')).toBe('prototype-value')\n expect(Reflect.get(clone, 'managedValue')).toBeUndefined()\n }\n })\n\n it('should copy only own enumerable JSON data', () => {\n const input = Object.assign(Object.create({ inheritedValue: 'inherited' }), {\n ownValue: 'own',\n })\n\n for (const cloneFunction of [\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n ]) {\n const clone = cloneFunction(input)\n\n expect(clone).toEqual({ ownValue: 'own' })\n expect(Object.hasOwn(clone, 'inheritedValue')).toBe(false)\n }\n })\n\n it('should ignore inherited array elements', () => {\n let inheritedGetterCalls = 0\n const inheritedElements: unknown[] = []\n const input: unknown[] = []\n\n Object.defineProperty(inheritedElements, 0, {\n configurable: true,\n enumerable: true,\n get() {\n inheritedGetterCalls += 1\n return { value: 'inherited' }\n },\n })\n input.length = 1\n Object.setPrototypeOf(input, inheritedElements)\n\n for (const cloneFunction of [\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n ]) {\n const clone = cloneFunction(input as never) as unknown[]\n\n expect(clone).toHaveLength(1)\n expect(Object.hasOwn(clone, 0)).toBe(false)\n }\n expect(inheritedGetterCalls).toBe(0)\n })\n\n it('should create owned array elements without invoking inherited setters', () => {\n let inheritedSetterCalls = 0\n const input: unknown[] = []\n\n Object.defineProperty(input, 0, {\n configurable: true,\n enumerable: true,\n value: { value: 'owned' },\n writable: true,\n })\n\n const originalArrayIndexDescriptor = Object.getOwnPropertyDescriptor(Array.prototype, 0)\n let clones: unknown[][] = []\n\n try {\n Object.defineProperty(Array.prototype, 0, {\n configurable: true,\n set() {\n inheritedSetterCalls += 1\n },\n })\n\n clones = [\n deepCopyObjectSimple(input as never) as unknown[],\n deepCopyObjectSimpleWithoutReactComponents(input as never) as unknown[],\n ]\n } finally {\n if (originalArrayIndexDescriptor) {\n Object.defineProperty(Array.prototype, 0, originalArrayIndexDescriptor)\n } else {\n delete Array.prototype[0]\n }\n }\n\n expect(inheritedSetterCalls).toBe(0)\n for (const clone of clones) {\n expect(Object.hasOwn(clone, 0)).toBe(true)\n expect(clone[0]).toEqual({ value: 'owned' })\n }\n })\n\n it('should preserve supported object values', () => {\n const buffer = Buffer.from('value')\n const date = new Date('2026-01-01T00:00:00.000Z')\n const map = new Map([['key', { nested: true }]])\n const regexp = /value/gi\n const set = new Set([{ nested: true }])\n const typedArray = new Uint8Array([1, 2, 3])\n\n const clone = deepCopyObject({ buffer, date, map, regexp, set, typedArray })\n\n expect(clone.buffer).not.toBe(buffer)\n expect(clone.buffer).toEqual(buffer)\n expect(clone.date).not.toBe(date)\n expect(clone.date).toEqual(date)\n expect(clone.map).not.toBe(map)\n expect(clone.map).toEqual(map)\n expect(clone.regexp).not.toBe(regexp)\n expect(clone.regexp).toEqual(regexp)\n expect(clone.set).not.toBe(set)\n expect(clone.set).toEqual(set)\n expect(clone.typedArray).not.toBe(typedArray)\n expect(clone.typedArray).toEqual(typedArray)\n })\n\n it('should preserve simple clone options', () => {\n const input = {\n date: new Date('2026-01-01T00:00:00.000Z'),\n keep: 'value',\n nested: [{ value: true }],\n omit: undefined,\n }\n\n const clone = deepCopyObjectSimple(input as never, true) as unknown as typeof input\n\n expect(clone).toEqual({\n date: input.date,\n keep: 'value',\n nested: [{ value: true }],\n })\n expect(clone.date).not.toBe(input.date)\n expect(clone.nested).not.toBe(input.nested)\n expect(clone.nested[0]).not.toBe(input.nested[0])\n })\n\n it('should preserve React component and file handling', () => {\n const reactComponent = {\n $$typeof: Symbol.for('react.element'),\n type: 'div',\n }\n const file = new File(['value'], 'value.txt')\n\n expect(deepCopyObjectSimpleWithoutReactComponents(reactComponent as never)).toBeUndefined()\n expect(deepCopyObjectSimpleWithoutReactComponents(file as never)).toBe(file)\n expect(\n deepCopyObjectSimpleWithoutReactComponents(file as never, { excludeFiles: true }),\n ).toBeUndefined()\n })\n\n it('should preserve circular references and custom prototypes', () => {\n const prototype = { inheritedValue: 'value' }\n const input = Object.assign(Object.create(prototype), { ownValue: 'own' }) as {\n inheritedValue: string\n ownValue: string\n self?: unknown\n }\n input.self = input\n\n const clone = deepCopyObjectComplex(input)\n\n expect(clone).not.toBe(input)\n expect(Object.getPrototypeOf(clone)).toBe(prototype)\n expect(clone.inheritedValue).toBe('value')\n expect(Object.hasOwn(clone, 'inheritedValue')).toBe(false)\n expect(clone.ownValue).toBe('own')\n expect(clone.self).toBe(clone)\n })\n})\n"],"names":["describe","expect","it","deepCopyObject","deepCopyObjectComplex","deepCopyObjectSimple","deepCopyObjectSimpleWithoutReactComponents","input","JSON","parse","cloneFunctions","cloneFunction","clone","Object","getPrototypeOf","toBe","prototype","hasOwn","Reflect","get","toEqual","managedValue","getOwnPropertyDescriptor","configurable","enumerable","value","writable","toBeUndefined","assign","create","inheritedValue","ownValue","inheritedGetterCalls","inheritedElements","defineProperty","length","setPrototypeOf","toHaveLength","inheritedSetterCalls","originalArrayIndexDescriptor","Array","clones","set","buffer","Buffer","from","date","Date","map","Map","nested","regexp","Set","typedArray","Uint8Array","not","keep","omit","undefined","reactComponent","$$typeof","Symbol","for","type","file","File","excludeFiles","self"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare const hasUnsupportedFieldPathSegment: ({ segments, }: {
2
+ segments: readonly string[];
3
+ }) => boolean;
4
+ export declare const setOwnProperty: <TTarget extends object>({ key, target, value, }: {
5
+ key: PropertyKey;
6
+ target: TTarget;
7
+ value: unknown;
8
+ }) => TTarget;
9
+ export declare const expandOwnDottedKey: ({ key, target, }: {
10
+ key: string;
11
+ target: Record<string, unknown>;
12
+ }) => boolean;
13
+ //# sourceMappingURL=fieldPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldPath.d.ts","sourceRoot":"","sources":["../../src/utilities/fieldPath.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,8BAA8B,kBAExC;IACD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAC5B,KAAG,OAAgF,CAAA;AAEpF,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,MAAM,2BAIlD;IACD,GAAG,EAAE,WAAW,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf,KAAG,OAiBH,CAAA;AAED,eAAO,MAAM,kBAAkB,qBAG5B;IACD,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC,KAAG,OA0BH,CAAA"}
@@ -0,0 +1,51 @@
1
+ const unsupportedFieldPathSegments = new Set([
2
+ '__proto__'
3
+ ]);
4
+ export const hasUnsupportedFieldPathSegment = ({ segments })=>segments.some((segment)=>unsupportedFieldPathSegments.has(segment));
5
+ export const setOwnProperty = ({ key, target, value })=>{
6
+ if (Object.hasOwn(target, key) || !(key in target)) {
7
+ if (!Reflect.set(target, key, value)) {
8
+ throw new TypeError(`Cannot assign to property ${String(key)}`);
9
+ }
10
+ return target;
11
+ }
12
+ Object.defineProperty(target, key, {
13
+ configurable: true,
14
+ enumerable: true,
15
+ value,
16
+ writable: true
17
+ });
18
+ return target;
19
+ };
20
+ export const expandOwnDottedKey = ({ key, target })=>{
21
+ if (!Object.hasOwn(target, key) || !key.includes('.')) {
22
+ return false;
23
+ }
24
+ const segments = key.split('.');
25
+ if (hasUnsupportedFieldPathSegment({
26
+ segments
27
+ })) {
28
+ delete target[key];
29
+ return false;
30
+ }
31
+ const firstDotIndex = key.indexOf('.');
32
+ const fieldName = key.substring(0, firstDotIndex);
33
+ const remainingPath = key.substring(firstDotIndex + 1);
34
+ if (!Object.hasOwn(target, fieldName) || !target[fieldName]) {
35
+ setOwnProperty({
36
+ key: fieldName,
37
+ target,
38
+ value: {}
39
+ });
40
+ }
41
+ const nestedTarget = target[fieldName];
42
+ setOwnProperty({
43
+ key: remainingPath,
44
+ target: nestedTarget,
45
+ value: target[key]
46
+ });
47
+ delete target[key];
48
+ return true;
49
+ };
50
+
51
+ //# sourceMappingURL=fieldPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/fieldPath.ts"],"sourcesContent":["const unsupportedFieldPathSegments = new Set(['__proto__'])\n\nexport const hasUnsupportedFieldPathSegment = ({\n segments,\n}: {\n segments: readonly string[]\n}): boolean => segments.some((segment) => unsupportedFieldPathSegments.has(segment))\n\nexport const setOwnProperty = <TTarget extends object>({\n key,\n target,\n value,\n}: {\n key: PropertyKey\n target: TTarget\n value: unknown\n}): TTarget => {\n if (Object.hasOwn(target, key) || !(key in target)) {\n if (!Reflect.set(target, key, value)) {\n throw new TypeError(`Cannot assign to property ${String(key)}`)\n }\n\n return target\n }\n\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n })\n\n return target\n}\n\nexport const expandOwnDottedKey = ({\n key,\n target,\n}: {\n key: string\n target: Record<string, unknown>\n}): boolean => {\n if (!Object.hasOwn(target, key) || !key.includes('.')) {\n return false\n }\n\n const segments = key.split('.')\n\n if (hasUnsupportedFieldPathSegment({ segments })) {\n delete target[key]\n return false\n }\n\n const firstDotIndex = key.indexOf('.')\n const fieldName = key.substring(0, firstDotIndex)\n const remainingPath = key.substring(firstDotIndex + 1)\n\n if (!Object.hasOwn(target, fieldName) || !target[fieldName]) {\n setOwnProperty({ key: fieldName, target, value: {} })\n }\n\n const nestedTarget = target[fieldName] as Record<string, unknown>\n\n setOwnProperty({ key: remainingPath, target: nestedTarget, value: target[key] })\n delete target[key]\n\n return true\n}\n"],"names":["unsupportedFieldPathSegments","Set","hasUnsupportedFieldPathSegment","segments","some","segment","has","setOwnProperty","key","target","value","Object","hasOwn","Reflect","set","TypeError","String","defineProperty","configurable","enumerable","writable","expandOwnDottedKey","includes","split","firstDotIndex","indexOf","fieldName","substring","remainingPath","nestedTarget"],"mappings":"AAAA,MAAMA,+BAA+B,IAAIC,IAAI;IAAC;CAAY;AAE1D,OAAO,MAAMC,iCAAiC,CAAC,EAC7CC,QAAQ,EAGT,GAAcA,SAASC,IAAI,CAAC,CAACC,UAAYL,6BAA6BM,GAAG,CAACD,UAAS;AAEpF,OAAO,MAAME,iBAAiB,CAAyB,EACrDC,GAAG,EACHC,MAAM,EACNC,KAAK,EAKN;IACC,IAAIC,OAAOC,MAAM,CAACH,QAAQD,QAAQ,CAAEA,CAAAA,OAAOC,MAAK,GAAI;QAClD,IAAI,CAACI,QAAQC,GAAG,CAACL,QAAQD,KAAKE,QAAQ;YACpC,MAAM,IAAIK,UAAU,CAAC,0BAA0B,EAAEC,OAAOR,MAAM;QAChE;QAEA,OAAOC;IACT;IAEAE,OAAOM,cAAc,CAACR,QAAQD,KAAK;QACjCU,cAAc;QACdC,YAAY;QACZT;QACAU,UAAU;IACZ;IAEA,OAAOX;AACT,EAAC;AAED,OAAO,MAAMY,qBAAqB,CAAC,EACjCb,GAAG,EACHC,MAAM,EAIP;IACC,IAAI,CAACE,OAAOC,MAAM,CAACH,QAAQD,QAAQ,CAACA,IAAIc,QAAQ,CAAC,MAAM;QACrD,OAAO;IACT;IAEA,MAAMnB,WAAWK,IAAIe,KAAK,CAAC;IAE3B,IAAIrB,+BAA+B;QAAEC;IAAS,IAAI;QAChD,OAAOM,MAAM,CAACD,IAAI;QAClB,OAAO;IACT;IAEA,MAAMgB,gBAAgBhB,IAAIiB,OAAO,CAAC;IAClC,MAAMC,YAAYlB,IAAImB,SAAS,CAAC,GAAGH;IACnC,MAAMI,gBAAgBpB,IAAImB,SAAS,CAACH,gBAAgB;IAEpD,IAAI,CAACb,OAAOC,MAAM,CAACH,QAAQiB,cAAc,CAACjB,MAAM,CAACiB,UAAU,EAAE;QAC3DnB,eAAe;YAAEC,KAAKkB;YAAWjB;YAAQC,OAAO,CAAC;QAAE;IACrD;IAEA,MAAMmB,eAAepB,MAAM,CAACiB,UAAU;IAEtCnB,eAAe;QAAEC,KAAKoB;QAAenB,QAAQoB;QAAcnB,OAAOD,MAAM,CAACD,IAAI;IAAC;IAC9E,OAAOC,MAAM,CAACD,IAAI;IAElB,OAAO;AACT,EAAC"}