@livepreso/api 6.40.0 → 6.43.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 (446) hide show
  1. package/.eslintrc.js +5 -0
  2. package/.rush/temp/build-cache-tar.log +7 -0
  3. package/.rush/temp/package-deps_build.json +170 -0
  4. package/.rush/temp/shrinkwrap-deps.json +846 -0
  5. package/CHANGELOG.json +41 -0
  6. package/CHANGELOG.md +25 -0
  7. package/api.build.log +15 -0
  8. package/babel.config.js +9 -18
  9. package/cjs/api.js +1 -1
  10. package/cjs/api.js.map +1 -1
  11. package/cjs/api.spec.js +2 -2
  12. package/cjs/api.spec.js.map +1 -1
  13. package/cjs/auth.js +6 -5
  14. package/cjs/auth.js.map +1 -1
  15. package/cjs/auth.spec.js +25 -23
  16. package/cjs/auth.spec.js.map +1 -1
  17. package/cjs/caching.js +3 -3
  18. package/cjs/collections/activity.js +22 -27
  19. package/cjs/collections/activity.js.map +1 -1
  20. package/cjs/collections/adjunct-sections.js +2 -2
  21. package/cjs/collections/adjunct-sections.js.map +1 -1
  22. package/cjs/collections/adjunct-slides.js +2 -2
  23. package/cjs/collections/adjunct-slides.js.map +1 -1
  24. package/cjs/collections/adjunct-sub-slides.js +2 -2
  25. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  26. package/cjs/collections/appointment-adjunct-tags.js +28 -0
  27. package/cjs/collections/appointment-adjunct-tags.js.map +1 -0
  28. package/cjs/collections/appointment-deckversion-tags.js +28 -0
  29. package/cjs/collections/appointment-deckversion-tags.js.map +1 -0
  30. package/cjs/collections/appointment-duplicates.js +2 -2
  31. package/cjs/collections/appointment-duplicates.js.map +1 -1
  32. package/cjs/collections/appointment-editors.js +2 -2
  33. package/cjs/collections/appointment-editors.js.map +1 -1
  34. package/cjs/collections/appointment-section-tags.js +28 -0
  35. package/cjs/collections/appointment-section-tags.js.map +1 -0
  36. package/cjs/collections/appointment-slide-tags.js +28 -0
  37. package/cjs/collections/appointment-slide-tags.js.map +1 -0
  38. package/cjs/collections/appointment-tags.js +208 -0
  39. package/cjs/collections/appointment-tags.js.map +1 -0
  40. package/cjs/collections/appointments.js +10 -6
  41. package/cjs/collections/appointments.js.map +1 -1
  42. package/cjs/collections/assets.js +2 -2
  43. package/cjs/collections/assets.js.map +1 -1
  44. package/cjs/collections/auto-adjuncts.js +7 -3
  45. package/cjs/collections/auto-adjuncts.js.map +1 -1
  46. package/cjs/collections/base.js +30 -25
  47. package/cjs/collections/base.js.map +1 -1
  48. package/cjs/collections/base.spec.js +71 -123
  49. package/cjs/collections/base.spec.js.map +1 -1
  50. package/cjs/collections/cms-vals.js +2 -2
  51. package/cjs/collections/cms-vals.js.map +1 -1
  52. package/cjs/collections/contacts.js +2 -2
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +2 -2
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +2 -2
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +2 -2
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-versions.js +20 -8
  61. package/cjs/collections/deck-versions.js.map +1 -1
  62. package/cjs/collections/decks.js +2 -2
  63. package/cjs/collections/decks.js.map +1 -1
  64. package/cjs/collections/deleted-assets.js +2 -2
  65. package/cjs/collections/deleted-assets.js.map +1 -1
  66. package/cjs/collections/dispatches.js +4 -4
  67. package/cjs/collections/dispatches.js.map +1 -1
  68. package/cjs/collections/event-objects.js +2 -2
  69. package/cjs/collections/event-objects.js.map +1 -1
  70. package/cjs/collections/events.js +2 -2
  71. package/cjs/collections/events.js.map +1 -1
  72. package/cjs/collections/groups.js +2 -2
  73. package/cjs/collections/groups.js.map +1 -1
  74. package/cjs/collections/images.js +2 -2
  75. package/cjs/collections/images.js.map +1 -1
  76. package/cjs/collections/locations.js +2 -2
  77. package/cjs/collections/locations.js.map +1 -1
  78. package/cjs/collections/opportunities.js +2 -2
  79. package/cjs/collections/opportunities.js.map +1 -1
  80. package/cjs/collections/pack-diffs.js +2 -2
  81. package/cjs/collections/pack-diffs.js.map +1 -1
  82. package/cjs/collections/packs.js +2 -2
  83. package/cjs/collections/packs.js.map +1 -1
  84. package/cjs/collections/presets.js +2 -2
  85. package/cjs/collections/presets.js.map +1 -1
  86. package/cjs/collections/section-selections.js +2 -2
  87. package/cjs/collections/section-selections.js.map +1 -1
  88. package/cjs/collections/sections.js +2 -2
  89. package/cjs/collections/sections.js.map +1 -1
  90. package/cjs/collections/slide-selections.js +2 -2
  91. package/cjs/collections/slide-selections.js.map +1 -1
  92. package/cjs/collections/slides.js +2 -2
  93. package/cjs/collections/slides.js.map +1 -1
  94. package/cjs/collections/snapshots.js +2 -2
  95. package/cjs/collections/snapshots.js.map +1 -1
  96. package/cjs/collections/sub-slides.js +2 -2
  97. package/cjs/collections/sub-slides.js.map +1 -1
  98. package/cjs/collections/tags.js +28 -0
  99. package/cjs/collections/tags.js.map +1 -0
  100. package/cjs/collections/teams.js +2 -2
  101. package/cjs/collections/teams.js.map +1 -1
  102. package/cjs/collections/templates.js +2 -2
  103. package/cjs/collections/templates.js.map +1 -1
  104. package/cjs/collections/uploads.js +2 -2
  105. package/cjs/collections/uploads.js.map +1 -1
  106. package/cjs/collections/users.js +2 -2
  107. package/cjs/collections/users.js.map +1 -1
  108. package/cjs/collections.js +115 -0
  109. package/cjs/collections.js.map +1 -1
  110. package/cjs/index.js +3 -0
  111. package/cjs/index.js.map +1 -1
  112. package/cjs/middleware.js.map +1 -1
  113. package/cjs/middlewares/auth.js +10 -6
  114. package/cjs/middlewares/auth.js.map +1 -1
  115. package/cjs/middlewares/base.js +1 -3
  116. package/cjs/middlewares/base.js.map +1 -1
  117. package/cjs/middlewares/json.js +10 -6
  118. package/cjs/middlewares/json.js.map +1 -1
  119. package/cjs/middlewares/redirect.js +10 -6
  120. package/cjs/middlewares/redirect.js.map +1 -1
  121. package/cjs/models/activity-item.js +6 -2
  122. package/cjs/models/activity-item.js.map +1 -1
  123. package/cjs/models/adjunct-section.js +2 -2
  124. package/cjs/models/adjunct-section.js.map +1 -1
  125. package/cjs/models/adjunct-slide.js +2 -2
  126. package/cjs/models/adjunct-slide.js.map +1 -1
  127. package/cjs/models/adjunct-sub-slide.js +2 -2
  128. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  129. package/cjs/models/adjunct.js +2 -2
  130. package/cjs/models/adjunct.js.map +1 -1
  131. package/cjs/models/api.js.map +1 -1
  132. package/cjs/models/appointment-adjunct-tags.js +52 -0
  133. package/cjs/models/appointment-adjunct-tags.js.map +1 -0
  134. package/cjs/models/appointment-deckversion-tags.js +52 -0
  135. package/cjs/models/appointment-deckversion-tags.js.map +1 -0
  136. package/cjs/models/appointment-duplicate.js +8 -3
  137. package/cjs/models/appointment-duplicate.js.map +1 -1
  138. package/cjs/models/appointment-editor.js +2 -2
  139. package/cjs/models/appointment-editor.js.map +1 -1
  140. package/cjs/models/appointment-section-tags.js +52 -0
  141. package/cjs/models/appointment-section-tags.js.map +1 -0
  142. package/cjs/models/appointment-slide-tags.js +52 -0
  143. package/cjs/models/appointment-slide-tags.js.map +1 -0
  144. package/cjs/models/appointment-stats.js +2 -2
  145. package/cjs/models/appointment-stats.js.map +1 -1
  146. package/cjs/models/appointment-tags.js +48 -0
  147. package/cjs/models/appointment-tags.js.map +1 -0
  148. package/cjs/models/appointment-viewing.js +2 -2
  149. package/cjs/models/appointment-viewing.js.map +1 -1
  150. package/cjs/models/appointment.js +16 -7
  151. package/cjs/models/appointment.js.map +1 -1
  152. package/cjs/models/asset.js +2 -2
  153. package/cjs/models/asset.js.map +1 -1
  154. package/cjs/models/auto-adjunct-key-check.js +2 -2
  155. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  156. package/cjs/models/auto-adjunct.js +2 -2
  157. package/cjs/models/auto-adjunct.js.map +1 -1
  158. package/cjs/models/base.js +25 -36
  159. package/cjs/models/base.js.map +1 -1
  160. package/cjs/models/base.spec.js +45 -45
  161. package/cjs/models/base.spec.js.map +1 -1
  162. package/cjs/models/choicelist.js.map +1 -1
  163. package/cjs/models/cms-val.js.map +1 -1
  164. package/cjs/models/contact.js +2 -2
  165. package/cjs/models/contact.js.map +1 -1
  166. package/cjs/models/customer.js +2 -2
  167. package/cjs/models/customer.js.map +1 -1
  168. package/cjs/models/deck-note.js +2 -2
  169. package/cjs/models/deck-note.js.map +1 -1
  170. package/cjs/models/deck-tags.js +61 -0
  171. package/cjs/models/deck-tags.js.map +1 -0
  172. package/cjs/models/deck-version.js +5 -3
  173. package/cjs/models/deck-version.js.map +1 -1
  174. package/cjs/models/deck.js +6 -3
  175. package/cjs/models/deck.js.map +1 -1
  176. package/cjs/models/dispatch-preview.js +3 -3
  177. package/cjs/models/dispatch-preview.js.map +1 -1
  178. package/cjs/models/dispatch.js +2 -2
  179. package/cjs/models/dispatch.js.map +1 -1
  180. package/cjs/models/envs.js.map +1 -1
  181. package/cjs/models/event-object.js +2 -2
  182. package/cjs/models/event-object.js.map +1 -1
  183. package/cjs/models/event.js +2 -2
  184. package/cjs/models/event.js.map +1 -1
  185. package/cjs/models/feed-data.js +2 -2
  186. package/cjs/models/feed-data.js.map +1 -1
  187. package/cjs/models/file.js +2 -2
  188. package/cjs/models/file.js.map +1 -1
  189. package/cjs/models/group.js +2 -2
  190. package/cjs/models/group.js.map +1 -1
  191. package/cjs/models/handover.js +2 -2
  192. package/cjs/models/handover.js.map +1 -1
  193. package/cjs/models/hosted-preso.js +2 -2
  194. package/cjs/models/hosted-preso.js.map +1 -1
  195. package/cjs/models/image.js +2 -2
  196. package/cjs/models/image.js.map +1 -1
  197. package/cjs/models/location.js +2 -2
  198. package/cjs/models/location.js.map +1 -1
  199. package/cjs/models/manifest-json.js +74 -57
  200. package/cjs/models/manifest-json.js.map +1 -1
  201. package/cjs/models/onshare.js +2 -2
  202. package/cjs/models/onshare.js.map +1 -1
  203. package/cjs/models/opportunity.js +2 -2
  204. package/cjs/models/opportunity.js.map +1 -1
  205. package/cjs/models/pack-diff.js +2 -2
  206. package/cjs/models/pack-diff.js.map +1 -1
  207. package/cjs/models/pack.js +2 -2
  208. package/cjs/models/pack.js.map +1 -1
  209. package/cjs/models/preset.js +22 -2
  210. package/cjs/models/preset.js.map +1 -1
  211. package/cjs/models/refresh-request.js +2 -2
  212. package/cjs/models/refresh-request.js.map +1 -1
  213. package/cjs/models/room.js +2 -2
  214. package/cjs/models/room.js.map +1 -1
  215. package/cjs/models/salesforce-lookup.js +2 -2
  216. package/cjs/models/salesforce-lookup.js.map +1 -1
  217. package/cjs/models/section-selection.js +2 -2
  218. package/cjs/models/section-selection.js.map +1 -1
  219. package/cjs/models/section.js +2 -2
  220. package/cjs/models/section.js.map +1 -1
  221. package/cjs/models/slide-selection.js +2 -2
  222. package/cjs/models/slide-selection.js.map +1 -1
  223. package/cjs/models/slide.js +2 -2
  224. package/cjs/models/slide.js.map +1 -1
  225. package/cjs/models/snapshot.js +2 -2
  226. package/cjs/models/snapshot.js.map +1 -1
  227. package/cjs/models/sub-slide.js +2 -2
  228. package/cjs/models/sub-slide.js.map +1 -1
  229. package/cjs/models/support-ticket.js +2 -2
  230. package/cjs/models/support-ticket.js.map +1 -1
  231. package/cjs/models/tag.js +54 -0
  232. package/cjs/models/tag.js.map +1 -0
  233. package/cjs/models/team.js +2 -2
  234. package/cjs/models/team.js.map +1 -1
  235. package/cjs/models/template.js +2 -2
  236. package/cjs/models/template.js.map +1 -1
  237. package/cjs/models/tenancy.js +2 -2
  238. package/cjs/models/tenancy.js.map +1 -1
  239. package/cjs/models/timing-log.js +20 -41
  240. package/cjs/models/timing-log.js.map +1 -1
  241. package/cjs/models/timing-log.spec.js +18 -86
  242. package/cjs/models/timing-log.spec.js.map +1 -1
  243. package/cjs/models/transcribe-socket.js +2 -2
  244. package/cjs/models/transcribe-socket.js.map +1 -1
  245. package/cjs/models/upload.js +2 -2
  246. package/cjs/models/upload.js.map +1 -1
  247. package/cjs/models/user.js +6 -4
  248. package/cjs/models/user.js.map +1 -1
  249. package/cjs/models/user.spec.js +10 -8
  250. package/cjs/models/user.spec.js.map +1 -1
  251. package/cjs/models.js +148 -0
  252. package/cjs/models.js.map +1 -1
  253. package/cjs/presentation/appointment-presentation.js +13 -5
  254. package/cjs/presentation/appointment-presentation.js.map +1 -1
  255. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  256. package/cjs/presentation/base-presentation-model.js +65 -0
  257. package/cjs/presentation/base-presentation-model.js.map +1 -1
  258. package/cjs/presentation/base-presentation-model.spec.js +87 -0
  259. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  260. package/cjs/presentation/presentation-deck.js +31 -20
  261. package/cjs/presentation/presentation-deck.js.map +1 -1
  262. package/cjs/presentation/presentation-deck.spec.js +15 -13
  263. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  264. package/cjs/presentation/presentation-decks.js +2 -2
  265. package/cjs/presentation/presentation-decks.js.map +1 -1
  266. package/cjs/presentation/presentation-section.js +36 -17
  267. package/cjs/presentation/presentation-section.js.map +1 -1
  268. package/cjs/presentation/presentation-section.spec.js +418 -0
  269. package/cjs/presentation/presentation-section.spec.js.map +1 -0
  270. package/cjs/presentation/presentation-sections.js +2 -2
  271. package/cjs/presentation/presentation-sections.js.map +1 -1
  272. package/cjs/presentation/presentation-slide.js +35 -18
  273. package/cjs/presentation/presentation-slide.js.map +1 -1
  274. package/cjs/presentation/presentation-slide.spec.js +294 -0
  275. package/cjs/presentation/presentation-slide.spec.js.map +1 -0
  276. package/cjs/presentation/presentation-slides.js +2 -2
  277. package/cjs/presentation/presentation-slides.js.map +1 -1
  278. package/cjs/presentation/presentation-subslide.js +11 -7
  279. package/cjs/presentation/presentation-subslide.js.map +1 -1
  280. package/cjs/presentation/presentation-subslide.spec.js +68 -20
  281. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  282. package/cjs/presentation/presentation-subslides.js +2 -2
  283. package/cjs/presentation/presentation-subslides.js.map +1 -1
  284. package/cjs/presentation/presentation.js +19 -9
  285. package/cjs/presentation/presentation.js.map +1 -1
  286. package/cjs/presentation.js +10 -0
  287. package/cjs/presentation.js.map +1 -1
  288. package/cjs/state-register.js +11 -1
  289. package/cjs/state-register.js.map +1 -1
  290. package/cjs/sync.js +7 -7
  291. package/cjs/sync.js.map +1 -1
  292. package/cjs/utils.js +7 -7
  293. package/cjs/utils.js.map +1 -1
  294. package/cjs/utils.spec.js.map +1 -1
  295. package/config/rush-project.json +53 -0
  296. package/index.js +0 -1
  297. package/jest.config.js +4 -4
  298. package/package.json +17 -59
  299. package/setup-tests.js +2 -1
  300. package/src/api.js +3 -3
  301. package/src/api.spec.js +3 -4
  302. package/src/auth.js +6 -7
  303. package/src/auth.spec.js +3 -4
  304. package/src/collections/activity.js +5 -6
  305. package/src/collections/adjunct-sections.js +4 -4
  306. package/src/collections/adjunct-slides.js +4 -4
  307. package/src/collections/adjunct-sub-slides.js +2 -2
  308. package/src/collections/appointment-adjunct-tags.js +18 -0
  309. package/src/collections/appointment-deckversion-tags.js +21 -0
  310. package/src/collections/appointment-duplicates.js +2 -2
  311. package/src/collections/appointment-editors.js +2 -2
  312. package/src/collections/appointment-section-tags.js +18 -0
  313. package/src/collections/appointment-slide-tags.js +18 -0
  314. package/src/collections/appointment-tags.js +136 -0
  315. package/src/collections/appointments.js +18 -23
  316. package/src/collections/assets.js +2 -2
  317. package/src/collections/auto-adjuncts.js +5 -5
  318. package/src/collections/base.js +17 -18
  319. package/src/collections/base.spec.js +7 -8
  320. package/src/collections/cms-vals.js +3 -3
  321. package/src/collections/contacts.js +2 -2
  322. package/src/collections/created-assets.js +2 -2
  323. package/src/collections/customers.js +2 -2
  324. package/src/collections/deck-notes.js +2 -2
  325. package/src/collections/deck-versions.js +18 -15
  326. package/src/collections/decks.js +2 -2
  327. package/src/collections/deleted-assets.js +2 -2
  328. package/src/collections/dispatches.js +8 -13
  329. package/src/collections/event-objects.js +2 -2
  330. package/src/collections/events.js +2 -2
  331. package/src/collections/groups.js +2 -2
  332. package/src/collections/images.js +2 -2
  333. package/src/collections/locations.js +2 -2
  334. package/src/collections/opportunities.js +2 -2
  335. package/src/collections/pack-diffs.js +2 -2
  336. package/src/collections/packs.js +2 -2
  337. package/src/collections/presets.js +2 -2
  338. package/src/collections/section-selections.js +4 -4
  339. package/src/collections/sections.js +2 -2
  340. package/src/collections/slide-selections.js +4 -4
  341. package/src/collections/slides.js +2 -2
  342. package/src/collections/snapshots.js +2 -2
  343. package/src/collections/sub-slides.js +2 -2
  344. package/src/collections/tags.js +18 -0
  345. package/src/collections/teams.js +2 -2
  346. package/src/collections/templates.js +2 -2
  347. package/src/collections/uploads.js +2 -2
  348. package/src/collections/users.js +2 -2
  349. package/src/collections.js +6 -0
  350. package/src/index.js +1 -4
  351. package/src/middleware.js +1 -1
  352. package/src/middlewares/json.js +2 -2
  353. package/src/middlewares/redirect.js +1 -2
  354. package/src/models/activity-item.js +6 -6
  355. package/src/models/adjunct-section.js +5 -5
  356. package/src/models/adjunct-slide.js +5 -5
  357. package/src/models/adjunct-sub-slide.js +5 -5
  358. package/src/models/adjunct.js +4 -4
  359. package/src/models/api.js +1 -1
  360. package/src/models/appointment-adjunct-tags.js +41 -0
  361. package/src/models/appointment-deckversion-tags.js +41 -0
  362. package/src/models/appointment-duplicate.js +7 -7
  363. package/src/models/appointment-editor.js +6 -6
  364. package/src/models/appointment-section-tags.js +41 -0
  365. package/src/models/appointment-slide-tags.js +41 -0
  366. package/src/models/appointment-stats.js +5 -5
  367. package/src/models/appointment-tags.js +39 -0
  368. package/src/models/appointment-viewing.js +3 -3
  369. package/src/models/appointment.js +35 -29
  370. package/src/models/asset.js +5 -5
  371. package/src/models/auto-adjunct-key-check.js +5 -5
  372. package/src/models/auto-adjunct.js +4 -4
  373. package/src/models/base.js +36 -37
  374. package/src/models/base.spec.js +61 -62
  375. package/src/models/choicelist.js +2 -2
  376. package/src/models/cms-val.js +3 -3
  377. package/src/models/contact.js +9 -9
  378. package/src/models/customer.js +13 -13
  379. package/src/models/deck-note.js +4 -4
  380. package/src/models/deck-tags.js +52 -0
  381. package/src/models/deck-version.js +9 -8
  382. package/src/models/deck.js +8 -6
  383. package/src/models/dispatch-preview.js +6 -7
  384. package/src/models/dispatch.js +6 -7
  385. package/src/models/envs.js +1 -1
  386. package/src/models/event-object.js +6 -6
  387. package/src/models/event.js +7 -7
  388. package/src/models/feed-data.js +5 -5
  389. package/src/models/file.js +4 -4
  390. package/src/models/group.js +3 -3
  391. package/src/models/handover.js +5 -5
  392. package/src/models/hosted-preso.js +5 -5
  393. package/src/models/image.js +4 -4
  394. package/src/models/location.js +5 -5
  395. package/src/models/manifest-json.js +68 -30
  396. package/src/models/onshare.js +5 -5
  397. package/src/models/opportunity.js +5 -5
  398. package/src/models/pack-diff.js +5 -5
  399. package/src/models/pack.js +4 -4
  400. package/src/models/preset.js +24 -5
  401. package/src/models/refresh-request.js +6 -6
  402. package/src/models/room.js +3 -3
  403. package/src/models/salesforce-lookup.js +3 -3
  404. package/src/models/section-selection.js +6 -6
  405. package/src/models/section.js +7 -7
  406. package/src/models/slide-selection.js +6 -6
  407. package/src/models/slide.js +7 -7
  408. package/src/models/snapshot.js +5 -5
  409. package/src/models/sub-slide.js +5 -5
  410. package/src/models/support-ticket.js +4 -4
  411. package/src/models/tag.js +42 -0
  412. package/src/models/team.js +4 -4
  413. package/src/models/template.js +4 -4
  414. package/src/models/tenancy.js +5 -5
  415. package/src/models/timing-log.js +18 -18
  416. package/src/models/timing-log.spec.js +28 -29
  417. package/src/models/transcribe-socket.js +3 -3
  418. package/src/models/upload.js +3 -3
  419. package/src/models/user.js +24 -20
  420. package/src/models/user.spec.js +2 -2
  421. package/src/models.js +7 -0
  422. package/src/presentation/appointment-presentation.js +14 -10
  423. package/src/presentation/base-presentation-model.js +67 -5
  424. package/src/presentation/base-presentation-model.spec.js +114 -22
  425. package/src/presentation/presentation-deck.js +54 -52
  426. package/src/presentation/presentation-deck.spec.js +26 -27
  427. package/src/presentation/presentation-decks.js +2 -2
  428. package/src/presentation/presentation-section.js +62 -48
  429. package/src/presentation/presentation-section.spec.js +363 -0
  430. package/src/presentation/presentation-sections.js +2 -2
  431. package/src/presentation/presentation-slide.js +51 -36
  432. package/src/presentation/presentation-slide.spec.js +250 -0
  433. package/src/presentation/presentation-slides.js +2 -2
  434. package/src/presentation/presentation-subslide.js +24 -17
  435. package/src/presentation/presentation-subslide.spec.js +40 -12
  436. package/src/presentation/presentation-subslides.js +2 -2
  437. package/src/presentation/presentation.js +27 -15
  438. package/src/state-register.js +7 -0
  439. package/src/sync.js +21 -23
  440. package/src/utils.js +8 -7
  441. package/src/utils.spec.js +15 -15
  442. package/.editorconfig +0 -9
  443. package/.eslintrc +0 -25
  444. package/.prettierrc.js +0 -3
  445. package/jsdoc.json +0 -12
  446. package/yarn.lock +0 -8099
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/base.js"],"names":["BaseModel","Model","extend","modelName","queryData","isFetching","urlMatchKeys","constructor","data","opts","options","_","defaults","_unsetChildren","_unsetCollections","_expandedValues","toJSON","isString","url","dataCopy","_data","_options","_children","clone","_collections","_definition","_url","key","def","isState","Collection","registerStates","_convertToValues","id","_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","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","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","matches","replacement","resources","sync","derived","getAttributes","object","canBeEmpty","_retrieveURL","item","map","isArray","addCollection","addChild","expandCollection","expandChild","defineProperty","includes","configurable"],"mappings":"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","sourcesContent":["import url2 from \"url\";\n\nimport Model from \"ampersand-model\";\nimport Collection from \"ampersand-rest-collection\";\nimport dedent from \"dedent-js\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport qs from \"qs\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\n\nimport { Api } from \"../api.js\";\nimport log from \"../log.js\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\nimport { DATE_FORMAT_T, removeMultiByteChars } from \"../utils.js\";\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\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// 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\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}\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\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: \"number\"\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 === \"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) {\n\t\t\tconst resourceURL = 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.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\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\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\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() {\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({ derived: true });\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
+ {"version":3,"sources":["../../src/models/base.js"],"names":["BaseModel","Model","extend","modelName","queryData","isFetching","urlMatchKeys","constructor","data","opts","options","_","defaults","_unsetChildren","_unsetCollections","_expandedValues","toJSON","isString","url","dataCopy","_data","_options","_children","clone","_collections","_definition","_url","key","def","isState","Collection","registerStates","_convertToValues","id","_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","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","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","matches","replacement","resources","sync","derived","getAttributes","object","canBeEmpty","_retrieveURL","item","map","isArray","addCollection","addChild","expandCollection","expandChild","defineProperty","includes","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 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\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// 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\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}\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\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: \"number\",\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 === \"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) {\n\t\t\tconst resourceURL = 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.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\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\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\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() {\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({ derived: true });\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"}
@@ -2,21 +2,21 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _moment = _interopRequireDefault(require("moment"));
5
+ var _api = require("../api.js");
6
6
 
7
- var _api = require("sp-test/api");
7
+ var _base = require("../collections/base.js");
8
8
 
9
- var _testdouble = _interopRequireDefault(require("testdouble"));
9
+ var _base2 = require("./base.js");
10
10
 
11
- var _api2 = require("../api.js");
11
+ var _utils = require("../utils.js");
12
12
 
13
- var _base = require("../collections/base.js");
13
+ var _api2 = require("sp-test/api");
14
14
 
15
15
  var _log = _interopRequireDefault(require("../log.js"));
16
16
 
17
- var _utils = require("../utils.js");
17
+ var _moment = _interopRequireDefault(require("moment"));
18
18
 
19
- var _base2 = require("./base.js");
19
+ var _testdouble = _interopRequireDefault(require("testdouble"));
20
20
 
21
21
  it("should set date types correctly (SP-2698)", function () {
22
22
  var TestModel = _base2.BaseModel.extend({
@@ -61,7 +61,7 @@ it("should override url if passed to constructor", function () {
61
61
  expect(URL).toEqual(model.url());
62
62
  });
63
63
  it("should append a trailing slash to urls if not there", function () {
64
- var Model = (0, _api.G)(_base2.BaseModel.extend({
64
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
65
65
  modelName: "tests"
66
66
  }));
67
67
  var model = new Model({
@@ -70,7 +70,7 @@ it("should append a trailing slash to urls if not there", function () {
70
70
  expect(model.url()).toEqual("/api/tests/");
71
71
  });
72
72
  it("should not append a slash to a get query", function () {
73
- var Model = (0, _api.G)(_base2.BaseModel.extend({
73
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
74
74
  modelName: "tests"
75
75
  }));
76
76
  var model = new Model({
@@ -79,8 +79,8 @@ it("should not append a slash to a get query", function () {
79
79
  expect(model.url()).toEqual("/api/tests/?foo=bar");
80
80
  });
81
81
  it("should replace child model strings with the registered model", function () {
82
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel");
83
- var Model = (0, _api.G)(_base2.BaseModel.extend({
82
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel");
83
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
84
84
  children: {
85
85
  test: "TestModel"
86
86
  }
@@ -91,8 +91,8 @@ it("should replace child model strings with the registered model", function () {
91
91
  expect(model.test).toBeInstanceOf(TestModel);
92
92
  });
93
93
  it("should allow the model to be passed in", function () {
94
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel");
95
- var Model = (0, _api.G)(_base2.BaseModel.extend({
94
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel");
95
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
96
96
  children: {
97
97
  test: "TestModel"
98
98
  }
@@ -106,8 +106,8 @@ it("should allow the model to be passed in", function () {
106
106
  expect(model.test).toBeInstanceOf(TestModel);
107
107
  });
108
108
  it("should reference parent model if foreign key exists", function () {
109
- (0, _api.G)(_base2.BaseModel, "TestModel");
110
- var Model = (0, _api.G)(_base2.BaseModel.extend({
109
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
110
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
111
111
  children: {
112
112
  test: "TestModel"
113
113
  }
@@ -118,7 +118,7 @@ it("should reference parent model if foreign key exists", function () {
118
118
  expect(model).toEqual(model.test.parent);
119
119
  });
120
120
  it("should throw an error if the child model doesn't exist", function () {
121
- var Model = (0, _api.G)(_base2.BaseModel.extend({
121
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
122
122
  children: {
123
123
  test: "DoesntExist"
124
124
  }
@@ -128,10 +128,10 @@ it("should throw an error if the child model doesn't exist", function () {
128
128
  }).toThrow();
129
129
  });
130
130
  it("should convert a url into a model", function () {
131
- (0, _api.G)(_base2.BaseModel.extend({
131
+ (0, _api2.G)(_base2.BaseModel.extend({
132
132
  modelName: "tests"
133
133
  }), "TestModel");
134
- var Model = (0, _api.G)(_base2.BaseModel.extend({
134
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
135
135
  children: {
136
136
  test: "TestModel"
137
137
  }
@@ -142,8 +142,8 @@ it("should convert a url into a model", function () {
142
142
  expect(model.test.id).toEqual(1);
143
143
  });
144
144
  it("should convert an object into a model", function () {
145
- (0, _api.G)(_base2.BaseModel, "TestModel");
146
- var Model = (0, _api.G)(_base2.BaseModel.extend({
145
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
146
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
147
147
  children: {
148
148
  test: "TestModel"
149
149
  }
@@ -156,11 +156,11 @@ it("should convert an object into a model", function () {
156
156
  expect(model.test.id).toEqual(1);
157
157
  });
158
158
  it("should replace collection strings with their registered state", function () {
159
- (0, _api.G)(_base2.BaseModel, "TestModel");
160
- var TestCollection = (0, _api.G)(_base.BaseCollection.extend({
159
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
160
+ var TestCollection = (0, _api2.G)(_base.BaseCollection.extend({
161
161
  model: "TestModel"
162
162
  }), "TestCollection");
163
- var Model = (0, _api.G)(_base2.BaseModel.extend({
163
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
164
164
  collections: {
165
165
  tests: "TestCollection"
166
166
  }
@@ -173,11 +173,11 @@ it("should replace collection strings with their registered state", function ()
173
173
  expect(model.tests).toBeInstanceOf(TestCollection);
174
174
  });
175
175
  it("should allow a list of models to be passed into a collection", function () {
176
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel");
177
- (0, _api.G)(_base.BaseCollection.extend({
176
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel");
177
+ (0, _api2.G)(_base.BaseCollection.extend({
178
178
  model: "TestModel"
179
179
  }), "TestCollection");
180
- var Model = (0, _api.G)(_base2.BaseModel.extend({
180
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
181
181
  collections: {
182
182
  tests: "TestCollection"
183
183
  }
@@ -191,11 +191,11 @@ it("should allow a list of models to be passed into a collection", function () {
191
191
  expect(model.tests.first().id).toEqual(1);
192
192
  });
193
193
  it("should allow a collection to be passed in directly", function () {
194
- (0, _api.G)(_base2.BaseModel, "TestModel");
195
- var TestCollection = (0, _api.G)(_base.BaseCollection.extend({
194
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
195
+ var TestCollection = (0, _api2.G)(_base.BaseCollection.extend({
196
196
  model: "TestModel"
197
197
  }), "TestCollection");
198
- var Model = (0, _api.G)(_base2.BaseModel.extend({
198
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
199
199
  collections: {
200
200
  tests: "TestCollection"
201
201
  }
@@ -219,11 +219,11 @@ it("should throw an error if the child collection doesn't exist", function () {
219
219
  }).toThrow();
220
220
  });
221
221
  it("should convert a url into a collection", function () {
222
- (0, _api.G)(_base2.BaseModel, "TestModel");
223
- var TestCollection = (0, _api.G)(_base.BaseCollection.extend({
222
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
223
+ var TestCollection = (0, _api2.G)(_base.BaseCollection.extend({
224
224
  model: "TestModel"
225
225
  }), "TestCollection");
226
- var Model = (0, _api.G)(_base2.BaseModel.extend({
226
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
227
227
  collections: {
228
228
  tests: "TestCollection"
229
229
  }
@@ -234,11 +234,11 @@ it("should convert a url into a collection", function () {
234
234
  expect(model.tests).toBeInstanceOf(TestCollection);
235
235
  });
236
236
  it("should convert an array of objects into a collection", function () {
237
- (0, _api.G)(_base2.BaseModel, "TestModel");
238
- (0, _api.G)(_base.BaseCollection.extend({
237
+ (0, _api2.G)(_base2.BaseModel, "TestModel");
238
+ (0, _api2.G)(_base.BaseCollection.extend({
239
239
  model: "TestModel"
240
240
  }), "TestCollection");
241
- var Model = (0, _api.G)(_base2.BaseModel.extend({
241
+ var Model = (0, _api2.G)(_base2.BaseModel.extend({
242
242
  collections: {
243
243
  tests: "TestCollection"
244
244
  }
@@ -363,16 +363,16 @@ it("should pass through values into a derived model", function () {
363
363
  expect(model.myDerivedModel.name).toEqual("foo");
364
364
  });
365
365
  it("should pass through values into a derived collection", function () {
366
- (0, _api.G)(_base2.BaseModel.extend({
366
+ (0, _api2.G)(_base2.BaseModel.extend({
367
367
  modelName: "derived",
368
368
  props: {
369
369
  name: "string"
370
370
  }
371
371
  }), "DerivedModel");
372
- var DerivedCollection = (0, _api.G)(_base.BaseCollection.extend({
372
+ var DerivedCollection = (0, _api2.G)(_base.BaseCollection.extend({
373
373
  model: "DerivedModel"
374
374
  }));
375
- var TestModel = (0, _api.G)(_base2.BaseModel.extend({
375
+ var TestModel = (0, _api2.G)(_base2.BaseModel.extend({
376
376
  modelName: "test",
377
377
  derived: {
378
378
  myDerivedCollection: {
@@ -393,20 +393,20 @@ it("should pass through values into a derived collection", function () {
393
393
  });
394
394
  describe(".matchesURL", function () {
395
395
  it("should have a model match the right url", function () {
396
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel").extend({
396
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel").extend({
397
397
  modelName: "foo"
398
398
  });
399
399
  expect(TestModel.matchesURL("/api/foo/1/")).toEqual(true);
400
400
  });
401
401
  it("should have a model not match the wrong url", function () {
402
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel").extend({
402
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel").extend({
403
403
  modelName: "foo"
404
404
  });
405
405
  expect(TestModel.matchesURL("/api/bar/1/")).toEqual(false);
406
406
  });
407
407
  it("should not throw a nasty error when url isn't even close", function () {
408
408
  var errorFn = jest.spyOn(_log.default, "error").mockImplementation(jest.fn());
409
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel").extend({
409
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel").extend({
410
410
  modelName: "bar",
411
411
  getResourceURL: function getResourceURL() {
412
412
  return "/api/bar/{foo}/";
@@ -417,7 +417,7 @@ describe(".matchesURL", function () {
417
417
  });
418
418
  it("should throw an error if url matches, but it isn't set up right", function () {
419
419
  var errorFn = jest.spyOn(_log.default, "error").mockImplementation(jest.fn());
420
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel").extend({
420
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel").extend({
421
421
  modelName: "bar",
422
422
  getResourceURL: function getResourceURL() {
423
423
  return "/api/bar/{foo}/";
@@ -427,7 +427,7 @@ describe(".matchesURL", function () {
427
427
  expect(errorFn).toBeCalled();
428
428
  });
429
429
  it("should expect values passed in through url match keys", function () {
430
- var TestModel = (0, _api.G)(_base2.BaseModel, "TestModel").extend({
430
+ var TestModel = (0, _api2.G)(_base2.BaseModel, "TestModel").extend({
431
431
  modelName: "bar",
432
432
  urlMatchKeys: {
433
433
  foo: "string",
@@ -442,12 +442,12 @@ describe(".matchesURL", function () {
442
442
  it("should match with the full server endpoint included", function () {
443
443
  var endpoint = "http://localhost:8000/api/";
444
444
 
445
- _testdouble.default.replace(_api2.Api, "getURL", function () {
445
+ _testdouble.default.replace(_api.Api, "getURL", function () {
446
446
  return endpoint;
447
447
  });
448
448
 
449
449
  var url = "http://localhost:8000/api/activities/2719/";
450
- var ActivityModel = (0, _api.G)("ActivityItemModel").extend({
450
+ var ActivityModel = (0, _api2.G)("ActivityItemModel").extend({
451
451
  getResourceURL: function getResourceURL() {
452
452
  return "".concat(endpoint, "activities/");
453
453
  }