@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
package/cjs/sync.js CHANGED
@@ -1,90 +1,116 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.sync = exports.methodMap = exports.defaultFetchURL = exports.buildURL = exports.ajaxSync = void 0;
9
+
8
10
  var _bluebird = _interopRequireDefault(require("bluebird"));
11
+
9
12
  var _superagentBluebirdPromise = _interopRequireDefault(require("superagent-bluebird-promise"));
13
+
10
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
+
11
16
  var _log = _interopRequireDefault(require("./log.js"));
17
+
12
18
  var _middleware = require("./middleware.js");
19
+
13
20
  var _superagent = _interopRequireDefault(require("superagent"));
21
+
14
22
  var _url = _interopRequireDefault(require("url"));
23
+
15
24
  var defaults = _lodash.default.defaults;
16
- var assign = _lodash.default.assign;
25
+ var assign = _lodash.default.assign; // Throw an error when a URL is needed, and none is supplied.
17
26
 
18
- // Throw an error when a URL is needed, and none is supplied.
19
27
  var urlError = function urlError() {
20
28
  throw new Error("A \"url\" property or function must be specified");
21
- };
29
+ }; // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
22
30
 
23
- // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
24
- var methodMap = exports.methodMap = {
31
+
32
+ var methodMap = {
25
33
  create: "POST",
26
34
  update: "PUT",
27
35
  patch: "PATCH",
28
36
  delete: "DELETE",
29
37
  read: "GET"
30
38
  };
31
- var defaultFetchURL = exports.defaultFetchURL = function defaultFetchURL(_ref) {
39
+ exports.methodMap = methodMap;
40
+
41
+ var defaultFetchURL = function defaultFetchURL(_ref) {
32
42
  var model = _ref.model;
43
+
33
44
  _log.default.warn("Deprecation: defaultFetchURL is deprecated. Just use .url()");
45
+
34
46
  return model.url();
35
47
  };
36
- var buildURL = exports.buildURL = function buildURL(_ref2) {
48
+
49
+ exports.defaultFetchURL = defaultFetchURL;
50
+
51
+ var buildURL = function buildURL(_ref2) {
37
52
  var method = _ref2.method,
38
- model = _ref2.model;
53
+ model = _ref2.model;
39
54
  var url = model.url();
40
- var urlParse = _url.default.parse(url);
41
55
 
42
- // If not a GET request, strip the query params from the url
56
+ var urlParse = _url.default.parse(url); // If not a GET request, strip the query params from the url
57
+
58
+
43
59
  if (method !== "read") {
44
60
  return url.replace(urlParse.search, "");
45
61
  }
62
+
46
63
  return url;
47
64
  };
48
- var sync = exports.sync = function sync(method) {
65
+
66
+ exports.buildURL = buildURL;
67
+
68
+ var sync = function sync(method) {
49
69
  var _this = this;
70
+
50
71
  var syncArguments = arguments;
72
+
51
73
  if (method === "read") {
52
74
  // look for sync methods
53
75
  var syncActions = [];
76
+
54
77
  _middleware.middlewares.forEach(function (middleware) {
55
78
  if (middleware.sync) {
56
79
  syncActions.push(middleware.sync.apply(_this, syncArguments));
57
80
  }
58
81
  });
82
+
59
83
  return _bluebird.default.all(syncActions).then(function () {
60
84
  return ajaxSync.apply(_this, syncArguments);
61
85
  });
62
86
  }
87
+
63
88
  return ajaxSync.apply(this, syncArguments);
64
89
  };
65
- var ajaxSync = exports.ajaxSync = function ajaxSync(method, model, options) {
66
- var type = methodMap[method];
67
90
 
68
- // Default options, unless specified.
91
+ exports.sync = sync;
92
+
93
+ var ajaxSync = function ajaxSync(method, model, options) {
94
+ var type = methodMap[method]; // Default options, unless specified.
95
+
69
96
  defaults(options || (options = {}), {
70
97
  emulateHTTP: false,
71
98
  emulateJSON: false
72
- });
99
+ }); // Default request options.
73
100
 
74
- // Default request options.
75
101
  var params = {
76
102
  type: type
77
- };
103
+ }; // Ensure that we have a URL.
78
104
 
79
- // Ensure that we have a URL.
80
105
  if (!options.url) {
81
106
  options.url = _lodash.default.result(model, "url") || urlError();
82
- }
107
+ } // Ensure that we have the appropriate request data.
108
+
83
109
 
84
- // Ensure that we have the appropriate request data.
85
110
  if (options.data === null && model && (method === "create" || method === "update" || method === "patch" || method === "delete" && options.batch)) {
86
111
  params.json = options.attrs || model.toJSON(options);
87
112
  }
113
+
88
114
  var url = buildURL({
89
115
  method: method,
90
116
  model: model,
@@ -93,63 +119,72 @@ var ajaxSync = exports.ajaxSync = function ajaxSync(method, model, options) {
93
119
  var requestSettings = assign(params, options);
94
120
  requestSettings.method = type;
95
121
  var request = (0, _superagentBluebirdPromise.default)(type, url);
96
- if (type === "PATCH" || type === "POST" || type === "PUT" || type === "DELETE" && options.batch) {
97
- var data = model.toServer();
98
122
 
99
- // Note we can use formdata to override the way a patch works - if we
123
+ if (type === "PATCH" || type === "POST" || type === "PUT" || type === "DELETE" && options.batch) {
124
+ var data = model.toServer(); // Note we can use formdata to override the way a patch works - if we
100
125
  // are doing this it's for a particular patch with an image or file,
101
126
  // probably.
127
+
102
128
  if (type === "PATCH" && !_lodash.default.isArray(data) && !(data instanceof FormData)) {
103
129
  // Make sure we're only updating data actually passed to the save
104
130
  // function, rather than automatically generated stuff
105
131
  data = _lodash.default.pick(options.attrs, Object.keys(data));
106
132
  }
133
+
107
134
  request.send(data);
108
135
  }
136
+
109
137
  options.xhr = request;
138
+
110
139
  _middleware.middlewares.forEach(function (middleware) {
111
140
  if (middleware.preflight) {
112
141
  middleware.preflight(request);
113
142
  }
114
143
  });
144
+
115
145
  var mc = 0;
146
+
116
147
  function getNextMiddleware(request) {
117
148
  return function middlewareInterceptor(response) {
118
149
  if (mc < _middleware.middlewares.length) {
119
150
  return _middleware.middlewares[mc++].intercept(request, response, model).then(getNextMiddleware(request));
120
151
  }
152
+
121
153
  return _bluebird.default.resolve(response);
122
154
  };
123
155
  }
156
+
124
157
  model.trigger("request", model, request, options, requestSettings);
125
158
  request.requestSettings = requestSettings;
126
- var ajaxConfig = _lodash.default.result(model, "ajaxConfig") || {};
159
+ var ajaxConfig = _lodash.default.result(model, "ajaxConfig") || {}; // Combine generated headers with user's headers.
127
160
 
128
- // Combine generated headers with user's headers.
129
161
  if (ajaxConfig.headers) {
130
162
  for (var key in ajaxConfig.headers) {
131
163
  request.header[key.toLowerCase()] = ajaxConfig.headers[key];
132
164
  }
133
165
  }
166
+
134
167
  if (options.headers) {
135
168
  for (var _key in options.headers) {
136
169
  request.header[_key.toLowerCase()] = options.headers[_key];
137
170
  }
138
- }
139
-
140
- // TODO: Remove me when this can be moved... for now this removal is quite a complex
171
+ } // TODO: Remove me when this can be moved... for now this removal is quite a complex
141
172
  // process.
173
+
174
+
142
175
  if (options.cached && !options.deleted) {
143
176
  return _bluebird.default.resolve(options.cachedResponse).then(getNextMiddleware(request)).then(function (response) {
144
177
  if (!response.data) {
145
178
  response.data = JSON.parse(response.text);
146
179
  }
180
+
147
181
  return _bluebird.default.each(_middleware.middlewares, function (middleware) {
148
182
  return middleware.success(request, response, model, true);
149
183
  }).then(function () {
150
184
  if (options.success) {
151
185
  options.success(response.data, "success", response);
152
186
  }
187
+
153
188
  return response.data;
154
189
  });
155
190
  }).catch(function (response) {
@@ -159,29 +194,34 @@ var ajaxSync = exports.ajaxSync = function ajaxSync(method, model, options) {
159
194
  if (options.error) {
160
195
  options.error(response, "error", response.message);
161
196
  }
197
+
162
198
  throw response;
163
199
  });
164
200
  });
165
201
  }
166
- return request
167
- // Force a timeout on every request. Intermittent connections
202
+
203
+ return request // Force a timeout on every request. Intermittent connections
168
204
  // can have the request continue trying for minutes otherwise.
169
205
  .timeout(60 * 1000).then(getNextMiddleware(request)).then(function (response) {
170
206
  var data;
207
+
171
208
  try {
172
209
  data = JSON.parse(response.text);
173
210
  } catch (e) {
174
211
  data = response;
175
212
  }
213
+
176
214
  if (type !== "DELETE") {
177
215
  model.set(data);
178
216
  }
217
+
179
218
  return _bluebird.default.each(_middleware.middlewares, function (middleware) {
180
219
  return middleware.success(request, response, model, false);
181
220
  }).then(function () {
182
221
  if (options.success) {
183
222
  options.success(data, "success", response);
184
223
  }
224
+
185
225
  request.emit("success", response);
186
226
  return data;
187
227
  });
@@ -189,6 +229,7 @@ var ajaxSync = exports.ajaxSync = function ajaxSync(method, model, options) {
189
229
  if (e.res && e.res.body && (e.status >= 400 && e.status < 500 || e.status === 503)) {
190
230
  e.message += "\nBody: ".concat(JSON.stringify(e.res.body));
191
231
  }
232
+
192
233
  throw e;
193
234
  }).catch(function (response) {
194
235
  return _bluebird.default.each(_middleware.middlewares, function (middleware) {
@@ -196,14 +237,17 @@ var ajaxSync = exports.ajaxSync = function ajaxSync(method, model, options) {
196
237
  }).then(function () {
197
238
  if (options.error) {
198
239
  options.error(response, "error", response.message);
199
- }
240
+ } // Provide a more explanatory error message on timeout
241
+
200
242
 
201
- // Provide a more explanatory error message on timeout
202
243
  if (response && response.originalError && response.originalError.code === "ECONNABORTED") {
203
244
  throw new Error("Failed ".concat(type, " request on url: ").concat(url, ". ").concat(response.message));
204
245
  }
246
+
205
247
  throw response;
206
248
  });
207
249
  });
208
250
  };
251
+
252
+ exports.ajaxSync = ajaxSync;
209
253
  //# sourceMappingURL=sync.js.map
package/cjs/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","names":["_bluebird","_interopRequireDefault","require","_superagentBluebirdPromise","_lodash","_log","_middleware","_superagent","_url","defaults","_","assign","urlError","Error","methodMap","exports","create","update","patch","delete","read","defaultFetchURL","_ref","model","log","warn","url","buildURL","_ref2","method","urlParse","url2","parse","replace","search","sync","_this","syncArguments","arguments","syncActions","middlewares","forEach","middleware","push","apply","Promise","all","then","ajaxSync","options","type","emulateHTTP","emulateJSON","params","result","data","batch","json","attrs","toJSON","requestSettings","request","SuperAgentRequest","toServer","isArray","FormData","pick","Object","keys","send","xhr","preflight","mc","getNextMiddleware","middlewareInterceptor","response","length","intercept","resolve","trigger","ajaxConfig","headers","key","header","toLowerCase","cached","deleted","cachedResponse","JSON","text","each","success","catch","error","message","timeout","e","set","emit","superagent","SuperagentPromiseError","res","body","status","concat","stringify","originalError","code"],"sources":["../src/sync.js"],"sourcesContent":["import Promise from \"bluebird\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport _ from \"lodash\";\nimport log from \"./log.js\";\nimport { middlewares } from \"./middleware.js\";\nimport superagent from \"superagent\";\nimport url2 from \"url\";\n\nconst defaults = _.defaults;\nconst assign = _.assign;\n\n// Throw an error when a URL is needed, and none is supplied.\nconst urlError = function () {\n\tthrow new Error(`A \"url\" property or function must be specified`);\n};\n\n// Map from CRUD to HTTP for our default `Backbone.sync` implementation.\nexport const methodMap = {\n\tcreate: \"POST\",\n\tupdate: \"PUT\",\n\tpatch: \"PATCH\",\n\tdelete: \"DELETE\",\n\tread: \"GET\",\n};\n\nexport const defaultFetchURL = function ({ model }) {\n\tlog.warn(\"Deprecation: defaultFetchURL is deprecated. Just use .url()\");\n\treturn model.url();\n};\n\nexport const buildURL = function ({ method, model }) {\n\tconst url = model.url();\n\tconst urlParse = url2.parse(url);\n\n\t// If not a GET request, strip the query params from the url\n\tif (method !== \"read\") {\n\t\treturn url.replace(urlParse.search, \"\");\n\t}\n\n\treturn url;\n};\n\nexport const sync = function (method) {\n\tconst syncArguments = arguments;\n\n\tif (method === \"read\") {\n\t\t// look for sync methods\n\t\tconst syncActions = [];\n\t\tmiddlewares.forEach((middleware) => {\n\t\t\tif (middleware.sync) {\n\t\t\t\tsyncActions.push(middleware.sync.apply(this, syncArguments));\n\t\t\t}\n\t\t});\n\n\t\treturn Promise.all(syncActions).then(() => {\n\t\t\treturn ajaxSync.apply(this, syncArguments);\n\t\t});\n\t}\n\treturn ajaxSync.apply(this, syncArguments);\n};\n\nexport const ajaxSync = function (method, model, options) {\n\tconst type = methodMap[method];\n\n\t// Default options, unless specified.\n\tdefaults(options || (options = {}), {\n\t\temulateHTTP: false,\n\t\temulateJSON: false,\n\t});\n\n\t// Default request options.\n\tconst params = { type: type };\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\toptions.url = _.result(model, \"url\") || urlError();\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (\n\t\toptions.data === null &&\n\t\tmodel &&\n\t\t(method === \"create\" ||\n\t\t\tmethod === \"update\" ||\n\t\t\tmethod === \"patch\" ||\n\t\t\t(method === \"delete\" && options.batch))\n\t) {\n\t\tparams.json = options.attrs || model.toJSON(options);\n\t}\n\n\tconst url = buildURL({ method, model, options });\n\n\tconst requestSettings = assign(params, options);\n\trequestSettings.method = type;\n\n\tconst request = SuperAgentRequest(type, url);\n\n\tif (\n\t\ttype === \"PATCH\" ||\n\t\ttype === \"POST\" ||\n\t\ttype === \"PUT\" ||\n\t\t(type === \"DELETE\" && options.batch)\n\t) {\n\t\tlet data = model.toServer();\n\n\t\t// Note we can use formdata to override the way a patch works - if we\n\t\t// are doing this it's for a particular patch with an image or file,\n\t\t// probably.\n\t\tif (type === \"PATCH\" && !_.isArray(data) && !(data instanceof FormData)) {\n\t\t\t// Make sure we're only updating data actually passed to the save\n\t\t\t// function, rather than automatically generated stuff\n\t\t\tdata = _.pick(options.attrs, Object.keys(data));\n\t\t}\n\t\trequest.send(data);\n\t}\n\n\toptions.xhr = request;\n\n\tmiddlewares.forEach((middleware) => {\n\t\tif (middleware.preflight) {\n\t\t\tmiddleware.preflight(request);\n\t\t}\n\t});\n\n\tlet mc = 0;\n\n\tfunction getNextMiddleware(request) {\n\t\treturn function middlewareInterceptor(response) {\n\t\t\tif (mc < middlewares.length) {\n\t\t\t\treturn middlewares[mc++]\n\t\t\t\t\t.intercept(request, response, model)\n\t\t\t\t\t.then(getNextMiddleware(request));\n\t\t\t}\n\t\t\treturn Promise.resolve(response);\n\t\t};\n\t}\n\n\tmodel.trigger(\"request\", model, request, options, requestSettings);\n\trequest.requestSettings = requestSettings;\n\n\tconst ajaxConfig = _.result(model, \"ajaxConfig\") || {};\n\n\t// Combine generated headers with user's headers.\n\tif (ajaxConfig.headers) {\n\t\tfor (const key in ajaxConfig.headers) {\n\t\t\trequest.header[key.toLowerCase()] = ajaxConfig.headers[key];\n\t\t}\n\t}\n\n\tif (options.headers) {\n\t\tfor (const key in options.headers) {\n\t\t\trequest.header[key.toLowerCase()] = options.headers[key];\n\t\t}\n\t}\n\n\t// TODO: Remove me when this can be moved... for now this removal is quite a complex\n\t// process.\n\tif (options.cached && !options.deleted) {\n\t\treturn Promise.resolve(options.cachedResponse)\n\t\t\t.then(getNextMiddleware(request))\n\t\t\t.then(function (response) {\n\t\t\t\tif (!response.data) {\n\t\t\t\t\tresponse.data = JSON.parse(response.text);\n\t\t\t\t}\n\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.success(request, response, model, true);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.success) {\n\t\t\t\t\t\toptions.success(response.data, \"success\", response);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response.data;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(function (response) {\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.error(response, model);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.error) {\n\t\t\t\t\t\toptions.error(response, \"error\", response.message);\n\t\t\t\t\t}\n\t\t\t\t\tthrow response;\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\treturn (\n\t\trequest\n\t\t\t// Force a timeout on every request. Intermittent connections\n\t\t\t// can have the request continue trying for minutes otherwise.\n\t\t\t.timeout(60 * 1000)\n\t\t\t.then(getNextMiddleware(request))\n\t\t\t.then(function (response) {\n\t\t\t\tlet data;\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(response.text);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tdata = response;\n\t\t\t\t}\n\n\t\t\t\tif (type !== \"DELETE\") {\n\t\t\t\t\tmodel.set(data);\n\t\t\t\t}\n\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.success(request, response, model, false);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.success) {\n\t\t\t\t\t\toptions.success(data, \"success\", response);\n\t\t\t\t\t}\n\t\t\t\t\trequest.emit(\"success\", response);\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(superagent.SuperagentPromiseError, (e) => {\n\t\t\t\tif (\n\t\t\t\t\te.res &&\n\t\t\t\t\te.res.body &&\n\t\t\t\t\t((e.status >= 400 && e.status < 500) || e.status === 503)\n\t\t\t\t) {\n\t\t\t\t\te.message += `\\nBody: ${JSON.stringify(e.res.body)}`;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t})\n\t\t\t.catch(function (response) {\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.error(response);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.error) {\n\t\t\t\t\t\toptions.error(response, \"error\", response.message);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Provide a more explanatory error message on timeout\n\t\t\t\t\tif (\n\t\t\t\t\t\tresponse &&\n\t\t\t\t\t\tresponse.originalError &&\n\t\t\t\t\t\tresponse.originalError.code === \"ECONNABORTED\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Failed ${type} request on url: ${url}. ${response.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow response;\n\t\t\t\t});\n\t\t\t})\n\t);\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/sync.js"],"names":["defaults","_","assign","urlError","Error","methodMap","create","update","patch","delete","read","defaultFetchURL","model","log","warn","url","buildURL","method","urlParse","url2","parse","replace","search","sync","syncArguments","arguments","syncActions","middlewares","forEach","middleware","push","apply","Promise","all","then","ajaxSync","options","type","emulateHTTP","emulateJSON","params","result","data","batch","json","attrs","toJSON","requestSettings","request","toServer","isArray","FormData","pick","Object","keys","send","xhr","preflight","mc","getNextMiddleware","middlewareInterceptor","response","length","intercept","resolve","trigger","ajaxConfig","headers","key","header","toLowerCase","cached","deleted","cachedResponse","JSON","text","each","success","catch","error","message","timeout","e","set","emit","superagent","SuperagentPromiseError","res","body","status","stringify","originalError","code"],"mappings":"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","sourcesContent":["import Promise from \"bluebird\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport _ from \"lodash\";\nimport log from \"./log.js\";\nimport { middlewares } from \"./middleware.js\";\nimport superagent from \"superagent\";\nimport url2 from \"url\";\n\nconst defaults = _.defaults;\nconst assign = _.assign;\n\n// Throw an error when a URL is needed, and none is supplied.\nconst urlError = function () {\n\tthrow new Error(`A \"url\" property or function must be specified`);\n};\n\n// Map from CRUD to HTTP for our default `Backbone.sync` implementation.\nexport const methodMap = {\n\tcreate: \"POST\",\n\tupdate: \"PUT\",\n\tpatch: \"PATCH\",\n\tdelete: \"DELETE\",\n\tread: \"GET\",\n};\n\nexport const defaultFetchURL = function ({ model }) {\n\tlog.warn(\"Deprecation: defaultFetchURL is deprecated. Just use .url()\");\n\treturn model.url();\n};\n\nexport const buildURL = function ({ method, model }) {\n\tconst url = model.url();\n\tconst urlParse = url2.parse(url);\n\n\t// If not a GET request, strip the query params from the url\n\tif (method !== \"read\") {\n\t\treturn url.replace(urlParse.search, \"\");\n\t}\n\n\treturn url;\n};\n\nexport const sync = function (method) {\n\tconst syncArguments = arguments;\n\n\tif (method === \"read\") {\n\t\t// look for sync methods\n\t\tconst syncActions = [];\n\t\tmiddlewares.forEach((middleware) => {\n\t\t\tif (middleware.sync) {\n\t\t\t\tsyncActions.push(middleware.sync.apply(this, syncArguments));\n\t\t\t}\n\t\t});\n\n\t\treturn Promise.all(syncActions).then(() => {\n\t\t\treturn ajaxSync.apply(this, syncArguments);\n\t\t});\n\t}\n\treturn ajaxSync.apply(this, syncArguments);\n};\n\nexport const ajaxSync = function (method, model, options) {\n\tconst type = methodMap[method];\n\n\t// Default options, unless specified.\n\tdefaults(options || (options = {}), {\n\t\temulateHTTP: false,\n\t\temulateJSON: false,\n\t});\n\n\t// Default request options.\n\tconst params = { type: type };\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\toptions.url = _.result(model, \"url\") || urlError();\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (\n\t\toptions.data === null &&\n\t\tmodel &&\n\t\t(method === \"create\" ||\n\t\t\tmethod === \"update\" ||\n\t\t\tmethod === \"patch\" ||\n\t\t\t(method === \"delete\" && options.batch))\n\t) {\n\t\tparams.json = options.attrs || model.toJSON(options);\n\t}\n\n\tconst url = buildURL({ method, model, options });\n\n\tconst requestSettings = assign(params, options);\n\trequestSettings.method = type;\n\n\tconst request = SuperAgentRequest(type, url);\n\n\tif (\n\t\ttype === \"PATCH\" ||\n\t\ttype === \"POST\" ||\n\t\ttype === \"PUT\" ||\n\t\t(type === \"DELETE\" && options.batch)\n\t) {\n\t\tlet data = model.toServer();\n\n\t\t// Note we can use formdata to override the way a patch works - if we\n\t\t// are doing this it's for a particular patch with an image or file,\n\t\t// probably.\n\t\tif (type === \"PATCH\" && !_.isArray(data) && !(data instanceof FormData)) {\n\t\t\t// Make sure we're only updating data actually passed to the save\n\t\t\t// function, rather than automatically generated stuff\n\t\t\tdata = _.pick(options.attrs, Object.keys(data));\n\t\t}\n\t\trequest.send(data);\n\t}\n\n\toptions.xhr = request;\n\n\tmiddlewares.forEach((middleware) => {\n\t\tif (middleware.preflight) {\n\t\t\tmiddleware.preflight(request);\n\t\t}\n\t});\n\n\tlet mc = 0;\n\n\tfunction getNextMiddleware(request) {\n\t\treturn function middlewareInterceptor(response) {\n\t\t\tif (mc < middlewares.length) {\n\t\t\t\treturn middlewares[mc++]\n\t\t\t\t\t.intercept(request, response, model)\n\t\t\t\t\t.then(getNextMiddleware(request));\n\t\t\t}\n\t\t\treturn Promise.resolve(response);\n\t\t};\n\t}\n\n\tmodel.trigger(\"request\", model, request, options, requestSettings);\n\trequest.requestSettings = requestSettings;\n\n\tconst ajaxConfig = _.result(model, \"ajaxConfig\") || {};\n\n\t// Combine generated headers with user's headers.\n\tif (ajaxConfig.headers) {\n\t\tfor (const key in ajaxConfig.headers) {\n\t\t\trequest.header[key.toLowerCase()] = ajaxConfig.headers[key];\n\t\t}\n\t}\n\n\tif (options.headers) {\n\t\tfor (const key in options.headers) {\n\t\t\trequest.header[key.toLowerCase()] = options.headers[key];\n\t\t}\n\t}\n\n\t// TODO: Remove me when this can be moved... for now this removal is quite a complex\n\t// process.\n\tif (options.cached && !options.deleted) {\n\t\treturn Promise.resolve(options.cachedResponse)\n\t\t\t.then(getNextMiddleware(request))\n\t\t\t.then(function (response) {\n\t\t\t\tif (!response.data) {\n\t\t\t\t\tresponse.data = JSON.parse(response.text);\n\t\t\t\t}\n\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.success(request, response, model, true);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.success) {\n\t\t\t\t\t\toptions.success(response.data, \"success\", response);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response.data;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(function (response) {\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.error(response, model);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.error) {\n\t\t\t\t\t\toptions.error(response, \"error\", response.message);\n\t\t\t\t\t}\n\t\t\t\t\tthrow response;\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\treturn (\n\t\trequest\n\t\t\t// Force a timeout on every request. Intermittent connections\n\t\t\t// can have the request continue trying for minutes otherwise.\n\t\t\t.timeout(60 * 1000)\n\t\t\t.then(getNextMiddleware(request))\n\t\t\t.then(function (response) {\n\t\t\t\tlet data;\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(response.text);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tdata = response;\n\t\t\t\t}\n\n\t\t\t\tif (type !== \"DELETE\") {\n\t\t\t\t\tmodel.set(data);\n\t\t\t\t}\n\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.success(request, response, model, false);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.success) {\n\t\t\t\t\t\toptions.success(data, \"success\", response);\n\t\t\t\t\t}\n\t\t\t\t\trequest.emit(\"success\", response);\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(superagent.SuperagentPromiseError, (e) => {\n\t\t\t\tif (\n\t\t\t\t\te.res &&\n\t\t\t\t\te.res.body &&\n\t\t\t\t\t((e.status >= 400 && e.status < 500) || e.status === 503)\n\t\t\t\t) {\n\t\t\t\t\te.message += `\\nBody: ${JSON.stringify(e.res.body)}`;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t})\n\t\t\t.catch(function (response) {\n\t\t\t\treturn Promise.each(middlewares, (middleware) => {\n\t\t\t\t\treturn middleware.error(response);\n\t\t\t\t}).then(() => {\n\t\t\t\t\tif (options.error) {\n\t\t\t\t\t\toptions.error(response, \"error\", response.message);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Provide a more explanatory error message on timeout\n\t\t\t\t\tif (\n\t\t\t\t\t\tresponse &&\n\t\t\t\t\t\tresponse.originalError &&\n\t\t\t\t\t\tresponse.originalError.code === \"ECONNABORTED\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Failed ${type} request on url: ${url}. ${response.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow response;\n\t\t\t\t});\n\t\t\t})\n\t);\n};\n"],"file":"sync.js"}
package/cjs/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -14,39 +15,53 @@ exports.removeMultiByteChars = removeMultiByteChars;
14
15
  exports.replaceHostname = replaceHostname;
15
16
  exports.sanitizeBase64 = sanitizeBase64;
16
17
  exports.setSequentialSequences = setSequentialSequences;
18
+
17
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
+
18
21
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
22
+
19
23
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
24
+
20
25
  var _lodash = _interopRequireDefault(require("lodash"));
26
+
21
27
  var _url = _interopRequireDefault(require("url"));
22
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* eslint-disable no-control-regex */
24
- var DATE_FORMAT = exports.DATE_FORMAT = "YYYY-MM-DD HH:mm:ss.SSSSSS[Z]";
25
- var DATE_FORMAT_T = exports.DATE_FORMAT_T = "YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]";
28
+
29
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
30
+
31
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
32
+
33
+ var DATE_FORMAT = "YYYY-MM-DD HH:mm:ss.SSSSSS[Z]";
34
+ exports.DATE_FORMAT = DATE_FORMAT;
35
+ var DATE_FORMAT_T = "YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]";
36
+ exports.DATE_FORMAT_T = DATE_FORMAT_T;
37
+
26
38
  function getShortURL(url) {
27
39
  return _url.default.parse(url).path;
28
40
  }
29
-
30
41
  /**
31
42
  * Sometimes a string(especially from another platform) has characters encoded using another method.
32
43
  * In these circumstances those characters, when encoded with utf-8, look like errors.
33
44
  * see http://i18nqa.com/debug/utf8-debug.html for examples
34
45
  */
46
+
47
+
35
48
  function removeMultiByteChars(_txt) {
36
49
  // replace possible whitespace characters (non-breaking space, thin space etc.) with a normal space
37
- var txt = _txt.replace(/(\xA0| |\x07|\xE2\x80\x89)/gm, " ");
50
+ var txt = _txt.replace(/(\xA0| |\x07|\xE2\x80\x89)/gm, " "); // remove every other cursed character entirely.
51
+
38
52
 
39
- // remove every other cursed character entirely.
40
53
  return txt.replace(/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}|[\x80-\xBF][\xC0-\xFF]/gm, "");
41
54
  }
55
+
42
56
  var HOSTNAME_RE = /^(?:https?:\/\/)?([\w-\._]*)/;
57
+
43
58
  function getHostname(data) {
44
59
  if (typeof data !== "string") {
45
60
  throw new Error("Arg must contain a hostname, ie: \"test.livepreso.com\". Found \"".concat(data, "\""));
46
61
  }
62
+
47
63
  return data.match(HOSTNAME_RE)[1];
48
64
  }
49
-
50
65
  /**
51
66
  * Replaces the hostname in some data (regardless of it being a string, array or object),
52
67
  * it will recursively update it all.
@@ -57,13 +72,17 @@ function getHostname(data) {
57
72
  * > "https://real.com/api/cool/1/"
58
73
  *
59
74
  */
75
+
76
+
60
77
  function replaceHostname(data, before, after) {
61
78
  // Don't do anything if they're the same!
62
79
  if (before === after) {
63
80
  return data;
64
81
  }
82
+
65
83
  var hostnameBefore = getHostname(before, "Before");
66
84
  var hostnameAfter = getHostname(after, "After");
85
+
67
86
  if (typeof data === "string" && data.indexOf("http") === 0) {
68
87
  return data.replace(hostnameBefore, hostnameAfter);
69
88
  } else if (Array.isArray(data)) {
@@ -76,33 +95,38 @@ function replaceHostname(data, before, after) {
76
95
  return newObj;
77
96
  }, {});
78
97
  }
79
- return data;
80
- }
81
98
 
82
- // Takes the deckversion model and retrieves the highest id between all of
99
+ return data;
100
+ } // Takes the deckversion model and retrieves the highest id between all of
83
101
  // the sections, slides and subslides
102
+
103
+
84
104
  function getMaxID(deckVersionModel) {
85
105
  var ids = deckVersionModel.section_set.map(function (section) {
86
106
  var slides = [];
107
+
87
108
  if (section.slide_set) {
88
109
  slides = section.slide_set.map(function (slide) {
89
110
  var subslides = [];
111
+
90
112
  if (slide.subslide_set) {
91
113
  subslides = slide.subslide_set.map(function (subslide) {
92
114
  return subslide.id;
93
115
  });
94
116
  }
117
+
95
118
  return [slide.id].concat((0, _toConsumableArray2.default)(subslides));
96
119
  });
97
120
  }
121
+
98
122
  return [section.id].concat((0, _toConsumableArray2.default)(_lodash.default.flatten(slides)));
99
123
  });
100
124
  return _lodash.default.max(_lodash.default.flatten(ids));
101
- }
102
-
103
- // The sections, slides and subslides are currently ordered by sequence
125
+ } // The sections, slides and subslides are currently ordered by sequence
104
126
  // but the sequence is not necessarily 0-based and sequential (e.g. in the
105
127
  // case of impostor decks). We fix that here.
128
+
129
+
106
130
  function setSequentialSequences(deck) {
107
131
  deck.sections.forEach(function (section, index) {
108
132
  section.sequence = index;
@@ -116,35 +140,37 @@ function setSequentialSequences(deck) {
116
140
  });
117
141
  });
118
142
  });
119
- }
120
-
121
- // A simple function to check the tags of a model - if it has the "section-header"
143
+ } // A simple function to check the tags of a model - if it has the "section-header"
122
144
  // tag then it's an impostor slide
145
+
146
+
123
147
  function isImpostor(model) {
124
148
  var tags = model.tags || [];
125
149
  return tags.indexOf("section-header") !== -1;
126
- }
127
-
128
- // An impostor deck will have impostor slides - checking for these is the
150
+ } // An impostor deck will have impostor slides - checking for these is the
129
151
  // most reliable method of determining whether a deck is an impostor deck,
130
152
  // and is also the same method that the server uses.
153
+
154
+
131
155
  function isImpostorDeck(deckVersionModel) {
132
156
  var section = deckVersionModel.section_set.first();
133
157
  return Boolean(section && section.slide_set.find(function (slide) {
134
158
  return isImpostor(slide);
135
159
  }));
136
160
  }
137
-
138
161
  /**
139
162
  * Strips base64 strings recursively.
140
163
  *
141
164
  * Optionally accepts a condition function, which you can use you add any extra
142
165
  * checks to test whether you want to clear the string.
143
166
  */
167
+
168
+
144
169
  function sanitizeBase64(obj) {
145
170
  var conditionFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
146
171
  return true;
147
172
  };
173
+
148
174
  if (Array.isArray(obj)) {
149
175
  return obj.map(function (v) {
150
176
  return sanitizeBase64(v, conditionFn);
@@ -155,10 +181,12 @@ function sanitizeBase64(obj) {
155
181
  }, {});
156
182
  } else if (typeof obj === "string") {
157
183
  var re = /^data:image\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;
184
+
158
185
  if (re.test(obj) && conditionFn(obj)) {
159
186
  return "";
160
187
  }
161
188
  }
189
+
162
190
  return obj;
163
191
  }
164
192
  //# sourceMappingURL=utils.js.map
package/cjs/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_lodash","_interopRequireDefault","require","_url","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","DATE_FORMAT","exports","DATE_FORMAT_T","getShortURL","url","url2","parse","path","removeMultiByteChars","_txt","txt","replace","HOSTNAME_RE","getHostname","data","Error","concat","match","replaceHostname","before","after","hostnameBefore","hostnameAfter","indexOf","Array","isArray","map","item","_","isObject","reduce","newObj","key","getMaxID","deckVersionModel","ids","section_set","section","slides","slide_set","slide","subslides","subslide_set","subslide","id","_toConsumableArray2","flatten","max","setSequentialSequences","deck","sections","index","sequence","isImpostor","model","tags","isImpostorDeck","first","Boolean","find","sanitizeBase64","obj","conditionFn","undefined","v","_typeof2","acc","re","test"],"sources":["../src/utils.js"],"sourcesContent":["import _ from \"lodash\";\n/* eslint-disable no-control-regex */\nimport url2 from \"url\";\n\nexport const DATE_FORMAT = \"YYYY-MM-DD HH:mm:ss.SSSSSS[Z]\";\nexport const DATE_FORMAT_T = \"YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]\";\n\nexport function getShortURL(url) {\n\treturn url2.parse(url).path;\n}\n\n/**\n * Sometimes a string(especially from another platform) has characters encoded using another method.\n * In these circumstances those characters, when encoded with utf-8, look like errors.\n * see http://i18nqa.com/debug/utf8-debug.html for examples\n */\nexport function removeMultiByteChars(_txt) {\n\t// replace possible whitespace characters (non-breaking space, thin space etc.) with a normal space\n\tconst txt = _txt.replace(/(\\xA0|\\x20|\\x07| )/gmu, \" \");\n\n\t// remove every other cursed character entirely.\n\treturn txt.replace(\n\t\t/[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}|[\\x80-\\xBF][\\xC0-\\xFF]/gmu,\n\t\t\"\",\n\t);\n}\n\nconst HOSTNAME_RE = /^(?:https?:\\/\\/)?([\\w-\\._]*)/;\n\nexport function getHostname(data) {\n\tif (typeof data !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Arg must contain a hostname, ie: \"test.livepreso.com\". Found \"${data}\"`,\n\t\t);\n\t}\n\n\treturn data.match(HOSTNAME_RE)[1];\n}\n\n/**\n * Replaces the hostname in some data (regardless of it being a string, array or object),\n * it will recursively update it all.\n *\n * Eg:\n *\n * replaceHostname(\"https://test.com/api/cool/1/\", \"test.com\", \"real.com\")\n * > \"https://real.com/api/cool/1/\"\n *\n */\nexport function replaceHostname(data, before, after) {\n\t// Don't do anything if they're the same!\n\tif (before === after) {\n\t\treturn data;\n\t}\n\n\tconst hostnameBefore = getHostname(before, \"Before\");\n\tconst hostnameAfter = getHostname(after, \"After\");\n\n\tif (typeof data === \"string\" && data.indexOf(\"http\") === 0) {\n\t\treturn data.replace(hostnameBefore, hostnameAfter);\n\t} else if (Array.isArray(data)) {\n\t\treturn data.map((item) => replaceHostname(item, before, after));\n\t} else if (_.isObject(data)) {\n\t\treturn Object.keys(data).reduce((newObj, key) => {\n\t\t\tnewObj[key] = replaceHostname(data[key], before, after);\n\t\t\treturn newObj;\n\t\t}, {});\n\t}\n\treturn data;\n}\n\n// Takes the deckversion model and retrieves the highest id between all of\n// the sections, slides and subslides\nexport function getMaxID(deckVersionModel) {\n\tconst ids = deckVersionModel.section_set.map((section) => {\n\t\tlet slides = [];\n\t\tif (section.slide_set) {\n\t\t\tslides = section.slide_set.map((slide) => {\n\t\t\t\tlet subslides = [];\n\n\t\t\t\tif (slide.subslide_set) {\n\t\t\t\t\tsubslides = slide.subslide_set.map((subslide) => subslide.id);\n\t\t\t\t}\n\n\t\t\t\treturn [slide.id, ...subslides];\n\t\t\t});\n\t\t}\n\n\t\treturn [section.id, ..._.flatten(slides)];\n\t});\n\n\treturn _.max(_.flatten(ids));\n}\n\n// The sections, slides and subslides are currently ordered by sequence\n// but the sequence is not necessarily 0-based and sequential (e.g. in the\n// case of impostor decks). We fix that here.\nexport function setSequentialSequences(deck) {\n\tdeck.sections.forEach((section, index) => {\n\t\tsection.sequence = index;\n\t\tsection.index = index;\n\n\t\tsection.slides.forEach((slide, index) => {\n\t\t\tslide.sequence = index;\n\t\t\tslide.index = index;\n\n\t\t\tslide.subslides.forEach((subslide, index) => {\n\t\t\t\tsubslide.sequence = index;\n\t\t\t\tsubslide.index = index;\n\t\t\t});\n\t\t});\n\t});\n}\n\n// A simple function to check the tags of a model - if it has the \"section-header\"\n// tag then it's an impostor slide\nexport function isImpostor(model) {\n\tconst tags = model.tags || [];\n\n\treturn tags.indexOf(\"section-header\") !== -1;\n}\n\n// An impostor deck will have impostor slides - checking for these is the\n// most reliable method of determining whether a deck is an impostor deck,\n// and is also the same method that the server uses.\nexport function isImpostorDeck(deckVersionModel) {\n\tconst section = deckVersionModel.section_set.first();\n\n\treturn Boolean(\n\t\tsection && section.slide_set.find((slide) => isImpostor(slide)),\n\t);\n}\n\n/**\n * Strips base64 strings recursively.\n *\n * Optionally accepts a condition function, which you can use you add any extra\n * checks to test whether you want to clear the string.\n */\nexport function sanitizeBase64(obj, conditionFn = () => true) {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((v) => sanitizeBase64(v, conditionFn));\n\t} else if (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof obj !== \"undefined\"\n\t) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\treturn { ...acc, [key]: sanitizeBase64(obj[key], conditionFn) };\n\t\t}, {});\n\t} else if (typeof obj === \"string\") {\n\t\tconst re = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;\n\t\tif (re.test(obj) && conditionFn(obj)) {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\treturn obj;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/utils.js"],"names":["DATE_FORMAT","DATE_FORMAT_T","getShortURL","url","url2","parse","path","removeMultiByteChars","_txt","txt","replace","HOSTNAME_RE","getHostname","data","Error","match","replaceHostname","before","after","hostnameBefore","hostnameAfter","indexOf","Array","isArray","map","item","_","isObject","Object","keys","reduce","newObj","key","getMaxID","deckVersionModel","ids","section_set","section","slides","slide_set","slide","subslides","subslide_set","subslide","id","flatten","max","setSequentialSequences","deck","sections","forEach","index","sequence","isImpostor","model","tags","isImpostorDeck","first","Boolean","find","sanitizeBase64","obj","conditionFn","v","acc","re","test"],"mappings":"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","sourcesContent":["import _ from \"lodash\";\n/* eslint-disable no-control-regex */\nimport url2 from \"url\";\n\nexport const DATE_FORMAT = \"YYYY-MM-DD HH:mm:ss.SSSSSS[Z]\";\nexport const DATE_FORMAT_T = \"YYYY-MM-DDTHH:mm:ss.SSSSSS[Z]\";\n\nexport function getShortURL(url) {\n\treturn url2.parse(url).path;\n}\n\n/**\n * Sometimes a string(especially from another platform) has characters encoded using another method.\n * In these circumstances those characters, when encoded with utf-8, look like errors.\n * see http://i18nqa.com/debug/utf8-debug.html for examples\n */\nexport function removeMultiByteChars(_txt) {\n\t// replace possible whitespace characters (non-breaking space, thin space etc.) with a normal space\n\tconst txt = _txt.replace(/(\\xA0|\\x20|\\x07| )/gmu, \" \");\n\n\t// remove every other cursed character entirely.\n\treturn txt.replace(\n\t\t/[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}|[\\x80-\\xBF][\\xC0-\\xFF]/gmu,\n\t\t\"\",\n\t);\n}\n\nconst HOSTNAME_RE = /^(?:https?:\\/\\/)?([\\w-\\._]*)/;\n\nexport function getHostname(data) {\n\tif (typeof data !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Arg must contain a hostname, ie: \"test.livepreso.com\". Found \"${data}\"`,\n\t\t);\n\t}\n\n\treturn data.match(HOSTNAME_RE)[1];\n}\n\n/**\n * Replaces the hostname in some data (regardless of it being a string, array or object),\n * it will recursively update it all.\n *\n * Eg:\n *\n * replaceHostname(\"https://test.com/api/cool/1/\", \"test.com\", \"real.com\")\n * > \"https://real.com/api/cool/1/\"\n *\n */\nexport function replaceHostname(data, before, after) {\n\t// Don't do anything if they're the same!\n\tif (before === after) {\n\t\treturn data;\n\t}\n\n\tconst hostnameBefore = getHostname(before, \"Before\");\n\tconst hostnameAfter = getHostname(after, \"After\");\n\n\tif (typeof data === \"string\" && data.indexOf(\"http\") === 0) {\n\t\treturn data.replace(hostnameBefore, hostnameAfter);\n\t} else if (Array.isArray(data)) {\n\t\treturn data.map((item) => replaceHostname(item, before, after));\n\t} else if (_.isObject(data)) {\n\t\treturn Object.keys(data).reduce((newObj, key) => {\n\t\t\tnewObj[key] = replaceHostname(data[key], before, after);\n\t\t\treturn newObj;\n\t\t}, {});\n\t}\n\treturn data;\n}\n\n// Takes the deckversion model and retrieves the highest id between all of\n// the sections, slides and subslides\nexport function getMaxID(deckVersionModel) {\n\tconst ids = deckVersionModel.section_set.map((section) => {\n\t\tlet slides = [];\n\t\tif (section.slide_set) {\n\t\t\tslides = section.slide_set.map((slide) => {\n\t\t\t\tlet subslides = [];\n\n\t\t\t\tif (slide.subslide_set) {\n\t\t\t\t\tsubslides = slide.subslide_set.map((subslide) => subslide.id);\n\t\t\t\t}\n\n\t\t\t\treturn [slide.id, ...subslides];\n\t\t\t});\n\t\t}\n\n\t\treturn [section.id, ..._.flatten(slides)];\n\t});\n\n\treturn _.max(_.flatten(ids));\n}\n\n// The sections, slides and subslides are currently ordered by sequence\n// but the sequence is not necessarily 0-based and sequential (e.g. in the\n// case of impostor decks). We fix that here.\nexport function setSequentialSequences(deck) {\n\tdeck.sections.forEach((section, index) => {\n\t\tsection.sequence = index;\n\t\tsection.index = index;\n\n\t\tsection.slides.forEach((slide, index) => {\n\t\t\tslide.sequence = index;\n\t\t\tslide.index = index;\n\n\t\t\tslide.subslides.forEach((subslide, index) => {\n\t\t\t\tsubslide.sequence = index;\n\t\t\t\tsubslide.index = index;\n\t\t\t});\n\t\t});\n\t});\n}\n\n// A simple function to check the tags of a model - if it has the \"section-header\"\n// tag then it's an impostor slide\nexport function isImpostor(model) {\n\tconst tags = model.tags || [];\n\n\treturn tags.indexOf(\"section-header\") !== -1;\n}\n\n// An impostor deck will have impostor slides - checking for these is the\n// most reliable method of determining whether a deck is an impostor deck,\n// and is also the same method that the server uses.\nexport function isImpostorDeck(deckVersionModel) {\n\tconst section = deckVersionModel.section_set.first();\n\n\treturn Boolean(\n\t\tsection && section.slide_set.find((slide) => isImpostor(slide)),\n\t);\n}\n\n/**\n * Strips base64 strings recursively.\n *\n * Optionally accepts a condition function, which you can use you add any extra\n * checks to test whether you want to clear the string.\n */\nexport function sanitizeBase64(obj, conditionFn = () => true) {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((v) => sanitizeBase64(v, conditionFn));\n\t} else if (\n\t\ttypeof obj === \"object\" &&\n\t\tobj !== null &&\n\t\ttypeof obj !== \"undefined\"\n\t) {\n\t\treturn Object.keys(obj).reduce((acc, key) => {\n\t\t\treturn { ...acc, [key]: sanitizeBase64(obj[key], conditionFn) };\n\t\t}, {});\n\t} else if (typeof obj === \"string\") {\n\t\tconst re = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;\n\t\tif (re.test(obj) && conditionFn(obj)) {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\treturn obj;\n}\n"],"file":"utils.js"}
package/cjs/utils.spec.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _utils = require("./utils.js");
4
+
4
5
  describe("getShortURL()", function () {
5
6
  test("shorten a full url to a short one", function () {
6
7
  var url = "http://client.salespreso.com/api/users/1/";
@@ -16,7 +17,7 @@ describe("removeMultiByteChars()", function () {
16
17
  var testString = "SUZI LUCK’S CANTEEN & COCKTAIL BAR";
17
18
  expect((0, _utils.removeMultiByteChars)(testString)).toEqual("SUZI LUCKS CANTEEN & COCKTAIL BAR");
18
19
  });
19
- test("sanatize urls correctly", function () {
20
+ test("sanitize urls correctly", function () {
20
21
  var testString = "http://client.salespreso.com/api/users/1/’";
21
22
  var testString2 = "/api/users/1/’";
22
23
  var testString3 = "/api/users/1/?param=1&test=3&_r=4";
@@ -30,6 +31,7 @@ describe("getHostname()", function () {
30
31
  var actual = function actual() {
31
32
  return (0, _utils.getHostname)(null);
32
33
  };
34
+
33
35
  expect(actual).toThrow();
34
36
  });
35
37
  it("returns a hostname from a full URL", function () {
@@ -50,12 +52,14 @@ describe("replaceHostname()", function () {
50
52
  var actual = function actual() {
51
53
  return (0, _utils.replaceHostname)("foo", null, "brand.new.com");
52
54
  };
55
+
53
56
  expect(actual).toThrow();
54
57
  });
55
58
  it("throws an error if not to hostname", function () {
56
59
  var actual = function actual() {
57
60
  return (0, _utils.replaceHostname)("foo", "old.url.com", null);
58
61
  };
62
+
59
63
  expect(actual).toThrow();
60
64
  });
61
65
  it("replaces hostname of a string", function () {