@livepreso/api 6.46.0 → 6.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/.rush/temp/package-deps_build.json +156 -141
  2. package/.rush/temp/shrinkwrap-deps.json +424 -374
  3. package/CHANGELOG.json +29 -0
  4. package/CHANGELOG.md +15 -1
  5. package/api.build.log +6 -1
  6. package/cjs/api.js +18 -3
  7. package/cjs/api.js.map +1 -1
  8. package/cjs/api.spec.js +4 -0
  9. package/cjs/api.spec.js.map +1 -1
  10. package/cjs/auth.js +29 -2
  11. package/cjs/auth.js.map +1 -1
  12. package/cjs/auth.spec.js +77 -52
  13. package/cjs/auth.spec.js.map +1 -1
  14. package/cjs/caching.js +7 -2
  15. package/cjs/caching.js.map +1 -1
  16. package/cjs/collections/activity.js +56 -16
  17. package/cjs/collections/activity.js.map +1 -1
  18. package/cjs/collections/adjunct-sections.js +10 -1
  19. package/cjs/collections/adjunct-sections.js.map +1 -1
  20. package/cjs/collections/adjunct-slides.js +10 -1
  21. package/cjs/collections/adjunct-slides.js.map +1 -1
  22. package/cjs/collections/adjunct-sub-slides.js +9 -1
  23. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  24. package/cjs/collections/appointment-adjunct-tags.js +9 -1
  25. package/cjs/collections/appointment-adjunct-tags.js.map +1 -1
  26. package/cjs/collections/appointment-deckversion-tags.js +9 -1
  27. package/cjs/collections/appointment-deckversion-tags.js.map +1 -1
  28. package/cjs/collections/appointment-editors.js +10 -1
  29. package/cjs/collections/appointment-editors.js.map +1 -1
  30. package/cjs/collections/appointment-section-tags.js +9 -1
  31. package/cjs/collections/appointment-section-tags.js.map +1 -1
  32. package/cjs/collections/appointment-slide-tags.js +9 -1
  33. package/cjs/collections/appointment-slide-tags.js.map +1 -1
  34. package/cjs/collections/appointment-tags.js +103 -64
  35. package/cjs/collections/appointment-tags.js.map +1 -1
  36. package/cjs/collections/appointment-templates.js +10 -1
  37. package/cjs/collections/appointment-templates.js.map +1 -1
  38. package/cjs/collections/appointments.js +29 -9
  39. package/cjs/collections/appointments.js.map +1 -1
  40. package/cjs/collections/assets.js +9 -1
  41. package/cjs/collections/assets.js.map +1 -1
  42. package/cjs/collections/auto-adjuncts.js +21 -6
  43. package/cjs/collections/auto-adjuncts.js.map +1 -1
  44. package/cjs/collections/base.js +112 -34
  45. package/cjs/collections/base.js.map +1 -1
  46. package/cjs/collections/base.spec.js +233 -186
  47. package/cjs/collections/base.spec.js.map +1 -1
  48. package/cjs/collections/cms-vals.js +16 -4
  49. package/cjs/collections/cms-vals.js.map +1 -1
  50. package/cjs/collections/contact-phones.js +9 -1
  51. package/cjs/collections/contact-phones.js.map +1 -1
  52. package/cjs/collections/contacts.js +9 -1
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +10 -1
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +9 -1
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +10 -1
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-version-screenshots.js +17 -4
  61. package/cjs/collections/deck-version-screenshots.js.map +1 -1
  62. package/cjs/collections/deck-versions.js +20 -5
  63. package/cjs/collections/deck-versions.js.map +1 -1
  64. package/cjs/collections/decks.js +9 -1
  65. package/cjs/collections/decks.js.map +1 -1
  66. package/cjs/collections/deleted-assets.js +10 -1
  67. package/cjs/collections/deleted-assets.js.map +1 -1
  68. package/cjs/collections/dispatches.js +14 -1
  69. package/cjs/collections/dispatches.js.map +1 -1
  70. package/cjs/collections/event-objects.js +9 -1
  71. package/cjs/collections/event-objects.js.map +1 -1
  72. package/cjs/collections/events.js +9 -1
  73. package/cjs/collections/events.js.map +1 -1
  74. package/cjs/collections/groups.js +9 -1
  75. package/cjs/collections/groups.js.map +1 -1
  76. package/cjs/collections/images.js +9 -1
  77. package/cjs/collections/images.js.map +1 -1
  78. package/cjs/collections/locations.js +9 -1
  79. package/cjs/collections/locations.js.map +1 -1
  80. package/cjs/collections/opportunities.js +9 -1
  81. package/cjs/collections/opportunities.js.map +1 -1
  82. package/cjs/collections/pack-diffs.js +9 -1
  83. package/cjs/collections/pack-diffs.js.map +1 -1
  84. package/cjs/collections/packs.js +9 -1
  85. package/cjs/collections/packs.js.map +1 -1
  86. package/cjs/collections/presets.js +9 -1
  87. package/cjs/collections/presets.js.map +1 -1
  88. package/cjs/collections/section-selections.js +9 -1
  89. package/cjs/collections/section-selections.js.map +1 -1
  90. package/cjs/collections/sections.js +9 -1
  91. package/cjs/collections/sections.js.map +1 -1
  92. package/cjs/collections/signers.js +28 -0
  93. package/cjs/collections/signers.js.map +1 -0
  94. package/cjs/collections/signing-backends.js +28 -0
  95. package/cjs/collections/signing-backends.js.map +1 -0
  96. package/cjs/collections/signing-requests.js +28 -0
  97. package/cjs/collections/signing-requests.js.map +1 -0
  98. package/cjs/collections/slide-selections.js +9 -1
  99. package/cjs/collections/slide-selections.js.map +1 -1
  100. package/cjs/collections/slides.js +9 -1
  101. package/cjs/collections/slides.js.map +1 -1
  102. package/cjs/collections/snapshots.js +9 -1
  103. package/cjs/collections/snapshots.js.map +1 -1
  104. package/cjs/collections/sub-slides.js +9 -1
  105. package/cjs/collections/sub-slides.js.map +1 -1
  106. package/cjs/collections/tags.js +9 -1
  107. package/cjs/collections/tags.js.map +1 -1
  108. package/cjs/collections/teams.js +9 -1
  109. package/cjs/collections/teams.js.map +1 -1
  110. package/cjs/collections/templates.js +9 -1
  111. package/cjs/collections/templates.js.map +1 -1
  112. package/cjs/collections/uploads.js +9 -1
  113. package/cjs/collections/uploads.js.map +1 -1
  114. package/cjs/collections/users.js +9 -1
  115. package/cjs/collections/users.js.map +1 -1
  116. package/cjs/collections.js +129 -11
  117. package/cjs/collections.js.map +1 -1
  118. package/cjs/fixtures.js +60 -15
  119. package/cjs/fixtures.js.map +1 -1
  120. package/cjs/index.js +36 -2
  121. package/cjs/index.js.map +1 -1
  122. package/cjs/log.js +1 -0
  123. package/cjs/log.js.map +1 -1
  124. package/cjs/middleware.js +7 -2
  125. package/cjs/middleware.js.map +1 -1
  126. package/cjs/middlewares/auth.js +17 -1
  127. package/cjs/middlewares/auth.js.map +1 -1
  128. package/cjs/middlewares/base.js +9 -3
  129. package/cjs/middlewares/base.js.map +1 -1
  130. package/cjs/middlewares/json.js +19 -1
  131. package/cjs/middlewares/json.js.map +1 -1
  132. package/cjs/middlewares/redirect.js +21 -5
  133. package/cjs/middlewares/redirect.js.map +1 -1
  134. package/cjs/models/activity-item.js +28 -5
  135. package/cjs/models/activity-item.js.map +1 -1
  136. package/cjs/models/adjunct-section.js +19 -1
  137. package/cjs/models/adjunct-section.js.map +1 -1
  138. package/cjs/models/adjunct-slide.js +19 -1
  139. package/cjs/models/adjunct-slide.js.map +1 -1
  140. package/cjs/models/adjunct-sub-slide.js +16 -1
  141. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  142. package/cjs/models/adjunct.js +22 -6
  143. package/cjs/models/adjunct.js.map +1 -1
  144. package/cjs/models/api.js +6 -1
  145. package/cjs/models/api.js.map +1 -1
  146. package/cjs/models/appointment-adjunct-tags.js +13 -1
  147. package/cjs/models/appointment-adjunct-tags.js.map +1 -1
  148. package/cjs/models/appointment-deckversion-tags.js +13 -1
  149. package/cjs/models/appointment-deckversion-tags.js.map +1 -1
  150. package/cjs/models/appointment-editor.js +14 -1
  151. package/cjs/models/appointment-editor.js.map +1 -1
  152. package/cjs/models/appointment-section-tags.js +13 -1
  153. package/cjs/models/appointment-section-tags.js.map +1 -1
  154. package/cjs/models/appointment-slide-tags.js +13 -1
  155. package/cjs/models/appointment-slide-tags.js.map +1 -1
  156. package/cjs/models/appointment-stats.js +11 -1
  157. package/cjs/models/appointment-stats.js.map +1 -1
  158. package/cjs/models/appointment-tags.js +10 -1
  159. package/cjs/models/appointment-tags.js.map +1 -1
  160. package/cjs/models/appointment-template.js +6 -1
  161. package/cjs/models/appointment-template.js.map +1 -1
  162. package/cjs/models/appointment-viewing.js +8 -1
  163. package/cjs/models/appointment-viewing.js.map +1 -1
  164. package/cjs/models/appointment.js +98 -20
  165. package/cjs/models/appointment.js.map +1 -1
  166. package/cjs/models/asset.js +12 -1
  167. package/cjs/models/asset.js.map +1 -1
  168. package/cjs/models/auto-adjunct-key-check.js +15 -1
  169. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  170. package/cjs/models/auto-adjunct.js +13 -1
  171. package/cjs/models/auto-adjunct.js.map +1 -1
  172. package/cjs/models/base.js +230 -59
  173. package/cjs/models/base.js.map +1 -1
  174. package/cjs/models/base.spec.js +31 -0
  175. package/cjs/models/base.spec.js.map +1 -1
  176. package/cjs/models/choicelist.js +8 -1
  177. package/cjs/models/choicelist.js.map +1 -1
  178. package/cjs/models/cms-val.js +26 -5
  179. package/cjs/models/cms-val.js.map +1 -1
  180. package/cjs/models/cms-val.spec.js +19 -12
  181. package/cjs/models/cms-val.spec.js.map +1 -1
  182. package/cjs/models/contact-phone.js +13 -1
  183. package/cjs/models/contact-phone.js.map +1 -1
  184. package/cjs/models/contact.js +18 -1
  185. package/cjs/models/contact.js.map +1 -1
  186. package/cjs/models/customer.js +30 -3
  187. package/cjs/models/customer.js.map +1 -1
  188. package/cjs/models/deck-note.js +9 -1
  189. package/cjs/models/deck-note.js.map +1 -1
  190. package/cjs/models/deck-tags.js +15 -1
  191. package/cjs/models/deck-tags.js.map +1 -1
  192. package/cjs/models/deck-version-screenshot.js +13 -1
  193. package/cjs/models/deck-version-screenshot.js.map +1 -1
  194. package/cjs/models/deck-version.js +38 -12
  195. package/cjs/models/deck-version.js.map +1 -1
  196. package/cjs/models/deck.js +14 -1
  197. package/cjs/models/deck.js.map +1 -1
  198. package/cjs/models/dispatch-preview.js +13 -1
  199. package/cjs/models/dispatch-preview.js.map +1 -1
  200. package/cjs/models/dispatch.js +37 -2
  201. package/cjs/models/dispatch.js.map +1 -1
  202. package/cjs/models/envs.js +6 -1
  203. package/cjs/models/envs.js.map +1 -1
  204. package/cjs/models/event-object.js +11 -1
  205. package/cjs/models/event-object.js.map +1 -1
  206. package/cjs/models/event.js +13 -1
  207. package/cjs/models/event.js.map +1 -1
  208. package/cjs/models/feed-data.js +13 -1
  209. package/cjs/models/feed-data.js.map +1 -1
  210. package/cjs/models/file.js +11 -1
  211. package/cjs/models/file.js.map +1 -1
  212. package/cjs/models/group.js +11 -1
  213. package/cjs/models/group.js.map +1 -1
  214. package/cjs/models/handover.js +13 -1
  215. package/cjs/models/handover.js.map +1 -1
  216. package/cjs/models/hosted-preso.js +20 -2
  217. package/cjs/models/hosted-preso.js.map +1 -1
  218. package/cjs/models/image.js +16 -1
  219. package/cjs/models/image.js.map +1 -1
  220. package/cjs/models/location.js +13 -1
  221. package/cjs/models/location.js.map +1 -1
  222. package/cjs/models/manifest-json.js +88 -21
  223. package/cjs/models/manifest-json.js.map +1 -1
  224. package/cjs/models/onshare.js +14 -1
  225. package/cjs/models/onshare.js.map +1 -1
  226. package/cjs/models/opportunity.js +14 -1
  227. package/cjs/models/opportunity.js.map +1 -1
  228. package/cjs/models/pack-diff.js +14 -1
  229. package/cjs/models/pack-diff.js.map +1 -1
  230. package/cjs/models/pack.js +12 -1
  231. package/cjs/models/pack.js.map +1 -1
  232. package/cjs/models/preset.js +21 -2
  233. package/cjs/models/preset.js.map +1 -1
  234. package/cjs/models/refresh-request.js +11 -17
  235. package/cjs/models/refresh-request.js.map +1 -1
  236. package/cjs/models/room.js +9 -1
  237. package/cjs/models/room.js.map +1 -1
  238. package/cjs/models/salesforce-lookup.js +12 -1
  239. package/cjs/models/salesforce-lookup.js.map +1 -1
  240. package/cjs/models/section-selection.js +14 -1
  241. package/cjs/models/section-selection.js.map +1 -1
  242. package/cjs/models/section.js +14 -1
  243. package/cjs/models/section.js.map +1 -1
  244. package/cjs/models/signer.js +47 -0
  245. package/cjs/models/signer.js.map +1 -0
  246. package/cjs/models/signing-backend.js +39 -0
  247. package/cjs/models/signing-backend.js.map +1 -0
  248. package/cjs/models/signing-request.js +66 -0
  249. package/cjs/models/signing-request.js.map +1 -0
  250. package/cjs/models/slide-selection.js +14 -1
  251. package/cjs/models/slide-selection.js.map +1 -1
  252. package/cjs/models/slide.js +14 -1
  253. package/cjs/models/slide.js.map +1 -1
  254. package/cjs/models/snapshot.js +21 -4
  255. package/cjs/models/snapshot.js.map +1 -1
  256. package/cjs/models/snapshot.spec.js +32 -25
  257. package/cjs/models/snapshot.spec.js.map +1 -1
  258. package/cjs/models/sub-slide.js +12 -1
  259. package/cjs/models/sub-slide.js.map +1 -1
  260. package/cjs/models/support-ticket.js +11 -1
  261. package/cjs/models/support-ticket.js.map +1 -1
  262. package/cjs/models/tag.js +13 -1
  263. package/cjs/models/tag.js.map +1 -1
  264. package/cjs/models/team.js +13 -1
  265. package/cjs/models/team.js.map +1 -1
  266. package/cjs/models/template.js +78 -48
  267. package/cjs/models/template.js.map +1 -1
  268. package/cjs/models/tenancy.js +11 -1
  269. package/cjs/models/tenancy.js.map +1 -1
  270. package/cjs/models/timing-log.js +78 -21
  271. package/cjs/models/timing-log.js.map +1 -1
  272. package/cjs/models/timing-log.spec.js +37 -24
  273. package/cjs/models/timing-log.spec.js.map +1 -1
  274. package/cjs/models/token.js +11 -1
  275. package/cjs/models/token.js.map +1 -1
  276. package/cjs/models/transcribe-socket.js +8 -1
  277. package/cjs/models/transcribe-socket.js.map +1 -1
  278. package/cjs/models/upload.js +7 -1
  279. package/cjs/models/upload.js.map +1 -1
  280. package/cjs/models/user.js +37 -12
  281. package/cjs/models/user.js.map +1 -1
  282. package/cjs/models/user.spec.js +30 -20
  283. package/cjs/models/user.spec.js.map +1 -1
  284. package/cjs/models.js +173 -11
  285. package/cjs/models.js.map +1 -1
  286. package/cjs/presentation/appointment-presentation.js +35 -9
  287. package/cjs/presentation/appointment-presentation.js.map +1 -1
  288. package/cjs/presentation/base-presentation-collection.js +7 -1
  289. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  290. package/cjs/presentation/base-presentation-model.js +65 -22
  291. package/cjs/presentation/base-presentation-model.js.map +1 -1
  292. package/cjs/presentation/base-presentation-model.spec.js +27 -6
  293. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  294. package/cjs/presentation/presentation-deck.js +82 -41
  295. package/cjs/presentation/presentation-deck.js.map +1 -1
  296. package/cjs/presentation/presentation-deck.spec.js +95 -72
  297. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  298. package/cjs/presentation/presentation-decks.js +9 -1
  299. package/cjs/presentation/presentation-decks.js.map +1 -1
  300. package/cjs/presentation/presentation-section.js +74 -9
  301. package/cjs/presentation/presentation-section.js.map +1 -1
  302. package/cjs/presentation/presentation-section.spec.js +268 -215
  303. package/cjs/presentation/presentation-section.spec.js.map +1 -1
  304. package/cjs/presentation/presentation-sections.js +9 -1
  305. package/cjs/presentation/presentation-sections.js.map +1 -1
  306. package/cjs/presentation/presentation-slide.js +77 -16
  307. package/cjs/presentation/presentation-slide.js.map +1 -1
  308. package/cjs/presentation/presentation-slide.spec.js +187 -147
  309. package/cjs/presentation/presentation-slide.spec.js.map +1 -1
  310. package/cjs/presentation/presentation-slides.js +9 -1
  311. package/cjs/presentation/presentation-slides.js.map +1 -1
  312. package/cjs/presentation/presentation-subslide.js +23 -3
  313. package/cjs/presentation/presentation-subslide.js.map +1 -1
  314. package/cjs/presentation/presentation-subslide.spec.js +135 -111
  315. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  316. package/cjs/presentation/presentation-subslides.js +9 -1
  317. package/cjs/presentation/presentation-subslides.js.map +1 -1
  318. package/cjs/presentation/presentation.js +115 -61
  319. package/cjs/presentation/presentation.js.map +1 -1
  320. package/cjs/presentation.js +20 -0
  321. package/cjs/presentation.js.map +1 -1
  322. package/cjs/selections.js +29 -4
  323. package/cjs/selections.js.map +1 -1
  324. package/cjs/state-register.js +11 -3
  325. package/cjs/state-register.js.map +1 -1
  326. package/cjs/sync.js +76 -32
  327. package/cjs/sync.js.map +1 -1
  328. package/cjs/utils.js +49 -21
  329. package/cjs/utils.js.map +1 -1
  330. package/cjs/utils.spec.js +5 -1
  331. package/cjs/utils.spec.js.map +1 -1
  332. package/package.json +4 -4
  333. package/src/collections/dispatches.js +1 -0
  334. package/src/collections/signers.js +18 -0
  335. package/src/collections/signing-backends.js +18 -0
  336. package/src/collections/signing-requests.js +18 -0
  337. package/src/collections.js +3 -1
  338. package/src/fixtures.js +11 -9
  339. package/src/index.js +2 -3
  340. package/src/models/activity-item.js +7 -0
  341. package/src/models/appointment.js +3 -0
  342. package/src/models/base.js +19 -0
  343. package/src/models/deck-tags.js +4 -0
  344. package/src/models/deck-version.js +1 -9
  345. package/src/models/dispatch.js +14 -1
  346. package/src/models/hosted-preso.js +4 -0
  347. package/src/models/manifest-json.js +9 -0
  348. package/src/models/preset.js +1 -0
  349. package/src/models/refresh-request.js +0 -14
  350. package/src/models/signer.js +37 -0
  351. package/src/models/signing-backend.js +29 -0
  352. package/src/models/signing-request.js +55 -0
  353. package/src/models/snapshot.js +4 -0
  354. package/src/models/user.js +9 -10
  355. package/src/models.js +3 -1
  356. package/src/presentation/presentation-section.spec.js +12 -13
  357. package/src/presentation/presentation-slide.spec.js +11 -12
  358. package/src/presentation/presentation-subslide.spec.js +11 -11
  359. package/src/utils.spec.js +4 -4
  360. package/cjs/collections/appointment-duplicates.js +0 -21
  361. package/cjs/collections/appointment-duplicates.js.map +0 -1
  362. package/cjs/models/appointment-duplicate.js +0 -72
  363. package/cjs/models/appointment-duplicate.js.map +0 -1
  364. package/src/collections/appointment-duplicates.js +0 -19
  365. package/src/models/appointment-duplicate.js +0 -73
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","names":["_utils","require","_api","_ampersandRestCollection","_interopRequireDefault","_ampersandModel","_superagentBluebirdPromise","_lodash","_dedentJs","_log","_moment","_qs","_stateRegister","_sync2","_url","_templateObject","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","BaseModel","exports","Model","extend","modelName","queryData","detailType","isFetching","_isFetched","urlMatchKeys","_data","arguments","undefined","opts","options","_","defaults","data","_unsetChildren","_unsetCollections","_expandedValues","toJSON","isString","url","isNumber","id","dataCopy","_options","_children","clone","_collections","_definition","key","def","isState","Collection","map","obj","registerStates","_convertToValues","_getIDFromURL","_setDerived","_initUnsetValues","_i","_Object$keys","keys","_derived","derivedKey","_i2","_Object$keys2","derivedProp","set","_matchesURL","matchesDetail","urlRoot","Api","getURL","replacements","detailKey","regexes","reduce","result","type","replace","Error","concat","urlWithoutRoot","urlStructure","split","argIndex","findIndex","val","indexOf","attemptedURLWithoutRoot","partial","join","interpolatedString","template","interpolate","log","error","dedent","_taggedTemplateLiteral2","default","baseString","re","RegExp","resource","resourceURL","getResourceURL","urlPath","url2","parse","path","resourceURLPath","resourceEnd","urlEnd","idStr","match","parseInt","matchesURL","dataTypes","date","newVal","moment","utc","format","DATE_FORMAT_T","compare","currentVal","isSame","stringSanitized","removeMultiByteChars","get","any","_default","props","required","toServer","serialize","_registerChildModel","states","prop","model","registeredStates","_registerCollection","state","collection","_this","each","parent","_registerName","_updateResponse","response","_this2","forEach","save","_this3","apply","tap","fetch","_this4","SuperAgentRequest","Auth","headers","then","res","body","actions","isFetched","getSafeAttrs","_this5","isUndefined","_values","attrs","uniq","_this6","_initChildren","child","_safeSet","listenTo","_getCachedEventBubblingHandler","_initCollections","coll","_this7","tmpValue","replacePropertyDefinition","safeSet","property","getFullURLPath","qs","stringify","arrayFormat","isNew","getPlainURL","resp","includes","matches","_iterator","_step","replacement","resources","sync","_this8","derived","getAttributes","object","canBeEmpty","_retrieveURL","item","_this9","_typeof2","addCollection","addChild","expandCollection","expandChild","defineProperty","configurable"],"sources":["../../src/models/base.js"],"sourcesContent":["import { DATE_FORMAT_T, removeMultiByteChars } from \"../utils.js\";\n\nimport { Api } from \"../api.js\";\nimport Collection from \"ampersand-rest-collection\";\nimport Model from \"ampersand-model\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport _ from \"lodash\";\nimport dedent from \"dedent-js\";\nimport log from \"../log.js\";\nimport moment from \"moment\";\nimport qs from \"qs\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\nimport url2 from \"url\";\n\n/**\n * @constructor\n * @alias models.BaseModel\n */\nexport const BaseModel = Model.extend(\n\t/** @lends models.BaseModel# */ {\n\t\tmodelName: null,\n\t\tqueryData: {},\n\t\tdetailType: \"number\",\n\n\t\t// This is unfortunately necessary to avoid the default ampersand model/state\n\t\t// behaviour from automatically hydrating all children and collections on a fetch.\n\t\tisFetching: false,\n\n\t\t// Useful to figure out whether the model is just a URL (unfetched), or has been\n\t\t// fetched from the server (an object).\n\t\t_isFetched: true,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tconstructor(_data = {}, opts = {}) {\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {},\n\t\t\t});\n\n\t\t\tlet data = _data;\n\n\t\t\tthis._unsetChildren = {};\n\t\t\tthis._unsetCollections = {};\n\t\t\tthis._expandedValues = {};\n\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\n\t\t\t// Allow passing in models\n\t\t\tif (data instanceof Model) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis.queryData = options.data;\n\n\t\t\t// Convert any strings into a url format we can understand\n\t\t\tif (_.isString(data)) {\n\t\t\t\tdata = { url: data };\n\t\t\t\tthis._isFetched = false;\n\t\t\t}\n\n\t\t\t// Convert model ids into a format we can understand\n\t\t\tif (_.isNumber(data)) {\n\t\t\t\tdata = { id: data };\n\t\t\t\tthis._isFetched = false;\n\t\t\t}\n\n\t\t\tconst dataCopy = _.extend({}, data);\n\n\t\t\tthis._data = dataCopy;\n\t\t\tthis._options = options;\n\n\t\t\t// Stop making edits to these affect other models\n\t\t\tthis._children = _.clone(this._children);\n\t\t\tthis._collections = _.clone(this._collections);\n\t\t\tthis._definition = _.clone(this._definition);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (dataCopy && typeof dataCopy.url === \"string\") {\n\t\t\t\tthis._url = dataCopy.url;\n\t\t\t}\n\n\t\t\tfor (const key in dataCopy) {\n\t\t\t\tconst def = dataCopy[key];\n\t\t\t\t// Any models/collections passed into the constructor should be\n\t\t\t\t// converted to JSON so that it can be parsed\n\t\t\t\tif (def && (def.isState || def instanceof Collection)) {\n\t\t\t\t\tdataCopy[key] = def.toJSON();\n\t\t\t\t}\n\n\t\t\t\tif (def && Array.isArray(def)) {\n\t\t\t\t\tdataCopy[key] = def.map((obj) => {\n\t\t\t\t\t\tif (obj instanceof Model) {\n\t\t\t\t\t\t\treturn obj.toJSON();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tthis._convertToValues();\n\n\t\t\tconst id = this._getIDFromURL(this._url);\n\n\t\t\tif (!dataCopy.id && id) {\n\t\t\t\tdataCopy.id = id;\n\t\t\t}\n\n\t\t\tModel.prototype.constructor.call(this, dataCopy, options);\n\n\t\t\tthis._setDerived();\n\n\t\t\t// Re-set the values that were previously children or collections\n\t\t\tthis._initUnsetValues();\n\t\t},\n\n\t\t// If there is a model returned from a derived property, and the model\n\t\t// has been initialzied with model data, we manually set the values on it.\n\t\t_setDerived() {\n\t\t\tfor (const derivedKey of Object.keys(this._derived)) {\n\t\t\t\tif (!this._data[derivedKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this[derivedKey] instanceof Model) {\n\t\t\t\t\tfor (const derivedProp of Object.keys(this._data[derivedKey])) {\n\t\t\t\t\t\tthis[derivedKey].set(\n\t\t\t\t\t\t\tderivedProp,\n\t\t\t\t\t\t\tthis._data[derivedKey][derivedProp],\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If it's a collection, we can just pass the data straight in\n\t\t\t\tif (this[derivedKey] instanceof Collection) {\n\t\t\t\t\tthis[derivedKey].set(this._data[derivedKey]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Internal function. Used by collection as well.\n\t\t_matchesURL(url, matchesDetail = true) {\n\t\t\tif (!this.modelName || this.urlRoot() === Api.getURL()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst replacements = _.extend(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tdetailKey: this.detailType,\n\t\t\t\t},\n\t\t\t\tthis.urlMatchKeys,\n\t\t\t);\n\n\t\t\tconst regexes = Object.keys(replacements).reduce((result, key) => {\n\t\t\t\tconst type = replacements[key];\n\t\t\t\tconst name = key.replace(/\\./g, \"_\");\n\t\t\t\tif (type === \"number\") {\n\t\t\t\t\tresult[name] = \"\\\\d+\";\n\t\t\t\t} else if (type === \"uuid\") {\n\t\t\t\t\tresult[name] = \"([a-z]|[0-9]|-)+\";\n\t\t\t\t} else if (type === \"string\") {\n\t\t\t\t\tresult[name] = \"\\\\w+\";\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Unknown regex type '${type}'.`);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}, {});\n\n\t\t\t// Create a starting regex string with variables. Strips the root url so that it could\n\t\t\t// be read from any server.\n\t\t\tconst urlWithoutRoot = this.urlRoot().replace(Api.getURL(), \"\");\n\t\t\tlet urlStructure = urlWithoutRoot.slice();\n\t\t\tif (matchesDetail) {\n\t\t\t\turlStructure += \"{detailKey}/\";\n\t\t\t}\n\n\t\t\t// Let's test if the url has even a remote chance of matching\n\t\t\t// the url (like a partial match, any part without variables).\n\t\t\t// If that doesn't match, we can sometimes prevent a nasty log\n\t\t\t// error from being thrown.\n\t\t\tconst split = urlStructure.split(\"/\");\n\t\t\tconst argIndex = split.findIndex((val) => {\n\t\t\t\treturn val.indexOf(\"{\") === 0;\n\t\t\t});\n\n\t\t\tif (argIndex >= 0) {\n\t\t\t\tconst attemptedURLWithoutRoot = url.replace(Api.getURL(), \"\");\n\n\t\t\t\tconst partial = split.slice(0, argIndex).join(\"/\");\n\t\t\t\tif (attemptedURLWithoutRoot.indexOf(partial) !== 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Replace keys with regexes\n\t\t\tlet interpolatedString;\n\t\t\ttry {\n\t\t\t\tinterpolatedString = _.template(urlStructure.replace(/\\./g, \"_\"), {\n\t\t\t\t\tinterpolate: /{([\\s\\S\\.]+?)}/g,\n\t\t\t\t})(regexes);\n\t\t\t} catch (e) {\n\t\t\t\tlog.error(\n\t\t\t\t\tdedent`\n\t\t\t\tFailed to match URL '${url}' for model '${this.modelName}'.\n\t\t\t\tThis is usually because the regex type for a key hasn't been set.\n\t\t\t\tError: `,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Convert into a regex and test if url matches\n\t\t\tconst baseString = `.*${interpolatedString.replace(/\\//m, \"/\")}$`;\n\t\t\tconst re = new RegExp(baseString);\n\t\t\treturn re.test(url);\n\t\t},\n\n\t\t// Retrieve the id from the url (if present) without caring about\n\t\t// the hostname.\n\t\t// The url will have a structure like\n\t\t// https://staging-demo.salespreso.com/api/users/1/\n\t\t// and we want to ignore the hostname (https://staging-demo.salespreso.com)\n\t\t// and strip out the '/api' from both the resource url and the variable url\n\t\t// so that we can use the remaining part to isolate the id\n\t\t_getIDFromURL(url, resource = \"\") {\n\t\t\tconst resourceURL = resource || this.getResourceURL();\n\n\t\t\tif (!url || !resourceURL) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst urlPath = url2.parse(url).path;\n\t\t\tconst resourceURLPath = url2.parse(resourceURL).path;\n\n\t\t\t// Remove the '/api' if present\n\t\t\tconst resourceEnd = resourceURLPath.split(\"/api\").join(\"\");\n\t\t\tconst urlEnd = urlPath.split(\"/api\").join(\"\");\n\n\t\t\t// If they are the same, there is no id at the end\n\t\t\tif (!urlEnd || urlEnd === resourceEnd) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst idStr = urlEnd.split(resourceEnd).join(\"\");\n\n\t\t\tif ((idStr.match(/\\//g) || []).length === 1) {\n\t\t\t\treturn parseInt(idStr.slice(0, -1), 10);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\t// Public version for details only\n\t\tmatchesURL(url) {\n\t\t\treturn this._matchesURL(url, true);\n\t\t},\n\n\t\tdataTypes: {\n\t\t\tdate: {\n\t\t\t\tset: (newVal) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tval: newVal ? moment.utc(newVal).format(DATE_FORMAT_T) : null,\n\t\t\t\t\t\ttype: \"date\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tcompare: (currentVal, newVal) => {\n\t\t\t\t\tif (typeof currentVal === \"undefined\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (currentVal || newVal) {\n\t\t\t\t\t\treturn moment(currentVal).isSame(moment(newVal));\n\t\t\t\t\t}\n\t\t\t\t\treturn currentVal !== newVal;\n\t\t\t\t},\n\t\t\t},\n\t\t\tstringSanitized: {\n\t\t\t\tset: (newVal) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tval: newVal ? removeMultiByteChars(newVal) : newVal,\n\t\t\t\t\t\ttype: \"stringSanitized\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tcompare: (currentVal, newVal) => {\n\t\t\t\t\treturn currentVal === newVal;\n\t\t\t\t},\n\t\t\t\tget: (val) => {\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t},\n\t\t\tany: {\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {number} [id]\n\t\t */\n\t\tprops: {\n\t\t\tid: { type: \"any\", required: false },\n\t\t},\n\n\t\t/*\n\t\t * Overridable serialization for sending data to\n\t\t * the server\n\t\t */\n\t\ttoServer() {\n\t\t\treturn this.serialize();\n\t\t},\n\n\t\t_registerChildModel(states, prop, model) {\n\t\t\tconst Model = registeredStates[model];\n\t\t\tif (!Model) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${model}' not found! Did you forget to import it on the '${this.modelName}' model?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._children[prop] = Model;\n\t\t},\n\n\t\t_registerCollection(state, prop, collection) {\n\t\t\tconst Collection = state[collection];\n\t\t\tif (!Collection) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${collection}' not found! Did you forget to import it on the '${this.modelName}' model?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._collections[prop] = Collection;\n\t\t},\n\n\t\t/*\n\t\t * Replace strings respresenting a registered model/collection the function\n\t\t */\n\t\tregisterStates() {\n\t\t\t// Loop through children and replace any parent objects directly to stop\n\t\t\t// maximum stack overflows\n\t\t\t_.each(\n\t\t\t\tthis._children,\n\t\t\t\t(model, prop) => {\n\t\t\t\t\tif (typeof model === \"string\") {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis._options.parent &&\n\t\t\t\t\t\t\tmodel === this._options.parent._registerName\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// This part is important, if the link stays when there's a circular dependency,\n\t\t\t\t\t\t\t// this will continue forever.\n\t\t\t\t\t\t\tdelete this._children[prop];\n\n\t\t\t\t\t\t\t// Can be a string or an object so we use \"any\". We add the definition\n\t\t\t\t\t\t\t// so that we can retrieve this value later.\n\t\t\t\t\t\t\tthis._definition[prop] = { type: \"any\" };\n\n\t\t\t\t\t\t\tthis[prop] = this._options.parent;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._registerChildModel(registeredStates, prop, model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\n\t\t\t// Loop throught the collections and replace with the registered collection\n\t\t\t_.each(\n\t\t\t\tthis._collections,\n\t\t\t\t(collection, prop) => {\n\t\t\t\t\tif (typeof collection === \"string\") {\n\t\t\t\t\t\tthis._registerCollection(registeredStates, prop, collection);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t},\n\n\t\t_updateResponse(response) {\n\t\t\tthis._data = response || {};\n\n\t\t\tif (!response) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set previously-initialised children & collections with new\n\t\t\t// data retrieved during the fetch\n\n\t\t\tObject.keys(this._children).forEach((key) => {\n\t\t\t\tif (response[key]) {\n\t\t\t\t\tthis[key] = response[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._collections).forEach((key) => {\n\t\t\t\tif (response[key]) {\n\t\t\t\t\tthis[key] = response[key];\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tsave() {\n\t\t\treturn Model.prototype.save.apply(this, arguments).tap((response) => {\n\t\t\t\tthis._updateResponse(response);\n\t\t\t});\n\t\t},\n\n\t\tfetch(options = {}) {\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.isFetching = true;\n\t\t\treturn Model.prototype.fetch.apply(this, arguments).tap((response) => {\n\t\t\t\tthis._isFetched = true;\n\t\t\t\tthis.isFetching = false;\n\t\t\t\tthis._updateResponse(response);\n\t\t\t});\n\t\t},\n\n\t\toptions(options = {}) {\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\t\t\treturn SuperAgentRequest(\"OPTIONS\", this.url())\n\t\t\t\t.set(BaseModel.Auth.headers)\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.body && res.body.actions) {\n\t\t\t\t\t\treturn res.body.actions;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\t\t},\n\n\t\tisFetched() {\n\t\t\treturn this._isFetched;\n\t\t},\n\n\t\tgetSafeAttrs(key) {\n\t\t\tif (!_.isUndefined(key)) {\n\t\t\t\treturn !_.isUndefined(this._expandedValues[key])\n\t\t\t\t\t? this._expandedValues[key]\n\t\t\t\t\t: this._values[key];\n\t\t\t}\n\n\t\t\tconst attrs = {};\n\n\t\t\tconst keys = _.uniq(\n\t\t\t\t_.concat(\n\t\t\t\t\t_.concat(\n\t\t\t\t\t\tObject.keys(this._unsetChildren),\n\t\t\t\t\t\tObject.keys(this._unsetCollections),\n\t\t\t\t\t),\n\t\t\t\t\tObject.keys(this._values),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tkeys.forEach((key) => {\n\t\t\t\tif (!_.isUndefined(this._values[key])) {\n\t\t\t\t\tattrs[key] = this._values[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._expandedValues).forEach((key) => {\n\t\t\t\tattrs[key] = this[key];\n\t\t\t});\n\n\t\t\treturn attrs;\n\t\t},\n\n\t\t// Unset all specified children and collection constructors and insert value\n\t\t// definitions for them (necessary for Ampersand State to treat them as values)\n\t\t_convertToValues() {\n\t\t\tObject.keys(this._children).forEach((key) => {\n\t\t\t\tthis._definition[key] = { type: \"any\" };\n\t\t\t\tthis._unsetChildren[key] = this._children[key];\n\t\t\t\tdelete this._children[key];\n\t\t\t});\n\n\t\t\tObject.keys(this._collections).forEach((key) => {\n\t\t\t\tthis._definition[key] = { type: \"any\" };\n\t\t\t\tthis._unsetCollections[key] = this._collections[key];\n\t\t\t\tdelete this._collections[key];\n\t\t\t});\n\t\t},\n\n\t\t// Override the initialization of children to pass in data to the constructor.\n\t\t// The default version always creates an empty model\n\t\t_initChildren() {\n\t\t\tlet child;\n\t\t\tif (!this._children) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (child in this._children) {\n\t\t\t\tlet val = this._data[child];\n\t\t\t\tif (val) {\n\t\t\t\t\t// Assume here that if it's a string, it's a url.\n\t\t\t\t\tif (typeof val === \"string\") {\n\t\t\t\t\t\tval = { url: val };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If hydrate is set to false, this will be the name of the child and\n\t\t\t\t// not the constructor. We want to add the non-hydrated url if so.\n\t\t\t\tif (typeof this._children[child] === \"function\") {\n\t\t\t\t\tthis._safeSet(\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tnew this._children[child](val, { parent: this }),\n\t\t\t\t\t);\n\t\t\t\t\tthis.listenTo(\n\t\t\t\t\t\tthis[child],\n\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tthis._getCachedEventBubblingHandler(child),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis._safeSet(child, val);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Override the initialization of collections to pass in data to the constructor.\n\t\t_initCollections() {\n\t\t\tlet coll;\n\t\t\tif (!this._collections) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (coll in this._collections) {\n\t\t\t\tlet val = this._data[coll];\n\t\t\t\tif (val) {\n\t\t\t\t\tif (typeof val === \"string\") {\n\t\t\t\t\t\tval = { url: val };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If hydrate is set to false, this will be the name of the collection and\n\t\t\t\t// not the constructor. We want to add the non-hydrated array if so.\n\t\t\t\tif (typeof this._collections[coll] === \"function\") {\n\t\t\t\t\tthis._safeSet(\n\t\t\t\t\t\tcoll,\n\t\t\t\t\t\tnew this._collections[coll](val, { parent: this }),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis._safeSet(coll, val);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_initUnsetValues() {\n\t\t\t_.each(this._unsetChildren, (child, key) => {\n\t\t\t\tconst tmpValue = this._values[key];\n\n\t\t\t\treplacePropertyDefinition(this, key);\n\n\t\t\t\tthis[key] = tmpValue;\n\t\t\t});\n\n\t\t\t_.each(this._unsetCollections, (child, key) => {\n\t\t\t\tconst tmpValue = this._values[key];\n\n\t\t\t\treplacePropertyDefinition(this, key);\n\n\t\t\t\tthis[key] = tmpValue;\n\t\t\t});\n\t\t},\n\n\t\t// Make safeSet less safe... as we do need to run this twice\n\t\t_safeSet: function safeSet(property, value) {\n\t\t\tthis[property] = value;\n\t\t\treturn this;\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tif (path === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet url = path;\n\t\t\tif (url.slice(-1) !== \"/\" && url.indexOf(\"?\") === -1) {\n\t\t\t\turl += \"/\";\n\t\t\t}\n\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\turl += `?${qs.stringify(this.queryData, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\t/*\n\t\t * Get url\n\t\t * @return {String}\n\t\t */\n\t\turl() {\n\t\t\tif (this._url && this.isNew()) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\treturn this.getFullURLPath(this.getPlainURL());\n\t\t},\n\n\t\t// Returns url without query data\n\t\tgetPlainURL() {\n\t\t\tif (!this.modelName) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet resp = Model.prototype.url.call(this);\n\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\tif (!resp.includes(\"{\") || !resp.includes(\"}\")) {\n\t\t\t\treturn resp;\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the model.\n\t\t\t// So if you have /path/to/{model.id}/\n\t\t\t// It will check the model from \"this.model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(`Model ${this.modelName} is missing value ${path}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn resp;\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\tif (this.modelName === null && !Object.keys(Api.resources).length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!Object.keys(Api.resources).length) {\n\t\t\t\treturn `/${this.modelName}/`;\n\t\t\t}\n\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tsync() {\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tserialize(opts = { derived: true }) {\n\t\t\t// Return nothing if data passed is falsy. More than likely this is\n\t\t\t// a null value\n\t\t\tif (!this._data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst data = Model.prototype.serialize.apply(this, arguments);\n\t\t\tdata.url = this.url();\n\n\t\t\tlet derived = this.getAttributes(opts);\n\t\t\tderived = Object.keys(derived).reduce((object, key) => {\n\t\t\t\tlet value = derived[key];\n\t\t\t\tif (value instanceof Collection || value instanceof Model) {\n\t\t\t\t\tvalue = value.toJSON();\n\t\t\t\t}\n\t\t\t\tobject[key] = value;\n\t\t\t\treturn object;\n\t\t\t}, {});\n\n\t\t\tObject.keys(this._unsetCollections).forEach((key) => {\n\t\t\t\tif (this._unsetCollections[key].canBeEmpty && !this._values[key]) {\n\t\t\t\t\tderived[key] = [];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._unsetChildren).forEach((key) => {\n\t\t\t\tif (\n\t\t\t\t\tthis._unsetChildren[key].canBeEmpty &&\n\t\t\t\t\t!this._values[key] &&\n\t\t\t\t\tthis[key]\n\t\t\t\t) {\n\t\t\t\t\tderived[key] = this[key].url();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn _.extend(data, derived);\n\t\t},\n\t\t// Safely retrieve the url from a child or collection that may or may not\n\t\t// be hydrated\n\t\t_retrieveURL(item) {\n\t\t\tif (_.isUndefined(item) || item === null) {\n\t\t\t\treturn item;\n\t\t\t} else if (typeof item === \"string\") {\n\t\t\t\t// It's just a url string\n\t\t\t\treturn item;\n\t\t\t} else if (item instanceof Model) {\n\t\t\t\treturn item.isNew() && !item._url ? null : item.url();\n\t\t\t} else if (item instanceof Collection) {\n\t\t\t\treturn _.map(item.toJSON(), \"url\");\n\t\t\t} else if (_.isArray(item)) {\n\t\t\t\t// It's an array of urls or objects\n\t\t\t\treturn item.map((child) => {\n\t\t\t\t\treturn this._retrieveURL(child);\n\t\t\t\t});\n\t\t\t} else if (typeof item === \"object\" && item !== null) {\n\t\t\t\treturn typeof item.url === \"function\" ? item.url() : item.url;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t},\n);\n\nfunction replacePropertyDefinition(object, name) {\n\tfunction addCollection(value) {\n\t\tconst data = typeof value === \"string\" ? { url: value } : value;\n\n\t\tconst collection = new object._collections[name](data, { parent: object });\n\t\tobject._expandedValues[name] = collection;\n\n\t\treturn object._expandedValues[name];\n\t}\n\n\tfunction addChild(value) {\n\t\tconst data = typeof value === \"string\" ? { url: value } : value;\n\n\t\tconst child = new object._children[name](data, { parent: object });\n\t\tobject._expandedValues[name] = child;\n\n\t\treturn object._expandedValues[name];\n\t}\n\n\tfunction expandCollection(value) {\n\t\tobject._collections[name] = object._unsetCollections[name];\n\t\tdelete object._unsetCollections[name];\n\n\t\treturn addCollection(value);\n\t}\n\n\tfunction expandChild(value) {\n\t\tobject._children[name] = object._unsetChildren[name];\n\t\tdelete object._unsetChildren[name];\n\n\t\treturn addChild(value);\n\t}\n\n\tObject.defineProperty(object, name, {\n\t\tset(val) {\n\t\t\tif (_.includes(Object.keys(object._children), name)) {\n\t\t\t\tif (val instanceof Model) {\n\t\t\t\t\tobject._expandedValues[name] = val;\n\t\t\t\t} else if (val !== this[name].url()) {\n\t\t\t\t\taddChild(val);\n\t\t\t\t}\n\t\t\t} else if (_.includes(Object.keys(object._collections), name)) {\n\t\t\t\tif (val instanceof Collection) {\n\t\t\t\t\tobject._expandedValues[name] = val;\n\t\t\t\t} else if (this[name].length || val !== this[name].url()) {\n\t\t\t\t\taddCollection(val);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tval &&\n\t\t\t\tval instanceof Model &&\n\t\t\t\t_.includes(Object.keys(object._unsetChildren), name)\n\t\t\t) {\n\t\t\t\tobject._expandedValues[name] = expandChild(val.toJSON());\n\t\t\t} else if (\n\t\t\t\tval &&\n\t\t\t\tval instanceof Collection &&\n\t\t\t\t_.includes(Object.keys(object._unsetCollections), name)\n\t\t\t) {\n\t\t\t\tobject._expandedValues[name] = expandCollection(val.toJSON());\n\t\t\t} else {\n\t\t\t\tobject._values[name] = val;\n\t\t\t}\n\t\t},\n\t\tget() {\n\t\t\tif (!this._values) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Trying to retrieve value ${name} of model ${object.modelName} during constructor`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(_.includes(Object.keys(object._collections), name) ||\n\t\t\t\t\t_.includes(Object.keys(object._children), name)) &&\n\t\t\t\t_.includes(Object.keys(object._expandedValues), name)\n\t\t\t) {\n\t\t\t\treturn object._expandedValues[name];\n\t\t\t}\n\n\t\t\tconst value = object._values[name];\n\n\t\t\tif (this.isFetching) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(_.isUndefined(value) || value === null) &&\n\t\t\t\t!(\n\t\t\t\t\tobject._unsetChildren[name] && object._unsetChildren[name].canBeEmpty\n\t\t\t\t) &&\n\t\t\t\t!(\n\t\t\t\t\tobject._unsetCollections[name] &&\n\t\t\t\t\tobject._unsetCollections[name].canBeEmpty\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (_.includes(Object.keys(object._unsetCollections), name)) {\n\t\t\t\treturn expandCollection(value);\n\t\t\t} else if (_.includes(Object.keys(object._unsetChildren), name)) {\n\t\t\t\treturn expandChild(value);\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tconfigurable: true,\n\t});\n}\n\n// Make matchesURL available as a static method\nBaseModel.matchesURL = function (url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/models/base.js"],"names":["BaseModel","Model","extend","modelName","queryData","detailType","isFetching","_isFetched","urlMatchKeys","constructor","_data","opts","options","_","defaults","data","_unsetChildren","_unsetCollections","_expandedValues","toJSON","isString","url","isNumber","id","dataCopy","_options","_children","clone","_collections","_definition","_url","key","def","isState","Collection","Array","isArray","map","obj","registerStates","_convertToValues","_getIDFromURL","prototype","call","_setDerived","_initUnsetValues","Object","keys","_derived","derivedKey","derivedProp","set","_matchesURL","matchesDetail","urlRoot","Api","getURL","replacements","detailKey","regexes","reduce","result","type","name","replace","Error","urlWithoutRoot","urlStructure","slice","split","argIndex","findIndex","val","indexOf","attemptedURLWithoutRoot","partial","join","interpolatedString","template","interpolate","e","log","error","dedent","baseString","re","RegExp","test","resource","resourceURL","getResourceURL","urlPath","url2","parse","path","resourceURLPath","resourceEnd","urlEnd","idStr","match","length","parseInt","matchesURL","dataTypes","date","newVal","moment","utc","format","DATE_FORMAT_T","compare","currentVal","isSame","stringSanitized","get","any","default","props","required","toServer","serialize","_registerChildModel","states","prop","model","registeredStates","_registerCollection","state","collection","each","parent","_registerName","_updateResponse","response","forEach","save","apply","arguments","tap","fetch","Auth","headers","then","res","body","actions","isFetched","getSafeAttrs","isUndefined","_values","attrs","uniq","concat","_initChildren","child","_safeSet","listenTo","_getCachedEventBubblingHandler","_initCollections","coll","tmpValue","replacePropertyDefinition","safeSet","property","value","getFullURLPath","qs","stringify","arrayFormat","isNew","getPlainURL","resp","includes","matches","replacement","resources","waitForReady","attempts","Promise","reject","creation_status","resolve","delay","sync","derived","getAttributes","object","canBeEmpty","_retrieveURL","item","addCollection","addChild","expandCollection","expandChild","defineProperty","configurable"],"mappings":"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","sourcesContent":["import { DATE_FORMAT_T, removeMultiByteChars } from \"../utils.js\";\n\nimport { Api } from \"../api.js\";\nimport Collection from \"ampersand-rest-collection\";\nimport Model from \"ampersand-model\";\nimport Promise from \"bluebird\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport _ from \"lodash\";\nimport dedent from \"dedent-js\";\nimport log from \"../log.js\";\nimport moment from \"moment\";\nimport qs from \"qs\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\nimport url2 from \"url\";\n\n/**\n * @constructor\n * @alias models.BaseModel\n */\nexport const BaseModel = Model.extend(\n\t/** @lends models.BaseModel# */ {\n\t\tmodelName: null,\n\t\tqueryData: {},\n\t\tdetailType: \"number\",\n\n\t\t// This is unfortunately necessary to avoid the default ampersand model/state\n\t\t// behaviour from automatically hydrating all children and collections on a fetch.\n\t\tisFetching: false,\n\n\t\t// Useful to figure out whether the model is just a URL (unfetched), or has been\n\t\t// fetched from the server (an object).\n\t\t_isFetched: true,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tconstructor(_data = {}, opts = {}) {\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {},\n\t\t\t});\n\n\t\t\tlet data = _data;\n\n\t\t\tthis._unsetChildren = {};\n\t\t\tthis._unsetCollections = {};\n\t\t\tthis._expandedValues = {};\n\n\t\t\tif (data === null) {\n\t\t\t\tdata = {};\n\t\t\t}\n\n\t\t\t// Allow passing in models\n\t\t\tif (data instanceof Model) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis.queryData = options.data;\n\n\t\t\t// Convert any strings into a url format we can understand\n\t\t\tif (_.isString(data)) {\n\t\t\t\tdata = { url: data };\n\t\t\t\tthis._isFetched = false;\n\t\t\t}\n\n\t\t\t// Convert model ids into a format we can understand\n\t\t\tif (_.isNumber(data)) {\n\t\t\t\tdata = { id: data };\n\t\t\t\tthis._isFetched = false;\n\t\t\t}\n\n\t\t\tconst dataCopy = _.extend({}, data);\n\n\t\t\tthis._data = dataCopy;\n\t\t\tthis._options = options;\n\n\t\t\t// Stop making edits to these affect other models\n\t\t\tthis._children = _.clone(this._children);\n\t\t\tthis._collections = _.clone(this._collections);\n\t\t\tthis._definition = _.clone(this._definition);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (dataCopy && typeof dataCopy.url === \"string\") {\n\t\t\t\tthis._url = dataCopy.url;\n\t\t\t}\n\n\t\t\tfor (const key in dataCopy) {\n\t\t\t\tconst def = dataCopy[key];\n\t\t\t\t// Any models/collections passed into the constructor should be\n\t\t\t\t// converted to JSON so that it can be parsed\n\t\t\t\tif (def && (def.isState || def instanceof Collection)) {\n\t\t\t\t\tdataCopy[key] = def.toJSON();\n\t\t\t\t}\n\n\t\t\t\tif (def && Array.isArray(def)) {\n\t\t\t\t\tdataCopy[key] = def.map((obj) => {\n\t\t\t\t\t\tif (obj instanceof Model) {\n\t\t\t\t\t\t\treturn obj.toJSON();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tthis._convertToValues();\n\n\t\t\tconst id = this._getIDFromURL(this._url);\n\n\t\t\tif (!dataCopy.id && id) {\n\t\t\t\tdataCopy.id = id;\n\t\t\t}\n\n\t\t\tModel.prototype.constructor.call(this, dataCopy, options);\n\n\t\t\tthis._setDerived();\n\n\t\t\t// Re-set the values that were previously children or collections\n\t\t\tthis._initUnsetValues();\n\t\t},\n\n\t\t// If there is a model returned from a derived property, and the model\n\t\t// has been initialzied with model data, we manually set the values on it.\n\t\t_setDerived() {\n\t\t\tfor (const derivedKey of Object.keys(this._derived)) {\n\t\t\t\tif (!this._data[derivedKey]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this[derivedKey] instanceof Model) {\n\t\t\t\t\tfor (const derivedProp of Object.keys(this._data[derivedKey])) {\n\t\t\t\t\t\tthis[derivedKey].set(\n\t\t\t\t\t\t\tderivedProp,\n\t\t\t\t\t\t\tthis._data[derivedKey][derivedProp],\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If it's a collection, we can just pass the data straight in\n\t\t\t\tif (this[derivedKey] instanceof Collection) {\n\t\t\t\t\tthis[derivedKey].set(this._data[derivedKey]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Internal function. Used by collection as well.\n\t\t_matchesURL(url, matchesDetail = true) {\n\t\t\tif (!this.modelName || this.urlRoot() === Api.getURL()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst replacements = _.extend(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tdetailKey: this.detailType,\n\t\t\t\t},\n\t\t\t\tthis.urlMatchKeys,\n\t\t\t);\n\n\t\t\tconst regexes = Object.keys(replacements).reduce((result, key) => {\n\t\t\t\tconst type = replacements[key];\n\t\t\t\tconst name = key.replace(/\\./g, \"_\");\n\t\t\t\tif (type === \"number\") {\n\t\t\t\t\tresult[name] = \"\\\\d+\";\n\t\t\t\t} else if (type === \"uuid\") {\n\t\t\t\t\tresult[name] = \"([a-z]|[0-9]|-)+\";\n\t\t\t\t} else if (type === \"string\") {\n\t\t\t\t\tresult[name] = \"\\\\w+\";\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Unknown regex type '${type}'.`);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}, {});\n\n\t\t\t// Create a starting regex string with variables. Strips the root url so that it could\n\t\t\t// be read from any server.\n\t\t\tconst urlWithoutRoot = this.urlRoot().replace(Api.getURL(), \"\");\n\t\t\tlet urlStructure = urlWithoutRoot.slice();\n\t\t\tif (matchesDetail) {\n\t\t\t\turlStructure += \"{detailKey}/\";\n\t\t\t}\n\n\t\t\t// Let's test if the url has even a remote chance of matching\n\t\t\t// the url (like a partial match, any part without variables).\n\t\t\t// If that doesn't match, we can sometimes prevent a nasty log\n\t\t\t// error from being thrown.\n\t\t\tconst split = urlStructure.split(\"/\");\n\t\t\tconst argIndex = split.findIndex((val) => {\n\t\t\t\treturn val.indexOf(\"{\") === 0;\n\t\t\t});\n\n\t\t\tif (argIndex >= 0) {\n\t\t\t\tconst attemptedURLWithoutRoot = url.replace(Api.getURL(), \"\");\n\n\t\t\t\tconst partial = split.slice(0, argIndex).join(\"/\");\n\t\t\t\tif (attemptedURLWithoutRoot.indexOf(partial) !== 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Replace keys with regexes\n\t\t\tlet interpolatedString;\n\t\t\ttry {\n\t\t\t\tinterpolatedString = _.template(urlStructure.replace(/\\./g, \"_\"), {\n\t\t\t\t\tinterpolate: /{([\\s\\S\\.]+?)}/g,\n\t\t\t\t})(regexes);\n\t\t\t} catch (e) {\n\t\t\t\tlog.error(\n\t\t\t\t\tdedent`\n\t\t\t\tFailed to match URL '${url}' for model '${this.modelName}'.\n\t\t\t\tThis is usually because the regex type for a key hasn't been set.\n\t\t\t\tError: `,\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Convert into a regex and test if url matches\n\t\t\tconst baseString = `.*${interpolatedString.replace(/\\//m, \"/\")}$`;\n\t\t\tconst re = new RegExp(baseString);\n\t\t\treturn re.test(url);\n\t\t},\n\n\t\t// Retrieve the id from the url (if present) without caring about\n\t\t// the hostname.\n\t\t// The url will have a structure like\n\t\t// https://staging-demo.salespreso.com/api/users/1/\n\t\t// and we want to ignore the hostname (https://staging-demo.salespreso.com)\n\t\t// and strip out the '/api' from both the resource url and the variable url\n\t\t// so that we can use the remaining part to isolate the id\n\t\t_getIDFromURL(url, resource = \"\") {\n\t\t\tconst resourceURL = resource || this.getResourceURL();\n\n\t\t\tif (!url || !resourceURL) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst urlPath = url2.parse(url).path;\n\t\t\tconst resourceURLPath = url2.parse(resourceURL).path;\n\n\t\t\t// Remove the '/api' if present\n\t\t\tconst resourceEnd = resourceURLPath.split(\"/api\").join(\"\");\n\t\t\tconst urlEnd = urlPath.split(\"/api\").join(\"\");\n\n\t\t\t// If they are the same, there is no id at the end\n\t\t\tif (!urlEnd || urlEnd === resourceEnd) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst idStr = urlEnd.split(resourceEnd).join(\"\");\n\n\t\t\tif ((idStr.match(/\\//g) || []).length === 1) {\n\t\t\t\treturn parseInt(idStr.slice(0, -1), 10);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\n\t\t// Public version for details only\n\t\tmatchesURL(url) {\n\t\t\treturn this._matchesURL(url, true);\n\t\t},\n\n\t\tdataTypes: {\n\t\t\tdate: {\n\t\t\t\tset: (newVal) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tval: newVal ? moment.utc(newVal).format(DATE_FORMAT_T) : null,\n\t\t\t\t\t\ttype: \"date\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tcompare: (currentVal, newVal) => {\n\t\t\t\t\tif (typeof currentVal === \"undefined\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (currentVal || newVal) {\n\t\t\t\t\t\treturn moment(currentVal).isSame(moment(newVal));\n\t\t\t\t\t}\n\t\t\t\t\treturn currentVal !== newVal;\n\t\t\t\t},\n\t\t\t},\n\t\t\tstringSanitized: {\n\t\t\t\tset: (newVal) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tval: newVal ? removeMultiByteChars(newVal) : newVal,\n\t\t\t\t\t\ttype: \"stringSanitized\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tcompare: (currentVal, newVal) => {\n\t\t\t\t\treturn currentVal === newVal;\n\t\t\t\t},\n\t\t\t\tget: (val) => {\n\t\t\t\t\treturn val;\n\t\t\t\t},\n\t\t\t},\n\t\t\tany: {\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {number} [id]\n\t\t */\n\t\tprops: {\n\t\t\tid: { type: \"any\", required: false },\n\t\t},\n\n\t\t/*\n\t\t * Overridable serialization for sending data to\n\t\t * the server\n\t\t */\n\t\ttoServer() {\n\t\t\treturn this.serialize();\n\t\t},\n\n\t\t_registerChildModel(states, prop, model) {\n\t\t\tconst Model = registeredStates[model];\n\t\t\tif (!Model) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${model}' not found! Did you forget to import it on the '${this.modelName}' model?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._children[prop] = Model;\n\t\t},\n\n\t\t_registerCollection(state, prop, collection) {\n\t\t\tconst Collection = state[collection];\n\t\t\tif (!Collection) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${collection}' not found! Did you forget to import it on the '${this.modelName}' model?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._collections[prop] = Collection;\n\t\t},\n\n\t\t/*\n\t\t * Replace strings respresenting a registered model/collection the function\n\t\t */\n\t\tregisterStates() {\n\t\t\t// Loop through children and replace any parent objects directly to stop\n\t\t\t// maximum stack overflows\n\t\t\t_.each(\n\t\t\t\tthis._children,\n\t\t\t\t(model, prop) => {\n\t\t\t\t\tif (typeof model === \"string\") {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis._options.parent &&\n\t\t\t\t\t\t\tmodel === this._options.parent._registerName\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// This part is important, if the link stays when there's a circular dependency,\n\t\t\t\t\t\t\t// this will continue forever.\n\t\t\t\t\t\t\tdelete this._children[prop];\n\n\t\t\t\t\t\t\t// Can be a string or an object so we use \"any\". We add the definition\n\t\t\t\t\t\t\t// so that we can retrieve this value later.\n\t\t\t\t\t\t\tthis._definition[prop] = { type: \"any\" };\n\n\t\t\t\t\t\t\tthis[prop] = this._options.parent;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._registerChildModel(registeredStates, prop, model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\n\t\t\t// Loop throught the collections and replace with the registered collection\n\t\t\t_.each(\n\t\t\t\tthis._collections,\n\t\t\t\t(collection, prop) => {\n\t\t\t\t\tif (typeof collection === \"string\") {\n\t\t\t\t\t\tthis._registerCollection(registeredStates, prop, collection);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t},\n\n\t\t_updateResponse(response) {\n\t\t\tthis._data = response || {};\n\n\t\t\tif (!response) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set previously-initialised children & collections with new\n\t\t\t// data retrieved during the fetch\n\n\t\t\tObject.keys(this._children).forEach((key) => {\n\t\t\t\tif (response[key]) {\n\t\t\t\t\tthis[key] = response[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._collections).forEach((key) => {\n\t\t\t\tif (response[key]) {\n\t\t\t\t\tthis[key] = response[key];\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tsave() {\n\t\t\treturn Model.prototype.save.apply(this, arguments).tap((response) => {\n\t\t\t\tthis._updateResponse(response);\n\t\t\t});\n\t\t},\n\n\t\tfetch(options = {}) {\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.isFetching = true;\n\t\t\treturn Model.prototype.fetch.apply(this, arguments).tap((response) => {\n\t\t\t\tthis._isFetched = true;\n\t\t\t\tthis.isFetching = false;\n\t\t\t\tthis._updateResponse(response);\n\t\t\t});\n\t\t},\n\n\t\toptions(options = {}) {\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\t\t\treturn SuperAgentRequest(\"OPTIONS\", this.url())\n\t\t\t\t.set(BaseModel.Auth.headers)\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.body && res.body.actions) {\n\t\t\t\t\t\treturn res.body.actions;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\t\t},\n\n\t\tisFetched() {\n\t\t\treturn this._isFetched;\n\t\t},\n\n\t\tgetSafeAttrs(key) {\n\t\t\tif (!_.isUndefined(key)) {\n\t\t\t\treturn !_.isUndefined(this._expandedValues[key])\n\t\t\t\t\t? this._expandedValues[key]\n\t\t\t\t\t: this._values[key];\n\t\t\t}\n\n\t\t\tconst attrs = {};\n\n\t\t\tconst keys = _.uniq(\n\t\t\t\t_.concat(\n\t\t\t\t\t_.concat(\n\t\t\t\t\t\tObject.keys(this._unsetChildren),\n\t\t\t\t\t\tObject.keys(this._unsetCollections),\n\t\t\t\t\t),\n\t\t\t\t\tObject.keys(this._values),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tkeys.forEach((key) => {\n\t\t\t\tif (!_.isUndefined(this._values[key])) {\n\t\t\t\t\tattrs[key] = this._values[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._expandedValues).forEach((key) => {\n\t\t\t\tattrs[key] = this[key];\n\t\t\t});\n\n\t\t\treturn attrs;\n\t\t},\n\n\t\t// Unset all specified children and collection constructors and insert value\n\t\t// definitions for them (necessary for Ampersand State to treat them as values)\n\t\t_convertToValues() {\n\t\t\tObject.keys(this._children).forEach((key) => {\n\t\t\t\tthis._definition[key] = { type: \"any\" };\n\t\t\t\tthis._unsetChildren[key] = this._children[key];\n\t\t\t\tdelete this._children[key];\n\t\t\t});\n\n\t\t\tObject.keys(this._collections).forEach((key) => {\n\t\t\t\tthis._definition[key] = { type: \"any\" };\n\t\t\t\tthis._unsetCollections[key] = this._collections[key];\n\t\t\t\tdelete this._collections[key];\n\t\t\t});\n\t\t},\n\n\t\t// Override the initialization of children to pass in data to the constructor.\n\t\t// The default version always creates an empty model\n\t\t_initChildren() {\n\t\t\tlet child;\n\t\t\tif (!this._children) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (child in this._children) {\n\t\t\t\tlet val = this._data[child];\n\t\t\t\tif (val) {\n\t\t\t\t\t// Assume here that if it's a string, it's a url.\n\t\t\t\t\tif (typeof val === \"string\") {\n\t\t\t\t\t\tval = { url: val };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If hydrate is set to false, this will be the name of the child and\n\t\t\t\t// not the constructor. We want to add the non-hydrated url if so.\n\t\t\t\tif (typeof this._children[child] === \"function\") {\n\t\t\t\t\tthis._safeSet(\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tnew this._children[child](val, { parent: this }),\n\t\t\t\t\t);\n\t\t\t\t\tthis.listenTo(\n\t\t\t\t\t\tthis[child],\n\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tthis._getCachedEventBubblingHandler(child),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis._safeSet(child, val);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Override the initialization of collections to pass in data to the constructor.\n\t\t_initCollections() {\n\t\t\tlet coll;\n\t\t\tif (!this._collections) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (coll in this._collections) {\n\t\t\t\tlet val = this._data[coll];\n\t\t\t\tif (val) {\n\t\t\t\t\tif (typeof val === \"string\") {\n\t\t\t\t\t\tval = { url: val };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If hydrate is set to false, this will be the name of the collection and\n\t\t\t\t// not the constructor. We want to add the non-hydrated array if so.\n\t\t\t\tif (typeof this._collections[coll] === \"function\") {\n\t\t\t\t\tthis._safeSet(\n\t\t\t\t\t\tcoll,\n\t\t\t\t\t\tnew this._collections[coll](val, { parent: this }),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis._safeSet(coll, val);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_initUnsetValues() {\n\t\t\t_.each(this._unsetChildren, (child, key) => {\n\t\t\t\tconst tmpValue = this._values[key];\n\n\t\t\t\treplacePropertyDefinition(this, key);\n\n\t\t\t\tthis[key] = tmpValue;\n\t\t\t});\n\n\t\t\t_.each(this._unsetCollections, (child, key) => {\n\t\t\t\tconst tmpValue = this._values[key];\n\n\t\t\t\treplacePropertyDefinition(this, key);\n\n\t\t\t\tthis[key] = tmpValue;\n\t\t\t});\n\t\t},\n\n\t\t// Make safeSet less safe... as we do need to run this twice\n\t\t_safeSet: function safeSet(property, value) {\n\t\t\tthis[property] = value;\n\t\t\treturn this;\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tif (path === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet url = path;\n\t\t\tif (url.slice(-1) !== \"/\" && url.indexOf(\"?\") === -1) {\n\t\t\t\turl += \"/\";\n\t\t\t}\n\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\turl += `?${qs.stringify(this.queryData, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\t/*\n\t\t * Get url\n\t\t * @return {String}\n\t\t */\n\t\turl() {\n\t\t\tif (this._url && this.isNew()) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\treturn this.getFullURLPath(this.getPlainURL());\n\t\t},\n\n\t\t// Returns url without query data\n\t\tgetPlainURL() {\n\t\t\tif (!this.modelName) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet resp = Model.prototype.url.call(this);\n\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\tif (!resp.includes(\"{\") || !resp.includes(\"}\")) {\n\t\t\t\treturn resp;\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the model.\n\t\t\t// So if you have /path/to/{model.id}/\n\t\t\t// It will check the model from \"this.model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(`Model ${this.modelName} is missing value ${path}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn resp;\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\tif (this.modelName === null && !Object.keys(Api.resources).length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!Object.keys(Api.resources).length) {\n\t\t\t\treturn `/${this.modelName}/`;\n\t\t\t}\n\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tasync waitForReady(opts = {}, attempts = 20) {\n\t\t\tif (attempts === 0) {\n\t\t\t\treturn Promise.reject();\n\t\t\t}\n\t\t\treturn this.fetch(opts).then(() => {\n\t\t\t\tif (!this.creation_status) {\n\t\t\t\t\treturn Promise.reject(new Error(\"No creation_status key found\"));\n\t\t\t\t}\n\n\t\t\t\tif ([\"ready\", \"failed\"].indexOf(this.creation_status) > -1) {\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t}\n\t\t\t\treturn Promise.delay(1000).then(() =>\n\t\t\t\t\tthis.waitForReady(opts, attempts - 1),\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\n\t\tsync() {\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tserialize(opts = { derived: true }) {\n\t\t\t// Return nothing if data passed is falsy. More than likely this is\n\t\t\t// a null value\n\t\t\tif (!this._data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tconst data = Model.prototype.serialize.apply(this, arguments);\n\t\t\tdata.url = this.url();\n\n\t\t\tlet derived = this.getAttributes(opts);\n\t\t\tderived = Object.keys(derived).reduce((object, key) => {\n\t\t\t\tlet value = derived[key];\n\t\t\t\tif (value instanceof Collection || value instanceof Model) {\n\t\t\t\t\tvalue = value.toJSON();\n\t\t\t\t}\n\t\t\t\tobject[key] = value;\n\t\t\t\treturn object;\n\t\t\t}, {});\n\n\t\t\tObject.keys(this._unsetCollections).forEach((key) => {\n\t\t\t\tif (this._unsetCollections[key].canBeEmpty && !this._values[key]) {\n\t\t\t\t\tderived[key] = [];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tObject.keys(this._unsetChildren).forEach((key) => {\n\t\t\t\tif (\n\t\t\t\t\tthis._unsetChildren[key].canBeEmpty &&\n\t\t\t\t\t!this._values[key] &&\n\t\t\t\t\tthis[key]\n\t\t\t\t) {\n\t\t\t\t\tderived[key] = this[key].url();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn _.extend(data, derived);\n\t\t},\n\t\t// Safely retrieve the url from a child or collection that may or may not\n\t\t// be hydrated\n\t\t_retrieveURL(item) {\n\t\t\tif (_.isUndefined(item) || item === null) {\n\t\t\t\treturn item;\n\t\t\t} else if (typeof item === \"string\") {\n\t\t\t\t// It's just a url string\n\t\t\t\treturn item;\n\t\t\t} else if (item instanceof Model) {\n\t\t\t\treturn item.isNew() && !item._url ? null : item.url();\n\t\t\t} else if (item instanceof Collection) {\n\t\t\t\treturn _.map(item.toJSON(), \"url\");\n\t\t\t} else if (_.isArray(item)) {\n\t\t\t\t// It's an array of urls or objects\n\t\t\t\treturn item.map((child) => {\n\t\t\t\t\treturn this._retrieveURL(child);\n\t\t\t\t});\n\t\t\t} else if (typeof item === \"object\" && item !== null) {\n\t\t\t\treturn typeof item.url === \"function\" ? item.url() : item.url;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t},\n);\n\nfunction replacePropertyDefinition(object, name) {\n\tfunction addCollection(value) {\n\t\tconst data = typeof value === \"string\" ? { url: value } : value;\n\n\t\tconst collection = new object._collections[name](data, { parent: object });\n\t\tobject._expandedValues[name] = collection;\n\n\t\treturn object._expandedValues[name];\n\t}\n\n\tfunction addChild(value) {\n\t\tconst data = typeof value === \"string\" ? { url: value } : value;\n\n\t\tconst child = new object._children[name](data, { parent: object });\n\t\tobject._expandedValues[name] = child;\n\n\t\treturn object._expandedValues[name];\n\t}\n\n\tfunction expandCollection(value) {\n\t\tobject._collections[name] = object._unsetCollections[name];\n\t\tdelete object._unsetCollections[name];\n\n\t\treturn addCollection(value);\n\t}\n\n\tfunction expandChild(value) {\n\t\tobject._children[name] = object._unsetChildren[name];\n\t\tdelete object._unsetChildren[name];\n\n\t\treturn addChild(value);\n\t}\n\n\tObject.defineProperty(object, name, {\n\t\tset(val) {\n\t\t\tif (_.includes(Object.keys(object._children), name)) {\n\t\t\t\tif (val instanceof Model) {\n\t\t\t\t\tobject._expandedValues[name] = val;\n\t\t\t\t} else if (val !== this[name].url()) {\n\t\t\t\t\taddChild(val);\n\t\t\t\t}\n\t\t\t} else if (_.includes(Object.keys(object._collections), name)) {\n\t\t\t\tif (val instanceof Collection) {\n\t\t\t\t\tobject._expandedValues[name] = val;\n\t\t\t\t} else if (this[name].length || val !== this[name].url()) {\n\t\t\t\t\taddCollection(val);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tval &&\n\t\t\t\tval instanceof Model &&\n\t\t\t\t_.includes(Object.keys(object._unsetChildren), name)\n\t\t\t) {\n\t\t\t\tobject._expandedValues[name] = expandChild(val.toJSON());\n\t\t\t} else if (\n\t\t\t\tval &&\n\t\t\t\tval instanceof Collection &&\n\t\t\t\t_.includes(Object.keys(object._unsetCollections), name)\n\t\t\t) {\n\t\t\t\tobject._expandedValues[name] = expandCollection(val.toJSON());\n\t\t\t} else {\n\t\t\t\tobject._values[name] = val;\n\t\t\t}\n\t\t},\n\t\tget() {\n\t\t\tif (!this._values) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Trying to retrieve value ${name} of model ${object.modelName} during constructor`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(_.includes(Object.keys(object._collections), name) ||\n\t\t\t\t\t_.includes(Object.keys(object._children), name)) &&\n\t\t\t\t_.includes(Object.keys(object._expandedValues), name)\n\t\t\t) {\n\t\t\t\treturn object._expandedValues[name];\n\t\t\t}\n\n\t\t\tconst value = object._values[name];\n\n\t\t\tif (this.isFetching) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(_.isUndefined(value) || value === null) &&\n\t\t\t\t!(\n\t\t\t\t\tobject._unsetChildren[name] && object._unsetChildren[name].canBeEmpty\n\t\t\t\t) &&\n\t\t\t\t!(\n\t\t\t\t\tobject._unsetCollections[name] &&\n\t\t\t\t\tobject._unsetCollections[name].canBeEmpty\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (_.includes(Object.keys(object._unsetCollections), name)) {\n\t\t\t\treturn expandCollection(value);\n\t\t\t} else if (_.includes(Object.keys(object._unsetChildren), name)) {\n\t\t\t\treturn expandChild(value);\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tconfigurable: true,\n\t});\n}\n\n// Make matchesURL available as a static method\nBaseModel.matchesURL = function (url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"file":"base.js"}
@@ -1,26 +1,40 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  var _api = require("../api.js");
6
+
5
7
  var _base = require("../collections/base.js");
8
+
6
9
  var _base2 = require("./base.js");
10
+
7
11
  var _utils = require("../utils.js");
12
+
8
13
  var _api2 = require("sp-test/api");
14
+
9
15
  var _log = _interopRequireDefault(require("../log.js"));
16
+
10
17
  var _moment = _interopRequireDefault(require("moment"));
18
+
11
19
  var _testdouble = _interopRequireDefault(require("testdouble"));
20
+
12
21
  it("should set date types correctly (SP-2698)", function () {
13
22
  var TestModel = _base2.BaseModel.extend({
14
23
  props: {
15
24
  testDate: "date"
16
25
  }
17
26
  });
27
+
18
28
  var model = new TestModel();
29
+
19
30
  var date = _moment.default.utc();
31
+
20
32
  model.testDate = date;
21
33
  expect(model.testDate).toEqual(date.format(_utils.DATE_FORMAT_T));
22
34
  var model2 = new TestModel();
35
+
23
36
  var date2 = _moment.default.utc();
37
+
24
38
  model2.testDate = date2;
25
39
  expect(model2.testDate).toEqual(date2.format(_utils.DATE_FORMAT_T));
26
40
  });
@@ -30,6 +44,7 @@ it("should accept moment object for date types", function () {
30
44
  begin: "date"
31
45
  }
32
46
  });
47
+
33
48
  var model = new Model({
34
49
  begin: (0, _moment.default)("2014-04-25T01:32:21.196000Z")
35
50
  });
@@ -37,7 +52,9 @@ it("should accept moment object for date types", function () {
37
52
  });
38
53
  it("should override url if passed to constructor", function () {
39
54
  var URL = "path/to/api/";
55
+
40
56
  var Model = _base2.BaseModel.extend();
57
+
41
58
  var model = new Model({
42
59
  url: URL
43
60
  });
@@ -128,6 +145,7 @@ it("should convert an id into a model", function () {
128
145
  var TestModel = _base2.BaseModel.extend({
129
146
  modelName: "test"
130
147
  });
148
+
131
149
  var testModel = new TestModel(1);
132
150
  expect(testModel.id).toEqual(1);
133
151
  expect(testModel.url()).toEqual("/test/1/");
@@ -204,6 +222,7 @@ it("should throw an error if the child collection doesn't exist", function () {
204
222
  mustFail: "DoesntExist"
205
223
  }
206
224
  });
225
+
207
226
  expect(function () {
208
227
  return new Model();
209
228
  }).toThrow();
@@ -253,6 +272,7 @@ it("should correctly sanitize strings of multibyte characters (preserving spaces
253
272
  withSpecialCharacters: "stringSanitized"
254
273
  }
255
274
  });
275
+
256
276
  var model = new TestModel({
257
277
  normalString: "A’ B Cç",
258
278
  control: "ABC",
@@ -273,6 +293,7 @@ it("should allow passing in another model into a model", function () {
273
293
  foo: "string"
274
294
  }
275
295
  });
296
+
276
297
  var firstModel = new TestModel({
277
298
  foo: "bar"
278
299
  });
@@ -281,9 +302,11 @@ it("should allow passing in another model into a model", function () {
281
302
  });
282
303
  it("should retrieve the ID when there is no resource URL", function () {
283
304
  var testURL = "http://localhost:9980/api/test/34/";
305
+
284
306
  var TestModel = _base2.BaseModel.extend({
285
307
  modelName: "test"
286
308
  });
309
+
287
310
  var testModel = new TestModel({
288
311
  url: testURL
289
312
  });
@@ -292,9 +315,11 @@ it("should retrieve the ID when there is no resource URL", function () {
292
315
  });
293
316
  it("should retrieve the ID when the resource URL is the same as the hostname", function () {
294
317
  var testURL = "http://localhost:9980/api/test/34/";
318
+
295
319
  var TestModel = _base2.BaseModel.extend({
296
320
  modelName: "test"
297
321
  });
322
+
298
323
  TestModel.prototype.getResourceURL = jest.fn(function () {
299
324
  return "http://localhost:9980/api/test/";
300
325
  });
@@ -305,9 +330,11 @@ it("should retrieve the ID when the resource URL is the same as the hostname", f
305
330
  });
306
331
  it("should retrieve the ID when the resource hostname is different to the URL hostname", function () {
307
332
  var testURL = "http://some-hostname/api/test/34/";
333
+
308
334
  var TestModel = _base2.BaseModel.extend({
309
335
  modelName: "test"
310
336
  });
337
+
311
338
  TestModel.prototype.getResourceURL = jest.fn(function () {
312
339
  return "http://localhost:9980/api/test/";
313
340
  });
@@ -323,6 +350,7 @@ it("should pass through values into a derived model", function () {
323
350
  name: "string"
324
351
  }
325
352
  });
353
+
326
354
  var TestModel = _base2.BaseModel.extend({
327
355
  modelName: "test",
328
356
  derived: {
@@ -333,6 +361,7 @@ it("should pass through values into a derived model", function () {
333
361
  }
334
362
  }
335
363
  });
364
+
336
365
  var model = new TestModel({
337
366
  myDerivedModel: {
338
367
  id: 1,
@@ -421,9 +450,11 @@ describe(".matchesURL", function () {
421
450
  });
422
451
  it("should match with the full server endpoint included", function () {
423
452
  var endpoint = "http://localhost:8000/api/";
453
+
424
454
  _testdouble.default.replace(_api.Api, "getURL", function () {
425
455
  return endpoint;
426
456
  });
457
+
427
458
  var url = "http://localhost:8000/api/activities/2719/";
428
459
  var ActivityModel = (0, _api2.G)("ActivityItemModel").extend({
429
460
  getResourceURL: function getResourceURL() {
@@ -1 +1 @@
1
- {"version":3,"file":"base.spec.js","names":["_api","require","_base","_base2","_utils","_api2","_log","_interopRequireDefault","_moment","_testdouble","it","TestModel","BaseModel","extend","props","testDate","model","date","moment","utc","expect","toEqual","format","DATE_FORMAT_T","model2","date2","Model","begin","URL","url","G","modelName","children","test","toBeInstanceOf","id","parent","toThrow","testModel","TestCollection","BaseCollection","collections","tests","first","mustFail","at","normalString","control","withSpace","withoutSpace","withSpecialCharacters","foo","firstModel","secondModel","testURL","getResourceURL","prototype","jest","fn","DerivedModel","name","derived","myDerivedModel","DerivedCollection","myDerivedCollection","describe","matchesURL","errorFn","spyOn","log","mockImplementation","not","toBeCalled","urlMatchKeys","bar","endpoint","td","replace","Api","ActivityModel","concat"],"sources":["../../src/models/base.spec.js"],"sourcesContent":["import { Api } from \"../api.js\";\nimport { BaseCollection } from \"../collections/base.js\";\nimport { BaseModel } from \"./base.js\";\nimport { DATE_FORMAT_T } from \"../utils.js\";\nimport { G } from \"sp-test/api\";\nimport log from \"../log.js\";\nimport moment from \"moment\";\nimport td from \"testdouble\";\n\nit(\"should set date types correctly (SP-2698)\", () => {\n\tconst TestModel = BaseModel.extend({ props: { testDate: \"date\" } });\n\n\tconst model = new TestModel();\n\tconst date = moment.utc();\n\tmodel.testDate = date;\n\n\texpect(model.testDate).toEqual(date.format(DATE_FORMAT_T));\n\n\tconst model2 = new TestModel();\n\tconst date2 = moment.utc();\n\tmodel2.testDate = date2;\n\n\texpect(model2.testDate).toEqual(date2.format(DATE_FORMAT_T));\n});\n\nit(\"should accept moment object for date types\", () => {\n\tconst Model = BaseModel.extend({ props: { begin: \"date\" } });\n\tconst model = new Model({ begin: moment(\"2014-04-25T01:32:21.196000Z\") });\n\texpect(model.begin).toEqual(\"2014-04-25T01:32:21.196000Z\");\n});\n\nit(\"should override url if passed to constructor\", () => {\n\tconst URL = \"path/to/api/\";\n\tconst Model = BaseModel.extend();\n\tconst model = new Model({ url: URL });\n\texpect(URL).toEqual(model.url());\n});\n\nit(\"should append a trailing slash to urls if not there\", () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"tests\" }));\n\tconst model = new Model({ url: \"/api/tests\" });\n\texpect(model.url()).toEqual(\"/api/tests/\");\n});\n\nit(\"should not append a slash to a get query\", () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"tests\" }));\n\tconst model = new Model({ url: \"/api/tests/?foo=bar\" });\n\texpect(model.url()).toEqual(\"/api/tests/?foo=bar\");\n});\n\nit(\"should replace child model strings with the registered model\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: 1 });\n\texpect(model.test).toBeInstanceOf(TestModel);\n});\n\nit(\"should allow the model to be passed in\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: new TestModel({ id: 1 }) });\n\texpect(model.test.id).toEqual(1);\n\texpect(model.test).toBeInstanceOf(TestModel);\n});\n\nit(\"should reference parent model if foreign key exists\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: 1 });\n\texpect(model).toEqual(model.test.parent);\n});\n\nit(\"should throw an error if the child model doesn't exist\", () => {\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"DoesntExist\" },\n\t\t}),\n\t);\n\n\texpect(() => new Model()).toThrow();\n});\n\nit(\"should convert a url into a model\", () => {\n\tG(BaseModel.extend({ modelName: \"tests\" }), \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: \"/api/tests/1/\" });\n\texpect(model.test.id).toEqual(1);\n});\n\nit(\"should convert an id into a model\", () => {\n\tconst TestModel = BaseModel.extend({ modelName: \"test\" });\n\tconst testModel = new TestModel(1);\n\texpect(testModel.id).toEqual(1);\n\texpect(testModel.url()).toEqual(\"/test/1/\");\n});\n\nit(\"should convert an object into a model\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: { id: 1 } });\n\texpect(model.test.id).toEqual(1);\n});\n\nit(\"should replace collection strings with their registered state\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: [{ id: 1 }],\n\t});\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should allow a list of models to be passed into a collection\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tG(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst test = new TestModel({ id: 1 });\n\tconst model = new Model({\n\t\ttests: [test],\n\t});\n\texpect(model.tests.first().id).toEqual(1);\n});\n\nit(\"should allow a collection to be passed in directly\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: new TestCollection([{ id: 1 }]),\n\t});\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should throw an error if the child collection doesn't exist\", () => {\n\tconst Model = BaseModel.extend({\n\t\tcollections: { mustFail: \"DoesntExist\" },\n\t});\n\texpect(() => new Model()).toThrow();\n});\n\nit(\"should convert a url into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({ tests: \"/api/tests/\" });\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should convert an array of objects into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tG(BaseCollection.extend({ model: \"TestModel\" }), \"TestCollection\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: [{ id: 1 }, { id: 2 }],\n\t});\n\texpect(model.tests.at(0).id).toEqual(1);\n\texpect(model.tests.at(1).id).toEqual(2);\n});\n\nit(\"should correctly sanitize strings of multibyte characters (preserving spaces)\", () => {\n\tconst TestModel = BaseModel.extend({\n\t\tprops: {\n\t\t\tnormalString: \"string\",\n\t\t\tcontrol: \"stringSanitized\",\n\t\t\twithSpace: \"stringSanitized\",\n\t\t\twithoutSpace: \"stringSanitized\",\n\t\t\twithSpecialCharacters: \"stringSanitized\",\n\t\t},\n\t});\n\n\tconst model = new TestModel({\n\t\tnormalString: \"A’ B Cç\",\n\t\tcontrol: \"ABC\",\n\t\twithSpace: \"A’ B Cç\",\n\t\twithoutSpace: \"AãB®C\",\n\t\twithSpecialCharacters: \"!@#$%^&*()_+\",\n\t});\n\n\texpect(model.normalString).toEqual(\"A’ B Cç\");\n\texpect(model.control).toEqual(\"ABC\");\n\texpect(model.withSpace).toEqual(\"A B C\");\n\texpect(model.withoutSpace).toEqual(\"ABC\");\n\texpect(model.withSpecialCharacters).toEqual(\"!@#$%^&*()_+\");\n});\n\nit(\"should allow passing in another model into a model\", () => {\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t\tprops: {\n\t\t\tfoo: \"string\",\n\t\t},\n\t});\n\n\tconst firstModel = new TestModel({ foo: \"bar\" });\n\tconst secondModel = new TestModel(firstModel);\n\n\texpect(secondModel.foo).toEqual(\"bar\");\n});\n\nit(\"should retrieve the ID when there is no resource URL\", () => {\n\tconst testURL = \"http://localhost:9980/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.getResourceURL()).toEqual(\"/test/\");\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should retrieve the ID when the resource URL is the same as the hostname\", () => {\n\tconst testURL = \"http://localhost:9980/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tTestModel.prototype.getResourceURL = jest.fn(() => {\n\t\treturn \"http://localhost:9980/api/test/\";\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should retrieve the ID when the resource hostname is different to the URL hostname\", () => {\n\tconst testURL = \"http://some-hostname/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tTestModel.prototype.getResourceURL = jest.fn(() => {\n\t\treturn \"http://localhost:9980/api/test/\";\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should pass through values into a derived model\", () => {\n\tconst DerivedModel = BaseModel.extend({\n\t\tmodelName: \"derived\",\n\t\tprops: {\n\t\t\tname: \"string\",\n\t\t},\n\t});\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t\tderived: {\n\t\t\tmyDerivedModel: {\n\t\t\t\tfn() {\n\t\t\t\t\treturn new DerivedModel();\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t});\n\n\tconst model = new TestModel({ myDerivedModel: { id: 1, name: \"foo\" } });\n\texpect(model.myDerivedModel.id).toEqual(1);\n\texpect(model.myDerivedModel.name).toEqual(\"foo\");\n});\n\nit(\"should pass through values into a derived collection\", () => {\n\tG(\n\t\tBaseModel.extend({\n\t\t\tmodelName: \"derived\",\n\t\t\tprops: {\n\t\t\t\tname: \"string\",\n\t\t\t},\n\t\t}),\n\t\t\"DerivedModel\",\n\t);\n\n\tconst DerivedCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"DerivedModel\",\n\t\t}),\n\t);\n\n\tconst TestModel = G(\n\t\tBaseModel.extend({\n\t\t\tmodelName: \"test\",\n\t\t\tderived: {\n\t\t\t\tmyDerivedCollection: {\n\t\t\t\t\tfn() {\n\t\t\t\t\t\treturn new DerivedCollection();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\t\"TestModel\",\n\t);\n\n\tconst model = new TestModel({\n\t\tmyDerivedCollection: [{ id: 1, name: \"foo\" }],\n\t});\n\texpect(model.myDerivedCollection.first().id).toEqual(1);\n\texpect(model.myDerivedCollection.first().name).toEqual(\"foo\");\n});\n\ndescribe(\".matchesURL\", () => {\n\tit(\"should have a model match the right url\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"foo\",\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/foo/1/\")).toEqual(true);\n\t});\n\n\tit(\"should have a model not match the wrong url\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"foo\",\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/\")).toEqual(false);\n\t});\n\n\tit(\"should not throw a nasty error when url isn't even close\", () => {\n\t\tconst errorFn = jest.spyOn(log, \"error\").mockImplementation(jest.fn());\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/foo/1/\")).toEqual(false);\n\t\texpect(errorFn).not.toBeCalled();\n\t});\n\n\tit(\"should throw an error if url matches, but it isn't set up right\", () => {\n\t\tconst errorFn = jest.spyOn(log, \"error\").mockImplementation(jest.fn());\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/\")).toEqual(false);\n\t\texpect(errorFn).toBeCalled();\n\t});\n\n\tit(\"should expect values passed in through url match keys\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\turlMatchKeys: {\n\t\t\t\tfoo: \"string\",\n\t\t\t\tbar: \"number\",\n\t\t\t},\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{bar}/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/hello/1/\")).toEqual(true);\n\t});\n\n\tit(\"should match with the full server endpoint included\", () => {\n\t\tconst endpoint = \"http://localhost:8000/api/\";\n\t\ttd.replace(Api, \"getURL\", () => endpoint);\n\t\tconst url = \"http://localhost:8000/api/activities/2719/\";\n\t\tconst ActivityModel = G(\"ActivityItemModel\").extend({\n\t\t\tgetResourceURL() {\n\t\t\t\treturn `${endpoint}activities/`;\n\t\t\t},\n\t\t});\n\t\texpect(ActivityModel.matchesURL(url)).toEqual(true);\n\t});\n});\n"],"mappings":";;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,IAAA,GAAAC,sBAAA,CAAAN,OAAA;AACA,IAAAO,OAAA,GAAAD,sBAAA,CAAAN,OAAA;AACA,IAAAQ,WAAA,GAAAF,sBAAA,CAAAN,OAAA;AAEAS,EAAE,CAAC,2CAA2C,EAAE,YAAM;EACrD,IAAMC,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAAEC,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAO;EAAE,CAAC,CAAC;EAEnE,IAAMC,KAAK,GAAG,IAAIL,SAAS,CAAC,CAAC;EAC7B,IAAMM,IAAI,GAAGC,eAAM,CAACC,GAAG,CAAC,CAAC;EACzBH,KAAK,CAACD,QAAQ,GAAGE,IAAI;EAErBG,MAAM,CAACJ,KAAK,CAACD,QAAQ,CAAC,CAACM,OAAO,CAACJ,IAAI,CAACK,MAAM,CAACC,oBAAa,CAAC,CAAC;EAE1D,IAAMC,MAAM,GAAG,IAAIb,SAAS,CAAC,CAAC;EAC9B,IAAMc,KAAK,GAAGP,eAAM,CAACC,GAAG,CAAC,CAAC;EAC1BK,MAAM,CAACT,QAAQ,GAAGU,KAAK;EAEvBL,MAAM,CAACI,MAAM,CAACT,QAAQ,CAAC,CAACM,OAAO,CAACI,KAAK,CAACH,MAAM,CAACC,oBAAa,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEFb,EAAE,CAAC,4CAA4C,EAAE,YAAM;EACtD,IAAMgB,KAAK,GAAGd,gBAAS,CAACC,MAAM,CAAC;IAAEC,KAAK,EAAE;MAAEa,KAAK,EAAE;IAAO;EAAE,CAAC,CAAC;EAC5D,IAAMX,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEC,KAAK,EAAE,IAAAT,eAAM,EAAC,6BAA6B;EAAE,CAAC,CAAC;EACzEE,MAAM,CAACJ,KAAK,CAACW,KAAK,CAAC,CAACN,OAAO,CAAC,6BAA6B,CAAC;AAC3D,CAAC,CAAC;AAEFX,EAAE,CAAC,8CAA8C,EAAE,YAAM;EACxD,IAAMkB,GAAG,GAAG,cAAc;EAC1B,IAAMF,KAAK,GAAGd,gBAAS,CAACC,MAAM,CAAC,CAAC;EAChC,IAAMG,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEG,GAAG,EAAED;EAAI,CAAC,CAAC;EACrCR,MAAM,CAACQ,GAAG,CAAC,CAACP,OAAO,CAACL,KAAK,CAACa,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC;AAEFnB,EAAE,CAAC,qDAAqD,EAAE,YAAM;EAC/D,IAAMgB,KAAK,GAAG,IAAAI,OAAC,EAAClB,gBAAS,CAACC,MAAM,CAAC;IAAEkB,SAAS,EAAE;EAAQ,CAAC,CAAC,CAAC;EACzD,IAAMf,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEG,GAAG,EAAE;EAAa,CAAC,CAAC;EAC9CT,MAAM,CAACJ,KAAK,CAACa,GAAG,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,aAAa,CAAC;AAC3C,CAAC,CAAC;AAEFX,EAAE,CAAC,0CAA0C,EAAE,YAAM;EACpD,IAAMgB,KAAK,GAAG,IAAAI,OAAC,EAAClB,gBAAS,CAACC,MAAM,CAAC;IAAEkB,SAAS,EAAE;EAAQ,CAAC,CAAC,CAAC;EACzD,IAAMf,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEG,GAAG,EAAE;EAAsB,CAAC,CAAC;EACvDT,MAAM,CAACJ,KAAK,CAACa,GAAG,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,qBAAqB,CAAC;AACnD,CAAC,CAAC;AAEFX,EAAE,CAAC,8DAA8D,EAAE,YAAM;EACxE,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EAC3C,IAAMc,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY;EAC/B,CAAC,CACF,CAAC;EACD,IAAMjB,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEO,IAAI,EAAE;EAAE,CAAC,CAAC;EACpCb,MAAM,CAACJ,KAAK,CAACiB,IAAI,CAAC,CAACC,cAAc,CAACvB,SAAS,CAAC;AAC7C,CAAC,CAAC;AAEFD,EAAE,CAAC,wCAAwC,EAAE,YAAM;EAClD,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EAC3C,IAAMc,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY;EAC/B,CAAC,CACF,CAAC;EACD,IAAMjB,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEO,IAAI,EAAE,IAAItB,SAAS,CAAC;MAAEwB,EAAE,EAAE;IAAE,CAAC;EAAE,CAAC,CAAC;EAC3Df,MAAM,CAACJ,KAAK,CAACiB,IAAI,CAACE,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;EAChCD,MAAM,CAACJ,KAAK,CAACiB,IAAI,CAAC,CAACC,cAAc,CAACvB,SAAS,CAAC;AAC7C,CAAC,CAAC;AAEFD,EAAE,CAAC,qDAAqD,EAAE,YAAM;EAC/D,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAMc,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY;EAC/B,CAAC,CACF,CAAC;EACD,IAAMjB,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEO,IAAI,EAAE;EAAE,CAAC,CAAC;EACpCb,MAAM,CAACJ,KAAK,CAAC,CAACK,OAAO,CAACL,KAAK,CAACiB,IAAI,CAACG,MAAM,CAAC;AACzC,CAAC,CAAC;AAEF1B,EAAE,CAAC,wDAAwD,EAAE,YAAM;EAClE,IAAMgB,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAc;EACjC,CAAC,CACF,CAAC;EAEDb,MAAM,CAAC;IAAA,OAAM,IAAIM,KAAK,CAAC,CAAC;EAAA,EAAC,CAACW,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF3B,EAAE,CAAC,mCAAmC,EAAE,YAAM;EAC7C,IAAAoB,OAAC,EAAClB,gBAAS,CAACC,MAAM,CAAC;IAAEkB,SAAS,EAAE;EAAQ,CAAC,CAAC,EAAE,WAAW,CAAC;EACxD,IAAML,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY;EAC/B,CAAC,CACF,CAAC;EACD,IAAMjB,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEO,IAAI,EAAE;EAAgB,CAAC,CAAC;EAClDb,MAAM,CAACJ,KAAK,CAACiB,IAAI,CAACE,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC;AAEFX,EAAE,CAAC,mCAAmC,EAAE,YAAM;EAC7C,IAAMC,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAAEkB,SAAS,EAAE;EAAO,CAAC,CAAC;EACzD,IAAMO,SAAS,GAAG,IAAI3B,SAAS,CAAC,CAAC,CAAC;EAClCS,MAAM,CAACkB,SAAS,CAACH,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;EAC/BD,MAAM,CAACkB,SAAS,CAACT,GAAG,CAAC,CAAC,CAAC,CAACR,OAAO,CAAC,UAAU,CAAC;AAC5C,CAAC,CAAC;AAEFX,EAAE,CAAC,uCAAuC,EAAE,YAAM;EACjD,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAMc,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChBmB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY;EAC/B,CAAC,CACF,CAAC;EACD,IAAMjB,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEO,IAAI,EAAE;MAAEE,EAAE,EAAE;IAAE;EAAE,CAAC,CAAC;EAC5Cf,MAAM,CAACJ,KAAK,CAACiB,IAAI,CAACE,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC;AAEFX,EAAE,CAAC,+DAA+D,EAAE,YAAM;EACzE,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAM2B,cAAc,GAAG,IAAAT,OAAC,EACvBU,oBAAc,CAAC3B,MAAM,CAAC;IACrBG,KAAK,EAAE;EACR,CAAC,CAAC,EACF,gBACD,CAAC;EACD,IAAMU,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChB4B,WAAW,EAAE;MAAEC,KAAK,EAAE;IAAiB;EACxC,CAAC,CACF,CAAC;EACD,IAAM1B,KAAK,GAAG,IAAIU,KAAK,CAAC;IACvBgB,KAAK,EAAE,CAAC;MAAEP,EAAE,EAAE;IAAE,CAAC;EAClB,CAAC,CAAC;EACFf,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAAC,CAACR,cAAc,CAACK,cAAc,CAAC;AACnD,CAAC,CAAC;AAEF7B,EAAE,CAAC,8DAA8D,EAAE,YAAM;EACxE,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EAC3C,IAAAkB,OAAC,EACAU,oBAAc,CAAC3B,MAAM,CAAC;IACrBG,KAAK,EAAE;EACR,CAAC,CAAC,EACF,gBACD,CAAC;EACD,IAAMU,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChB4B,WAAW,EAAE;MAAEC,KAAK,EAAE;IAAiB;EACxC,CAAC,CACF,CAAC;EACD,IAAMT,IAAI,GAAG,IAAItB,SAAS,CAAC;IAAEwB,EAAE,EAAE;EAAE,CAAC,CAAC;EACrC,IAAMnB,KAAK,GAAG,IAAIU,KAAK,CAAC;IACvBgB,KAAK,EAAE,CAACT,IAAI;EACb,CAAC,CAAC;EACFb,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAACC,KAAK,CAAC,CAAC,CAACR,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEFX,EAAE,CAAC,oDAAoD,EAAE,YAAM;EAC9D,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAM2B,cAAc,GAAG,IAAAT,OAAC,EACvBU,oBAAc,CAAC3B,MAAM,CAAC;IACrBG,KAAK,EAAE;EACR,CAAC,CAAC,EACF,gBACD,CAAC;EACD,IAAMU,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChB4B,WAAW,EAAE;MAAEC,KAAK,EAAE;IAAiB;EACxC,CAAC,CACF,CAAC;EACD,IAAM1B,KAAK,GAAG,IAAIU,KAAK,CAAC;IACvBgB,KAAK,EAAE,IAAIH,cAAc,CAAC,CAAC;MAAEJ,EAAE,EAAE;IAAE,CAAC,CAAC;EACtC,CAAC,CAAC;EACFf,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAAC,CAACR,cAAc,CAACK,cAAc,CAAC;AACnD,CAAC,CAAC;AAEF7B,EAAE,CAAC,6DAA6D,EAAE,YAAM;EACvE,IAAMgB,KAAK,GAAGd,gBAAS,CAACC,MAAM,CAAC;IAC9B4B,WAAW,EAAE;MAAEG,QAAQ,EAAE;IAAc;EACxC,CAAC,CAAC;EACFxB,MAAM,CAAC;IAAA,OAAM,IAAIM,KAAK,CAAC,CAAC;EAAA,EAAC,CAACW,OAAO,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF3B,EAAE,CAAC,wCAAwC,EAAE,YAAM;EAClD,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAM2B,cAAc,GAAG,IAAAT,OAAC,EACvBU,oBAAc,CAAC3B,MAAM,CAAC;IACrBG,KAAK,EAAE;EACR,CAAC,CAAC,EACF,gBACD,CAAC;EACD,IAAMU,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChB4B,WAAW,EAAE;MAAEC,KAAK,EAAE;IAAiB;EACxC,CAAC,CACF,CAAC;EACD,IAAM1B,KAAK,GAAG,IAAIU,KAAK,CAAC;IAAEgB,KAAK,EAAE;EAAc,CAAC,CAAC;EACjDtB,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAAC,CAACR,cAAc,CAACK,cAAc,CAAC;AACnD,CAAC,CAAC;AAEF7B,EAAE,CAAC,sDAAsD,EAAE,YAAM;EAChE,IAAAoB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC;EACzB,IAAAkB,OAAC,EAACU,oBAAc,CAAC3B,MAAM,CAAC;IAAEG,KAAK,EAAE;EAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC;EAClE,IAAMU,KAAK,GAAG,IAAAI,OAAC,EACdlB,gBAAS,CAACC,MAAM,CAAC;IAChB4B,WAAW,EAAE;MAAEC,KAAK,EAAE;IAAiB;EACxC,CAAC,CACF,CAAC;EACD,IAAM1B,KAAK,GAAG,IAAIU,KAAK,CAAC;IACvBgB,KAAK,EAAE,CAAC;MAAEP,EAAE,EAAE;IAAE,CAAC,EAAE;MAAEA,EAAE,EAAE;IAAE,CAAC;EAC7B,CAAC,CAAC;EACFf,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAACG,EAAE,CAAC,CAAC,CAAC,CAACV,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;EACvCD,MAAM,CAACJ,KAAK,CAAC0B,KAAK,CAACG,EAAE,CAAC,CAAC,CAAC,CAACV,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEFX,EAAE,CAAC,+EAA+E,EAAE,YAAM;EACzF,IAAMC,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCC,KAAK,EAAE;MACNgC,YAAY,EAAE,QAAQ;MACtBC,OAAO,EAAE,iBAAiB;MAC1BC,SAAS,EAAE,iBAAiB;MAC5BC,YAAY,EAAE,iBAAiB;MAC/BC,qBAAqB,EAAE;IACxB;EACD,CAAC,CAAC;EAEF,IAAMlC,KAAK,GAAG,IAAIL,SAAS,CAAC;IAC3BmC,YAAY,EAAE,cAAc;IAC5BC,OAAO,EAAE,KAAK;IACdC,SAAS,EAAE,cAAc;IACzBC,YAAY,EAAE,SAAS;IACvBC,qBAAqB,EAAE;EACxB,CAAC,CAAC;EAEF9B,MAAM,CAACJ,KAAK,CAAC8B,YAAY,CAAC,CAACzB,OAAO,CAAC,cAAc,CAAC;EAClDD,MAAM,CAACJ,KAAK,CAAC+B,OAAO,CAAC,CAAC1B,OAAO,CAAC,KAAK,CAAC;EACpCD,MAAM,CAACJ,KAAK,CAACgC,SAAS,CAAC,CAAC3B,OAAO,CAAC,OAAO,CAAC;EACxCD,MAAM,CAACJ,KAAK,CAACiC,YAAY,CAAC,CAAC5B,OAAO,CAAC,KAAK,CAAC;EACzCD,MAAM,CAACJ,KAAK,CAACkC,qBAAqB,CAAC,CAAC7B,OAAO,CAAC,cAAc,CAAC;AAC5D,CAAC,CAAC;AAEFX,EAAE,CAAC,oDAAoD,EAAE,YAAM;EAC9D,IAAMC,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCkB,SAAS,EAAE,MAAM;IACjBjB,KAAK,EAAE;MACNqC,GAAG,EAAE;IACN;EACD,CAAC,CAAC;EAEF,IAAMC,UAAU,GAAG,IAAIzC,SAAS,CAAC;IAAEwC,GAAG,EAAE;EAAM,CAAC,CAAC;EAChD,IAAME,WAAW,GAAG,IAAI1C,SAAS,CAACyC,UAAU,CAAC;EAE7ChC,MAAM,CAACiC,WAAW,CAACF,GAAG,CAAC,CAAC9B,OAAO,CAAC,KAAK,CAAC;AACvC,CAAC,CAAC;AAEFX,EAAE,CAAC,sDAAsD,EAAE,YAAM;EAChE,IAAM4C,OAAO,GAAG,oCAAoC;EACpD,IAAM3C,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCkB,SAAS,EAAE;EACZ,CAAC,CAAC;EAEF,IAAMO,SAAS,GAAG,IAAI3B,SAAS,CAAC;IAAEkB,GAAG,EAAEyB;EAAQ,CAAC,CAAC;EAEjDlC,MAAM,CAACkB,SAAS,CAACiB,cAAc,CAAC,CAAC,CAAC,CAAClC,OAAO,CAAC,QAAQ,CAAC;EACpDD,MAAM,CAACkB,SAAS,CAACH,EAAE,CAAC,CAACd,OAAO,CAAC,EAAE,CAAC;AACjC,CAAC,CAAC;AAEFX,EAAE,CAAC,0EAA0E,EAAE,YAAM;EACpF,IAAM4C,OAAO,GAAG,oCAAoC;EACpD,IAAM3C,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCkB,SAAS,EAAE;EACZ,CAAC,CAAC;EAEFpB,SAAS,CAAC6C,SAAS,CAACD,cAAc,GAAGE,IAAI,CAACC,EAAE,CAAC,YAAM;IAClD,OAAO,iCAAiC;EACzC,CAAC,CAAC;EAEF,IAAMpB,SAAS,GAAG,IAAI3B,SAAS,CAAC;IAAEkB,GAAG,EAAEyB;EAAQ,CAAC,CAAC;EAEjDlC,MAAM,CAACkB,SAAS,CAACH,EAAE,CAAC,CAACd,OAAO,CAAC,EAAE,CAAC;AACjC,CAAC,CAAC;AAEFX,EAAE,CAAC,oFAAoF,EAAE,YAAM;EAC9F,IAAM4C,OAAO,GAAG,mCAAmC;EACnD,IAAM3C,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCkB,SAAS,EAAE;EACZ,CAAC,CAAC;EAEFpB,SAAS,CAAC6C,SAAS,CAACD,cAAc,GAAGE,IAAI,CAACC,EAAE,CAAC,YAAM;IAClD,OAAO,iCAAiC;EACzC,CAAC,CAAC;EAEF,IAAMpB,SAAS,GAAG,IAAI3B,SAAS,CAAC;IAAEkB,GAAG,EAAEyB;EAAQ,CAAC,CAAC;EAEjDlC,MAAM,CAACkB,SAAS,CAACH,EAAE,CAAC,CAACd,OAAO,CAAC,EAAE,CAAC;AACjC,CAAC,CAAC;AAEFX,EAAE,CAAC,iDAAiD,EAAE,YAAM;EAC3D,IAAMiD,YAAY,GAAG/C,gBAAS,CAACC,MAAM,CAAC;IACrCkB,SAAS,EAAE,SAAS;IACpBjB,KAAK,EAAE;MACN8C,IAAI,EAAE;IACP;EACD,CAAC,CAAC;EACF,IAAMjD,SAAS,GAAGC,gBAAS,CAACC,MAAM,CAAC;IAClCkB,SAAS,EAAE,MAAM;IACjB8B,OAAO,EAAE;MACRC,cAAc,EAAE;QACfJ,EAAE,WAAAA,GAAA,EAAG;UACJ,OAAO,IAAIC,YAAY,CAAC,CAAC;QAC1B;MACD;IACD;EACD,CAAC,CAAC;EAEF,IAAM3C,KAAK,GAAG,IAAIL,SAAS,CAAC;IAAEmD,cAAc,EAAE;MAAE3B,EAAE,EAAE,CAAC;MAAEyB,IAAI,EAAE;IAAM;EAAE,CAAC,CAAC;EACvExC,MAAM,CAACJ,KAAK,CAAC8C,cAAc,CAAC3B,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;EAC1CD,MAAM,CAACJ,KAAK,CAAC8C,cAAc,CAACF,IAAI,CAAC,CAACvC,OAAO,CAAC,KAAK,CAAC;AACjD,CAAC,CAAC;AAEFX,EAAE,CAAC,sDAAsD,EAAE,YAAM;EAChE,IAAAoB,OAAC,EACAlB,gBAAS,CAACC,MAAM,CAAC;IAChBkB,SAAS,EAAE,SAAS;IACpBjB,KAAK,EAAE;MACN8C,IAAI,EAAE;IACP;EACD,CAAC,CAAC,EACF,cACD,CAAC;EAED,IAAMG,iBAAiB,GAAG,IAAAjC,OAAC,EAC1BU,oBAAc,CAAC3B,MAAM,CAAC;IACrBG,KAAK,EAAE;EACR,CAAC,CACF,CAAC;EAED,IAAML,SAAS,GAAG,IAAAmB,OAAC,EAClBlB,gBAAS,CAACC,MAAM,CAAC;IAChBkB,SAAS,EAAE,MAAM;IACjB8B,OAAO,EAAE;MACRG,mBAAmB,EAAE;QACpBN,EAAE,WAAAA,GAAA,EAAG;UACJ,OAAO,IAAIK,iBAAiB,CAAC,CAAC;QAC/B;MACD;IACD;EACD,CAAC,CAAC,EACF,WACD,CAAC;EAED,IAAM/C,KAAK,GAAG,IAAIL,SAAS,CAAC;IAC3BqD,mBAAmB,EAAE,CAAC;MAAE7B,EAAE,EAAE,CAAC;MAAEyB,IAAI,EAAE;IAAM,CAAC;EAC7C,CAAC,CAAC;EACFxC,MAAM,CAACJ,KAAK,CAACgD,mBAAmB,CAACrB,KAAK,CAAC,CAAC,CAACR,EAAE,CAAC,CAACd,OAAO,CAAC,CAAC,CAAC;EACvDD,MAAM,CAACJ,KAAK,CAACgD,mBAAmB,CAACrB,KAAK,CAAC,CAAC,CAACiB,IAAI,CAAC,CAACvC,OAAO,CAAC,KAAK,CAAC;AAC9D,CAAC,CAAC;AAEF4C,QAAQ,CAAC,aAAa,EAAE,YAAM;EAC7BvD,EAAE,CAAC,yCAAyC,EAAE,YAAM;IACnD,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC,CAACC,MAAM,CAAC;MAClDkB,SAAS,EAAE;IACZ,CAAC,CAAC;IACFX,MAAM,CAACT,SAAS,CAACuD,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC7C,OAAO,CAAC,IAAI,CAAC;EAC1D,CAAC,CAAC;EAEFX,EAAE,CAAC,6CAA6C,EAAE,YAAM;IACvD,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC,CAACC,MAAM,CAAC;MAClDkB,SAAS,EAAE;IACZ,CAAC,CAAC;IACFX,MAAM,CAACT,SAAS,CAACuD,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC7C,OAAO,CAAC,KAAK,CAAC;EAC3D,CAAC,CAAC;EAEFX,EAAE,CAAC,0DAA0D,EAAE,YAAM;IACpE,IAAMyD,OAAO,GAAGV,IAAI,CAACW,KAAK,CAACC,YAAG,EAAE,OAAO,CAAC,CAACC,kBAAkB,CAACb,IAAI,CAACC,EAAE,CAAC,CAAC,CAAC;IACtE,IAAM/C,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC,CAACC,MAAM,CAAC;MAClDkB,SAAS,EAAE,KAAK;MAChBwB,cAAc,WAAAA,eAAA,EAAG;QAChB,OAAO,iBAAiB;MACzB;IACD,CAAC,CAAC;IACFnC,MAAM,CAACT,SAAS,CAACuD,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC7C,OAAO,CAAC,KAAK,CAAC;IAC1DD,MAAM,CAAC+C,OAAO,CAAC,CAACI,GAAG,CAACC,UAAU,CAAC,CAAC;EACjC,CAAC,CAAC;EAEF9D,EAAE,CAAC,iEAAiE,EAAE,YAAM;IAC3E,IAAMyD,OAAO,GAAGV,IAAI,CAACW,KAAK,CAACC,YAAG,EAAE,OAAO,CAAC,CAACC,kBAAkB,CAACb,IAAI,CAACC,EAAE,CAAC,CAAC,CAAC;IACtE,IAAM/C,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC,CAACC,MAAM,CAAC;MAClDkB,SAAS,EAAE,KAAK;MAChBwB,cAAc,WAAAA,eAAA,EAAG;QAChB,OAAO,iBAAiB;MACzB;IACD,CAAC,CAAC;IACFnC,MAAM,CAACT,SAAS,CAACuD,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC7C,OAAO,CAAC,KAAK,CAAC;IAC1DD,MAAM,CAAC+C,OAAO,CAAC,CAACK,UAAU,CAAC,CAAC;EAC7B,CAAC,CAAC;EAEF9D,EAAE,CAAC,uDAAuD,EAAE,YAAM;IACjE,IAAMC,SAAS,GAAG,IAAAmB,OAAC,EAAClB,gBAAS,EAAE,WAAW,CAAC,CAACC,MAAM,CAAC;MAClDkB,SAAS,EAAE,KAAK;MAChB0C,YAAY,EAAE;QACbtB,GAAG,EAAE,QAAQ;QACbuB,GAAG,EAAE;MACN,CAAC;MACDnB,cAAc,WAAAA,eAAA,EAAG;QAChB,OAAO,uBAAuB;MAC/B;IACD,CAAC,CAAC;IACFnC,MAAM,CAACT,SAAS,CAACuD,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC7C,OAAO,CAAC,IAAI,CAAC;EAClE,CAAC,CAAC;EAEFX,EAAE,CAAC,qDAAqD,EAAE,YAAM;IAC/D,IAAMiE,QAAQ,GAAG,4BAA4B;IAC7CC,mBAAE,CAACC,OAAO,CAACC,QAAG,EAAE,QAAQ,EAAE;MAAA,OAAMH,QAAQ;IAAA,EAAC;IACzC,IAAM9C,GAAG,GAAG,4CAA4C;IACxD,IAAMkD,aAAa,GAAG,IAAAjD,OAAC,EAAC,mBAAmB,CAAC,CAACjB,MAAM,CAAC;MACnD0C,cAAc,WAAAA,eAAA,EAAG;QAChB,UAAAyB,MAAA,CAAUL,QAAQ;MACnB;IACD,CAAC,CAAC;IACFvD,MAAM,CAAC2D,aAAa,CAACb,UAAU,CAACrC,GAAG,CAAC,CAAC,CAACR,OAAO,CAAC,IAAI,CAAC;EACpD,CAAC,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../src/models/base.spec.js"],"names":["it","TestModel","BaseModel","extend","props","testDate","model","date","moment","utc","expect","toEqual","format","DATE_FORMAT_T","model2","date2","Model","begin","URL","url","modelName","children","test","toBeInstanceOf","id","parent","toThrow","testModel","TestCollection","BaseCollection","collections","tests","first","mustFail","at","normalString","control","withSpace","withoutSpace","withSpecialCharacters","foo","firstModel","secondModel","testURL","getResourceURL","prototype","jest","fn","DerivedModel","name","derived","myDerivedModel","DerivedCollection","myDerivedCollection","describe","matchesURL","errorFn","spyOn","log","mockImplementation","not","toBeCalled","urlMatchKeys","bar","endpoint","td","replace","Api","ActivityModel"],"mappings":"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","sourcesContent":["import { Api } from \"../api.js\";\nimport { BaseCollection } from \"../collections/base.js\";\nimport { BaseModel } from \"./base.js\";\nimport { DATE_FORMAT_T } from \"../utils.js\";\nimport { G } from \"sp-test/api\";\nimport log from \"../log.js\";\nimport moment from \"moment\";\nimport td from \"testdouble\";\n\nit(\"should set date types correctly (SP-2698)\", () => {\n\tconst TestModel = BaseModel.extend({ props: { testDate: \"date\" } });\n\n\tconst model = new TestModel();\n\tconst date = moment.utc();\n\tmodel.testDate = date;\n\n\texpect(model.testDate).toEqual(date.format(DATE_FORMAT_T));\n\n\tconst model2 = new TestModel();\n\tconst date2 = moment.utc();\n\tmodel2.testDate = date2;\n\n\texpect(model2.testDate).toEqual(date2.format(DATE_FORMAT_T));\n});\n\nit(\"should accept moment object for date types\", () => {\n\tconst Model = BaseModel.extend({ props: { begin: \"date\" } });\n\tconst model = new Model({ begin: moment(\"2014-04-25T01:32:21.196000Z\") });\n\texpect(model.begin).toEqual(\"2014-04-25T01:32:21.196000Z\");\n});\n\nit(\"should override url if passed to constructor\", () => {\n\tconst URL = \"path/to/api/\";\n\tconst Model = BaseModel.extend();\n\tconst model = new Model({ url: URL });\n\texpect(URL).toEqual(model.url());\n});\n\nit(\"should append a trailing slash to urls if not there\", () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"tests\" }));\n\tconst model = new Model({ url: \"/api/tests\" });\n\texpect(model.url()).toEqual(\"/api/tests/\");\n});\n\nit(\"should not append a slash to a get query\", () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"tests\" }));\n\tconst model = new Model({ url: \"/api/tests/?foo=bar\" });\n\texpect(model.url()).toEqual(\"/api/tests/?foo=bar\");\n});\n\nit(\"should replace child model strings with the registered model\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: 1 });\n\texpect(model.test).toBeInstanceOf(TestModel);\n});\n\nit(\"should allow the model to be passed in\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: new TestModel({ id: 1 }) });\n\texpect(model.test.id).toEqual(1);\n\texpect(model.test).toBeInstanceOf(TestModel);\n});\n\nit(\"should reference parent model if foreign key exists\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: 1 });\n\texpect(model).toEqual(model.test.parent);\n});\n\nit(\"should throw an error if the child model doesn't exist\", () => {\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"DoesntExist\" },\n\t\t}),\n\t);\n\n\texpect(() => new Model()).toThrow();\n});\n\nit(\"should convert a url into a model\", () => {\n\tG(BaseModel.extend({ modelName: \"tests\" }), \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: \"/api/tests/1/\" });\n\texpect(model.test.id).toEqual(1);\n});\n\nit(\"should convert an id into a model\", () => {\n\tconst TestModel = BaseModel.extend({ modelName: \"test\" });\n\tconst testModel = new TestModel(1);\n\texpect(testModel.id).toEqual(1);\n\texpect(testModel.url()).toEqual(\"/test/1/\");\n});\n\nit(\"should convert an object into a model\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tchildren: { test: \"TestModel\" },\n\t\t}),\n\t);\n\tconst model = new Model({ test: { id: 1 } });\n\texpect(model.test.id).toEqual(1);\n});\n\nit(\"should replace collection strings with their registered state\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: [{ id: 1 }],\n\t});\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should allow a list of models to be passed into a collection\", () => {\n\tconst TestModel = G(BaseModel, \"TestModel\");\n\tG(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst test = new TestModel({ id: 1 });\n\tconst model = new Model({\n\t\ttests: [test],\n\t});\n\texpect(model.tests.first().id).toEqual(1);\n});\n\nit(\"should allow a collection to be passed in directly\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: new TestCollection([{ id: 1 }]),\n\t});\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should throw an error if the child collection doesn't exist\", () => {\n\tconst Model = BaseModel.extend({\n\t\tcollections: { mustFail: \"DoesntExist\" },\n\t});\n\texpect(() => new Model()).toThrow();\n});\n\nit(\"should convert a url into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst TestCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"TestModel\",\n\t\t}),\n\t\t\"TestCollection\",\n\t);\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({ tests: \"/api/tests/\" });\n\texpect(model.tests).toBeInstanceOf(TestCollection);\n});\n\nit(\"should convert an array of objects into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tG(BaseCollection.extend({ model: \"TestModel\" }), \"TestCollection\");\n\tconst Model = G(\n\t\tBaseModel.extend({\n\t\t\tcollections: { tests: \"TestCollection\" },\n\t\t}),\n\t);\n\tconst model = new Model({\n\t\ttests: [{ id: 1 }, { id: 2 }],\n\t});\n\texpect(model.tests.at(0).id).toEqual(1);\n\texpect(model.tests.at(1).id).toEqual(2);\n});\n\nit(\"should correctly sanitize strings of multibyte characters (preserving spaces)\", () => {\n\tconst TestModel = BaseModel.extend({\n\t\tprops: {\n\t\t\tnormalString: \"string\",\n\t\t\tcontrol: \"stringSanitized\",\n\t\t\twithSpace: \"stringSanitized\",\n\t\t\twithoutSpace: \"stringSanitized\",\n\t\t\twithSpecialCharacters: \"stringSanitized\",\n\t\t},\n\t});\n\n\tconst model = new TestModel({\n\t\tnormalString: \"A’ B Cç\",\n\t\tcontrol: \"ABC\",\n\t\twithSpace: \"A’ B Cç\",\n\t\twithoutSpace: \"AãB®C\",\n\t\twithSpecialCharacters: \"!@#$%^&*()_+\",\n\t});\n\n\texpect(model.normalString).toEqual(\"A’ B Cç\");\n\texpect(model.control).toEqual(\"ABC\");\n\texpect(model.withSpace).toEqual(\"A B C\");\n\texpect(model.withoutSpace).toEqual(\"ABC\");\n\texpect(model.withSpecialCharacters).toEqual(\"!@#$%^&*()_+\");\n});\n\nit(\"should allow passing in another model into a model\", () => {\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t\tprops: {\n\t\t\tfoo: \"string\",\n\t\t},\n\t});\n\n\tconst firstModel = new TestModel({ foo: \"bar\" });\n\tconst secondModel = new TestModel(firstModel);\n\n\texpect(secondModel.foo).toEqual(\"bar\");\n});\n\nit(\"should retrieve the ID when there is no resource URL\", () => {\n\tconst testURL = \"http://localhost:9980/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.getResourceURL()).toEqual(\"/test/\");\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should retrieve the ID when the resource URL is the same as the hostname\", () => {\n\tconst testURL = \"http://localhost:9980/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tTestModel.prototype.getResourceURL = jest.fn(() => {\n\t\treturn \"http://localhost:9980/api/test/\";\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should retrieve the ID when the resource hostname is different to the URL hostname\", () => {\n\tconst testURL = \"http://some-hostname/api/test/34/\";\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t});\n\n\tTestModel.prototype.getResourceURL = jest.fn(() => {\n\t\treturn \"http://localhost:9980/api/test/\";\n\t});\n\n\tconst testModel = new TestModel({ url: testURL });\n\n\texpect(testModel.id).toEqual(34);\n});\n\nit(\"should pass through values into a derived model\", () => {\n\tconst DerivedModel = BaseModel.extend({\n\t\tmodelName: \"derived\",\n\t\tprops: {\n\t\t\tname: \"string\",\n\t\t},\n\t});\n\tconst TestModel = BaseModel.extend({\n\t\tmodelName: \"test\",\n\t\tderived: {\n\t\t\tmyDerivedModel: {\n\t\t\t\tfn() {\n\t\t\t\t\treturn new DerivedModel();\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t});\n\n\tconst model = new TestModel({ myDerivedModel: { id: 1, name: \"foo\" } });\n\texpect(model.myDerivedModel.id).toEqual(1);\n\texpect(model.myDerivedModel.name).toEqual(\"foo\");\n});\n\nit(\"should pass through values into a derived collection\", () => {\n\tG(\n\t\tBaseModel.extend({\n\t\t\tmodelName: \"derived\",\n\t\t\tprops: {\n\t\t\t\tname: \"string\",\n\t\t\t},\n\t\t}),\n\t\t\"DerivedModel\",\n\t);\n\n\tconst DerivedCollection = G(\n\t\tBaseCollection.extend({\n\t\t\tmodel: \"DerivedModel\",\n\t\t}),\n\t);\n\n\tconst TestModel = G(\n\t\tBaseModel.extend({\n\t\t\tmodelName: \"test\",\n\t\t\tderived: {\n\t\t\t\tmyDerivedCollection: {\n\t\t\t\t\tfn() {\n\t\t\t\t\t\treturn new DerivedCollection();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\t\"TestModel\",\n\t);\n\n\tconst model = new TestModel({\n\t\tmyDerivedCollection: [{ id: 1, name: \"foo\" }],\n\t});\n\texpect(model.myDerivedCollection.first().id).toEqual(1);\n\texpect(model.myDerivedCollection.first().name).toEqual(\"foo\");\n});\n\ndescribe(\".matchesURL\", () => {\n\tit(\"should have a model match the right url\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"foo\",\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/foo/1/\")).toEqual(true);\n\t});\n\n\tit(\"should have a model not match the wrong url\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"foo\",\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/\")).toEqual(false);\n\t});\n\n\tit(\"should not throw a nasty error when url isn't even close\", () => {\n\t\tconst errorFn = jest.spyOn(log, \"error\").mockImplementation(jest.fn());\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/foo/1/\")).toEqual(false);\n\t\texpect(errorFn).not.toBeCalled();\n\t});\n\n\tit(\"should throw an error if url matches, but it isn't set up right\", () => {\n\t\tconst errorFn = jest.spyOn(log, \"error\").mockImplementation(jest.fn());\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/\")).toEqual(false);\n\t\texpect(errorFn).toBeCalled();\n\t});\n\n\tit(\"should expect values passed in through url match keys\", () => {\n\t\tconst TestModel = G(BaseModel, \"TestModel\").extend({\n\t\t\tmodelName: \"bar\",\n\t\t\turlMatchKeys: {\n\t\t\t\tfoo: \"string\",\n\t\t\t\tbar: \"number\",\n\t\t\t},\n\t\t\tgetResourceURL() {\n\t\t\t\treturn \"/api/bar/{bar}/{foo}/\";\n\t\t\t},\n\t\t});\n\t\texpect(TestModel.matchesURL(\"/api/bar/1/hello/1/\")).toEqual(true);\n\t});\n\n\tit(\"should match with the full server endpoint included\", () => {\n\t\tconst endpoint = \"http://localhost:8000/api/\";\n\t\ttd.replace(Api, \"getURL\", () => endpoint);\n\t\tconst url = \"http://localhost:8000/api/activities/2719/\";\n\t\tconst ActivityModel = G(\"ActivityItemModel\").extend({\n\t\t\tgetResourceURL() {\n\t\t\t\treturn `${endpoint}activities/`;\n\t\t\t},\n\t\t});\n\t\texpect(ActivityModel.matchesURL(url)).toEqual(true);\n\t});\n});\n"],"file":"base.spec.js"}
@@ -4,14 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ChoicelistModel = void 0;
7
+
7
8
  var _base = require("../models/base.js");
9
+
8
10
  var _stateRegister = require("../state-register.js");
11
+
9
12
  /**
10
13
  * @constructor
11
14
  * @alias models.ChoicelistModel
12
15
  * @extends models.BaseModel
13
16
  */
14
- var ChoicelistModel = exports.ChoicelistModel = _base.BaseModel.extend( /** @lends models.ChoicelistModel# */{
17
+ var ChoicelistModel = _base.BaseModel.extend(
18
+ /** @lends models.ChoicelistModel# */
19
+ {
15
20
  modelName: "choicelists",
16
21
  props: {
17
22
  modified_date: "date",
@@ -19,5 +24,7 @@ var ChoicelistModel = exports.ChoicelistModel = _base.BaseModel.extend( /** @len
19
24
  choices: "array"
20
25
  }
21
26
  });
27
+
28
+ exports.ChoicelistModel = ChoicelistModel;
22
29
  (0, _stateRegister.register)("ChoicelistModel", ChoicelistModel);
23
30
  //# sourceMappingURL=choicelist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"choicelist.js","names":["_base","require","_stateRegister","ChoicelistModel","exports","BaseModel","extend","modelName","props","modified_date","created_date","choices","register"],"sources":["../../src/models/choicelist.js"],"sourcesContent":["import { BaseModel } from \"../models/base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.ChoicelistModel\n * @extends models.BaseModel\n */\nexport const ChoicelistModel = BaseModel.extend(\n\t/** @lends models.ChoicelistModel# */ {\n\t\tmodelName: \"choicelists\",\n\n\t\tprops: {\n\t\t\tmodified_date: \"date\",\n\t\t\tcreated_date: \"date\",\n\t\t\tchoices: \"array\",\n\t\t},\n\t},\n);\n\nregister(\"ChoicelistModel\", ChoicelistModel);\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,IAAME,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAGE,eAAS,CAACC,MAAM,EAC9C,qCAAsC;EACrCC,SAAS,EAAE,aAAa;EAExBC,KAAK,EAAE;IACNC,aAAa,EAAE,MAAM;IACrBC,YAAY,EAAE,MAAM;IACpBC,OAAO,EAAE;EACV;AACD,CACD,CAAC;AAED,IAAAC,uBAAQ,EAAC,iBAAiB,EAAET,eAAe,CAAC"}
1
+ {"version":3,"sources":["../../src/models/choicelist.js"],"names":["ChoicelistModel","BaseModel","extend","modelName","props","modified_date","created_date","choices"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,eAAe,GAAGC,gBAAUC,MAAV;AAC9B;AAAsC;AACrCC,EAAAA,SAAS,EAAE,aAD0B;AAGrCC,EAAAA,KAAK,EAAE;AACNC,IAAAA,aAAa,EAAE,MADT;AAENC,IAAAA,YAAY,EAAE,MAFR;AAGNC,IAAAA,OAAO,EAAE;AAHH;AAH8B,CADR,CAAxB;;;AAYP,6BAAS,iBAAT,EAA4BP,eAA5B","sourcesContent":["import { BaseModel } from \"../models/base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.ChoicelistModel\n * @extends models.BaseModel\n */\nexport const ChoicelistModel = BaseModel.extend(\n\t/** @lends models.ChoicelistModel# */ {\n\t\tmodelName: \"choicelists\",\n\n\t\tprops: {\n\t\t\tmodified_date: \"date\",\n\t\t\tcreated_date: \"date\",\n\t\t\tchoices: \"array\",\n\t\t},\n\t},\n);\n\nregister(\"ChoicelistModel\", ChoicelistModel);\n"],"file":"choicelist.js"}