@livepreso/api 6.46.0 → 6.47.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.
- package/.rush/temp/package-deps_build.json +156 -141
- package/.rush/temp/shrinkwrap-deps.json +424 -374
- package/CHANGELOG.json +17 -0
- package/CHANGELOG.md +8 -1
- package/api.build.log +6 -1
- package/cjs/api.js +18 -3
- package/cjs/api.js.map +1 -1
- package/cjs/api.spec.js +4 -0
- package/cjs/api.spec.js.map +1 -1
- package/cjs/auth.js +29 -2
- package/cjs/auth.js.map +1 -1
- package/cjs/auth.spec.js +77 -52
- package/cjs/auth.spec.js.map +1 -1
- package/cjs/caching.js +7 -2
- package/cjs/caching.js.map +1 -1
- package/cjs/collections/activity.js +56 -16
- package/cjs/collections/activity.js.map +1 -1
- package/cjs/collections/adjunct-sections.js +10 -1
- package/cjs/collections/adjunct-sections.js.map +1 -1
- package/cjs/collections/adjunct-slides.js +10 -1
- package/cjs/collections/adjunct-slides.js.map +1 -1
- package/cjs/collections/adjunct-sub-slides.js +9 -1
- package/cjs/collections/adjunct-sub-slides.js.map +1 -1
- package/cjs/collections/appointment-adjunct-tags.js +9 -1
- package/cjs/collections/appointment-adjunct-tags.js.map +1 -1
- package/cjs/collections/appointment-deckversion-tags.js +9 -1
- package/cjs/collections/appointment-deckversion-tags.js.map +1 -1
- package/cjs/collections/appointment-editors.js +10 -1
- package/cjs/collections/appointment-editors.js.map +1 -1
- package/cjs/collections/appointment-section-tags.js +9 -1
- package/cjs/collections/appointment-section-tags.js.map +1 -1
- package/cjs/collections/appointment-slide-tags.js +9 -1
- package/cjs/collections/appointment-slide-tags.js.map +1 -1
- package/cjs/collections/appointment-tags.js +103 -64
- package/cjs/collections/appointment-tags.js.map +1 -1
- package/cjs/collections/appointment-templates.js +10 -1
- package/cjs/collections/appointment-templates.js.map +1 -1
- package/cjs/collections/appointments.js +29 -9
- package/cjs/collections/appointments.js.map +1 -1
- package/cjs/collections/assets.js +9 -1
- package/cjs/collections/assets.js.map +1 -1
- package/cjs/collections/auto-adjuncts.js +21 -6
- package/cjs/collections/auto-adjuncts.js.map +1 -1
- package/cjs/collections/base.js +112 -34
- package/cjs/collections/base.js.map +1 -1
- package/cjs/collections/base.spec.js +233 -186
- package/cjs/collections/base.spec.js.map +1 -1
- package/cjs/collections/cms-vals.js +16 -4
- package/cjs/collections/cms-vals.js.map +1 -1
- package/cjs/collections/contact-phones.js +9 -1
- package/cjs/collections/contact-phones.js.map +1 -1
- package/cjs/collections/contacts.js +9 -1
- package/cjs/collections/contacts.js.map +1 -1
- package/cjs/collections/created-assets.js +10 -1
- package/cjs/collections/created-assets.js.map +1 -1
- package/cjs/collections/customers.js +9 -1
- package/cjs/collections/customers.js.map +1 -1
- package/cjs/collections/deck-notes.js +10 -1
- package/cjs/collections/deck-notes.js.map +1 -1
- package/cjs/collections/deck-version-screenshots.js +17 -4
- package/cjs/collections/deck-version-screenshots.js.map +1 -1
- package/cjs/collections/deck-versions.js +20 -5
- package/cjs/collections/deck-versions.js.map +1 -1
- package/cjs/collections/decks.js +9 -1
- package/cjs/collections/decks.js.map +1 -1
- package/cjs/collections/deleted-assets.js +10 -1
- package/cjs/collections/deleted-assets.js.map +1 -1
- package/cjs/collections/dispatches.js +13 -1
- package/cjs/collections/dispatches.js.map +1 -1
- package/cjs/collections/event-objects.js +9 -1
- package/cjs/collections/event-objects.js.map +1 -1
- package/cjs/collections/events.js +9 -1
- package/cjs/collections/events.js.map +1 -1
- package/cjs/collections/groups.js +9 -1
- package/cjs/collections/groups.js.map +1 -1
- package/cjs/collections/images.js +9 -1
- package/cjs/collections/images.js.map +1 -1
- package/cjs/collections/locations.js +9 -1
- package/cjs/collections/locations.js.map +1 -1
- package/cjs/collections/opportunities.js +9 -1
- package/cjs/collections/opportunities.js.map +1 -1
- package/cjs/collections/pack-diffs.js +9 -1
- package/cjs/collections/pack-diffs.js.map +1 -1
- package/cjs/collections/packs.js +9 -1
- package/cjs/collections/packs.js.map +1 -1
- package/cjs/collections/presets.js +9 -1
- package/cjs/collections/presets.js.map +1 -1
- package/cjs/collections/section-selections.js +9 -1
- package/cjs/collections/section-selections.js.map +1 -1
- package/cjs/collections/sections.js +9 -1
- package/cjs/collections/sections.js.map +1 -1
- package/cjs/collections/signers.js +28 -0
- package/cjs/collections/signers.js.map +1 -0
- package/cjs/collections/signing-requests.js +28 -0
- package/cjs/collections/signing-requests.js.map +1 -0
- package/cjs/collections/slide-selections.js +9 -1
- package/cjs/collections/slide-selections.js.map +1 -1
- package/cjs/collections/slides.js +9 -1
- package/cjs/collections/slides.js.map +1 -1
- package/cjs/collections/snapshots.js +9 -1
- package/cjs/collections/snapshots.js.map +1 -1
- package/cjs/collections/sub-slides.js +9 -1
- package/cjs/collections/sub-slides.js.map +1 -1
- package/cjs/collections/tags.js +9 -1
- package/cjs/collections/tags.js.map +1 -1
- package/cjs/collections/teams.js +9 -1
- package/cjs/collections/teams.js.map +1 -1
- package/cjs/collections/templates.js +9 -1
- package/cjs/collections/templates.js.map +1 -1
- package/cjs/collections/uploads.js +9 -1
- package/cjs/collections/uploads.js.map +1 -1
- package/cjs/collections/users.js +9 -1
- package/cjs/collections/users.js.map +1 -1
- package/cjs/collections.js +116 -11
- package/cjs/collections.js.map +1 -1
- package/cjs/fixtures.js +60 -15
- package/cjs/fixtures.js.map +1 -1
- package/cjs/index.js +36 -2
- package/cjs/index.js.map +1 -1
- package/cjs/log.js +1 -0
- package/cjs/log.js.map +1 -1
- package/cjs/middleware.js +7 -2
- package/cjs/middleware.js.map +1 -1
- package/cjs/middlewares/auth.js +17 -1
- package/cjs/middlewares/auth.js.map +1 -1
- package/cjs/middlewares/base.js +9 -3
- package/cjs/middlewares/base.js.map +1 -1
- package/cjs/middlewares/json.js +19 -1
- package/cjs/middlewares/json.js.map +1 -1
- package/cjs/middlewares/redirect.js +21 -5
- package/cjs/middlewares/redirect.js.map +1 -1
- package/cjs/models/activity-item.js +29 -5
- package/cjs/models/activity-item.js.map +1 -1
- package/cjs/models/adjunct-section.js +19 -1
- package/cjs/models/adjunct-section.js.map +1 -1
- package/cjs/models/adjunct-slide.js +19 -1
- package/cjs/models/adjunct-slide.js.map +1 -1
- package/cjs/models/adjunct-sub-slide.js +16 -1
- package/cjs/models/adjunct-sub-slide.js.map +1 -1
- package/cjs/models/adjunct.js +22 -6
- package/cjs/models/adjunct.js.map +1 -1
- package/cjs/models/api.js +6 -1
- package/cjs/models/api.js.map +1 -1
- package/cjs/models/appointment-adjunct-tags.js +13 -1
- package/cjs/models/appointment-adjunct-tags.js.map +1 -1
- package/cjs/models/appointment-deckversion-tags.js +13 -1
- package/cjs/models/appointment-deckversion-tags.js.map +1 -1
- package/cjs/models/appointment-editor.js +14 -1
- package/cjs/models/appointment-editor.js.map +1 -1
- package/cjs/models/appointment-section-tags.js +13 -1
- package/cjs/models/appointment-section-tags.js.map +1 -1
- package/cjs/models/appointment-slide-tags.js +13 -1
- package/cjs/models/appointment-slide-tags.js.map +1 -1
- package/cjs/models/appointment-stats.js +11 -1
- package/cjs/models/appointment-stats.js.map +1 -1
- package/cjs/models/appointment-tags.js +10 -1
- package/cjs/models/appointment-tags.js.map +1 -1
- package/cjs/models/appointment-template.js +6 -1
- package/cjs/models/appointment-template.js.map +1 -1
- package/cjs/models/appointment-viewing.js +8 -1
- package/cjs/models/appointment-viewing.js.map +1 -1
- package/cjs/models/appointment.js +98 -20
- package/cjs/models/appointment.js.map +1 -1
- package/cjs/models/asset.js +12 -1
- package/cjs/models/asset.js.map +1 -1
- package/cjs/models/auto-adjunct-key-check.js +15 -1
- package/cjs/models/auto-adjunct-key-check.js.map +1 -1
- package/cjs/models/auto-adjunct.js +13 -1
- package/cjs/models/auto-adjunct.js.map +1 -1
- package/cjs/models/base.js +175 -53
- package/cjs/models/base.js.map +1 -1
- package/cjs/models/base.spec.js +31 -0
- package/cjs/models/base.spec.js.map +1 -1
- package/cjs/models/choicelist.js +8 -1
- package/cjs/models/choicelist.js.map +1 -1
- package/cjs/models/cms-val.js +26 -5
- package/cjs/models/cms-val.js.map +1 -1
- package/cjs/models/cms-val.spec.js +19 -12
- package/cjs/models/cms-val.spec.js.map +1 -1
- package/cjs/models/contact-phone.js +13 -1
- package/cjs/models/contact-phone.js.map +1 -1
- package/cjs/models/contact.js +18 -1
- package/cjs/models/contact.js.map +1 -1
- package/cjs/models/customer.js +30 -3
- package/cjs/models/customer.js.map +1 -1
- package/cjs/models/deck-note.js +9 -1
- package/cjs/models/deck-note.js.map +1 -1
- package/cjs/models/deck-tags.js +12 -1
- package/cjs/models/deck-tags.js.map +1 -1
- package/cjs/models/deck-version-screenshot.js +13 -1
- package/cjs/models/deck-version-screenshot.js.map +1 -1
- package/cjs/models/deck-version.js +40 -1
- package/cjs/models/deck-version.js.map +1 -1
- package/cjs/models/deck.js +14 -1
- package/cjs/models/deck.js.map +1 -1
- package/cjs/models/dispatch-preview.js +13 -1
- package/cjs/models/dispatch-preview.js.map +1 -1
- package/cjs/models/dispatch.js +23 -1
- package/cjs/models/dispatch.js.map +1 -1
- package/cjs/models/envs.js +6 -1
- package/cjs/models/envs.js.map +1 -1
- package/cjs/models/event-object.js +11 -1
- package/cjs/models/event-object.js.map +1 -1
- package/cjs/models/event.js +13 -1
- package/cjs/models/event.js.map +1 -1
- package/cjs/models/feed-data.js +13 -1
- package/cjs/models/feed-data.js.map +1 -1
- package/cjs/models/file.js +11 -1
- package/cjs/models/file.js.map +1 -1
- package/cjs/models/group.js +11 -1
- package/cjs/models/group.js.map +1 -1
- package/cjs/models/handover.js +13 -1
- package/cjs/models/handover.js.map +1 -1
- package/cjs/models/hosted-preso.js +15 -1
- package/cjs/models/hosted-preso.js.map +1 -1
- package/cjs/models/image.js +16 -1
- package/cjs/models/image.js.map +1 -1
- package/cjs/models/location.js +13 -1
- package/cjs/models/location.js.map +1 -1
- package/cjs/models/manifest-json.js +88 -21
- package/cjs/models/manifest-json.js.map +1 -1
- package/cjs/models/onshare.js +14 -1
- package/cjs/models/onshare.js.map +1 -1
- package/cjs/models/opportunity.js +14 -1
- package/cjs/models/opportunity.js.map +1 -1
- package/cjs/models/pack-diff.js +14 -1
- package/cjs/models/pack-diff.js.map +1 -1
- package/cjs/models/pack.js +12 -1
- package/cjs/models/pack.js.map +1 -1
- package/cjs/models/preset.js +21 -2
- package/cjs/models/preset.js.map +1 -1
- package/cjs/models/refresh-request.js +22 -4
- package/cjs/models/refresh-request.js.map +1 -1
- package/cjs/models/room.js +9 -1
- package/cjs/models/room.js.map +1 -1
- package/cjs/models/salesforce-lookup.js +12 -1
- package/cjs/models/salesforce-lookup.js.map +1 -1
- package/cjs/models/section-selection.js +14 -1
- package/cjs/models/section-selection.js.map +1 -1
- package/cjs/models/section.js +14 -1
- package/cjs/models/section.js.map +1 -1
- package/cjs/models/signer.js +47 -0
- package/cjs/models/signer.js.map +1 -0
- package/cjs/models/signing-request.js +66 -0
- package/cjs/models/signing-request.js.map +1 -0
- package/cjs/models/slide-selection.js +14 -1
- package/cjs/models/slide-selection.js.map +1 -1
- package/cjs/models/slide.js +14 -1
- package/cjs/models/slide.js.map +1 -1
- package/cjs/models/snapshot.js +45 -4
- package/cjs/models/snapshot.js.map +1 -1
- package/cjs/models/snapshot.spec.js +32 -25
- package/cjs/models/snapshot.spec.js.map +1 -1
- package/cjs/models/sub-slide.js +12 -1
- package/cjs/models/sub-slide.js.map +1 -1
- package/cjs/models/support-ticket.js +11 -1
- package/cjs/models/support-ticket.js.map +1 -1
- package/cjs/models/tag.js +13 -1
- package/cjs/models/tag.js.map +1 -1
- package/cjs/models/team.js +13 -1
- package/cjs/models/team.js.map +1 -1
- package/cjs/models/template.js +78 -48
- package/cjs/models/template.js.map +1 -1
- package/cjs/models/tenancy.js +11 -1
- package/cjs/models/tenancy.js.map +1 -1
- package/cjs/models/timing-log.js +78 -21
- package/cjs/models/timing-log.js.map +1 -1
- package/cjs/models/timing-log.spec.js +37 -24
- package/cjs/models/timing-log.spec.js.map +1 -1
- package/cjs/models/token.js +11 -1
- package/cjs/models/token.js.map +1 -1
- package/cjs/models/transcribe-socket.js +8 -1
- package/cjs/models/transcribe-socket.js.map +1 -1
- package/cjs/models/upload.js +7 -1
- package/cjs/models/upload.js.map +1 -1
- package/cjs/models/user.js +26 -3
- package/cjs/models/user.js.map +1 -1
- package/cjs/models/user.spec.js +30 -20
- package/cjs/models/user.spec.js.map +1 -1
- package/cjs/models.js +160 -11
- package/cjs/models.js.map +1 -1
- package/cjs/presentation/appointment-presentation.js +35 -9
- package/cjs/presentation/appointment-presentation.js.map +1 -1
- package/cjs/presentation/base-presentation-collection.js +7 -1
- package/cjs/presentation/base-presentation-collection.js.map +1 -1
- package/cjs/presentation/base-presentation-model.js +65 -22
- package/cjs/presentation/base-presentation-model.js.map +1 -1
- package/cjs/presentation/base-presentation-model.spec.js +27 -6
- package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
- package/cjs/presentation/presentation-deck.js +82 -41
- package/cjs/presentation/presentation-deck.js.map +1 -1
- package/cjs/presentation/presentation-deck.spec.js +95 -72
- package/cjs/presentation/presentation-deck.spec.js.map +1 -1
- package/cjs/presentation/presentation-decks.js +9 -1
- package/cjs/presentation/presentation-decks.js.map +1 -1
- package/cjs/presentation/presentation-section.js +74 -9
- package/cjs/presentation/presentation-section.js.map +1 -1
- package/cjs/presentation/presentation-section.spec.js +256 -203
- package/cjs/presentation/presentation-section.spec.js.map +1 -1
- package/cjs/presentation/presentation-sections.js +9 -1
- package/cjs/presentation/presentation-sections.js.map +1 -1
- package/cjs/presentation/presentation-slide.js +77 -16
- package/cjs/presentation/presentation-slide.js.map +1 -1
- package/cjs/presentation/presentation-slide.spec.js +176 -136
- package/cjs/presentation/presentation-slide.spec.js.map +1 -1
- package/cjs/presentation/presentation-slides.js +9 -1
- package/cjs/presentation/presentation-slides.js.map +1 -1
- package/cjs/presentation/presentation-subslide.js +23 -3
- package/cjs/presentation/presentation-subslide.js.map +1 -1
- package/cjs/presentation/presentation-subslide.spec.js +125 -101
- package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
- package/cjs/presentation/presentation-subslides.js +9 -1
- package/cjs/presentation/presentation-subslides.js.map +1 -1
- package/cjs/presentation/presentation.js +115 -61
- package/cjs/presentation/presentation.js.map +1 -1
- package/cjs/presentation.js +20 -0
- package/cjs/presentation.js.map +1 -1
- package/cjs/selections.js +29 -4
- package/cjs/selections.js.map +1 -1
- package/cjs/state-register.js +11 -3
- package/cjs/state-register.js.map +1 -1
- package/cjs/sync.js +76 -32
- package/cjs/sync.js.map +1 -1
- package/cjs/utils.js +49 -21
- package/cjs/utils.js.map +1 -1
- package/cjs/utils.spec.js +5 -1
- package/cjs/utils.spec.js.map +1 -1
- package/package.json +4 -4
- package/src/collections/signers.js +18 -0
- package/src/collections/signing-requests.js +18 -0
- package/src/collections.js +2 -1
- package/src/fixtures.js +11 -9
- package/src/index.js +2 -3
- package/src/models/activity-item.js +8 -0
- package/src/models/appointment.js +3 -0
- package/src/models/deck-version.js +1 -0
- package/src/models/manifest-json.js +9 -0
- package/src/models/preset.js +1 -0
- package/src/models/refresh-request.js +1 -0
- package/src/models/signer.js +37 -0
- package/src/models/signing-request.js +56 -0
- package/src/models/snapshot.js +19 -0
- package/src/models.js +2 -1
- package/src/utils.spec.js +4 -4
- package/cjs/collections/appointment-duplicates.js +0 -21
- package/cjs/collections/appointment-duplicates.js.map +0 -1
- package/cjs/models/appointment-duplicate.js +0 -72
- package/cjs/models/appointment-duplicate.js.map +0 -1
- package/src/collections/appointment-duplicates.js +0 -19
- package/src/models/appointment-duplicate.js +0 -73
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":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;AAEO,IAAMA,WAAW,GAAG,+BAApB;;AACA,IAAMC,aAAa,GAAG,+BAAtB;;;AAEA,SAASC,WAAT,CAAqBC,GAArB,EAA0B;AAChC,SAAOC,aAAKC,KAAL,CAAWF,GAAX,EAAgBG,IAAvB;AACA;AAED;AACA;AACA;AACA;AACA;;;AACO,SAASC,oBAAT,CAA8BC,IAA9B,EAAoC;AAC1C;AACA,MAAMC,GAAG,GAAGD,IAAI,CAACE,OAAL,CAAa,8BAAb,EAAwC,GAAxC,CAAZ,CAF0C,CAI1C;;;AACA,SAAOD,GAAG,CAACC,OAAJ,CACN,qGADM,EAEN,EAFM,CAAP;AAIA;;AAED,IAAMC,WAAW,GAAG,8BAApB;;AAEO,SAASC,WAAT,CAAqBC,IAArB,EAA2B;AACjC,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC7B,UAAM,IAAIC,KAAJ,4EAC4DD,IAD5D,QAAN;AAGA;;AAED,SAAOA,IAAI,CAACE,KAAL,CAAWJ,WAAX,EAAwB,CAAxB,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASK,eAAT,CAAyBH,IAAzB,EAA+BI,MAA/B,EAAuCC,KAAvC,EAA8C;AACpD;AACA,MAAID,MAAM,KAAKC,KAAf,EAAsB;AACrB,WAAOL,IAAP;AACA;;AAED,MAAMM,cAAc,GAAGP,WAAW,CAACK,MAAD,EAAS,QAAT,CAAlC;AACA,MAAMG,aAAa,GAAGR,WAAW,CAACM,KAAD,EAAQ,OAAR,CAAjC;;AAEA,MAAI,OAAOL,IAAP,KAAgB,QAAhB,IAA4BA,IAAI,CAACQ,OAAL,CAAa,MAAb,MAAyB,CAAzD,EAA4D;AAC3D,WAAOR,IAAI,CAACH,OAAL,CAAaS,cAAb,EAA6BC,aAA7B,CAAP;AACA,GAFD,MAEO,IAAIE,KAAK,CAACC,OAAN,CAAcV,IAAd,CAAJ,EAAyB;AAC/B,WAAOA,IAAI,CAACW,GAAL,CAAS,UAACC,IAAD;AAAA,aAAUT,eAAe,CAACS,IAAD,EAAOR,MAAP,EAAeC,KAAf,CAAzB;AAAA,KAAT,CAAP;AACA,GAFM,MAEA,IAAIQ,gBAAEC,QAAF,CAAWd,IAAX,CAAJ,EAAsB;AAC5B,WAAOe,MAAM,CAACC,IAAP,CAAYhB,IAAZ,EAAkBiB,MAAlB,CAAyB,UAACC,MAAD,EAASC,GAAT,EAAiB;AAChDD,MAAAA,MAAM,CAACC,GAAD,CAAN,GAAchB,eAAe,CAACH,IAAI,CAACmB,GAAD,CAAL,EAAYf,MAAZ,EAAoBC,KAApB,CAA7B;AACA,aAAOa,MAAP;AACA,KAHM,EAGJ,EAHI,CAAP;AAIA;;AACD,SAAOlB,IAAP;AACA,C,CAED;AACA;;;AACO,SAASoB,QAAT,CAAkBC,gBAAlB,EAAoC;AAC1C,MAAMC,GAAG,GAAGD,gBAAgB,CAACE,WAAjB,CAA6BZ,GAA7B,CAAiC,UAACa,OAAD,EAAa;AACzD,QAAIC,MAAM,GAAG,EAAb;;AACA,QAAID,OAAO,CAACE,SAAZ,EAAuB;AACtBD,MAAAA,MAAM,GAAGD,OAAO,CAACE,SAAR,CAAkBf,GAAlB,CAAsB,UAACgB,KAAD,EAAW;AACzC,YAAIC,SAAS,GAAG,EAAhB;;AAEA,YAAID,KAAK,CAACE,YAAV,EAAwB;AACvBD,UAAAA,SAAS,GAAGD,KAAK,CAACE,YAAN,CAAmBlB,GAAnB,CAAuB,UAACmB,QAAD;AAAA,mBAAcA,QAAQ,CAACC,EAAvB;AAAA,WAAvB,CAAZ;AACA;;AAED,gBAAQJ,KAAK,CAACI,EAAd,0CAAqBH,SAArB;AACA,OARQ,CAAT;AASA;;AAED,YAAQJ,OAAO,CAACO,EAAhB,0CAAuBlB,gBAAEmB,OAAF,CAAUP,MAAV,CAAvB;AACA,GAfW,CAAZ;AAiBA,SAAOZ,gBAAEoB,GAAF,CAAMpB,gBAAEmB,OAAF,CAAUV,GAAV,CAAN,CAAP;AACA,C,CAED;AACA;AACA;;;AACO,SAASY,sBAAT,CAAgCC,IAAhC,EAAsC;AAC5CA,EAAAA,IAAI,CAACC,QAAL,CAAcC,OAAd,CAAsB,UAACb,OAAD,EAAUc,KAAV,EAAoB;AACzCd,IAAAA,OAAO,CAACe,QAAR,GAAmBD,KAAnB;AACAd,IAAAA,OAAO,CAACc,KAAR,GAAgBA,KAAhB;AAEAd,IAAAA,OAAO,CAACC,MAAR,CAAeY,OAAf,CAAuB,UAACV,KAAD,EAAQW,KAAR,EAAkB;AACxCX,MAAAA,KAAK,CAACY,QAAN,GAAiBD,KAAjB;AACAX,MAAAA,KAAK,CAACW,KAAN,GAAcA,KAAd;AAEAX,MAAAA,KAAK,CAACC,SAAN,CAAgBS,OAAhB,CAAwB,UAACP,QAAD,EAAWQ,KAAX,EAAqB;AAC5CR,QAAAA,QAAQ,CAACS,QAAT,GAAoBD,KAApB;AACAR,QAAAA,QAAQ,CAACQ,KAAT,GAAiBA,KAAjB;AACA,OAHD;AAIA,KARD;AASA,GAbD;AAcA,C,CAED;AACA;;;AACO,SAASE,UAAT,CAAoBC,KAApB,EAA2B;AACjC,MAAMC,IAAI,GAAGD,KAAK,CAACC,IAAN,IAAc,EAA3B;AAEA,SAAOA,IAAI,CAAClC,OAAL,CAAa,gBAAb,MAAmC,CAAC,CAA3C;AACA,C,CAED;AACA;AACA;;;AACO,SAASmC,cAAT,CAAwBtB,gBAAxB,EAA0C;AAChD,MAAMG,OAAO,GAAGH,gBAAgB,CAACE,WAAjB,CAA6BqB,KAA7B,EAAhB;AAEA,SAAOC,OAAO,CACbrB,OAAO,IAAIA,OAAO,CAACE,SAAR,CAAkBoB,IAAlB,CAAuB,UAACnB,KAAD;AAAA,WAAWa,UAAU,CAACb,KAAD,CAArB;AAAA,GAAvB,CADE,CAAd;AAGA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASoB,cAAT,CAAwBC,GAAxB,EAAuD;AAAA,MAA1BC,WAA0B,uEAAZ;AAAA,WAAM,IAAN;AAAA,GAAY;;AAC7D,MAAIxC,KAAK,CAACC,OAAN,CAAcsC,GAAd,CAAJ,EAAwB;AACvB,WAAOA,GAAG,CAACrC,GAAJ,CAAQ,UAACuC,CAAD;AAAA,aAAOH,cAAc,CAACG,CAAD,EAAID,WAAJ,CAArB;AAAA,KAAR,CAAP;AACA,GAFD,MAEO,IACN,sBAAOD,GAAP,MAAe,QAAf,IACAA,GAAG,KAAK,IADR,IAEA,OAAOA,GAAP,KAAe,WAHT,EAIL;AACD,WAAOjC,MAAM,CAACC,IAAP,CAAYgC,GAAZ,EAAiB/B,MAAjB,CAAwB,UAACkC,GAAD,EAAMhC,GAAN,EAAc;AAC5C,6CAAYgC,GAAZ,yCAAkBhC,GAAlB,EAAwB4B,cAAc,CAACC,GAAG,CAAC7B,GAAD,CAAJ,EAAW8B,WAAX,CAAtC;AACA,KAFM,EAEJ,EAFI,CAAP;AAGA,GARM,MAQA,IAAI,OAAOD,GAAP,KAAe,QAAnB,EAA6B;AACnC,QAAMI,EAAE,GAAG,gDAAX;;AACA,QAAIA,EAAE,CAACC,IAAH,CAAQL,GAAR,KAAgBC,WAAW,CAACD,GAAD,CAA/B,EAAsC;AACrC,aAAO,EAAP;AACA;AACD;;AACD,SAAOA,GAAP;AACA","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("
|
|
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 () {
|
package/cjs/utils.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/utils.spec.js"],"names":["describe","test","url","expect","toEqual","testString","testString2","testString3","it","actual","toThrow","data","expected","beforeURL","afterURL","first","anArray","nestedObject","second"],"mappings":"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","sourcesContent":["import {\n\tgetHostname,\n\tgetShortURL,\n\tremoveMultiByteChars,\n\treplaceHostname,\n} from \"./utils.js\";\n\ndescribe(\"getShortURL()\", () => {\n\ttest(\"shorten a full url to a short one\", () => {\n\t\tconst url = \"http://client.salespreso.com/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n\n\ttest(\"not break an already short url\", () => {\n\t\tconst url = \"/api/users/1/\";\n\t\texpect(getShortURL(url)).toEqual(\"/api/users/1/\");\n\t});\n});\n\ndescribe(\"removeMultiByteChars()\", () => {\n\ttest(\"correctly strip offending multibyte characters from string\", () => {\n\t\tconst testString = \"SUZI LUCKâS CANTEENâ& COCKTAIL BAR\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"SUZI LUCKS CANTEEN & COCKTAIL BAR\",\n\t\t);\n\t});\n\n\ttest(\"sanitize urls correctly\", () => {\n\t\tconst testString = \"http://client.salespreso.com/api/users/1/â\";\n\t\tconst testString2 = \"/api/users/1/â\";\n\t\tconst testString3 = \"/api/users/1/?param=1&test=3&_r=4\";\n\t\texpect(removeMultiByteChars(testString)).toEqual(\n\t\t\t\"http://client.salespreso.com/api/users/1/\",\n\t\t);\n\t\texpect(removeMultiByteChars(testString2)).toEqual(\"/api/users/1/\");\n\t\texpect(removeMultiByteChars(testString3)).toEqual(\n\t\t\t\"/api/users/1/?param=1&test=3&_r=4\",\n\t\t);\n\t});\n});\n\ndescribe(\"getHostname()\", () => {\n\tit(\"throws an error if hostname isn't a string\", () => {\n\t\tconst actual = () => getHostname(null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"returns a hostname from a full URL\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/api/horses/1/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"returns a hostname from just the domain\", () => {\n\t\tconst actual = getHostname(\"https://www.horse.com/\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n\n\tit(\"just returns the hostname\", () => {\n\t\tconst actual = getHostname(\"www.horse.com\");\n\t\texpect(actual).toEqual(\"www.horse.com\");\n\t});\n});\n\ndescribe(\"replaceHostname()\", () => {\n\tit(\"throws an error if not from hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", null, \"brand.new.com\");\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"throws an error if not to hostname\", () => {\n\t\tconst actual = () => replaceHostname(\"foo\", \"old.url.com\", null);\n\t\texpect(actual).toThrow();\n\t});\n\n\tit(\"replaces hostname of a string\", () => {\n\t\tconst data = \"https://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"https://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"takes into account the protocol\", () => {\n\t\tconst data = \"http://old.url.com/api/appointments/1/\";\n\t\tconst expected = \"http://brand.new.com/api/appointments/1/\";\n\t\tconst actual = replaceHostname(\n\t\t\tdata,\n\t\t\t\"https://old.url.com/\",\n\t\t\t\"https://brand.new.com/\",\n\t\t);\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an array\", () => {\n\t\tconst data = [\n\t\t\t\"https://old.url.com/api/appointments/1/\",\n\t\t\t\"https://old.url.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst expected = [\n\t\t\t\"https://brand.new.com/api/appointments/1/\",\n\t\t\t\"https://brand.new.com/api/foo/1/bars/1/\",\n\t\t];\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"replaces hostnames in an object\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://old.url.com/api/appointments/1/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://brand.new.com/api/appointments/1/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"hostnames not related aren't affected\", () => {\n\t\tconst data = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\t\tconst expected = {\n\t\t\turl: \"https://some.otherurl.com/helloworld/\",\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"brand.new.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"updates data that is nested\", () => {\n\t\tconst beforeURL = \"https://old.url.com/api/appointments/1/\";\n\t\tconst afterURL = \"https://some.otherurl.com/api/appointments/1/\";\n\n\t\tconst data = {\n\t\t\tfirst: beforeURL,\n\t\t\tanArray: [beforeURL, beforeURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: beforeURL,\n\t\t\t\tsecond: beforeURL,\n\t\t\t},\n\t\t};\n\n\t\tconst expected = {\n\t\t\tfirst: afterURL,\n\t\t\tanArray: [afterURL, afterURL],\n\t\t\tnestedObject: {\n\t\t\t\tfirst: afterURL,\n\t\t\t\tsecond: afterURL,\n\t\t\t},\n\t\t};\n\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n\n\tit(\"does not affect hostname within a string\", () => {\n\t\tconst data = \"room:old.url.com:123\";\n\t\tconst expected = \"room:old.url.com:123\";\n\t\tconst actual = replaceHostname(data, \"old.url.com\", \"some.otherurl.com\");\n\t\texpect(actual).toEqual(expected);\n\t});\n});\n"],"file":"utils.spec.js"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livepreso/api",
|
|
3
3
|
"license": "UNLICENSED",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.47.0",
|
|
5
5
|
"description": "Everything to do with talking to the SalePreso API",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"module": "esm/index.js",
|
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
],
|
|
13
13
|
"keywords": [],
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@livepreso/log": "^1.3.
|
|
15
|
+
"@livepreso/log": "^1.3.11",
|
|
16
16
|
"ampersand-collection": "^2.0.0",
|
|
17
17
|
"ampersand-model": "^8.0.0",
|
|
18
18
|
"ampersand-rest-collection": "^6.0.0",
|
|
19
19
|
"process": "^0.11.10",
|
|
20
|
-
"bluebird": "
|
|
20
|
+
"bluebird": "~3.7.2",
|
|
21
21
|
"consola": "^2.11.0",
|
|
22
22
|
"dedent-js": "~1.0.1",
|
|
23
23
|
"lodash": "^4.17.4",
|
|
24
24
|
"moment": "^2.18.1",
|
|
25
25
|
"qs": "^6.4.0",
|
|
26
26
|
"superagent": "^3.5.2",
|
|
27
|
-
"superagent-bluebird-promise": "
|
|
27
|
+
"superagent-bluebird-promise": "~4.2.0",
|
|
28
28
|
"systemjs": "^6.9.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "../models/signer.js";
|
|
2
|
+
|
|
3
|
+
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @constructor
|
|
8
|
+
* @alias collections.SignerCollection
|
|
9
|
+
* @extends collections.BaseCollection
|
|
10
|
+
* @see models.Signer
|
|
11
|
+
*/
|
|
12
|
+
export const SignerCollection = BaseCollection.extend(
|
|
13
|
+
/** @lends collections.SignerCollection# */ {
|
|
14
|
+
model: "SignerModel",
|
|
15
|
+
},
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
register("SignerCollection", SignerCollection);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "../models/signing-request.js";
|
|
2
|
+
|
|
3
|
+
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @constructor
|
|
8
|
+
* @alias collections.SigningRequestCollection
|
|
9
|
+
* @extends collections.BaseCollection
|
|
10
|
+
* @see models.SigningRequest
|
|
11
|
+
*/
|
|
12
|
+
export const SigningRequestCollection = BaseCollection.extend(
|
|
13
|
+
/** @lends collections.SigningRequestCollection# */ {
|
|
14
|
+
model: "SigningRequestModel",
|
|
15
|
+
},
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
register("SigningRequestCollection", SigningRequestCollection);
|
package/src/collections.js
CHANGED
|
@@ -28,6 +28,8 @@ export * from "./collections/packs";
|
|
|
28
28
|
export * from "./collections/presets";
|
|
29
29
|
export * from "./collections/section-selections";
|
|
30
30
|
export * from "./collections/sections";
|
|
31
|
+
export * from "./collections/signing-requests";
|
|
32
|
+
export * from "./collections/signers";
|
|
31
33
|
export * from "./collections/slide-selections";
|
|
32
34
|
export * from "./collections/slides";
|
|
33
35
|
export * from "./collections/snapshots";
|
|
@@ -37,7 +39,6 @@ export * from "./collections/images";
|
|
|
37
39
|
export * from "./collections/users";
|
|
38
40
|
export * from "./collections/uploads";
|
|
39
41
|
export * from "./collections/appointment-editors.js";
|
|
40
|
-
export * from "./collections/appointment-duplicates.js";
|
|
41
42
|
export * from "./collections/tags.js";
|
|
42
43
|
export * from "./collections/teams.js";
|
|
43
44
|
export * from "./collections/templates.js";
|
package/src/fixtures.js
CHANGED
|
@@ -63,13 +63,10 @@ function makeFactory(name, Model, ignoreFields = []) {
|
|
|
63
63
|
|
|
64
64
|
const allModels = { ...models, ...presentationModels };
|
|
65
65
|
|
|
66
|
-
const factories = Object.keys(allModels).reduce(
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
{},
|
|
72
|
-
);
|
|
66
|
+
const factories = Object.keys(allModels).reduce((registered, key) => {
|
|
67
|
+
registered[key] = makeFactory(key, allModels[key]);
|
|
68
|
+
return registered;
|
|
69
|
+
}, {});
|
|
73
70
|
|
|
74
71
|
export function M(modelName, opts) {
|
|
75
72
|
if (!factories[modelName]) {
|
|
@@ -101,7 +98,9 @@ factories.AppointmentModel.attr("latest_snapshot", null)
|
|
|
101
98
|
.attr("appointmentsslide_set", [])
|
|
102
99
|
.after((appt) => {
|
|
103
100
|
if (!appt.latest_snapshot) {
|
|
104
|
-
appt.latest_snapshot = M("SnapshotModel", {
|
|
101
|
+
appt.latest_snapshot = M("SnapshotModel", {
|
|
102
|
+
appointment: appt,
|
|
103
|
+
});
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
if (!appt.latest_feed_data) {
|
|
@@ -125,7 +124,10 @@ factories.DeckModel.attr("approved_version", null)
|
|
|
125
124
|
}
|
|
126
125
|
});
|
|
127
126
|
|
|
128
|
-
factories.SnapshotModel.attr("creation_status", "ready")
|
|
127
|
+
factories.SnapshotModel.attr("creation_status", "ready").after((snapshot) => {
|
|
128
|
+
snapshot.created_date = new Date();
|
|
129
|
+
snapshot.modified_date = new Date();
|
|
130
|
+
});
|
|
129
131
|
|
|
130
132
|
factories.AutoAdjunctModel.attr("team", null)
|
|
131
133
|
.attr("enabled", true)
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import "./models.js";
|
|
2
|
-
import "./collections.js";
|
|
3
|
-
|
|
4
1
|
export function getAssetRoot(path) {
|
|
5
2
|
if (!path) {
|
|
6
3
|
return "";
|
|
@@ -11,3 +8,5 @@ export function getAssetRoot(path) {
|
|
|
11
8
|
export * from "./api";
|
|
12
9
|
export * from "./auth";
|
|
13
10
|
export * from "./presentation";
|
|
11
|
+
export * from "./models.js";
|
|
12
|
+
export * from "./collections.js";
|
|
@@ -40,12 +40,20 @@ export const ActivityItemModel = BaseModel.extend(
|
|
|
40
40
|
view_type: "string",
|
|
41
41
|
is_muted: "boolean",
|
|
42
42
|
appointment_is_deleted: "boolean",
|
|
43
|
+
signing_backend: "string",
|
|
44
|
+
status: "string",
|
|
45
|
+
concluded_date: "date",
|
|
46
|
+
signed_document: "string",
|
|
47
|
+
original_document: "string",
|
|
48
|
+
cancellation_reason: "string",
|
|
49
|
+
requested_by_contact: "boolean",
|
|
43
50
|
},
|
|
44
51
|
|
|
45
52
|
children: {
|
|
46
53
|
hostedpreso: "HostedPresoModel",
|
|
47
54
|
dispatch: "DispatchModel",
|
|
48
55
|
appointmentviewing: "AppointmentViewingModel",
|
|
56
|
+
signingrequest: "SigningRequestModel",
|
|
49
57
|
},
|
|
50
58
|
|
|
51
59
|
serialize() {
|
|
@@ -58,6 +58,7 @@ export const AppointmentModel = BaseModel.extend(
|
|
|
58
58
|
* @property {string} viewtype
|
|
59
59
|
* @property {boolean} support_mode
|
|
60
60
|
* @property {boolean} is_muted
|
|
61
|
+
* @property {boolean} is_signing_enabled
|
|
61
62
|
* @property {date} no_edit_after
|
|
62
63
|
* @property {date} no_share_after
|
|
63
64
|
* @property {date} no_delete_after
|
|
@@ -83,6 +84,7 @@ export const AppointmentModel = BaseModel.extend(
|
|
|
83
84
|
viewtype: "string",
|
|
84
85
|
support_mode: "boolean",
|
|
85
86
|
is_muted: "boolean",
|
|
87
|
+
is_signing_enabled: "boolean",
|
|
86
88
|
no_edit_after: "date",
|
|
87
89
|
no_share_after: "date",
|
|
88
90
|
no_delete_after: "date",
|
|
@@ -377,6 +379,7 @@ export const AppointmentModel = BaseModel.extend(
|
|
|
377
379
|
preset: this._retrieveURL(appointment.preset),
|
|
378
380
|
locks: appointment.locks,
|
|
379
381
|
is_muted: appointment.is_muted,
|
|
382
|
+
is_signing_enabled: appointment.is_signing_enabled,
|
|
380
383
|
no_edit_after: appointment.no_edit_after,
|
|
381
384
|
no_share_after: appointment.no_share_after,
|
|
382
385
|
no_delete_after: appointment.no_delete_after,
|
|
@@ -59,6 +59,7 @@ export const DeckVersionModel = BaseModel.extend(
|
|
|
59
59
|
upgrade_description: "string",
|
|
60
60
|
friendly_release_notes: "string",
|
|
61
61
|
has_editable_share_support: "boolean",
|
|
62
|
+
has_signing_support: "boolean",
|
|
62
63
|
point_in_time_share_policy: "string",
|
|
63
64
|
tags: "array",
|
|
64
65
|
cmsvalkey_set: "array",
|
|
@@ -26,6 +26,7 @@ export const ManifestJSONModel = BaseModel.extend(
|
|
|
26
26
|
* @property {object} dimensions
|
|
27
27
|
* @property {object} pdfpreferences
|
|
28
28
|
* @property {boolean} has_editable_share_support
|
|
29
|
+
* @property {boolean} has_signing_support
|
|
29
30
|
* @property {boolean} notify_salesperson_after_feeds_fetched
|
|
30
31
|
* @property {boolean} require_verification
|
|
31
32
|
* @property {boolean} companywide_editable
|
|
@@ -78,6 +79,10 @@ export const ManifestJSONModel = BaseModel.extend(
|
|
|
78
79
|
type: "boolean",
|
|
79
80
|
default: false,
|
|
80
81
|
},
|
|
82
|
+
has_signing_support: {
|
|
83
|
+
type: "boolean",
|
|
84
|
+
default: false,
|
|
85
|
+
},
|
|
81
86
|
point_in_time_share_policy: {
|
|
82
87
|
type: "string",
|
|
83
88
|
},
|
|
@@ -337,6 +342,10 @@ ManifestJSONModel.createFromProject = function (projectFile) {
|
|
|
337
342
|
projectFile.has_editable_share_support;
|
|
338
343
|
}
|
|
339
344
|
|
|
345
|
+
if (projectFile.has_signing_support) {
|
|
346
|
+
manifest.has_signing_support = projectFile.has_signing_support;
|
|
347
|
+
}
|
|
348
|
+
|
|
340
349
|
if (projectFile.point_in_time_share_policy) {
|
|
341
350
|
manifest.point_in_time_share_policy =
|
|
342
351
|
projectFile.point_in_time_share_policy;
|
package/src/models/preset.js
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "../models/contact.js";
|
|
2
|
+
|
|
3
|
+
import { BaseModel } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @constructor
|
|
8
|
+
* @alias models.Signer
|
|
9
|
+
* @extends models.BaseModel
|
|
10
|
+
*/
|
|
11
|
+
export const SignerModel = BaseModel.extend(
|
|
12
|
+
/** @lends models.SignerModel# */ {
|
|
13
|
+
// modelName: "signers",
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @property {string} first_name
|
|
17
|
+
* @property {string} last_name
|
|
18
|
+
* @property {string} full_name
|
|
19
|
+
* @property {string} backend_config
|
|
20
|
+
*/
|
|
21
|
+
props: {
|
|
22
|
+
first_name: "string",
|
|
23
|
+
last_name: "string",
|
|
24
|
+
full_name: "string",
|
|
25
|
+
backend_config: "string",
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @property {models.ContactModel} contact
|
|
30
|
+
*/
|
|
31
|
+
children: {
|
|
32
|
+
contact: "ContactModel",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
register("SignerModel", SignerModel);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import "./customer.js";
|
|
2
|
+
|
|
3
|
+
import { BaseModel } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
|
+
|
|
6
|
+
import "../collections/signers.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @constructor
|
|
10
|
+
* @alias models.SigningRequestModel
|
|
11
|
+
* @extends models.BaseModel
|
|
12
|
+
*/
|
|
13
|
+
export const SigningRequestModel = BaseModel.extend(
|
|
14
|
+
/** @lends models.SigningRequestModel# */ {
|
|
15
|
+
modelName: "signingrequests",
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @property {date} created_date
|
|
19
|
+
* @property {date} modified_date
|
|
20
|
+
* @property {date} signed_date
|
|
21
|
+
* @property {string} signing_backend
|
|
22
|
+
* @property {string} status
|
|
23
|
+
* @property {string} original_document
|
|
24
|
+
* @property {string} signed_document
|
|
25
|
+
* @property {array} choicelist
|
|
26
|
+
*/
|
|
27
|
+
props: {
|
|
28
|
+
created_date: "date",
|
|
29
|
+
modified_date: "date",
|
|
30
|
+
signed_date: "date",
|
|
31
|
+
signing_backend: "string",
|
|
32
|
+
status: "string",
|
|
33
|
+
original_document: "string",
|
|
34
|
+
signed_document: "string",
|
|
35
|
+
choicelist: "array",
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @property {collections.SignerCollection} signer_set
|
|
40
|
+
*/
|
|
41
|
+
collections: {
|
|
42
|
+
signer_set: "SignerCollection",
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @property {models.SnapshotModel} snapshot
|
|
47
|
+
* @property {models.UserModel} requested_by
|
|
48
|
+
*/
|
|
49
|
+
children: {
|
|
50
|
+
snapshot: "SnapshotModel",
|
|
51
|
+
requested_by: "UserModel",
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
register("SigningRequestModel", SigningRequestModel);
|
package/src/models/snapshot.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "./appointment.js";
|
|
2
2
|
|
|
3
3
|
import { BaseModel } from "./base.js";
|
|
4
|
+
import Promise from "bluebird";
|
|
4
5
|
import { register } from "../state-register.js";
|
|
5
6
|
import { sanitizeBase64 } from "../utils.js";
|
|
6
7
|
|
|
@@ -16,11 +17,15 @@ export const SnapshotModel = BaseModel.extend(
|
|
|
16
17
|
/**
|
|
17
18
|
* @property {object} context
|
|
18
19
|
* @property {boolean} creation_status
|
|
20
|
+
* @property {date} created_date
|
|
21
|
+
* @property {date} modified_date
|
|
19
22
|
*/
|
|
20
23
|
props: {
|
|
21
24
|
context: "object",
|
|
22
25
|
creation_status: "string",
|
|
23
26
|
force_requires_capture: "boolean",
|
|
27
|
+
created_date: "date",
|
|
28
|
+
modified_date: "date",
|
|
24
29
|
},
|
|
25
30
|
|
|
26
31
|
/**
|
|
@@ -30,6 +35,20 @@ export const SnapshotModel = BaseModel.extend(
|
|
|
30
35
|
appointment: "AppointmentModel",
|
|
31
36
|
},
|
|
32
37
|
|
|
38
|
+
waitForReady(opts = {}, attempts = 20) {
|
|
39
|
+
if (attempts === 0) {
|
|
40
|
+
return Promise.reject();
|
|
41
|
+
}
|
|
42
|
+
return this.fetch(opts).then(() => {
|
|
43
|
+
if (["ready", "failed"].indexOf(this.creation_status) > -1) {
|
|
44
|
+
return Promise.resolve();
|
|
45
|
+
}
|
|
46
|
+
return Promise.delay(1000).then(() =>
|
|
47
|
+
this.waitForReady(opts, attempts - 1),
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
|
|
33
52
|
toServer() {
|
|
34
53
|
const data = {
|
|
35
54
|
context: JSON.stringify(
|
package/src/models.js
CHANGED
|
@@ -44,6 +44,8 @@ export * from "./models/room";
|
|
|
44
44
|
export * from "./models/salesforce-lookup.js";
|
|
45
45
|
export * from "./models/section";
|
|
46
46
|
export * from "./models/section-selection";
|
|
47
|
+
export * from "./models/signing-request";
|
|
48
|
+
export * from "./models/signer";
|
|
47
49
|
export * from "./models/slide";
|
|
48
50
|
export * from "./models/slide-selection";
|
|
49
51
|
export * from "./models/snapshot";
|
|
@@ -56,7 +58,6 @@ export * from "./models/upload.js";
|
|
|
56
58
|
export * from "./models/user";
|
|
57
59
|
export * from "./models/onshare";
|
|
58
60
|
export * from "./models/appointment-editor.js";
|
|
59
|
-
export * from "./models/appointment-duplicate.js";
|
|
60
61
|
export * from "./models/appointment-stats.js";
|
|
61
62
|
export * from "./models/appointment-viewing.js";
|
|
62
63
|
export * from "./models/appointment-deckversion-tags.js";
|
package/src/utils.spec.js
CHANGED
|
@@ -6,26 +6,26 @@ import {
|
|
|
6
6
|
} from "./utils.js";
|
|
7
7
|
|
|
8
8
|
describe("getShortURL()", () => {
|
|
9
|
-
test("shorten a full url to a short one",
|
|
9
|
+
test("shorten a full url to a short one", () => {
|
|
10
10
|
const url = "http://client.salespreso.com/api/users/1/";
|
|
11
11
|
expect(getShortURL(url)).toEqual("/api/users/1/");
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
test("not break an already short url",
|
|
14
|
+
test("not break an already short url", () => {
|
|
15
15
|
const url = "/api/users/1/";
|
|
16
16
|
expect(getShortURL(url)).toEqual("/api/users/1/");
|
|
17
17
|
});
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
describe("removeMultiByteChars()", () => {
|
|
21
|
-
test("correctly strip offending multibyte characters from string",
|
|
21
|
+
test("correctly strip offending multibyte characters from string", () => {
|
|
22
22
|
const testString = "SUZI LUCKâS CANTEENâ& COCKTAIL BAR";
|
|
23
23
|
expect(removeMultiByteChars(testString)).toEqual(
|
|
24
24
|
"SUZI LUCKS CANTEEN & COCKTAIL BAR",
|
|
25
25
|
);
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
test("
|
|
28
|
+
test("sanitize urls correctly", () => {
|
|
29
29
|
const testString = "http://client.salespreso.com/api/users/1/â";
|
|
30
30
|
const testString2 = "/api/users/1/â";
|
|
31
31
|
const testString3 = "/api/users/1/?param=1&test=3&_r=4";
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.AppointmentDuplicateCollection = void 0;
|
|
7
|
-
require("../models/appointment-duplicate.js");
|
|
8
|
-
var _base = require("./base.js");
|
|
9
|
-
var _stateRegister = require("../state-register.js");
|
|
10
|
-
/**
|
|
11
|
-
* @constructor
|
|
12
|
-
* @alias collections.AppointmentDuplicateCollection
|
|
13
|
-
* @extends collections.BaseCollection
|
|
14
|
-
* @see models.AppointmentDuplicateModel
|
|
15
|
-
*/
|
|
16
|
-
var AppointmentDuplicateCollection = exports.AppointmentDuplicateCollection = _base.BaseCollection.extend( /** @lends collections.AppointmentDuplicateCollection# */{
|
|
17
|
-
comparator: "sequence",
|
|
18
|
-
model: "AppointmentDuplicateModel"
|
|
19
|
-
});
|
|
20
|
-
(0, _stateRegister.register)("AppointmentDuplicateCollection", AppointmentDuplicateCollection);
|
|
21
|
-
//# sourceMappingURL=appointment-duplicates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"appointment-duplicates.js","names":["require","_base","_stateRegister","AppointmentDuplicateCollection","exports","BaseCollection","extend","comparator","model","register"],"sources":["../../src/collections/appointment-duplicates.js"],"sourcesContent":["import \"../models/appointment-duplicate.js\";\n\nimport { BaseCollection } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias collections.AppointmentDuplicateCollection\n * @extends collections.BaseCollection\n * @see models.AppointmentDuplicateModel\n */\nexport const AppointmentDuplicateCollection = BaseCollection.extend(\n\t/** @lends collections.AppointmentDuplicateCollection# */ {\n\t\tcomparator: \"sequence\",\n\t\tmodel: \"AppointmentDuplicateModel\",\n\t},\n);\n\nregister(\"AppointmentDuplicateCollection\", AppointmentDuplicateCollection);\n"],"mappings":";;;;;;AAAAA,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMG,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAGE,oBAAc,CAACC,MAAM,EAClE,yDAA0D;EACzDC,UAAU,EAAE,UAAU;EACtBC,KAAK,EAAE;AACR,CACD,CAAC;AAED,IAAAC,uBAAQ,EAAC,gCAAgC,EAAEN,8BAA8B,CAAC"}
|