@warp-drive/legacy 5.9.0-alpha.21 → 5.9.0-alpha.23

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 (467) hide show
  1. package/dist/-private-DQ6Iap2t.js +193 -0
  2. package/dist/-private-DQ6Iap2t.js.map +1 -0
  3. package/dist/-private-DccRZQsm.js +904 -0
  4. package/dist/-private-DccRZQsm.js.map +1 -0
  5. package/dist/adapter/-private.d.ts +33 -0
  6. package/dist/adapter/-private.d.ts.map +1 -0
  7. package/dist/adapter/-private.js +3 -1
  8. package/dist/adapter/error.d.ts +2 -0
  9. package/dist/adapter/error.js +422 -453
  10. package/dist/adapter/error.js.map +1 -0
  11. package/{declarations → dist}/adapter/json-api.d.ts +30 -29
  12. package/dist/adapter/json-api.d.ts.map +1 -0
  13. package/dist/adapter/json-api.js +265 -143
  14. package/dist/adapter/json-api.js.map +1 -0
  15. package/dist/adapter/rest.d.ts +2 -0
  16. package/dist/adapter/rest.js +937 -1136
  17. package/dist/adapter/rest.js.map +1 -0
  18. package/dist/adapter-CARrK3-8.d.ts +784 -0
  19. package/dist/adapter-CARrK3-8.d.ts.map +1 -0
  20. package/dist/adapter-DFVAuivO.js +1130 -0
  21. package/dist/adapter-DFVAuivO.js.map +1 -0
  22. package/dist/adapter.d.ts +2 -0
  23. package/dist/adapter.js +1 -1248
  24. package/dist/compat/-private.d.ts +2 -0
  25. package/dist/compat/-private.js +3 -1
  26. package/dist/compat/builders.d.ts +169 -0
  27. package/dist/compat/builders.d.ts.map +1 -0
  28. package/dist/compat/builders.js +205 -245
  29. package/dist/compat/builders.js.map +1 -0
  30. package/dist/compat/extensions.d.ts +2 -0
  31. package/dist/compat/extensions.js +265 -304
  32. package/dist/compat/extensions.js.map +1 -0
  33. package/dist/compat/utils.d.ts +151 -0
  34. package/dist/compat/utils.d.ts.map +1 -0
  35. package/dist/compat/utils.js +187 -206
  36. package/dist/compat/utils.js.map +1 -0
  37. package/dist/compat-BbNNmTM-.d.ts +1386 -0
  38. package/dist/compat-BbNNmTM-.d.ts.map +1 -0
  39. package/dist/compat-g__Pfy2S.js +734 -0
  40. package/dist/compat-g__Pfy2S.js.map +1 -0
  41. package/dist/compat.d.ts +2 -0
  42. package/dist/compat.js +1 -1036
  43. package/dist/error-CzkyXr1Q.d.ts +435 -0
  44. package/dist/error-CzkyXr1Q.d.ts.map +1 -0
  45. package/dist/errors-BbCo7Tut.js +2134 -0
  46. package/dist/errors-BbCo7Tut.js.map +1 -0
  47. package/dist/extensions-DumNm4dA.d.ts +102 -0
  48. package/dist/extensions-DumNm4dA.d.ts.map +1 -0
  49. package/dist/index.d.ts +243 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +267 -339
  52. package/dist/index.js.map +1 -0
  53. package/dist/json-BXNPTlcH.js +1106 -0
  54. package/dist/json-BXNPTlcH.js.map +1 -0
  55. package/dist/model/-private.d.ts +3 -0
  56. package/dist/model/-private.js +3 -1
  57. package/dist/model/migration-support.d.ts +335 -0
  58. package/dist/model/migration-support.d.ts.map +1 -0
  59. package/dist/model/migration-support.js +504 -575
  60. package/dist/model/migration-support.js.map +1 -0
  61. package/dist/model-62hn5_PD.d.ts +3107 -0
  62. package/dist/model-62hn5_PD.d.ts.map +1 -0
  63. package/dist/model-C7-ZIbd5.js +683 -0
  64. package/dist/model-C7-ZIbd5.js.map +1 -0
  65. package/dist/model-fragments-tlMYPSd_.js +334 -0
  66. package/dist/model-fragments-tlMYPSd_.js.map +1 -0
  67. package/dist/model-fragments.d.ts +294 -0
  68. package/dist/model-fragments.d.ts.map +1 -0
  69. package/dist/model-fragments.js +2 -94
  70. package/dist/model.d.ts +404 -0
  71. package/dist/model.d.ts.map +1 -0
  72. package/dist/model.js +3 -670
  73. package/{declarations/adapter/rest.d.ts → dist/rest-0NhtexIq.d.ts} +183 -173
  74. package/dist/rest-0NhtexIq.d.ts.map +1 -0
  75. package/dist/runtime-BPCpkOf1-CVHWB0MF.js +53 -0
  76. package/dist/runtime-BPCpkOf1-CVHWB0MF.js.map +1 -0
  77. package/dist/schema-provider-7RHVFTdb.js +1929 -0
  78. package/dist/schema-provider-7RHVFTdb.js.map +1 -0
  79. package/{declarations → dist}/serializer/json-api.d.ts +3 -0
  80. package/dist/serializer/json-api.d.ts.map +1 -0
  81. package/dist/serializer/json-api.js +527 -519
  82. package/dist/serializer/json-api.js.map +1 -0
  83. package/{declarations → dist}/serializer/json.d.ts +3 -0
  84. package/dist/serializer/json.d.ts.map +1 -0
  85. package/dist/serializer/json.js +3 -6
  86. package/{declarations/serializer/-private/embedded-records-mixin.d.ts → dist/serializer/rest.d.ts} +56 -1
  87. package/dist/serializer/rest.d.ts.map +1 -0
  88. package/dist/serializer/rest.js +958 -1199
  89. package/dist/serializer/rest.js.map +1 -0
  90. package/dist/serializer/transform.d.ts +313 -0
  91. package/dist/serializer/transform.d.ts.map +1 -0
  92. package/dist/serializer/transform.js +283 -308
  93. package/dist/serializer/transform.js.map +1 -0
  94. package/dist/serializer.d.ts +151 -0
  95. package/dist/serializer.d.ts.map +1 -0
  96. package/dist/serializer.js +205 -205
  97. package/dist/serializer.js.map +1 -0
  98. package/dist/store-C4qYzXei.js +473 -0
  99. package/dist/store-C4qYzXei.js.map +1 -0
  100. package/dist/store.d.ts +13 -0
  101. package/dist/store.d.ts.map +1 -0
  102. package/dist/store.js +1 -641
  103. package/dist/unpkg/dev/-private-CrEyBE-B.js +189 -0
  104. package/dist/unpkg/dev/-private-CrEyBE-B.js.map +1 -0
  105. package/dist/unpkg/dev/-private-vOhxVExH.js +896 -0
  106. package/dist/unpkg/dev/-private-vOhxVExH.js.map +1 -0
  107. package/dist/unpkg/dev/adapter/-private.js +3 -1
  108. package/dist/unpkg/dev/adapter/error.js +421 -452
  109. package/dist/unpkg/dev/adapter/error.js.map +1 -0
  110. package/dist/unpkg/dev/adapter/json-api.js +239 -257
  111. package/dist/unpkg/dev/adapter/json-api.js.map +1 -0
  112. package/dist/unpkg/dev/adapter/rest.js +935 -1134
  113. package/dist/unpkg/dev/adapter/rest.js.map +1 -0
  114. package/dist/unpkg/dev/adapter-RlAbN461.js +1129 -0
  115. package/dist/unpkg/dev/adapter-RlAbN461.js.map +1 -0
  116. package/dist/unpkg/dev/adapter.js +1 -1247
  117. package/dist/unpkg/dev/compat/-private.js +3 -1
  118. package/dist/unpkg/dev/compat/builders.js +204 -247
  119. package/dist/unpkg/dev/compat/builders.js.map +1 -0
  120. package/dist/unpkg/dev/compat/extensions.js +264 -303
  121. package/dist/unpkg/dev/compat/extensions.js.map +1 -0
  122. package/dist/unpkg/dev/compat/utils.js +186 -205
  123. package/dist/unpkg/dev/compat/utils.js.map +1 -0
  124. package/dist/unpkg/dev/compat-B2O7jZLN.js +825 -0
  125. package/dist/unpkg/dev/compat-B2O7jZLN.js.map +1 -0
  126. package/dist/unpkg/dev/compat.js +1 -1178
  127. package/dist/unpkg/dev/errors-DiBJX1gq.js +2127 -0
  128. package/dist/unpkg/dev/errors-DiBJX1gq.js.map +1 -0
  129. package/dist/unpkg/dev/index.js +266 -344
  130. package/dist/unpkg/dev/index.js.map +1 -0
  131. package/dist/unpkg/dev/json-DDJji3V3.js +1104 -0
  132. package/dist/unpkg/dev/json-DDJji3V3.js.map +1 -0
  133. package/dist/unpkg/dev/model/-private.js +3 -1
  134. package/dist/unpkg/dev/model/migration-support.js +481 -549
  135. package/dist/unpkg/dev/model/migration-support.js.map +1 -0
  136. package/dist/unpkg/dev/model-BrJ3pFM-.js +655 -0
  137. package/dist/unpkg/dev/model-BrJ3pFM-.js.map +1 -0
  138. package/dist/unpkg/dev/model-fragments-tlMYPSd_.js +334 -0
  139. package/dist/unpkg/dev/model-fragments-tlMYPSd_.js.map +1 -0
  140. package/dist/unpkg/dev/model-fragments.js +2 -94
  141. package/dist/unpkg/dev/model.js +3 -681
  142. package/dist/unpkg/dev/runtime-BPCpkOf1-CVHWB0MF.js +53 -0
  143. package/dist/unpkg/dev/runtime-BPCpkOf1-CVHWB0MF.js.map +1 -0
  144. package/dist/unpkg/dev/schema-provider-Z5GzOhu-.js +1834 -0
  145. package/dist/unpkg/dev/schema-provider-Z5GzOhu-.js.map +1 -0
  146. package/dist/unpkg/dev/serializer/json-api.js +514 -634
  147. package/dist/unpkg/dev/serializer/json-api.js.map +1 -0
  148. package/dist/unpkg/dev/serializer/json.js +3 -4
  149. package/dist/unpkg/dev/serializer/rest.js +954 -1196
  150. package/dist/unpkg/dev/serializer/rest.js.map +1 -0
  151. package/dist/unpkg/dev/serializer/transform.js +283 -308
  152. package/dist/unpkg/dev/serializer/transform.js.map +1 -0
  153. package/dist/unpkg/dev/serializer.js +205 -205
  154. package/dist/unpkg/dev/serializer.js.map +1 -0
  155. package/dist/unpkg/dev/store-D_V8-HQl.js +472 -0
  156. package/dist/unpkg/dev/store-D_V8-HQl.js.map +1 -0
  157. package/dist/unpkg/dev/store.js +1 -649
  158. package/dist/unpkg/dev/util-dSKEgQDp.js +12 -0
  159. package/dist/unpkg/dev/util-dSKEgQDp.js.map +1 -0
  160. package/dist/unpkg/dev/utils-DYC9utVJ.js +11 -0
  161. package/dist/unpkg/dev/utils-DYC9utVJ.js.map +1 -0
  162. package/dist/unpkg/dev-deprecated/-private-CrEyBE-B.js +189 -0
  163. package/dist/unpkg/dev-deprecated/-private-CrEyBE-B.js.map +1 -0
  164. package/dist/unpkg/dev-deprecated/-private-vOhxVExH.js +896 -0
  165. package/dist/unpkg/dev-deprecated/-private-vOhxVExH.js.map +1 -0
  166. package/dist/unpkg/dev-deprecated/adapter/-private.js +3 -1
  167. package/dist/unpkg/dev-deprecated/adapter/error.js +421 -452
  168. package/dist/unpkg/dev-deprecated/adapter/error.js.map +1 -0
  169. package/dist/unpkg/dev-deprecated/adapter/json-api.js +239 -257
  170. package/dist/unpkg/dev-deprecated/adapter/json-api.js.map +1 -0
  171. package/dist/unpkg/dev-deprecated/adapter/rest.js +935 -1134
  172. package/dist/unpkg/dev-deprecated/adapter/rest.js.map +1 -0
  173. package/dist/unpkg/dev-deprecated/adapter-RlAbN461.js +1129 -0
  174. package/dist/unpkg/dev-deprecated/adapter-RlAbN461.js.map +1 -0
  175. package/dist/unpkg/dev-deprecated/adapter.js +1 -1247
  176. package/dist/unpkg/dev-deprecated/compat/-private.js +3 -1
  177. package/dist/unpkg/dev-deprecated/compat/builders.js +204 -247
  178. package/dist/unpkg/dev-deprecated/compat/builders.js.map +1 -0
  179. package/dist/unpkg/dev-deprecated/compat/extensions.js +264 -303
  180. package/dist/unpkg/dev-deprecated/compat/extensions.js.map +1 -0
  181. package/dist/unpkg/dev-deprecated/compat/utils.js +186 -205
  182. package/dist/unpkg/dev-deprecated/compat/utils.js.map +1 -0
  183. package/dist/unpkg/dev-deprecated/compat-CgUa-VIF.js +825 -0
  184. package/dist/unpkg/dev-deprecated/compat-CgUa-VIF.js.map +1 -0
  185. package/dist/unpkg/dev-deprecated/compat.js +1 -1178
  186. package/dist/unpkg/dev-deprecated/errors-Cba2PDIB.js +2128 -0
  187. package/dist/unpkg/dev-deprecated/errors-Cba2PDIB.js.map +1 -0
  188. package/dist/unpkg/dev-deprecated/index.js +266 -343
  189. package/dist/unpkg/dev-deprecated/index.js.map +1 -0
  190. package/dist/unpkg/dev-deprecated/json-DDJji3V3.js +1104 -0
  191. package/dist/unpkg/dev-deprecated/json-DDJji3V3.js.map +1 -0
  192. package/dist/unpkg/dev-deprecated/model/-private.js +3 -1
  193. package/dist/unpkg/dev-deprecated/model/migration-support.js +492 -566
  194. package/dist/unpkg/dev-deprecated/model/migration-support.js.map +1 -0
  195. package/dist/unpkg/dev-deprecated/model-D-JSD2Bx.js +660 -0
  196. package/dist/unpkg/dev-deprecated/model-D-JSD2Bx.js.map +1 -0
  197. package/dist/unpkg/dev-deprecated/model-fragments-tlMYPSd_.js +334 -0
  198. package/dist/unpkg/dev-deprecated/model-fragments-tlMYPSd_.js.map +1 -0
  199. package/dist/unpkg/dev-deprecated/model-fragments.js +2 -94
  200. package/dist/unpkg/dev-deprecated/model.js +3 -685
  201. package/dist/unpkg/dev-deprecated/runtime-BPCpkOf1-CVHWB0MF.js +53 -0
  202. package/dist/unpkg/dev-deprecated/runtime-BPCpkOf1-CVHWB0MF.js.map +1 -0
  203. package/dist/unpkg/dev-deprecated/schema-provider-n96uVRhl.js +1835 -0
  204. package/dist/unpkg/dev-deprecated/schema-provider-n96uVRhl.js.map +1 -0
  205. package/dist/unpkg/dev-deprecated/serializer/json-api.js +514 -634
  206. package/dist/unpkg/dev-deprecated/serializer/json-api.js.map +1 -0
  207. package/dist/unpkg/dev-deprecated/serializer/json.js +3 -4
  208. package/dist/unpkg/dev-deprecated/serializer/rest.js +954 -1196
  209. package/dist/unpkg/dev-deprecated/serializer/rest.js.map +1 -0
  210. package/dist/unpkg/dev-deprecated/serializer/transform.js +283 -308
  211. package/dist/unpkg/dev-deprecated/serializer/transform.js.map +1 -0
  212. package/dist/unpkg/dev-deprecated/serializer.js +205 -205
  213. package/dist/unpkg/dev-deprecated/serializer.js.map +1 -0
  214. package/dist/unpkg/dev-deprecated/store-BX7GvXC_.js +472 -0
  215. package/dist/unpkg/dev-deprecated/store-BX7GvXC_.js.map +1 -0
  216. package/dist/unpkg/dev-deprecated/store.js +1 -649
  217. package/dist/unpkg/dev-deprecated/util-9mgEBJ3W.js +18 -0
  218. package/dist/unpkg/dev-deprecated/util-9mgEBJ3W.js.map +1 -0
  219. package/dist/unpkg/dev-deprecated/utils-Cl86-e7F.js +17 -0
  220. package/dist/unpkg/dev-deprecated/utils-Cl86-e7F.js.map +1 -0
  221. package/dist/unpkg/prod/-private-B4bxoTuK.js +160 -0
  222. package/dist/unpkg/prod/-private-B4bxoTuK.js.map +1 -0
  223. package/dist/unpkg/prod/-private-SfXkkHKd.js +745 -0
  224. package/dist/unpkg/prod/-private-SfXkkHKd.js.map +1 -0
  225. package/dist/unpkg/prod/adapter/-private.js +3 -1
  226. package/dist/unpkg/prod/adapter/error.js +418 -447
  227. package/dist/unpkg/prod/adapter/error.js.map +1 -0
  228. package/dist/unpkg/prod/adapter/json-api.js +236 -252
  229. package/dist/unpkg/prod/adapter/json-api.js.map +1 -0
  230. package/dist/unpkg/prod/adapter/rest.js +911 -1097
  231. package/dist/unpkg/prod/adapter/rest.js.map +1 -0
  232. package/dist/unpkg/prod/adapter-DAx_reer.js +1111 -0
  233. package/dist/unpkg/prod/adapter-DAx_reer.js.map +1 -0
  234. package/dist/unpkg/prod/adapter.js +1 -1214
  235. package/dist/unpkg/prod/compat/-private.js +3 -1
  236. package/dist/unpkg/prod/compat/builders.js +165 -182
  237. package/dist/unpkg/prod/compat/builders.js.map +1 -0
  238. package/dist/unpkg/prod/compat/extensions.js +252 -283
  239. package/dist/unpkg/prod/compat/extensions.js.map +1 -0
  240. package/dist/unpkg/prod/compat/utils.js +183 -200
  241. package/dist/unpkg/prod/compat/utils.js.map +1 -0
  242. package/dist/unpkg/prod/compat-CJ87MzDn.js +547 -0
  243. package/dist/unpkg/prod/compat-CJ87MzDn.js.map +1 -0
  244. package/dist/unpkg/prod/compat.js +1 -742
  245. package/dist/unpkg/prod/errors-CoKAYQJi.js +1977 -0
  246. package/dist/unpkg/prod/errors-CoKAYQJi.js.map +1 -0
  247. package/dist/unpkg/prod/index.js +245 -308
  248. package/dist/unpkg/prod/index.js.map +1 -0
  249. package/dist/unpkg/prod/json-BD1kRTfB.js +1080 -0
  250. package/dist/unpkg/prod/json-BD1kRTfB.js.map +1 -0
  251. package/dist/unpkg/prod/model/-private.js +3 -1
  252. package/dist/unpkg/prod/model/migration-support.js +477 -542
  253. package/dist/unpkg/prod/model/migration-support.js.map +1 -0
  254. package/dist/unpkg/prod/model-D2zzdmP8.js +603 -0
  255. package/dist/unpkg/prod/model-D2zzdmP8.js.map +1 -0
  256. package/dist/unpkg/prod/model-fragments-tlMYPSd_.js +334 -0
  257. package/dist/unpkg/prod/model-fragments-tlMYPSd_.js.map +1 -0
  258. package/dist/unpkg/prod/model-fragments.js +2 -94
  259. package/dist/unpkg/prod/model.js +3 -596
  260. package/dist/unpkg/prod/runtime-BPCpkOf1-CVHWB0MF.js +53 -0
  261. package/dist/unpkg/prod/runtime-BPCpkOf1-CVHWB0MF.js.map +1 -0
  262. package/dist/unpkg/prod/schema-provider-BUXipKQV.js +1622 -0
  263. package/dist/unpkg/prod/schema-provider-BUXipKQV.js.map +1 -0
  264. package/dist/unpkg/prod/serializer/json-api.js +497 -592
  265. package/dist/unpkg/prod/serializer/json-api.js.map +1 -0
  266. package/dist/unpkg/prod/serializer/json.js +3 -4
  267. package/dist/unpkg/prod/serializer/rest.js +938 -1166
  268. package/dist/unpkg/prod/serializer/rest.js.map +1 -0
  269. package/dist/unpkg/prod/serializer/transform.js +283 -308
  270. package/dist/unpkg/prod/serializer/transform.js.map +1 -0
  271. package/dist/unpkg/prod/serializer.js +205 -205
  272. package/dist/unpkg/prod/serializer.js.map +1 -0
  273. package/dist/unpkg/prod/store-RGGc1ilN.js +392 -0
  274. package/dist/unpkg/prod/store-RGGc1ilN.js.map +1 -0
  275. package/dist/unpkg/prod/store.js +1 -517
  276. package/dist/unpkg/prod/util-dSKEgQDp.js +12 -0
  277. package/dist/unpkg/prod/util-dSKEgQDp.js.map +1 -0
  278. package/dist/unpkg/prod/utils-DYC9utVJ.js +11 -0
  279. package/dist/unpkg/prod/utils-DYC9utVJ.js.map +1 -0
  280. package/dist/unpkg/prod-deprecated/-private-B4bxoTuK.js +160 -0
  281. package/dist/unpkg/prod-deprecated/-private-B4bxoTuK.js.map +1 -0
  282. package/dist/unpkg/prod-deprecated/-private-SfXkkHKd.js +745 -0
  283. package/dist/unpkg/prod-deprecated/-private-SfXkkHKd.js.map +1 -0
  284. package/dist/unpkg/prod-deprecated/adapter/-private.js +3 -1
  285. package/dist/unpkg/prod-deprecated/adapter/error.js +418 -447
  286. package/dist/unpkg/prod-deprecated/adapter/error.js.map +1 -0
  287. package/dist/unpkg/prod-deprecated/adapter/json-api.js +236 -252
  288. package/dist/unpkg/prod-deprecated/adapter/json-api.js.map +1 -0
  289. package/dist/unpkg/prod-deprecated/adapter/rest.js +911 -1097
  290. package/dist/unpkg/prod-deprecated/adapter/rest.js.map +1 -0
  291. package/{declarations/adapter.d.ts → dist/unpkg/prod-deprecated/adapter-DAx_reer.js} +445 -110
  292. package/dist/unpkg/prod-deprecated/adapter-DAx_reer.js.map +1 -0
  293. package/dist/unpkg/prod-deprecated/adapter.js +1 -1214
  294. package/dist/unpkg/prod-deprecated/compat/-private.js +3 -1
  295. package/dist/unpkg/prod-deprecated/compat/builders.js +165 -182
  296. package/dist/unpkg/prod-deprecated/compat/builders.js.map +1 -0
  297. package/dist/unpkg/prod-deprecated/compat/extensions.js +252 -283
  298. package/dist/unpkg/prod-deprecated/compat/extensions.js.map +1 -0
  299. package/dist/unpkg/prod-deprecated/compat/utils.js +183 -200
  300. package/dist/unpkg/prod-deprecated/compat/utils.js.map +1 -0
  301. package/dist/unpkg/prod-deprecated/compat-CJ87MzDn.js +547 -0
  302. package/dist/unpkg/prod-deprecated/compat-CJ87MzDn.js.map +1 -0
  303. package/dist/unpkg/prod-deprecated/compat.js +1 -742
  304. package/dist/unpkg/prod-deprecated/errors-BUVJ3jcW.js +1978 -0
  305. package/dist/unpkg/prod-deprecated/errors-BUVJ3jcW.js.map +1 -0
  306. package/dist/unpkg/prod-deprecated/index.js +245 -307
  307. package/dist/unpkg/prod-deprecated/index.js.map +1 -0
  308. package/dist/unpkg/prod-deprecated/json-BD1kRTfB.js +1080 -0
  309. package/dist/unpkg/prod-deprecated/json-BD1kRTfB.js.map +1 -0
  310. package/dist/unpkg/prod-deprecated/model/-private.js +3 -1
  311. package/dist/unpkg/prod-deprecated/model/migration-support.js +488 -559
  312. package/dist/unpkg/prod-deprecated/model/migration-support.js.map +1 -0
  313. package/dist/unpkg/prod-deprecated/model-66Pl5niO.js +604 -0
  314. package/dist/unpkg/prod-deprecated/model-66Pl5niO.js.map +1 -0
  315. package/dist/unpkg/prod-deprecated/model-fragments-tlMYPSd_.js +334 -0
  316. package/dist/unpkg/prod-deprecated/model-fragments-tlMYPSd_.js.map +1 -0
  317. package/dist/unpkg/prod-deprecated/model-fragments.js +2 -94
  318. package/dist/unpkg/prod-deprecated/model.js +3 -599
  319. package/dist/unpkg/prod-deprecated/runtime-BPCpkOf1-CVHWB0MF.js +53 -0
  320. package/dist/unpkg/prod-deprecated/runtime-BPCpkOf1-CVHWB0MF.js.map +1 -0
  321. package/dist/unpkg/prod-deprecated/schema-provider-DtyBaLoG.js +1635 -0
  322. package/dist/unpkg/prod-deprecated/schema-provider-DtyBaLoG.js.map +1 -0
  323. package/dist/unpkg/prod-deprecated/serializer/json-api.js +497 -592
  324. package/dist/unpkg/prod-deprecated/serializer/json-api.js.map +1 -0
  325. package/dist/unpkg/prod-deprecated/serializer/json.js +3 -4
  326. package/dist/unpkg/prod-deprecated/serializer/rest.js +938 -1166
  327. package/dist/unpkg/prod-deprecated/serializer/rest.js.map +1 -0
  328. package/dist/unpkg/prod-deprecated/serializer/transform.js +283 -308
  329. package/dist/unpkg/prod-deprecated/serializer/transform.js.map +1 -0
  330. package/dist/unpkg/prod-deprecated/serializer.js +205 -205
  331. package/dist/unpkg/prod-deprecated/serializer.js.map +1 -0
  332. package/dist/unpkg/prod-deprecated/store-0L2CkYzh.js +392 -0
  333. package/dist/unpkg/prod-deprecated/store-0L2CkYzh.js.map +1 -0
  334. package/dist/unpkg/prod-deprecated/store.js +1 -517
  335. package/dist/unpkg/prod-deprecated/util-CQQdHX3n.js +14 -0
  336. package/dist/unpkg/prod-deprecated/util-CQQdHX3n.js.map +1 -0
  337. package/dist/unpkg/prod-deprecated/utils-BMI_JwFP.js +13 -0
  338. package/dist/unpkg/prod-deprecated/utils-BMI_JwFP.js.map +1 -0
  339. package/dist/util-Bnx8nm-D.js +29 -0
  340. package/dist/util-Bnx8nm-D.js.map +1 -0
  341. package/dist/utils-ZAytYep8.js +28 -0
  342. package/dist/utils-ZAytYep8.js.map +1 -0
  343. package/package.json +16 -16
  344. package/declarations/adapter/-private/build-url-mixin.d.ts +0 -189
  345. package/declarations/adapter/-private/fastboot-interface.d.ts +0 -8
  346. package/declarations/adapter/-private/utils/continue-on-reject.d.ts +0 -1
  347. package/declarations/adapter/-private/utils/determine-body-promise.d.ts +0 -4
  348. package/declarations/adapter/-private/utils/fetch.d.ts +0 -8
  349. package/declarations/adapter/-private/utils/parse-response-headers.d.ts +0 -1
  350. package/declarations/adapter/-private/utils/serialize-into-hash.d.ts +0 -6
  351. package/declarations/adapter/-private/utils/serialize-query-params.d.ts +0 -5
  352. package/declarations/adapter/-private.d.ts +0 -5
  353. package/declarations/adapter/error.d.ts +0 -431
  354. package/declarations/compat/-private.d.ts +0 -13
  355. package/declarations/compat/builders/find-all.d.ts +0 -34
  356. package/declarations/compat/builders/find-record.d.ts +0 -56
  357. package/declarations/compat/builders/query.d.ts +0 -66
  358. package/declarations/compat/builders/save-record.d.ts +0 -34
  359. package/declarations/compat/builders/utils.d.ts +0 -3
  360. package/declarations/compat/builders.d.ts +0 -14
  361. package/declarations/compat/extensions.d.ts +0 -99
  362. package/declarations/compat/legacy-network-handler/fetch-manager.d.ts +0 -55
  363. package/declarations/compat/legacy-network-handler/identifier-has-id.d.ts +0 -2
  364. package/declarations/compat/legacy-network-handler/legacy-data-fetch.d.ts +0 -11
  365. package/declarations/compat/legacy-network-handler/legacy-data-utils.d.ts +0 -5
  366. package/declarations/compat/legacy-network-handler/legacy-network-handler.d.ts +0 -9
  367. package/declarations/compat/legacy-network-handler/minimum-adapter-interface.d.ts +0 -528
  368. package/declarations/compat/legacy-network-handler/minimum-serializer-interface.d.ts +0 -220
  369. package/declarations/compat/legacy-network-handler/serializer-response.d.ts +0 -6
  370. package/declarations/compat/legacy-network-handler/snapshot-record-array.d.ts +0 -110
  371. package/declarations/compat/legacy-network-handler/snapshot.d.ts +0 -255
  372. package/declarations/compat/utils.d.ts +0 -148
  373. package/declarations/compat.d.ts +0 -189
  374. package/declarations/index.d.ts +0 -244
  375. package/declarations/model/-private/attr.d.ts +0 -191
  376. package/declarations/model/-private/belongs-to.d.ts +0 -195
  377. package/declarations/model/-private/debug/assert-polymorphic-type.d.ts +0 -5
  378. package/declarations/model/-private/errors.d.ts +0 -289
  379. package/declarations/model/-private/has-many.d.ts +0 -162
  380. package/declarations/model/-private/hooks.d.ts +0 -36
  381. package/declarations/model/-private/legacy-relationships-support.d.ts +0 -47
  382. package/declarations/model/-private/model-for-mixin.d.ts +0 -3
  383. package/declarations/model/-private/model-methods.d.ts +0 -39
  384. package/declarations/model/-private/model.d.ts +0 -1279
  385. package/declarations/model/-private/notify-changes.d.ts +0 -4
  386. package/declarations/model/-private/promise-belongs-to.d.ts +0 -40
  387. package/declarations/model/-private/promise-many-array.d.ts +0 -130
  388. package/declarations/model/-private/record-state.d.ts +0 -58
  389. package/declarations/model/-private/references/belongs-to.d.ts +0 -488
  390. package/declarations/model/-private/references/has-many.d.ts +0 -498
  391. package/declarations/model/-private/schema-provider.d.ts +0 -66
  392. package/declarations/model/-private/type-utils.d.ts +0 -57
  393. package/declarations/model/-private/util.d.ts +0 -5
  394. package/declarations/model/-private.d.ts +0 -8
  395. package/declarations/model/migration-support.d.ts +0 -306
  396. package/declarations/model-fragments/extensions/fragment-array.d.ts +0 -54
  397. package/declarations/model-fragments/extensions/fragment.d.ts +0 -50
  398. package/declarations/model-fragments/hooks/model-for.d.ts +0 -27
  399. package/declarations/model-fragments/index.d.ts +0 -13
  400. package/declarations/model-fragments/instance-initializers/fragment-extensions.d.ts +0 -15
  401. package/declarations/model-fragments/utilities/with-array-defaults.d.ts +0 -56
  402. package/declarations/model-fragments/utilities/with-fragment-array-defaults.d.ts +0 -38
  403. package/declarations/model-fragments/utilities/with-fragment-defaults.d.ts +0 -34
  404. package/declarations/model-fragments/utilities/with-legacy.d.ts +0 -11
  405. package/declarations/model-fragments.d.ts +0 -9
  406. package/declarations/model.d.ts +0 -49
  407. package/declarations/serializer/-private/transforms/boolean.d.ts +0 -60
  408. package/declarations/serializer/-private/transforms/date.d.ts +0 -42
  409. package/declarations/serializer/-private/transforms/number.d.ts +0 -42
  410. package/declarations/serializer/-private/transforms/string.d.ts +0 -42
  411. package/declarations/serializer/-private/transforms/transform.d.ts +0 -118
  412. package/declarations/serializer/-private/utils.d.ts +0 -27
  413. package/declarations/serializer/rest.d.ts +0 -51
  414. package/declarations/serializer/transform.d.ts +0 -5
  415. package/declarations/serializer.d.ts +0 -252
  416. package/declarations/store/-private.d.ts +0 -223
  417. package/declarations/store.d.ts +0 -10
  418. package/dist/-private-BG3bMiKp.js +0 -1211
  419. package/dist/errors-DZKA206g.js +0 -2589
  420. package/dist/hooks-BvOqJBei.js +0 -105
  421. package/dist/json-DU8m1pGf.js +0 -1336
  422. package/dist/model-for-CXkJw59V.js +0 -297
  423. package/dist/runtime-BPCpkOf1-BKOwiRJp.js +0 -65
  424. package/dist/schema-provider-DtPOp0d7.js +0 -2382
  425. package/dist/serialize-into-hash-DPZYoF-i.js +0 -261
  426. package/dist/unpkg/dev/-private-DtjBbEgy.js +0 -1206
  427. package/dist/unpkg/dev/errors-DngRU-If.js +0 -2585
  428. package/dist/unpkg/dev/hooks-UuiLxWxS.js +0 -104
  429. package/dist/unpkg/dev/json-K2Y9z6MN.js +0 -1333
  430. package/dist/unpkg/dev/model-for-CXkJw59V.js +0 -297
  431. package/dist/unpkg/dev/runtime-BPCpkOf1-BKOwiRJp.js +0 -65
  432. package/dist/unpkg/dev/schema-provider-0D7f-QOn.js +0 -2272
  433. package/dist/unpkg/dev/serialize-into-hash-B2xDbuo5.js +0 -259
  434. package/dist/unpkg/dev/util-DvanW33H.js +0 -20
  435. package/dist/unpkg/dev/utils-BhvS1iTS.js +0 -8
  436. package/dist/unpkg/dev-deprecated/-private-DtjBbEgy.js +0 -1206
  437. package/dist/unpkg/dev-deprecated/errors-Bzidntpi.js +0 -2588
  438. package/dist/unpkg/dev-deprecated/hooks-DVXhMW14.js +0 -104
  439. package/dist/unpkg/dev-deprecated/json-K2Y9z6MN.js +0 -1333
  440. package/dist/unpkg/dev-deprecated/model-for-CXkJw59V.js +0 -297
  441. package/dist/unpkg/dev-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +0 -65
  442. package/dist/unpkg/dev-deprecated/schema-provider-ZwO5_fZw.js +0 -2292
  443. package/dist/unpkg/dev-deprecated/serialize-into-hash-B2xDbuo5.js +0 -259
  444. package/dist/unpkg/dev-deprecated/util-CWr5WQOT.js +0 -24
  445. package/dist/unpkg/dev-deprecated/utils-C9PJehtL.js +0 -12
  446. package/dist/unpkg/prod/-private-BdyZaGEh.js +0 -971
  447. package/dist/unpkg/prod/errors-B-PWeYlW.js +0 -2337
  448. package/dist/unpkg/prod/hooks-Bx-zBziU.js +0 -72
  449. package/dist/unpkg/prod/json-Qewu-UN9.js +0 -1300
  450. package/dist/unpkg/prod/model-for-CXkJw59V.js +0 -297
  451. package/dist/unpkg/prod/runtime-BPCpkOf1-BKOwiRJp.js +0 -65
  452. package/dist/unpkg/prod/schema-provider-BgRqk8i9.js +0 -1951
  453. package/dist/unpkg/prod/serialize-into-hash-DGlzQteF.js +0 -215
  454. package/dist/unpkg/prod/util-DvanW33H.js +0 -20
  455. package/dist/unpkg/prod/utils-BhvS1iTS.js +0 -8
  456. package/dist/unpkg/prod-deprecated/-private-BdyZaGEh.js +0 -971
  457. package/dist/unpkg/prod-deprecated/errors-Dl2J9d1D.js +0 -2340
  458. package/dist/unpkg/prod-deprecated/hooks-Cm60wWTf.js +0 -72
  459. package/dist/unpkg/prod-deprecated/json-Qewu-UN9.js +0 -1300
  460. package/dist/unpkg/prod-deprecated/model-for-CXkJw59V.js +0 -297
  461. package/dist/unpkg/prod-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +0 -65
  462. package/dist/unpkg/prod-deprecated/schema-provider-Dh6tRqVI.js +0 -1980
  463. package/dist/unpkg/prod-deprecated/serialize-into-hash-DGlzQteF.js +0 -215
  464. package/dist/unpkg/prod-deprecated/util-B6cn-i93.js +0 -23
  465. package/dist/unpkg/prod-deprecated/utils-BUWwQwCh.js +0 -11
  466. package/dist/util-Dul6TZts.js +0 -35
  467. package/dist/utils-Cqw9eRj5.js +0 -23
@@ -1,1336 +0,0 @@
1
- import { getOwner } from '@ember/application';
2
- import { warn } from '@ember/debug';
3
- import { dasherize, singularize } from '@warp-drive/utilities/string';
4
- import { Serializer } from './serializer.js';
5
- import { macroCondition, getGlobalConfig } from '@embroider/macros';
6
- function coerceId(id) {
7
- if (id === null || id === undefined || id === '') {
8
- return null;
9
- } else if (typeof id === 'string') {
10
- return id;
11
- } else if (typeof id === 'symbol') {
12
- return id.toString();
13
- } else {
14
- return String(id);
15
- }
16
- }
17
-
18
- /**
19
- Given the name of a relationship on a resource `type`, determines the
20
- inverse relationship field (if any) using only the schema service.
21
-
22
- Unlike `Model.inverseFor`, this does not require `type` to be backed by
23
- a `Model` class, so it works for both `Model`-based and schema-only
24
- (e.g. `withDefaults` migration-support) resources.
25
-
26
- @private
27
- */
28
- function inverseForRelationship(store, type, name) {
29
- const relationship = store.schema.fields({
30
- type
31
- }).get(name);
32
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
33
- if (!test) {
34
- throw new Error(`No relationship named '${name}' on '${type}' exists.`);
35
- }
36
- })(relationship) : {};
37
- const {
38
- options
39
- } = relationship;
40
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
41
- if (!test) {
42
- throw new Error(`Expected the relationship ${name} on ${type} to define an inverse.`);
43
- }
44
- })(options.inverse === null || typeof options.inverse === 'string' && options.inverse.length > 0) : {};
45
- if (options.inverse === null) {
46
- return null;
47
- }
48
- const schemaExists = store.schema.hasResource(relationship);
49
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
50
- if (!test) {
51
- throw new Error(`No associated schema found for '${relationship.type}' while calculating the inverse of ${name} on ${type}`);
52
- }
53
- })(schemaExists) : {};
54
- if (!schemaExists) {
55
- return null;
56
- }
57
- const inverseField = store.schema.fields(relationship).get(options.inverse);
58
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
59
- if (!test) {
60
- throw new Error(`No inverse relationship found for '${name}' on '${type}'`);
61
- }
62
- })(inverseField && (inverseField.kind === 'belongsTo' || inverseField.kind === 'hasMany')) : {};
63
- return inverseField ?? null;
64
- }
65
-
66
- /**
67
- Given a relationship field on a resource `type`, determines the
68
- cardinality of the relationship using only the schema service.
69
-
70
- Unlike `Model.determineRelationshipType`, this does not require `type`
71
- to be backed by a `Model` class, so it works for both `Model`-based and
72
- schema-only (e.g. `withDefaults` migration-support) resources.
73
-
74
- @private
75
- */
76
- function determineRelationshipType(store, type, knownSide) {
77
- const knownKind = knownSide.kind;
78
- const inverse = inverseForRelationship(store, type, knownSide.name);
79
- if (!inverse) {
80
- return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
81
- }
82
- const otherKind = inverse.kind;
83
- if (otherKind === 'belongsTo') {
84
- return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
85
- } else {
86
- return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
87
- }
88
- }
89
-
90
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
91
- /* eslint-disable @typescript-eslint/no-unsafe-call */
92
- /* eslint-disable @typescript-eslint/no-unsafe-return */
93
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
94
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
95
- const SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/;
96
- const SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/;
97
- const PRIMARY_ATTRIBUTE_KEY = 'base';
98
-
99
- /**
100
- * :::danger
101
- ⚠️ **This is LEGACY documentation** for a feature that is no longer encouraged to be used.
102
- If starting a new app or thinking of implementing a new adapter, consider writing a
103
- {@link Handler} instead to be used with the {@link RequestManager}
104
- :::
105
-
106
- In WarpDrive a Serializer is used to serialize and deserialize
107
- records when they are transferred in and out of an external source.
108
- This process involves normalizing property names, transforming
109
- attribute values and serializing relationships.
110
-
111
- By default, WarpDrive uses and recommends the `JSONAPISerializer`.
112
-
113
- `JSONSerializer` is useful for simpler or legacy backends that may
114
- not support the http://jsonapi.org/ spec.
115
-
116
- For example, given the following `User` model and JSON payload:
117
-
118
- ```js [app/models/user.js]
119
- import Model, { attr, belongsTo, hasMany } from '@warp-drive/legacy/model';
120
-
121
- export default class UserModel extends Model {
122
- @hasMany('user') friends;
123
- @belongsTo('location') house;
124
-
125
- @attr('string') name;
126
- }
127
- ```
128
-
129
- ```js
130
- {
131
- id: 1,
132
- name: 'Sebastian',
133
- friends: [3, 4],
134
- links: {
135
- house: '/houses/lefkada'
136
- }
137
- }
138
- ```
139
-
140
- `JSONSerializer` will normalize the JSON payload to the {json:api} format that the
141
- JSONAPICache uses to cache data in the Store.
142
-
143
- You can customize how JSONSerializer processes its payload by passing options in
144
- the `attrs` hash or by subclassing the `JSONSerializer` and overriding hooks:
145
-
146
- - To customize how a single record is normalized, use the `normalize` hook.
147
- - To customize how `JSONSerializer` normalizes the whole server response, use the
148
- `normalizeResponse` hook.
149
- - To customize how `JSONSerializer` normalizes a specific response from the server,
150
- use one of the many specific `normalizeResponse` hooks.
151
- - To customize how `JSONSerializer` normalizes your id, attributes or relationships,
152
- use the `extractId`, `extractAttributes` and `extractRelationships` hooks.
153
-
154
- The `JSONSerializer` normalization process follows these steps:
155
-
156
- 1. `normalizeResponse`
157
- - entry method to the serializer.
158
- 2. `normalizeCreateRecordResponse`
159
- - a `normalizeResponse` for a specific operation is called.
160
- 3. `normalizeSingleResponse`|`normalizeArrayResponse`
161
- - for methods like `createRecord` we expect a single record back, while for methods like `findAll` we expect multiple records back.
162
- 4. `normalize`
163
- - `normalizeArrayResponse` iterates and calls `normalize` for each of its records while `normalizeSingle`
164
- calls it once. This is the method you most likely want to subclass.
165
- 5. `extractId` | `extractAttributes` | `extractRelationships`
166
- - `normalize` delegates to these methods to
167
- turn the record payload into the JSON API format.
168
-
169
- @class JSONSerializer
170
- @public
171
- */
172
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
- const JSONSerializer = Serializer.extend({
174
- /**
175
- The `primaryKey` is used when serializing and deserializing
176
- data. WarpDrive always uses the `id` property to store the id of
177
- the record. The external source may not always follow this
178
- convention. In these cases it is useful to override the
179
- `primaryKey` property to match the `primaryKey` of your external
180
- store.
181
- Example
182
- ```js [app/serializers/application.js]
183
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
184
- export default class ApplicationSerializer extends JSONSerializer {
185
- primaryKey = '_id'
186
- }
187
- ```
188
- @public
189
- @default 'id'
190
- */
191
- primaryKey: 'id',
192
- /**
193
- The `attrs` object can be used to declare a simple mapping between
194
- property names on `Model` records and payload keys in the
195
- serialized JSON object representing the record. An object with the
196
- property `key` can also be used to designate the attribute's key on
197
- the response payload.
198
- Example
199
- ```js [app/models/person.js]
200
- import Model, { attr } from '@warp-drive/legacy/model';
201
- export default class PersonModel extends Model {
202
- @attr('string') firstName;
203
- @attr('string') lastName;
204
- @attr('string') occupation;
205
- @attr('boolean') admin;
206
- }
207
- ```
208
- ```js [app/serializers/person.js]
209
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
210
- export default class PersonSerializer extends JSONSerializer {
211
- attrs = {
212
- admin: 'is_admin',
213
- occupation: { key: 'career' }
214
- }
215
- }
216
- ```
217
- You can also remove attributes and relationships by setting the `serialize`
218
- key to `false` in your mapping object.
219
- Example
220
- ```js [app/serializers/person.js]
221
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
222
- export default class PostSerializer extends JSONSerializer {
223
- attrs = {
224
- admin: { serialize: false },
225
- occupation: { key: 'career' }
226
- }
227
- }
228
- ```
229
- When serialized:
230
- ```js
231
- {
232
- "firstName": "Harry",
233
- "lastName": "Houdini",
234
- "career": "magician"
235
- }
236
- ```
237
- Note that the `admin` is now not included in the payload.
238
- Setting `serialize` to `true` enforces serialization for hasMany
239
- relationships even if it's neither a many-to-many nor many-to-none
240
- relationship.
241
- @public
242
- */
243
- mergedProperties: ['attrs'],
244
- /**
245
- Given a subclass of `Model` and a JSON object this method will
246
- iterate through each attribute of the `Model` and invoke the
247
- `Transform#deserialize` method on the matching property of the
248
- JSON object. This method is typically called after the
249
- serializer's `normalize` method.
250
- @private
251
- */
252
- applyTransforms(typeClass, data) {
253
- const attributes = typeClass.attributes;
254
- typeClass.eachTransformedAttribute((key, type) => {
255
- if (data[key] === undefined) {
256
- return;
257
- }
258
- const transform = this.transformFor(type);
259
- const transformMeta = attributes.get(key);
260
- data[key] = transform.deserialize(data[key], transformMeta.options);
261
- });
262
- return data;
263
- },
264
- /**
265
- The `normalizeResponse` method is used to normalize a payload from the
266
- server to a JSON-API Document.
267
- http://jsonapi.org/format/#document-structure
268
- This method delegates to a more specific normalize method based on
269
- the `requestType`.
270
- To override this method with a custom one, make sure to call
271
- `return super.normalizeResponse(store, primaryModelClass, payload, id, requestType)` with your
272
- pre-processed data.
273
- Here's an example of using `normalizeResponse` manually:
274
- ```javascript
275
- socket.on('message', function(message) {
276
- let data = message.data;
277
- let modelClass = store.modelFor(data.modelName);
278
- let serializer = store.serializerFor(data.modelName);
279
- let normalized = serializer.normalizeSingleResponse(store, modelClass, data, data.id);
280
- store.push(normalized);
281
- });
282
- ```
283
- @since 1.13.0
284
- @public
285
- */
286
- normalizeResponse(store, primaryModelClass, payload, id, requestType) {
287
- switch (requestType) {
288
- case 'findRecord':
289
- // @ts-expect-error
290
- return this.normalizeFindRecordResponse(...arguments);
291
- case 'queryRecord':
292
- // @ts-expect-error
293
- return this.normalizeQueryRecordResponse(...arguments);
294
- case 'findAll':
295
- // @ts-expect-error
296
- return this.normalizeFindAllResponse(...arguments);
297
- case 'findBelongsTo':
298
- // @ts-expect-error
299
- return this.normalizeFindBelongsToResponse(...arguments);
300
- case 'findHasMany':
301
- // @ts-expect-error
302
- return this.normalizeFindHasManyResponse(...arguments);
303
- case 'findMany':
304
- // @ts-expect-error
305
- return this.normalizeFindManyResponse(...arguments);
306
- case 'query':
307
- // @ts-expect-error
308
- return this.normalizeQueryResponse(...arguments);
309
- case 'createRecord':
310
- // @ts-expect-error
311
- return this.normalizeCreateRecordResponse(...arguments);
312
- case 'deleteRecord':
313
- // @ts-expect-error
314
- return this.normalizeDeleteRecordResponse(...arguments);
315
- case 'updateRecord':
316
- // @ts-expect-error
317
- return this.normalizeUpdateRecordResponse(...arguments);
318
- }
319
- },
320
- /**
321
- Called by the default normalizeResponse implementation when the
322
- type of request is `findRecord`
323
- @since 1.13.0
324
- @public
325
- */
326
- normalizeFindRecordResponse(store, primaryModelClass, payload, id, requestType) {
327
- // @ts-expect-error
328
- return this.normalizeSingleResponse(...arguments);
329
- },
330
- /**
331
- Called by the default normalizeResponse implementation when the
332
- type of request is `queryRecord`
333
- @since 1.13.0
334
- @public
335
- */
336
- normalizeQueryRecordResponse(store, primaryModelClass, payload, id, requestType) {
337
- // @ts-expect-error
338
- return this.normalizeSingleResponse(...arguments);
339
- },
340
- /**
341
- Called by the default normalizeResponse implementation when the
342
- type of request is `findAll`
343
- @since 1.13.0
344
- @public
345
- */
346
- normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {
347
- // @ts-expect-error
348
- return this.normalizeArrayResponse(...arguments);
349
- },
350
- /**
351
- Called by the default normalizeResponse implementation when the
352
- type of request is `findBelongsTo`
353
- @since 1.13.0
354
- @public
355
- */
356
- normalizeFindBelongsToResponse(store, primaryModelClass, payload, id, requestType) {
357
- // @ts-expect-error
358
- return this.normalizeSingleResponse(...arguments);
359
- },
360
- /**
361
- Called by the default normalizeResponse implementation when the
362
- type of request is `findHasMany`
363
- @since 1.13.0
364
- @public
365
- */
366
- normalizeFindHasManyResponse(store, primaryModelClass, payload, id, requestType) {
367
- // @ts-expect-error
368
- return this.normalizeArrayResponse(...arguments);
369
- },
370
- /**
371
- Called by the default normalizeResponse implementation when the
372
- type of request is `findMany`
373
- @since 1.13.0
374
- @public
375
- */
376
- normalizeFindManyResponse(store, primaryModelClass, payload, id, requestType) {
377
- // @ts-expect-error
378
- return this.normalizeArrayResponse(...arguments);
379
- },
380
- /**
381
- Called by the default normalizeResponse implementation when the
382
- type of request is `query`
383
- @since 1.13.0
384
- @public
385
- */
386
- normalizeQueryResponse(store, primaryModelClass, payload, id, requestType) {
387
- // @ts-expect-error
388
- return this.normalizeArrayResponse(...arguments);
389
- },
390
- /**
391
- Called by the default normalizeResponse implementation when the
392
- type of request is `createRecord`
393
- @since 1.13.0
394
- @public
395
- */
396
- normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {
397
- // @ts-expect-error
398
- return this.normalizeSaveResponse(...arguments);
399
- },
400
- /**
401
- Called by the default normalizeResponse implementation when the
402
- type of request is `deleteRecord`
403
- @since 1.13.0
404
- @public
405
- */
406
- normalizeDeleteRecordResponse(store, primaryModelClass, payload, id, requestType) {
407
- // @ts-expect-error
408
- return this.normalizeSaveResponse(...arguments);
409
- },
410
- /**
411
- Called by the default normalizeResponse implementation when the
412
- type of request is `updateRecord`
413
- @since 1.13.0
414
- @public
415
- */
416
- normalizeUpdateRecordResponse(store, primaryModelClass, payload, id, requestType) {
417
- // @ts-expect-error
418
- return this.normalizeSaveResponse(...arguments);
419
- },
420
- /**
421
- normalizeUpdateRecordResponse, normalizeCreateRecordResponse and
422
- normalizeDeleteRecordResponse delegate to this method by default.
423
- @since 1.13.0
424
- @public
425
- */
426
- normalizeSaveResponse(store, primaryModelClass, payload, id, requestType) {
427
- // @ts-expect-error
428
- return this.normalizeSingleResponse(...arguments);
429
- },
430
- /**
431
- normalizeQueryResponse and normalizeFindRecordResponse delegate to this
432
- method by default.
433
- @since 1.13.0
434
- @public
435
- */
436
- normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {
437
- return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, true);
438
- },
439
- /**
440
- normalizeQueryResponse, normalizeFindManyResponse, and normalizeFindHasManyResponse delegate
441
- to this method by default.
442
- @since 1.13.0
443
- @public
444
- */
445
- normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {
446
- return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, false);
447
- },
448
- /**
449
- @private
450
- */
451
- _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {
452
- const documentHash = {
453
- data: null,
454
- included: []
455
- };
456
- const meta = this.extractMeta(store, primaryModelClass, payload);
457
- if (meta) {
458
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
459
- if (!test) {
460
- throw new Error('The `meta` returned from `extractMeta` has to be an object, not "' + typeof meta + '".');
461
- }
462
- })(typeof meta === 'object') : {};
463
- // @ts-expect-error untyped
464
- documentHash.meta = meta;
465
- }
466
- if (isSingle) {
467
- // @ts-expect-error untyped
468
- const {
469
- data,
470
- included
471
- } = this.normalize(primaryModelClass, payload);
472
- documentHash.data = data;
473
- if (included) {
474
- documentHash.included = included;
475
- }
476
- } else {
477
- // @ts-expect-error untyped
478
- const ret = new Array(payload.length);
479
- // @ts-expect-error untyped
480
- for (let i = 0, l = payload.length; i < l; i++) {
481
- const item = payload[i];
482
- // @ts-expect-error untyped
483
- const {
484
- data,
485
- included
486
- } = this.normalize(primaryModelClass, item);
487
- if (included) {
488
- documentHash.included = documentHash.included.concat(included);
489
- }
490
- ret[i] = data;
491
- }
492
-
493
- // @ts-expect-error untyped
494
- documentHash.data = ret;
495
- }
496
- return documentHash;
497
- },
498
- /**
499
- Normalizes a part of the JSON payload returned by
500
- the server. You should override this method, munge the hash
501
- and call super if you have generic normalization to do.
502
- It takes the type of the record that is being normalized
503
- (as a Model class), the property where the hash was
504
- originally found, and the hash to normalize.
505
- You can use this method, for example, to normalize underscored keys to camelized
506
- or other general-purpose normalizations.
507
- Example
508
- ```js [app/serializers/application.js]
509
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
510
- import { underscore } from '<app-name>/utils/string-utils';
511
- import { get } from '@ember/object';
512
- export default class ApplicationSerializer extends JSONSerializer {
513
- normalize(typeClass, hash) {
514
- let fields = typeClass.fields;
515
- fields.forEach(function(type, field) {
516
- let payloadField = underscore(field);
517
- if (field === payloadField) { return; }
518
- hash[field] = hash[payloadField];
519
- delete hash[payloadField];
520
- });
521
- return super.normalize(...arguments);
522
- }
523
- }
524
- ```
525
- @public
526
- */
527
- normalize(modelClass, resourceHash) {
528
- let data = null;
529
- if (resourceHash) {
530
- this.normalizeUsingDeclaredMapping(modelClass, resourceHash);
531
- // @ts-expect-error untyped
532
- if (typeof resourceHash.links === 'object') {
533
- // @ts-expect-error untyped
534
- this.normalizeUsingDeclaredMapping(modelClass, resourceHash.links);
535
- }
536
-
537
- // @ts-expect-error untyped
538
- data = {
539
- id: this.extractId(modelClass, resourceHash),
540
- type: modelClass.modelName,
541
- attributes: this.extractAttributes(modelClass, resourceHash),
542
- relationships: this.extractRelationships(modelClass, resourceHash)
543
- };
544
-
545
- // @ts-expect-error untyped
546
- if (resourceHash.lid) {
547
- // @ts-expect-error untyped
548
- data.lid = resourceHash.lid;
549
- }
550
-
551
- // @ts-expect-error untyped
552
- this.applyTransforms(modelClass, data.attributes);
553
- }
554
- return {
555
- data
556
- };
557
- },
558
- /**
559
- Returns the resource's ID.
560
- @public
561
- */
562
- extractId(modelClass, resourceHash) {
563
- const primaryKey = this.primaryKey;
564
- const id = resourceHash[primaryKey];
565
- return coerceId(id);
566
- },
567
- /**
568
- Returns the resource's attributes formatted as a JSON-API "attributes object".
569
- http://jsonapi.org/format/#document-resource-object-attributes
570
- @public
571
- */
572
- extractAttributes(modelClass, resourceHash) {
573
- let attributeKey;
574
- const attributes = {};
575
- modelClass.eachAttribute(key => {
576
- attributeKey = this.keyForAttribute(key, 'deserialize');
577
- if (resourceHash[attributeKey] !== undefined) {
578
- attributes[key] = resourceHash[attributeKey];
579
- }
580
- });
581
- return attributes;
582
- },
583
- /**
584
- Returns a relationship formatted as a JSON-API "relationship object".
585
- http://jsonapi.org/format/#document-resource-object-relationships
586
- @public
587
- */
588
- extractRelationship(relationshipModelName, relationshipHash) {
589
- if (!relationshipHash) {
590
- return null;
591
- }
592
- /*
593
- When `relationshipHash` is an object it usually means that the relationship
594
- is polymorphic. It could however also be embedded resources that the
595
- EmbeddedRecordsMixin has be able to process.
596
- */
597
- if (relationshipHash && typeof relationshipHash === 'object' && !Array.isArray(relationshipHash)) {
598
- // @ts-expect-error untyped
599
- if (relationshipHash.id) {
600
- // @ts-expect-error untyped
601
- relationshipHash.id = coerceId(relationshipHash.id);
602
- }
603
-
604
- // @ts-expect-error store is dynamically injected
605
- const modelClass = this.store.modelFor(relationshipModelName);
606
- // @ts-expect-error untyped
607
- if (relationshipHash.type && !modelClass.fields.has('type')) {
608
- // @ts-expect-error untyped
609
- relationshipHash.type = this.modelNameFromPayloadKey(relationshipHash.type);
610
- }
611
- return relationshipHash;
612
- }
613
- return {
614
- id: coerceId(relationshipHash),
615
- type: dasherize(singularize(relationshipModelName))
616
- };
617
- },
618
- /**
619
- Returns a polymorphic relationship formatted as a JSON-API "relationship object".
620
- http://jsonapi.org/format/#document-resource-object-relationships
621
- `relationshipOptions` is a hash which contains more information about the
622
- polymorphic relationship which should be extracted:
623
- - `resourceHash` complete hash of the resource the relationship should be
624
- extracted from
625
- - `relationshipKey` key under which the value for the relationship is
626
- extracted from the resourceHash
627
- - `relationshipMeta` meta information about the relationship
628
- @public
629
- */
630
- extractPolymorphicRelationship(relationshipModelName, relationshipHash, relationshipOptions) {
631
- return this.extractRelationship(relationshipModelName, relationshipHash);
632
- },
633
- /**
634
- Returns the resource's relationships formatted as a JSON-API "relationships object".
635
- http://jsonapi.org/format/#document-resource-object-relationships
636
- @public
637
- */
638
- extractRelationships(modelClass, resourceHash) {
639
- const relationships = {};
640
- modelClass.eachRelationship((key, relationshipMeta) => {
641
- let relationship = null;
642
- const relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize');
643
- if (resourceHash[relationshipKey] !== undefined) {
644
- let data = null;
645
- const relationshipHash = resourceHash[relationshipKey];
646
- if (relationshipMeta.kind === 'belongsTo') {
647
- if (relationshipMeta.options.polymorphic) {
648
- // extracting a polymorphic belongsTo may need more information
649
- // than the type and the hash (which might only be an id) for the
650
- // relationship, hence we pass the key, resource and
651
- // relationshipMeta too
652
- // @ts-expect-error untyped
653
- data = this.extractPolymorphicRelationship(relationshipMeta.type, relationshipHash, {
654
- key,
655
- resourceHash,
656
- relationshipMeta
657
- });
658
- } else {
659
- // @ts-expect-error untyped
660
- data = this.extractRelationship(relationshipMeta.type, relationshipHash);
661
- }
662
- } else if (relationshipMeta.kind === 'hasMany') {
663
- if (relationshipHash) {
664
- // @ts-expect-error untyped
665
- data = new Array(relationshipHash.length);
666
- if (relationshipMeta.options.polymorphic) {
667
- for (let i = 0, l = relationshipHash.length; i < l; i++) {
668
- const item = relationshipHash[i];
669
- // @ts-expect-error untyped
670
- data[i] = this.extractPolymorphicRelationship(relationshipMeta.type, item, {
671
- key,
672
- resourceHash,
673
- relationshipMeta
674
- });
675
- }
676
- } else {
677
- for (let i = 0, l = relationshipHash.length; i < l; i++) {
678
- const item = relationshipHash[i];
679
- // @ts-expect-error untyped
680
- data[i] = this.extractRelationship(relationshipMeta.type, item);
681
- }
682
- }
683
- }
684
- }
685
- // @ts-expect-error untyped
686
- relationship = {
687
- data
688
- };
689
- }
690
- const linkKey = this.keyForLink(key, relationshipMeta.kind);
691
- // @ts-expect-error untyped
692
- if (resourceHash.links && resourceHash.links[linkKey] !== undefined) {
693
- // @ts-expect-error untyped
694
- const related = resourceHash.links[linkKey];
695
- // @ts-expect-error untyped
696
- relationship = relationship || {};
697
- // @ts-expect-error untyped
698
- relationship.links = {
699
- related
700
- };
701
- }
702
- if (relationship) {
703
- relationships[key] = relationship;
704
- }
705
- });
706
- return relationships;
707
- },
708
- /**
709
- Dasherizes the model name in the payload
710
- @public
711
- @return the model's modelName
712
- */
713
- modelNameFromPayloadKey(key) {
714
- return dasherize(singularize(key));
715
- },
716
- /**
717
- @private
718
- */
719
- normalizeRelationships(typeClass, hash) {
720
- let payloadKey;
721
- if (this.keyForRelationship) {
722
- typeClass.eachRelationship((key, relationship) => {
723
- payloadKey = this.keyForRelationship(key, relationship.kind, 'deserialize');
724
- if (key === payloadKey) {
725
- return;
726
- }
727
- if (hash[payloadKey] === undefined) {
728
- return;
729
- }
730
- hash[key] = hash[payloadKey];
731
- delete hash[payloadKey];
732
- });
733
- }
734
- },
735
- /**
736
- @private
737
- */
738
- normalizeUsingDeclaredMapping(modelClass, hash) {
739
- // @ts-expect-error attrs is dynamically injected
740
- const attrs = this.attrs;
741
- let normalizedKey;
742
- let payloadKey;
743
- if (attrs) {
744
- for (const key in attrs) {
745
- normalizedKey = payloadKey = this._getMappedKey(key, modelClass);
746
- if (hash[payloadKey] === undefined) {
747
- continue;
748
- }
749
- if (modelClass.attributes.has(key)) {
750
- normalizedKey = this.keyForAttribute(key, 'deserialize');
751
- }
752
- if (modelClass.relationshipsByName.has(key)) {
753
- normalizedKey = this.keyForRelationship(key, modelClass, 'deserialize');
754
- }
755
- if (payloadKey !== normalizedKey) {
756
- hash[normalizedKey] = hash[payloadKey];
757
- delete hash[payloadKey];
758
- }
759
- }
760
- }
761
- },
762
- /**
763
- Looks up the property key that was set by the custom `attr` mapping
764
- passed to the serializer.
765
- @private
766
- */
767
- _getMappedKey(key, modelClass) {
768
- warn('There is no attribute or relationship with the name `' + key + '` on `' + modelClass.modelName + '`. Check your serializers attrs hash.', modelClass.attributes.has(key) || modelClass.relationshipsByName.has(key), {
769
- id: 'ds.serializer.no-mapped-attrs-key'
770
- });
771
- // @ts-expect-error attrs is dynamically injected
772
- const attrs = this.attrs;
773
- let mappedKey;
774
- if (attrs && attrs[key]) {
775
- mappedKey = attrs[key];
776
- //We need to account for both the { title: 'post_title' } and
777
- //{ title: { key: 'post_title' }} forms
778
- if (mappedKey.key) {
779
- mappedKey = mappedKey.key;
780
- }
781
- if (typeof mappedKey === 'string') {
782
- key = mappedKey;
783
- }
784
- }
785
- return key;
786
- },
787
- /**
788
- Check attrs.key.serialize property to inform if the `key`
789
- can be serialized
790
- @private
791
- @return true if the key can be serialized
792
- */
793
- _canSerialize(key) {
794
- // @ts-expect-error no idea what attrs is here
795
- const attrs = this.attrs;
796
- return !attrs || !attrs[key] || attrs[key].serialize !== false;
797
- },
798
- /**
799
- When attrs.key.serialize is set to true then
800
- it takes priority over the other checks and the related
801
- attribute/relationship will be serialized
802
- @private
803
- @return true if the key must be serialized
804
- */
805
- _mustSerialize(key) {
806
- // @ts-expect-error no idea what attrs is here
807
- const attrs = this.attrs;
808
- return attrs && attrs[key] && attrs[key].serialize === true;
809
- },
810
- /**
811
- Check if the given hasMany relationship should be serialized
812
- By default only many-to-many and many-to-none relationships are serialized.
813
- This could be configured per relationship by Serializer's `attrs` object.
814
- @public
815
- @return true if the hasMany relationship should be serialized
816
- */
817
- shouldSerializeHasMany(snapshot, key, relationship) {
818
- // @ts-expect-error store is dynamically injected
819
- const relationshipType = determineRelationshipType(this.store, snapshot.modelName, relationship);
820
- if (this._mustSerialize(key)) {
821
- return true;
822
- }
823
- return this._canSerialize(key) && (relationshipType === 'manyToNone' || relationshipType === 'manyToMany');
824
- },
825
- // SERIALIZE
826
- /**
827
- Called when a record is saved in order to convert the
828
- record into JSON.
829
- By default, it creates a JSON object with a key for
830
- each attribute and belongsTo relationship.
831
- For example, consider this model:
832
- ```js [app/models/comment.js]
833
- import Model, { attr, belongsTo } from '@warp-drive/legacy/model';
834
- export default class CommentModel extends Model {
835
- @attr title;
836
- @attr body;
837
- @belongsTo('user') author;
838
- }
839
- ```
840
- The default serialization would create a JSON object like:
841
- ```javascript
842
- {
843
- "title": "Rails is unagi",
844
- "body": "Rails? Omakase? O_O",
845
- "author": 12
846
- }
847
- ```
848
- By default, attributes are passed through as-is, unless
849
- you specified an attribute type (`attr('date')`). If
850
- you specify a transform, the JavaScript value will be
851
- serialized when inserted into the JSON hash.
852
- By default, belongs-to relationships are converted into
853
- IDs when inserted into the JSON hash.
854
- ## IDs
855
- `serialize` takes an options hash with a single option:
856
- `includeId`. If this option is `true`, `serialize` will,
857
- by default include the ID in the JSON object it builds.
858
- Whether `includeId` is `true` or `false` depends on the
859
- adapter and the operation being performed, since it is the
860
- adapter that invokes `serialize` and decides which options
861
- to pass. For instance, `RESTAdapter` passes `includeId: true`
862
- when serializing a record for `createRecord`, but not for
863
- `updateRecord`, while `JSONAPIAdapter` passes `includeId: true`
864
- for both `createRecord` and `updateRecord`. Refer to the
865
- documentation for the adapter and serializer pairing you are
866
- using for specifics.
867
- ## Customization
868
- Your server may expect a different JSON format than the
869
- built-in serialization format.
870
- In that case, you can implement `serialize` yourself and
871
- return a JSON hash of your choosing.
872
- ```js [app/serializers/post.js]
873
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
874
- export default class PostSerializer extends JSONSerializer {
875
- serialize(snapshot, options) {
876
- let json = {
877
- POST_TTL: snapshot.attr('title'),
878
- POST_BDY: snapshot.attr('body'),
879
- POST_CMS: snapshot.hasMany('comments', { ids: true })
880
- };
881
- if (options.includeId) {
882
- json.POST_ID_ = snapshot.id;
883
- }
884
- return json;
885
- }
886
- }
887
- ```
888
- ## Customizing an App-Wide Serializer
889
- If you want to define a serializer for your entire
890
- application, you'll probably want to use `eachAttribute`
891
- and `eachRelationship` on the record.
892
- ```js [app/serializers/application.js]
893
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
894
- import { singularize } from '<app-name>/utils/string-utils';
895
- export default class ApplicationSerializer extends JSONSerializer {
896
- serialize(snapshot, options) {
897
- let json = {};
898
- snapshot.eachAttribute((name) => {
899
- json[serverAttributeName(name)] = snapshot.attr(name);
900
- });
901
- snapshot.eachRelationship((name, relationship) => {
902
- if (relationship.kind === 'hasMany') {
903
- json[serverHasManyName(name)] = snapshot.hasMany(name, { ids: true });
904
- }
905
- });
906
- if (options.includeId) {
907
- json.ID_ = snapshot.id;
908
- }
909
- return json;
910
- }
911
- }
912
- function serverAttributeName(attribute) {
913
- return attribute.underscore().toUpperCase();
914
- }
915
- function serverHasManyName(name) {
916
- return serverAttributeName(singularize(name)) + "_IDS";
917
- }
918
- ```
919
- This serializer will generate JSON that looks like this:
920
- ```javascript
921
- {
922
- "TITLE": "Rails is omakase",
923
- "BODY": "Yep. Omakase.",
924
- "COMMENT_IDS": [ "1", "2", "3" ]
925
- }
926
- ```
927
- ## Tweaking the Default JSON
928
- If you just want to do some small tweaks on the default JSON,
929
- you can call `super.serialize` first and make the tweaks on
930
- the returned JSON.
931
- ```js [app/serializers/post.js]
932
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
933
- export default class PostSerializer extends JSONSerializer {
934
- serialize(snapshot, options) {
935
- let json = super.serialize(...arguments);
936
- json.subject = json.title;
937
- delete json.title;
938
- return json;
939
- }
940
- }
941
- ```
942
- @public
943
- */
944
- serialize(snapshot, options) {
945
- const json = {};
946
-
947
- // @ts-expect-error super loose typing here right now
948
- if (options && options.includeId) {
949
- const id = snapshot.id;
950
- if (id) {
951
- json[this.primaryKey] = id;
952
- }
953
- }
954
- snapshot.eachAttribute((key, attribute) => {
955
- this.serializeAttribute(snapshot, json, key, attribute);
956
- });
957
- snapshot.eachRelationship((key, relationship) => {
958
- if (relationship.kind === 'belongsTo') {
959
- this.serializeBelongsTo(snapshot, json, relationship);
960
- } else if (relationship.kind === 'hasMany') {
961
- this.serializeHasMany(snapshot, json, relationship);
962
- }
963
- });
964
- return json;
965
- },
966
- /**
967
- You can use this method to customize how a serialized record is added to the complete
968
- JSON hash to be sent to the server. By default the JSON Serializer does not namespace
969
- the payload and just sends the raw serialized JSON object.
970
- If your server expects namespaced keys, you should consider using the RESTSerializer.
971
- Otherwise you can override this method to customize how the record is added to the hash.
972
- The hash property should be modified by reference.
973
- For example, your server may expect underscored root objects.
974
- ```js [app/serializers/application.js]
975
- import RESTSerializer from '@warp-drive/legacy/serializer/rest';
976
- import { underscoren} from '<app-name>/utils/string-utils';
977
- export default class ApplicationSerializer extends RESTSerializer {
978
- serializeIntoHash(data, type, snapshot, options) {
979
- let root = underscore(type.modelName);
980
- data[root] = this.serialize(snapshot, options);
981
- }
982
- }
983
- ```
984
- @public
985
- */
986
- serializeIntoHash(hash, typeClass, snapshot, options) {
987
- Object.assign(hash, this.serialize(snapshot, options));
988
- },
989
- /**
990
- `serializeAttribute` can be used to customize how `attr`
991
- properties are serialized
992
- For example if you wanted to ensure all your attributes were always
993
- serialized as properties on an `attributes` object you could
994
- write:
995
- ```js [app/serializers/application.js]
996
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
997
- export default class ApplicationSerializer extends JSONSerializer {
998
- serializeAttribute(snapshot, json, key, attributes) {
999
- json.attributes = json.attributes || {};
1000
- super.serializeAttribute(snapshot, json.attributes, key, attributes);
1001
- }
1002
- }
1003
- ```
1004
- @public
1005
- */
1006
- serializeAttribute(snapshot, json, key, attribute) {
1007
- if (this._canSerialize(key)) {
1008
- const type = attribute.type;
1009
- // @ts-expect-error we don't know what is on the snapshot
1010
- let value = snapshot.attr(key);
1011
- if (type) {
1012
- const transform = this.transformFor(type);
1013
- value = transform.serialize(value, attribute.options);
1014
- }
1015
-
1016
- // if provided, use the mapping provided by `attrs` in
1017
- // the serializer
1018
- // @ts-expect-error store added dynamically
1019
- const schema = this.store.modelFor(snapshot.modelName);
1020
- let payloadKey = this._getMappedKey(key, schema);
1021
- if (payloadKey === key && this.keyForAttribute) {
1022
- payloadKey = this.keyForAttribute(key, 'serialize');
1023
- }
1024
- json[payloadKey] = value;
1025
- }
1026
- },
1027
- /**
1028
- `serializeBelongsTo` can be used to customize how `belongsTo`
1029
- properties are serialized.
1030
- Example
1031
- ```js [app/serializers/post.js]
1032
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1033
- export default class PostSerializer extends JSONSerializer {
1034
- serializeBelongsTo(snapshot, json, relationship) {
1035
- let key = relationship.name;
1036
- let belongsTo = snapshot.belongsTo(key);
1037
- key = this.keyForRelationship ? this.keyForRelationship(key, "belongsTo", "serialize") : key;
1038
- json[key] = !belongsTo ? null : belongsTo.record.toJSON();
1039
- }
1040
- }
1041
- ```
1042
- @public
1043
- */
1044
- serializeBelongsTo(snapshot, json, relationship) {
1045
- const name = relationship.name;
1046
- if (this._canSerialize(name)) {
1047
- const belongsToId = snapshot.belongsTo(name, {
1048
- id: true
1049
- });
1050
-
1051
- // if provided, use the mapping provided by `attrs` in
1052
- // the serializer
1053
- // @ts-expect-error store added dynamically
1054
- const schema = this.store.modelFor(snapshot.modelName);
1055
- let payloadKey = this._getMappedKey(name, schema);
1056
- if (payloadKey === name && this.keyForRelationship) {
1057
- payloadKey = this.keyForRelationship(name, 'belongsTo', 'serialize');
1058
- }
1059
-
1060
- //Need to check whether the id is there for new&async records
1061
- if (!belongsToId) {
1062
- json[payloadKey] = null;
1063
- } else {
1064
- json[payloadKey] = belongsToId;
1065
- }
1066
- if (relationship.options.polymorphic) {
1067
- this.serializePolymorphicType(snapshot, json, relationship);
1068
- }
1069
- }
1070
- },
1071
- /**
1072
- `serializeHasMany` can be used to customize how `hasMany`
1073
- properties are serialized.
1074
- Example
1075
- ```js [app/serializers/post.js]
1076
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1077
- export default class PostSerializer extends JSONSerializer {
1078
- serializeHasMany(snapshot, json, relationship) {
1079
- let key = relationship.name;
1080
- if (key === 'comments') {
1081
- return;
1082
- } else {
1083
- super.serializeHasMany(...arguments);
1084
- }
1085
- }
1086
- }
1087
- ```
1088
- @public
1089
- */
1090
- serializeHasMany(snapshot, json, relationship) {
1091
- const name = relationship.name;
1092
- if (this.shouldSerializeHasMany(snapshot, name, relationship)) {
1093
- const hasMany = snapshot.hasMany(name, {
1094
- ids: true
1095
- });
1096
- if (hasMany !== undefined) {
1097
- // if provided, use the mapping provided by `attrs` in
1098
- // the serializer
1099
- // @ts-expect-error store added dynamically
1100
- const schema = this.store.modelFor(snapshot.modelName);
1101
- let payloadKey = this._getMappedKey(name, schema);
1102
- if (payloadKey === name && this.keyForRelationship) {
1103
- payloadKey = this.keyForRelationship(name, 'hasMany', 'serialize');
1104
- }
1105
- json[payloadKey] = hasMany;
1106
- // TODO support for polymorphic manyToNone and manyToMany relationships
1107
- }
1108
- }
1109
- },
1110
- /**
1111
- You can use this method to customize how polymorphic objects are
1112
- serialized. Objects are considered to be polymorphic if
1113
- `{ polymorphic: true }` is pass as the second argument to the
1114
- `belongsTo` function.
1115
- Example
1116
- ```js [app/serializers/comment.js]
1117
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1118
- export default class CommentSerializer extends JSONSerializer {
1119
- serializePolymorphicType(snapshot, json, relationship) {
1120
- let key = relationship.name;
1121
- let belongsTo = snapshot.belongsTo(key);
1122
- key = this.keyForAttribute ? this.keyForAttribute(key, 'serialize') : key;
1123
- if (!belongsTo) {
1124
- json[key + '_type'] = null;
1125
- } else {
1126
- json[key + '_type'] = belongsTo.modelName;
1127
- }
1128
- }
1129
- }
1130
- ```
1131
- @public
1132
- */
1133
- serializePolymorphicType(snapshot, json, relationship) {},
1134
- /**
1135
- `extractMeta` is used to deserialize any meta information in the
1136
- adapter payload. By default Ember Data expects meta information to
1137
- be located on the `meta` property of the payload object.
1138
- Example
1139
- ```js [app/serializers/post.js]
1140
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1141
- export default class PostSerializer extends JSONSerializer {
1142
- extractMeta(store, typeClass, payload) {
1143
- if (payload && payload.hasOwnProperty('_pagination')) {
1144
- let meta = payload._pagination;
1145
- delete payload._pagination;
1146
- return meta;
1147
- }
1148
- }
1149
- }
1150
- ```
1151
- @public
1152
- */
1153
- extractMeta(store, modelClass, payload) {
1154
- if (payload && payload['meta'] !== undefined) {
1155
- // @ts-expect-error
1156
- const meta = payload.meta;
1157
- // @ts-expect-error
1158
- delete payload.meta;
1159
- return meta;
1160
- }
1161
- },
1162
- /**
1163
- `extractErrors` is used to extract model errors when a call
1164
- to `Model#save` fails with an `InvalidError`. By default
1165
- Ember Data expects error information to be located on the `errors`
1166
- property of the payload object.
1167
- This serializer expects this `errors` object to be an Array similar
1168
- to the following, compliant with the https://jsonapi.org/format/#errors specification:
1169
- ```js
1170
- {
1171
- "errors": [
1172
- {
1173
- "detail": "This username is already taken!",
1174
- "source": {
1175
- "pointer": "data/attributes/username"
1176
- }
1177
- }, {
1178
- "detail": "Doesn't look like a valid email.",
1179
- "source": {
1180
- "pointer": "data/attributes/email"
1181
- }
1182
- }
1183
- ]
1184
- }
1185
- ```
1186
- The key `detail` provides a textual description of the problem.
1187
- Alternatively, the key `title` can be used for the same purpose.
1188
- The nested keys `source.pointer` detail which specific element
1189
- of the request data was invalid.
1190
- Note that JSON-API also allows for object-level errors to be placed
1191
- in an object with pointer `data`, signifying that the problem
1192
- cannot be traced to a specific attribute:
1193
- ```javascript
1194
- {
1195
- "errors": [
1196
- {
1197
- "detail": "Some generic non property error message",
1198
- "source": {
1199
- "pointer": "data"
1200
- }
1201
- }
1202
- ]
1203
- }
1204
- ```
1205
- When turn into a `Errors` object, you can read these errors
1206
- through the property `base`:
1207
- ```handlebars
1208
- {{#each @model.errors.base as |error|}}
1209
- <div class="error">
1210
- {{error.message}}
1211
- </div>
1212
- {{/each}}
1213
- ```
1214
- Example of alternative implementation, overriding the default
1215
- behavior to deal with a different format of errors:
1216
- ```js [app/serializers/post.js]
1217
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1218
- export default class PostSerializer extends JSONSerializer {
1219
- extractErrors(store, typeClass, payload, id) {
1220
- if (payload && typeof payload === 'object' && payload._problems) {
1221
- payload = payload._problems;
1222
- this.normalizeErrors(typeClass, payload);
1223
- }
1224
- return payload;
1225
- }
1226
- }
1227
- ```
1228
- @public
1229
- @return json The deserialized errors
1230
- */
1231
- extractErrors(store, typeClass, payload, id) {
1232
- // @ts-expect-error
1233
- if (payload && typeof payload === 'object' && payload.errors) {
1234
- // the default assumption is that errors is already in JSON:API format
1235
- const extracted = {};
1236
-
1237
- // @ts-expect-error
1238
- payload.errors.forEach(error => {
1239
- if (error.source && error.source.pointer) {
1240
- let key = error.source.pointer.match(SOURCE_POINTER_REGEXP);
1241
- if (key) {
1242
- key = key[2];
1243
- } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {
1244
- key = PRIMARY_ATTRIBUTE_KEY;
1245
- }
1246
- if (key) {
1247
- extracted[key] = extracted[key] || [];
1248
- extracted[key].push(error.detail || error.title);
1249
- }
1250
- }
1251
- });
1252
-
1253
- // if the user has an attrs hash, convert keys using it
1254
- this.normalizeUsingDeclaredMapping(typeClass, extracted);
1255
-
1256
- // for each attr and relationship, make sure that we use
1257
- // the normalized key
1258
- typeClass.eachAttribute(name => {
1259
- const key = this.keyForAttribute(name, 'deserialize');
1260
- if (key !== name && extracted[key] !== undefined) {
1261
- extracted[name] = extracted[key];
1262
- delete extracted[key];
1263
- }
1264
- });
1265
- typeClass.eachRelationship(name => {
1266
- const key = this.keyForRelationship(name, 'deserialize');
1267
- if (key !== name && extracted[key] !== undefined) {
1268
- extracted[name] = extracted[key];
1269
- delete extracted[key];
1270
- }
1271
- });
1272
- return extracted;
1273
- }
1274
- return payload;
1275
- },
1276
- /**
1277
- `keyForAttribute` can be used to define rules for how to convert an
1278
- attribute name in your model to a key in your JSON.
1279
- Example
1280
- ```js [app/serializers/application.js]
1281
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1282
- import { underscore } from '<app-name>/utils/string-utils';
1283
- export default class ApplicationSerializer extends JSONSerializer {
1284
- keyForAttribute(attr, method) {
1285
- return underscore(attr).toUpperCase();
1286
- }
1287
- }
1288
- ```
1289
- @public
1290
- */
1291
- keyForAttribute(key, method) {
1292
- return key;
1293
- },
1294
- /**
1295
- `keyForRelationship` can be used to define a custom key when
1296
- serializing and deserializing relationship properties. By default
1297
- `JSONSerializer` does not provide an implementation of this method.
1298
- Example
1299
- ```js [app/serializers/post.js]
1300
- import { JSONSerializer } from '@warp-drive/legacy/serializer/json';
1301
- import { underscore } from '<app-name>/utils/string-utils';
1302
- export default class PostSerializer extends JSONSerializer {
1303
- keyForRelationship(key, relationship, method) {
1304
- return `rel_${underscore(key)}`;
1305
- }
1306
- }
1307
- ```
1308
- @public
1309
- */
1310
- keyForRelationship(key, typeClass, method) {
1311
- return key;
1312
- },
1313
- /**
1314
- `keyForLink` can be used to define a custom key when deserializing link
1315
- properties.
1316
- @public
1317
- */
1318
- keyForLink(key, kind) {
1319
- return key;
1320
- },
1321
- // HELPERS
1322
-
1323
- /**
1324
- @private
1325
- */
1326
- transformFor(attributeType, skipAssertion) {
1327
- const transform = getOwner(this).lookup(`transform:${attributeType}`);
1328
- macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
1329
- if (!test) {
1330
- throw new Error(`Unable to find the transform for \`attr('${attributeType}')\``);
1331
- }
1332
- })(skipAssertion || !!transform) : {};
1333
- return transform;
1334
- }
1335
- });
1336
- export { JSONSerializer as J, coerceId as c, inverseForRelationship as i };