@kalisio/kdk 2.1.6 → 2.1.7
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/.codeclimate.yml +34 -34
- package/.nycrc +5 -5
- package/.travis.doc.sh +8 -8
- package/.travis.test.sh +40 -40
- package/CHANGELOG.md +727 -727
- package/LICENSE +21 -21
- package/README.md +32 -32
- package/core/api/application.js +591 -591
- package/core/api/authentication.js +203 -203
- package/core/api/db.js +226 -226
- package/core/api/hooks/hooks.authentication.js +73 -73
- package/core/api/hooks/hooks.authorisations.js +376 -376
- package/core/api/hooks/hooks.groups.js +48 -48
- package/core/api/hooks/hooks.logger.js +26 -26
- package/core/api/hooks/hooks.model.js +290 -290
- package/core/api/hooks/hooks.organisations.js +156 -156
- package/core/api/hooks/hooks.push.js +56 -56
- package/core/api/hooks/hooks.query.js +246 -246
- package/core/api/hooks/hooks.schemas.js +73 -73
- package/core/api/hooks/hooks.service.js +78 -78
- package/core/api/hooks/hooks.storage.js +36 -36
- package/core/api/hooks/hooks.users.js +261 -261
- package/core/api/hooks/index.js +12 -12
- package/core/api/index.js +21 -21
- package/core/api/marshall.js +90 -90
- package/core/api/models/groups.model.mongodb.js +8 -8
- package/core/api/models/organisations.model.mongodb.js +3 -3
- package/core/api/models/tags.model.mongodb.js +10 -10
- package/core/api/models/users.model.mongodb.js +10 -10
- package/core/api/services/account/account.hooks.js +37 -37
- package/core/api/services/account/account.service.js +117 -117
- package/core/api/services/authorisations/authorisations.hooks.js +33 -33
- package/core/api/services/authorisations/authorisations.service.js +139 -139
- package/core/api/services/databases/databases.hooks.js +36 -36
- package/core/api/services/databases/databases.service.js +5 -5
- package/core/api/services/groups/groups.hooks.js +31 -31
- package/core/api/services/index.js +126 -126
- package/core/api/services/mailer/mailer.hooks.js +35 -35
- package/core/api/services/mailer/mailer.service.js +11 -11
- package/core/api/services/organisations/organisations.hooks.js +31 -31
- package/core/api/services/organisations/organisations.service.js +86 -86
- package/core/api/services/push/push.hooks.js +35 -35
- package/core/api/services/push/push.service.js +12 -12
- package/core/api/services/storage/storage.hooks.js +35 -35
- package/core/api/services/storage/storage.service.js +29 -29
- package/core/api/services/tags/tags.hooks.js +31 -31
- package/core/api/services/users/users.hooks.js +75 -75
- package/core/api/utils.js +11 -11
- package/core/client/api.js +293 -293
- package/core/client/capabilities.js +22 -22
- package/core/client/components/KAction.vue +393 -393
- package/core/client/components/KAvatar.vue +129 -129
- package/core/client/components/KBlock.vue +67 -67
- package/core/client/components/KChip.vue +68 -68
- package/core/client/components/KChipsPane.vue +103 -103
- package/core/client/components/KContent.vue +105 -105
- package/core/client/components/KDialog.vue +160 -160
- package/core/client/components/KExpandable.vue +49 -49
- package/core/client/components/KLogo.vue +32 -32
- package/core/client/components/KModal.vue +173 -173
- package/core/client/components/KPanel.vue +64 -64
- package/core/client/components/KScrollArea.vue +88 -88
- package/core/client/components/KSponsor.vue +40 -40
- package/core/client/components/KStamp.vue +65 -65
- package/core/client/components/KStore.vue +102 -102
- package/core/client/components/KTextArea.vue +143 -143
- package/core/client/components/KTree.vue +31 -31
- package/core/client/components/KVersion.vue +19 -19
- package/core/client/components/account/KAccount.vue +68 -68
- package/core/client/components/account/KDeleteAccountManager.vue +62 -62
- package/core/client/components/account/KEmailManager.vue +128 -128
- package/core/client/components/account/KPasswordManager.vue +90 -90
- package/core/client/components/account/KProfile.vue +109 -109
- package/core/client/components/account/KResetPassword.vue +120 -120
- package/core/client/components/account/KSendResetPassword.vue +97 -97
- package/core/client/components/account/KSubscription.vue +71 -71
- package/core/client/components/account/KSubscriptionsManager.vue +46 -46
- package/core/client/components/account/KVerifyEmailManager.vue +105 -105
- package/core/client/components/account/index.js +7 -7
- package/core/client/components/app/KAbout.vue +98 -98
- package/core/client/components/app/KHome.vue +12 -12
- package/core/client/components/app/KPlatform.vue +55 -55
- package/core/client/components/app/KSettings.vue +42 -42
- package/core/client/components/app/KTerms.vue +41 -41
- package/core/client/components/app/KTour.vue +448 -448
- package/core/client/components/app/KWelcome.vue +133 -133
- package/core/client/components/app/index.js +11 -11
- package/core/client/components/chart/KChart.vue +197 -197
- package/core/client/components/chart/KDataTable.vue +183 -183
- package/core/client/components/chart/KStatisticsChart.vue +94 -94
- package/core/client/components/chart/KTimeSeriesChart.vue +431 -431
- package/core/client/components/chart/index.js +9 -9
- package/core/client/components/collection/KBoard.vue +65 -65
- package/core/client/components/collection/KCard.vue +196 -196
- package/core/client/components/collection/KCardSection.vue +52 -52
- package/core/client/components/collection/KColumn.vue +229 -225
- package/core/client/components/collection/KFilter.vue +158 -158
- package/core/client/components/collection/KGrid.vue +121 -121
- package/core/client/components/collection/KHistory.vue +118 -112
- package/core/client/components/collection/KHistoryEntry.vue +111 -111
- package/core/client/components/collection/KItem.vue +128 -128
- package/core/client/components/collection/KList.vue +135 -135
- package/core/client/components/collection/KSorter.vue +46 -46
- package/core/client/components/collection/KTable.vue +238 -238
- package/core/client/components/collection/index.js +19 -19
- package/core/client/components/editor/KEditor.vue +52 -52
- package/core/client/components/editor/KModalEditor.vue +96 -96
- package/core/client/components/editor/index.js +7 -7
- package/core/client/components/form/KChipsField.vue +162 -162
- package/core/client/components/form/KColorField.vue +69 -69
- package/core/client/components/form/KColorScaleField.vue +86 -86
- package/core/client/components/form/KDateTimeRangeField.vue +65 -65
- package/core/client/components/form/KDatetimeField.vue +70 -70
- package/core/client/components/form/KEmailField.vue +33 -33
- package/core/client/components/form/KFileField.vue +161 -161
- package/core/client/components/form/KForm.vue +247 -247
- package/core/client/components/form/KIconField.vue +101 -101
- package/core/client/components/form/KItemField.vue +123 -123
- package/core/client/components/form/KNumberField.vue +33 -33
- package/core/client/components/form/KOptionsField.vue +63 -63
- package/core/client/components/form/KPasswordField.vue +57 -57
- package/core/client/components/form/KPhoneField.vue +32 -32
- package/core/client/components/form/KPropertyItemField.vue +119 -119
- package/core/client/components/form/KRoleField.vue +60 -60
- package/core/client/components/form/KSelectField.vue +143 -143
- package/core/client/components/form/KTextField.vue +48 -48
- package/core/client/components/form/KTextareaField.vue +88 -88
- package/core/client/components/form/KToggleField.vue +46 -46
- package/core/client/components/form/KTokenField.vue +80 -80
- package/core/client/components/form/KUnitField.vue +57 -57
- package/core/client/components/form/KUrlField.vue +32 -32
- package/core/client/components/form/KView.vue +118 -118
- package/core/client/components/form/index.js +7 -7
- package/core/client/components/index.js +48 -48
- package/core/client/components/input/KColorChooser.vue +63 -63
- package/core/client/components/input/KIconChooser.vue +308 -308
- package/core/client/components/input/KOptionsChooser.vue +122 -122
- package/core/client/components/input/KPalette.vue +40 -40
- package/core/client/components/input/index.js +11 -11
- package/core/client/components/layout/KFab.vue +113 -113
- package/core/client/components/layout/KLayout.vue +64 -64
- package/core/client/components/layout/KOpener.vue +140 -140
- package/core/client/components/layout/KPage.vue +320 -320
- package/core/client/components/layout/KPageSticky.vue +53 -53
- package/core/client/components/layout/KWindow.vue +443 -443
- package/core/client/components/layout/index.js +13 -13
- package/core/client/components/media/KColorScale.vue +254 -254
- package/core/client/components/media/KImageViewer.vue +44 -44
- package/core/client/components/media/KMarkdownViewer.vue +55 -55
- package/core/client/components/media/KMediaBrowser.vue +340 -340
- package/core/client/components/media/KShape.vue +120 -120
- package/core/client/components/media/index.js +13 -13
- package/core/client/components/menu/KMenu.vue +147 -147
- package/core/client/components/menu/KRadialFab.vue +122 -122
- package/core/client/components/menu/KRadialFabItem.vue +73 -73
- package/core/client/components/menu/index.js +9 -9
- package/core/client/components/screen/KEndpointScreen.vue +80 -80
- package/core/client/components/screen/KErrorScreen.vue +24 -24
- package/core/client/components/screen/KLoginScreen.vue +84 -84
- package/core/client/components/screen/KLogoutScreen.vue +20 -20
- package/core/client/components/screen/KRegisterScreen.vue +114 -114
- package/core/client/components/screen/KScreen.vue +106 -106
- package/core/client/components/screen/KScreenFooter.vue +32 -32
- package/core/client/components/screen/KScreenHeader.vue +17 -17
- package/core/client/components/screen/index.js +5 -5
- package/core/client/components/team/KAddMember.vue +375 -375
- package/core/client/components/team/KAddTag.vue +121 -121
- package/core/client/components/team/KChangeRole.vue +118 -118
- package/core/client/components/team/KGroupCard.vue +110 -110
- package/core/client/components/team/KGroupsActivity.vue +66 -66
- package/core/client/components/team/KJoinGroup.vue +132 -132
- package/core/client/components/team/KMemberCard.vue +328 -328
- package/core/client/components/team/KMemberFilter.vue +49 -49
- package/core/client/components/team/KMembersActivity.vue +126 -126
- package/core/client/components/team/KOrganisationsActivity.vue +53 -53
- package/core/client/components/team/KTagCard.vue +72 -72
- package/core/client/components/team/KTagsActivity.vue +61 -61
- package/core/client/components/team/index.js +9 -9
- package/core/client/components/time/KAbsoluteTimeRange.vue +183 -183
- package/core/client/components/time/KDate.vue +75 -75
- package/core/client/components/time/KDateTime.vue +172 -172
- package/core/client/components/time/KDateTimeRange.vue +118 -118
- package/core/client/components/time/KRelativeTimeRanges.vue +193 -193
- package/core/client/components/time/KTime.vue +74 -74
- package/core/client/components/time/index.js +7 -7
- package/core/client/components/viewer/KModalViewer.vue +47 -47
- package/core/client/components/viewer/KViewer.vue +30 -30
- package/core/client/composables/activity.js +67 -67
- package/core/client/composables/collection.js +181 -181
- package/core/client/composables/index.js +8 -8
- package/core/client/composables/pwa.js +71 -71
- package/core/client/composables/schema.js +64 -64
- package/core/client/composables/selection.js +88 -88
- package/core/client/composables/session.js +172 -172
- package/core/client/composables/store.js +49 -49
- package/core/client/composables/version.js +47 -47
- package/core/client/events.js +3 -3
- package/core/client/filter.js +60 -60
- package/core/client/guards.js +101 -101
- package/core/client/hooks/hooks.events.js +7 -7
- package/core/client/hooks/hooks.logger.js +24 -24
- package/core/client/hooks/hooks.users.js +22 -22
- package/core/client/hooks/index.js +3 -3
- package/core/client/i18n/core_en.json +845 -845
- package/core/client/i18n/core_fr.json +843 -843
- package/core/client/i18n.js +88 -88
- package/core/client/index.js +84 -84
- package/core/client/layout.js +323 -323
- package/core/client/local-storage.js +28 -28
- package/core/client/mixins/index.js +12 -12
- package/core/client/mixins/mixin.account.js +61 -61
- package/core/client/mixins/mixin.base-activity.js +232 -232
- package/core/client/mixins/mixin.base-collection.js +162 -162
- package/core/client/mixins/mixin.base-context.js +54 -54
- package/core/client/mixins/mixin.base-editor.js +194 -194
- package/core/client/mixins/mixin.base-field.js +105 -105
- package/core/client/mixins/mixin.base-item.js +166 -166
- package/core/client/mixins/mixin.base-modal.js +36 -36
- package/core/client/mixins/mixin.base-viewer.js +43 -43
- package/core/client/mixins/mixin.object-proxy.js +46 -46
- package/core/client/mixins/mixin.schema-proxy.js +97 -97
- package/core/client/mixins/mixin.service.js +22 -22
- package/core/client/reader.js +65 -65
- package/core/client/readers/index.js +3 -3
- package/core/client/readers/reader.blob.js +39 -39
- package/core/client/readers/reader.csv.js +36 -36
- package/core/client/readers/reader.json.js +34 -34
- package/core/client/search.js +47 -47
- package/core/client/services/index.js +49 -49
- package/core/client/services/local-settings.service.js +67 -67
- package/core/client/sorter.js +31 -31
- package/core/client/storage.js +102 -102
- package/core/client/store.js +39 -39
- package/core/client/theme.js +40 -40
- package/core/client/time.js +167 -167
- package/core/client/units.js +218 -218
- package/core/client/utils/index.js +203 -203
- package/core/client/utils/utils.account.js +52 -52
- package/core/client/utils/utils.colors.js +36 -36
- package/core/client/utils/utils.content.js +185 -185
- package/core/client/utils/utils.locale.js +28 -28
- package/core/client/utils/utils.platform.js +11 -11
- package/core/client/utils/utils.push.js +53 -53
- package/core/client/utils/utils.pwa.js +62 -62
- package/core/client/utils/utils.session.js +89 -89
- package/core/common/errors.js +1 -1
- package/core/common/index.js +10 -10
- package/core/common/permissions.js +318 -318
- package/core/common/schema.js +35 -35
- package/core/common/schemas/groups.create.json +28 -28
- package/core/common/schemas/groups.update.json +28 -28
- package/core/common/schemas/organisations.create.json +28 -28
- package/core/common/schemas/organisations.update.json +49 -49
- package/core/common/schemas/settings.update.json +234 -234
- package/core/common/schemas/tags.create.json +35 -35
- package/core/common/schemas/tags.update.json +35 -35
- package/core/common/schemas/users.update-profile.json +33 -33
- package/core/common/utils.js +45 -45
- package/core.api.js +5 -5
- package/core.client.js +5 -5
- package/core.common.js +1 -1
- package/coverage/core/api/application.js.html +272 -332
- package/coverage/core/api/authentication.js.html +56 -56
- package/coverage/core/api/db.js.html +132 -144
- package/coverage/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
- package/coverage/core/api/hooks/hooks.authorisations.js.html +187 -199
- package/coverage/core/api/hooks/{hooks.push.js.html → hooks.devices.js.html} +56 -77
- package/coverage/core/api/hooks/hooks.groups.js.html +7 -7
- package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
- package/coverage/core/api/hooks/hooks.model.js.html +160 -166
- package/coverage/core/api/hooks/hooks.organisations.js.html +406 -136
- package/coverage/core/api/hooks/hooks.pusher.js.html +730 -0
- package/coverage/core/api/hooks/hooks.query.js.html +129 -129
- package/coverage/core/api/hooks/hooks.schemas.js.html +22 -82
- package/coverage/core/api/hooks/hooks.service.js.html +13 -13
- package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
- package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/core/api/hooks/hooks.users.js.html +126 -63
- package/coverage/core/api/hooks/index.html +119 -74
- package/coverage/core/api/hooks/index.js.html +26 -17
- package/coverage/core/api/index.html +26 -41
- package/coverage/core/api/index.js.html +17 -17
- package/coverage/core/api/marshall.js.html +21 -21
- package/coverage/core/api/models/groups.model.mongodb.js.html +8 -8
- package/coverage/core/api/models/index.html +1 -1
- package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/tags.model.mongodb.js.html +10 -10
- package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/core/api/oauth2-handler.js.html +202 -0
- package/coverage/core/api/oauth2-verifier.js.html +355 -0
- package/coverage/core/api/services/account/account.hooks.js.html +4 -4
- package/coverage/core/api/services/account/account.service.js.html +15 -12
- package/coverage/core/api/services/account/index.html +10 -10
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +77 -77
- package/coverage/core/api/services/authorisations/index.html +1 -1
- package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/core/api/services/databases/index.html +1 -1
- package/coverage/core/api/services/devices/devices.hooks.js.html +190 -0
- package/coverage/core/api/services/devices/devices.service.js.html +382 -0
- package/coverage/core/api/services/devices/index.html +131 -0
- package/coverage/core/api/services/groups/groups.hooks.js.html +13 -7
- package/coverage/core/api/services/groups/index.html +5 -5
- package/coverage/core/api/services/index.html +19 -19
- package/coverage/core/api/services/index.js.html +80 -83
- package/coverage/core/api/services/mailer/index.html +1 -1
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/core/api/services/organisations/index.html +11 -11
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/core/api/services/organisations/organisations.service.js.html +32 -56
- package/coverage/{lcov-report/core/api/services/push → core/api/services/pusher}/index.html +36 -21
- package/coverage/{lcov-report/core/api/services/push/push.service.js.html → core/api/services/pusher/pusher.channels.js.html} +11 -38
- package/coverage/{lcov-report/core/api/services/push/push.hooks.js.html → core/api/services/pusher/pusher.hooks.js.html} +8 -8
- package/coverage/core/api/services/pusher/pusher.service.js.html +1420 -0
- package/coverage/core/api/services/storage/index.html +1 -1
- package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/core/api/services/storage/storage.service.js.html +22 -22
- package/coverage/core/api/services/tags/index.html +7 -7
- package/coverage/core/api/services/tags/tags.hooks.js.html +54 -12
- package/coverage/core/api/services/users/index.html +1 -1
- package/coverage/core/api/services/users/users.hooks.js.html +3 -3
- package/coverage/core/common/errors.js.html +2 -2
- package/coverage/core/common/index.html +19 -19
- package/coverage/core/common/index.js.html +11 -11
- package/coverage/core/common/permissions.js.html +249 -273
- package/coverage/core/common/schema.js.html +23 -23
- package/coverage/core/common/utils.js.html +14 -14
- package/coverage/index.html +131 -116
- package/coverage/lcov-report/core/api/application.js.html +272 -332
- package/coverage/lcov-report/core/api/authentication.js.html +56 -56
- package/coverage/lcov-report/core/api/db.js.html +132 -144
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +187 -199
- package/coverage/lcov-report/core/api/hooks/{hooks.push.js.html → hooks.devices.js.html} +56 -77
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +160 -166
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +406 -136
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +730 -0
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +129 -129
- package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +22 -82
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +13 -13
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +126 -63
- package/coverage/lcov-report/core/api/hooks/index.html +119 -74
- package/coverage/lcov-report/core/api/hooks/index.js.html +26 -17
- package/coverage/lcov-report/core/api/index.html +26 -41
- package/coverage/lcov-report/core/api/index.js.html +17 -17
- package/coverage/lcov-report/core/api/marshall.js.html +21 -21
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +8 -8
- package/coverage/lcov-report/core/api/models/index.html +1 -1
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +10 -10
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +202 -0
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +355 -0
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +4 -4
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +15 -12
- package/coverage/lcov-report/core/api/services/account/index.html +10 -10
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +77 -77
- package/coverage/lcov-report/core/api/services/authorisations/index.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +190 -0
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +382 -0
- package/coverage/lcov-report/core/api/services/devices/index.html +131 -0
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +13 -7
- package/coverage/lcov-report/core/api/services/groups/index.html +5 -5
- package/coverage/lcov-report/core/api/services/index.html +19 -19
- package/coverage/lcov-report/core/api/services/index.js.html +80 -83
- package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/index.html +11 -11
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +32 -56
- package/coverage/{core/api/services/push → lcov-report/core/api/services/pusher}/index.html +36 -21
- package/coverage/{core/api/services/push/push.service.js.html → lcov-report/core/api/services/pusher/pusher.channels.js.html} +11 -38
- package/coverage/{core/api/services/push/push.hooks.js.html → lcov-report/core/api/services/pusher/pusher.hooks.js.html} +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1420 -0
- package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +22 -22
- package/coverage/lcov-report/core/api/services/tags/index.html +7 -7
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +54 -12
- package/coverage/lcov-report/core/api/services/users/index.html +1 -1
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +3 -3
- package/coverage/lcov-report/core/common/errors.js.html +2 -2
- package/coverage/lcov-report/core/common/index.html +19 -19
- package/coverage/lcov-report/core/common/index.js.html +11 -11
- package/coverage/lcov-report/core/common/permissions.js.html +249 -273
- package/coverage/lcov-report/core/common/schema.js.html +23 -23
- package/coverage/lcov-report/core/common/utils.js.html +14 -14
- package/coverage/lcov-report/index.html +131 -116
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +48 -48
- package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +51 -51
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +40 -46
- package/coverage/lcov-report/map/api/hooks/index.html +49 -49
- package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
- package/coverage/lcov-report/map/api/index.html +26 -26
- package/coverage/lcov-report/map/api/index.js.html +38 -38
- package/coverage/lcov-report/map/api/marshall.js.html +17 -17
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +11 -5
- package/coverage/lcov-report/map/api/models/index.html +5 -5
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +17 -17
- package/coverage/lcov-report/map/api/services/index.js.html +81 -90
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/lcov-report/map/common/errors.js.html +16 -16
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +53 -53
- package/coverage/lcov-report/map/common/grid.js.html +298 -298
- package/coverage/lcov-report/map/common/index.html +148 -148
- package/coverage/lcov-report/map/common/index.js.html +67 -67
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +68 -68
- package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +60 -60
- package/coverage/lcov-report/map/common/opendap-utils.js.html +113 -113
- package/coverage/lcov-report/map/common/permissions.js.html +11 -11
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +54 -54
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +42 -42
- package/coverage/lcov-report/map/common/wcs-utils.js.html +211 -211
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +72 -72
- package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
- package/coverage/lcov.info +5502 -3743
- package/coverage/map/api/hooks/hooks.catalog.js.html +48 -48
- package/coverage/map/api/hooks/hooks.features.js.html +51 -51
- package/coverage/map/api/hooks/hooks.query.js.html +40 -46
- package/coverage/map/api/hooks/index.html +49 -49
- package/coverage/map/api/hooks/index.js.html +16 -16
- package/coverage/map/api/index.html +26 -26
- package/coverage/map/api/index.js.html +38 -38
- package/coverage/map/api/marshall.js.html +17 -17
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +11 -5
- package/coverage/map/api/models/index.html +5 -5
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/map/api/services/features/features.service.js.html +1 -1
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +17 -17
- package/coverage/map/api/services/index.js.html +81 -90
- package/coverage/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/map/common/errors.js.html +16 -16
- package/coverage/map/common/geotiff-grid-source.js.html +53 -53
- package/coverage/map/common/grid.js.html +298 -298
- package/coverage/map/common/index.html +148 -148
- package/coverage/map/common/index.js.html +67 -67
- package/coverage/map/common/meteo-model-grid-source.js.html +68 -68
- package/coverage/map/common/moment-utils.js.html +18 -18
- package/coverage/map/common/opendap-grid-source.js.html +60 -60
- package/coverage/map/common/opendap-utils.js.html +113 -113
- package/coverage/map/common/permissions.js.html +11 -11
- package/coverage/map/common/time-based-grid-source.js.html +54 -54
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +42 -42
- package/coverage/map/common/wcs-utils.js.html +211 -211
- package/coverage/map/common/weacast-grid-source.js.html +72 -72
- package/coverage/map/common/wfs-utils.js.html +1 -1
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +1 -1
- package/coverage/tmp/coverage-19264-1684834146599-0.json +1 -0
- package/coverage/tmp/coverage-2508-1684834182408-0.json +1 -0
- package/coverage/tmp/coverage-25908-1684834189369-0.json +1 -0
- package/coverage/tmp/coverage-32364-1684834189420-0.json +1 -0
- package/coverage/tmp/coverage-36604-1684834189485-0.json +1 -0
- package/coverage/tmp/coverage-40652-1684834182272-0.json +1 -0
- package/coverage/tmp/coverage-48484-1684834182342-0.json +1 -0
- package/coverage/tmp/coverage-51652-1684834189584-0.json +1 -0
- package/coverage/tmp/coverage-9776-1684834189519-0.json +1 -0
- package/extras/css/core.variables.scss +38 -38
- package/extras/icons/center-on-feature.svg +315 -315
- package/extras/icons/json.svg +83 -83
- package/extras/icons/map-legend.svg +251 -251
- package/extras/icons/target.svg +37 -37
- package/extras/tours/core/account-profile.js +32 -32
- package/extras/tours/core/account.js +143 -143
- package/extras/tours/core/add-member.js +74 -74
- package/extras/tours/core/add-tag.js +12 -12
- package/extras/tours/core/create-group.js +19 -19
- package/extras/tours/core/create-organisation.js +19 -19
- package/extras/tours/core/create-tag.js +26 -26
- package/extras/tours/core/edit-member-role.js +13 -13
- package/extras/tours/core/groups.js +65 -65
- package/extras/tours/core/join-group.js +13 -13
- package/extras/tours/core/login.js +41 -41
- package/extras/tours/core/members.js +108 -108
- package/extras/tours/core/register.js +61 -61
- package/extras/tours/core/send-reset-password.js +14 -14
- package/extras/tours/core/tags.js +65 -65
- package/extras/tours/map/add-layer.js +28 -28
- package/extras/tours/map/catalog-categories.js +59 -59
- package/extras/tours/map/catalog-panel.js +112 -112
- package/extras/tours/map/connect-layer.js +39 -39
- package/extras/tours/map/create-layer.js +33 -33
- package/extras/tours/map/create-view.js +25 -25
- package/extras/tours/map/fab.js +26 -26
- package/extras/tours/map/import-layer.js +33 -33
- package/extras/tours/map/navigation-bar.js +185 -185
- package/extras/tours/map/side-nav.js +35 -35
- package/extras/tours/map/timeline.js +77 -77
- package/map/api/config/categories.cjs +42 -42
- package/map/api/config/layers.cjs +43 -43
- package/map/api/config/sublegends.cjs +42 -42
- package/map/api/hooks/hooks.catalog.js +85 -85
- package/map/api/hooks/hooks.features.js +84 -84
- package/map/api/hooks/hooks.query.js +361 -361
- package/map/api/hooks/index.js +3 -3
- package/map/api/index.js +18 -18
- package/map/api/marshall.js +31 -31
- package/map/api/models/alerts.model.mongodb.js +7 -7
- package/map/api/models/catalog.model.mongodb.js +14 -14
- package/map/api/models/features.model.mongodb.js +37 -37
- package/map/api/services/alerts/alerts.hooks.js +63 -63
- package/map/api/services/alerts/alerts.service.js +175 -175
- package/map/api/services/catalog/catalog.hooks.js +76 -76
- package/map/api/services/daptiles/daptiles.service.js +475 -475
- package/map/api/services/features/features.hooks.js +40 -40
- package/map/api/services/features/features.service.js +52 -52
- package/map/api/services/geocoder/geocoder.hooks.js +31 -31
- package/map/api/services/geocoder/geocoder.service.js +79 -79
- package/map/api/services/index.js +228 -228
- package/map/client/canvas-draw-context.js +16 -16
- package/map/client/cesium/utils.js +133 -133
- package/map/client/components/KCaptureToolbar.vue +155 -155
- package/map/client/components/KColorLegend.vue +349 -349
- package/map/client/components/KCompass.vue +143 -143
- package/map/client/components/KEditLayerData.vue +85 -85
- package/map/client/components/KFeatureActionButton.vue +119 -119
- package/map/client/components/KFeatureEditor.vue +92 -92
- package/map/client/components/KFeaturesChart.vue +285 -285
- package/map/client/components/KFeaturesFilter.vue +259 -259
- package/map/client/components/KFeaturesTable.vue +99 -99
- package/map/client/components/KLayerEditionToolbar.vue +54 -54
- package/map/client/components/KLayerEditor.vue +48 -48
- package/map/client/components/KLayerStyleEditor.vue +118 -118
- package/map/client/components/KLayerStyleForm.vue +906 -906
- package/map/client/components/KLevelSlider.vue +100 -100
- package/map/client/components/KMeasureTool.vue +568 -568
- package/map/client/components/KPositionIndicator.vue +90 -90
- package/map/client/components/KTimeline.vue +293 -293
- package/map/client/components/KTimezoneMap.vue +158 -158
- package/map/client/components/KUrlLegend.vue +122 -122
- package/map/client/components/catalog/KAddLayer.vue +66 -66
- package/map/client/components/catalog/KBaseLayersSelector.vue +114 -114
- package/map/client/components/catalog/KConnectLayer.vue +323 -323
- package/map/client/components/catalog/KCreateLayer.vue +184 -184
- package/map/client/components/catalog/KCreateView.vue +108 -108
- package/map/client/components/catalog/KFilteredLayerItem.vue +53 -53
- package/map/client/components/catalog/KImportLayer.vue +168 -168
- package/map/client/components/catalog/KLayerCategories.vue +274 -274
- package/map/client/components/catalog/KLayerItem.vue +70 -70
- package/map/client/components/catalog/KLayersPanel.vue +137 -137
- package/map/client/components/catalog/KLayersSelector.vue +78 -78
- package/map/client/components/catalog/KViewSelector.vue +46 -46
- package/map/client/components/catalog/KViewsPanel.vue +123 -123
- package/map/client/components/catalog/KWeatherLayersSelector.vue +129 -129
- package/map/client/components/form/KDirectionField.vue +113 -113
- package/map/client/components/form/KLayerCategoryField.vue +46 -46
- package/map/client/components/form/KLocationField.vue +189 -189
- package/map/client/components/form/KOwsLayerField.vue +130 -130
- package/map/client/components/form/KOwsServiceField.vue +238 -238
- package/map/client/components/form/KTimezoneField.vue +142 -142
- package/map/client/components/index.js +1 -1
- package/map/client/components/legend/KColorScaleLegend.vue +31 -31
- package/map/client/components/legend/KImageLegend.vue +52 -52
- package/map/client/components/legend/KLegend.vue +191 -191
- package/map/client/components/legend/KLegendRenderer.vue +20 -20
- package/map/client/components/legend/KSymbolsLegend.vue +101 -101
- package/map/client/components/location/KGeocodersFilter.vue +44 -44
- package/map/client/components/location/KLocationCardSection.vue +61 -61
- package/map/client/components/location/KLocationMap.vue +280 -280
- package/map/client/components/location/KLocationSearch.vue +144 -144
- package/map/client/components/location/KLocationTip.vue +29 -29
- package/map/client/components/tools/KGeolocateTool.vue +46 -46
- package/map/client/components/tools/KSearchTool.vue +93 -93
- package/map/client/components/widget/KElevationProfile.vue +454 -454
- package/map/client/components/widget/KInformationBox.vue +145 -145
- package/map/client/components/widget/KMapillaryViewer.vue +178 -178
- package/map/client/components/widget/KStackableTimeSeries.vue +214 -214
- package/map/client/components/widget/KTimeSeries.vue +500 -500
- package/map/client/composables/activity.js +88 -88
- package/map/client/composables/highlight.js +214 -214
- package/map/client/composables/index.js +7 -7
- package/map/client/composables/location.js +53 -53
- package/map/client/composables/measure.js +42 -42
- package/map/client/composables/probe.js +133 -133
- package/map/client/composables/selection.js +300 -300
- package/map/client/composables/weather.js +213 -213
- package/map/client/elevation-utils.js +258 -258
- package/map/client/geolocation.js +119 -119
- package/map/client/globe.js +13 -13
- package/map/client/i18n/map_en.json +645 -645
- package/map/client/i18n/map_fr.json +646 -646
- package/map/client/index.js +18 -18
- package/map/client/init.js +80 -80
- package/map/client/leaflet/GSMaPLayer.js +55 -55
- package/map/client/leaflet/GradientPath.js +180 -180
- package/map/client/leaflet/MaskLayer.js +57 -57
- package/map/client/leaflet/TiledFeatureLayer.js +572 -572
- package/map/client/leaflet/TiledMeshLayer.js +486 -486
- package/map/client/leaflet/TiledWindLayer.js +384 -384
- package/map/client/leaflet/utils.js +246 -246
- package/map/client/map.js +15 -15
- package/map/client/mixins/globe/index.js +8 -8
- package/map/client/mixins/globe/mixin.base-globe.js +462 -462
- package/map/client/mixins/globe/mixin.file-layers.js +40 -40
- package/map/client/mixins/globe/mixin.geojson-layers.js +314 -314
- package/map/client/mixins/globe/mixin.globe-activity.js +52 -52
- package/map/client/mixins/globe/mixin.opendap-layers.js +51 -51
- package/map/client/mixins/globe/mixin.popup.js +82 -82
- package/map/client/mixins/globe/mixin.style.js +110 -110
- package/map/client/mixins/globe/mixin.tooltip.js +101 -101
- package/map/client/mixins/index.js +9 -9
- package/map/client/mixins/map/index.js +16 -16
- package/map/client/mixins/map/mixin.base-map.js +592 -592
- package/map/client/mixins/map/mixin.canvas-layers.js +529 -529
- package/map/client/mixins/map/mixin.edit-layers.js +474 -474
- package/map/client/mixins/map/mixin.file-layers.js +49 -49
- package/map/client/mixins/map/mixin.forecast-layers.js +79 -79
- package/map/client/mixins/map/mixin.geojson-layers.js +557 -557
- package/map/client/mixins/map/mixin.georaster-layers.js +114 -114
- package/map/client/mixins/map/mixin.gsmap-layers.js +27 -27
- package/map/client/mixins/map/mixin.heatmap-layers.js +116 -116
- package/map/client/mixins/map/mixin.map-activity.js +38 -38
- package/map/client/mixins/map/mixin.mapillary-layers.js +45 -45
- package/map/client/mixins/map/mixin.popup.js +53 -53
- package/map/client/mixins/map/mixin.style.js +73 -73
- package/map/client/mixins/map/mixin.tiled-mesh-layers.js +120 -120
- package/map/client/mixins/map/mixin.tiled-wind-layers.js +126 -126
- package/map/client/mixins/map/mixin.tooltip.js +47 -47
- package/map/client/mixins/mixin.activity.js +477 -477
- package/map/client/mixins/mixin.catalog-panel.js +26 -26
- package/map/client/mixins/mixin.context.js +262 -262
- package/map/client/mixins/mixin.feature-selection.js +28 -28
- package/map/client/mixins/mixin.feature-service.js +403 -403
- package/map/client/mixins/mixin.infobox.js +29 -29
- package/map/client/mixins/mixin.levels.js +66 -66
- package/map/client/mixins/mixin.style.js +29 -29
- package/map/client/mixins/mixin.weacast.js +212 -212
- package/map/client/pixi-utils.js +256 -256
- package/map/client/readers/index.js +4 -4
- package/map/client/readers/reader.geojson.js +64 -64
- package/map/client/readers/reader.gpx.js +36 -36
- package/map/client/readers/reader.kml.js +36 -36
- package/map/client/readers/reader.shp.js +82 -82
- package/map/client/utils/index.js +3 -3
- package/map/client/utils/utils.js +228 -228
- package/map/client/utils/utils.location.js +45 -45
- package/map/client/utils/utils.schema.js +75 -75
- package/map/client/utils.all.js +3 -3
- package/map/client/utils.globe.js +2 -2
- package/map/client/utils.js +4 -4
- package/map/client/utils.map.js +2 -2
- package/map/common/dynamic-grid-source.js +127 -127
- package/map/common/errors.js +3 -3
- package/map/common/geotiff-grid-source.js +150 -150
- package/map/common/grid.js +509 -509
- package/map/common/index.js +29 -29
- package/map/common/meteo-model-grid-source.js +157 -157
- package/map/common/moment-utils.js +24 -24
- package/map/common/opendap-grid-source.js +261 -261
- package/map/common/opendap-utils.js +247 -247
- package/map/common/permissions.js +11 -11
- package/map/common/schemas/catalog.update.json +28 -28
- package/map/common/time-based-grid-source.js +111 -111
- package/map/common/tms-utils.js +63 -63
- package/map/common/wcs-grid-source.js +93 -93
- package/map/common/wcs-utils.js +167 -167
- package/map/common/weacast-grid-source.js +316 -316
- package/map/common/wfs-utils.js +163 -163
- package/map/common/wms-utils.js +117 -117
- package/map/common/wmts-utils.js +154 -154
- package/map.api.js +5 -5
- package/map.client.globe.js +5 -5
- package/map.client.js +5 -5
- package/map.client.map.js +5 -5
- package/map.common.js +1 -1
- package/map.config.cjs +9 -9
- package/package.json +161 -161
- package/test/api/core/account.test.js +485 -485
- package/test/api/core/client.test.js.skip +37 -37
- package/test/api/core/config/default.cjs +118 -118
- package/test/api/core/config/email-templates/confirmInvitation/html.ejs +18 -18
- package/test/api/core/config/email-templates/identityChange/html.ejs +14 -14
- package/test/api/core/config/email-templates/newDevice/html.ejs +7 -7
- package/test/api/core/config/email-templates/newSubscription/html.ejs +7 -7
- package/test/api/core/config/email-templates/passwordChange/html.ejs +5 -5
- package/test/api/core/config/email-templates/resendVerifySignup/html.ejs +12 -12
- package/test/api/core/config/email-templates/resetPwd/html.ejs +5 -5
- package/test/api/core/config/email-templates/sendResetPwd/html.ejs +12 -12
- package/test/api/core/config/email-templates/verifySignup/html.ejs +3 -3
- package/test/api/core/data/invalid-objects.json +59 -59
- package/test/api/core/data/schema.json +57 -57
- package/test/api/core/data/valid-objects.json +37 -37
- package/test/api/core/hooks.test.js +330 -330
- package/test/api/core/index.js +1 -1
- package/test/api/core/index.test.js +478 -478
- package/test/api/core/push.test.js +197 -197
- package/test/api/core/schemas.test.js +82 -82
- package/test/api/core/storage.test.js +153 -153
- package/test/api/core/team.test.js +670 -670
- package/test/api/core/utils.js +92 -92
- package/test/api/index.js +3 -3
- package/test/api/map/alerts.test.js +560 -560
- package/test/api/map/config/default.cjs +125 -125
- package/test/api/map/config/layers.json +38 -38
- package/test/api/map/data/DescribeCoverage.xml +54 -54
- package/test/api/map/data/adsb.observations.json +131 -131
- package/test/api/map/data/dataset.grb.das +55 -55
- package/test/api/map/data/dataset.grb.dds +17 -17
- package/test/api/map/data/vigicrues.observations.json +47041 -47041
- package/test/api/map/data/vigicrues.stations.json +15421 -15421
- package/test/api/map/data/zones.json +1227 -1227
- package/test/api/map/grid-sources.test.js +313 -313
- package/test/api/map/hooks.test.js +98 -98
- package/test/api/map/index.test.js +563 -563
- package/test/api/map/test-log-2022-12-01.log +19 -0
- package/test/api/map/test-log-2023-01-05.log +4 -0
- package/test/api/map/test-log-2023-01-09.log +3 -0
- package/test/api/map/{test-log-2023-09-21.log → test-log-2023-02-05.log} +11 -12
- package/test/api/map/test-log-2023-02-14.log +82 -0
- package/test/api/map/test-log-2023-02-28.log +28 -0
- package/test/api/map/{test-log-2023-07-19.log → test-log-2023-03-02.log} +11 -13
- package/test/api/map/test-log-2023-03-06.log +11 -0
- package/test/api/map/test-log-2023-03-07.log +61 -0
- package/test/api/map/test-log-2023-03-31.log +11 -0
- package/test/api/map/test-log-2023-05-23.log +11 -0
- package/test/api/map/test-log-2023-05-24.log +11 -0
- package/test/client/core/account.js +36 -36
- package/test/client/core/api.js +361 -361
- package/test/client/core/collection.js +64 -64
- package/test/client/core/index.js +8 -8
- package/test/client/core/layout.js +116 -116
- package/test/client/core/runner.js +224 -224
- package/test/client/core/screens.js +35 -35
- package/test/client/core/time.js +10 -10
- package/test/client/core/utils.js +260 -260
- package/test/client/index.js +3 -3
- package/test/client/map/catalog.js +193 -193
- package/test/client/map/controls.js +41 -41
- package/test/client/map/index.js +4 -4
- package/test/client/map/time.js +24 -24
- package/test/client/map/utils.js +27 -27
- package/coverage/core/api/utils.js.html +0 -118
- package/coverage/lcov-report/core/api/utils.js.html +0 -118
- package/coverage/tmp/coverage-59096-1692631696256-0.json +0 -1
- package/coverage/tmp/coverage-59108-1692631696233-0.json +0 -1
- package/coverage/tmp/coverage-59119-1692631696222-0.json +0 -1
- package/coverage/tmp/coverage-59131-1692631696200-0.json +0 -1
- package/coverage/tmp/coverage-59138-1692631696175-0.json +0 -1
- package/test/api/core/test-log-2023-07-10.log +0 -2
- package/test/api/core/test-log-2023-07-12.log +0 -0
- package/test/api/core/test-log-2023-07-18.log +0 -78
- package/test/api/core/test-log-2023-07-19.log +0 -44
- package/test/api/core/test-log-2023-08-01.log +0 -162
- package/test/api/core/test-log-2023-08-21.log +0 -66
- package/test/api/core/test-log-2023-08-22.log +0 -96
- package/test/api/core/test-log-2023-08-23.log +0 -22
- package/test/api/core/test-log-2023-09-20.log +0 -22
- package/test/api/core/test-log-2023-09-21.log +0 -105
- package/test/api/core/test-log-2023-10-04.log +0 -22
- package/test/api/map/test-log-2023-07-18.log +0 -62
- package/test/api/map/test-log-2023-08-21.log +0 -65
- package/test/api/map/test-log-2023-09-20.log +0 -60
- /package/test/api/core/{test-log-2023-07-04.log → test-log-2023-06-05.log} +0 -0
|
@@ -1,290 +1,290 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import siftModule from 'sift'
|
|
3
|
-
import moment from 'moment'
|
|
4
|
-
import errors from '@feathersjs/errors'
|
|
5
|
-
import { objectifyIDs, toObjectIDs } from '../db.js'
|
|
6
|
-
import { marshallTimes, unmarshallTimes } from '../marshall.js'
|
|
7
|
-
import common from 'feathers-hooks-common'
|
|
8
|
-
import makeDebug from 'debug'
|
|
9
|
-
|
|
10
|
-
const { Conflict, BadRequest } = errors
|
|
11
|
-
const { discard, disallow, getItems, replaceItems } = common
|
|
12
|
-
const sift = siftModule.default
|
|
13
|
-
const debug = makeDebug('kdk:core:model:hooks')
|
|
14
|
-
|
|
15
|
-
// Need to convert from server side types (moment dates) to basic JS types when "writing" to DB adapters
|
|
16
|
-
export function processTimes (properties) {
|
|
17
|
-
return function (hook) {
|
|
18
|
-
let items = getItems(hook)
|
|
19
|
-
const isArray = Array.isArray(items)
|
|
20
|
-
items = (isArray ? items : [items])
|
|
21
|
-
items.forEach(item => marshallTimes(item, properties))
|
|
22
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
23
|
-
return hook
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Need to convert back to server side types (moment dates) from basic JS types when "reading" from DB adapters
|
|
28
|
-
export function unprocessTimes (properties) {
|
|
29
|
-
return function (hook) {
|
|
30
|
-
let items = getItems(hook)
|
|
31
|
-
const isArray = Array.isArray(items)
|
|
32
|
-
items = (isArray ? items : [items])
|
|
33
|
-
items.forEach(item => unmarshallTimes(item, properties))
|
|
34
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
35
|
-
return hook
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// The hook serialize allows to copy/move some properties within the objects holded by the hook
|
|
40
|
-
// It applies an array of rules defined by:
|
|
41
|
-
// - source: the path to the property to be copied
|
|
42
|
-
// - target: the path where to copy the property
|
|
43
|
-
// - delete: a flag to define whether the hook has to delete the source property
|
|
44
|
-
export function serialize (rules, options = {}) {
|
|
45
|
-
return function (hook) {
|
|
46
|
-
// Retrieve the items from the hook
|
|
47
|
-
let items = getItems(hook)
|
|
48
|
-
const isArray = Array.isArray(items)
|
|
49
|
-
items = (isArray ? items : [items])
|
|
50
|
-
// Apply the rules for each item
|
|
51
|
-
items.forEach(item => {
|
|
52
|
-
rules.forEach(rule => {
|
|
53
|
-
let source = _.get(item, rule.source)
|
|
54
|
-
if (!_.isNil(source)) {
|
|
55
|
-
if (rule.filter) source = source.filter(sift(rule.filter))
|
|
56
|
-
_.set(item, rule.target, source)
|
|
57
|
-
if (rule.delete) {
|
|
58
|
-
_.unset(item, rule.source)
|
|
59
|
-
}
|
|
60
|
-
} else if (options.throwOnNotFound || rule.throwOnNotFound) {
|
|
61
|
-
throw new Error('Cannot find valid input value for property ' + rule.target)
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
// Replace the items within the hook
|
|
66
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// This hook allows to transform the values bound to '_id' like keys or
|
|
71
|
-
// operators (eg $ne, $in) provided as strings into Mongo ObjectIds
|
|
72
|
-
// It inspects hook data as well as query data
|
|
73
|
-
// If you have others properties to be converted use convertObjectIDs
|
|
74
|
-
export function processObjectIDs (hook) {
|
|
75
|
-
let items = getItems(hook)
|
|
76
|
-
const isArray = Array.isArray(items)
|
|
77
|
-
items = (isArray ? items : [items])
|
|
78
|
-
items.forEach(item => objectifyIDs(item))
|
|
79
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
80
|
-
|
|
81
|
-
if (hook.params.query) objectifyIDs(hook.params.query)
|
|
82
|
-
|
|
83
|
-
return hook
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// The hook allows to transform a set of input properties as strings into Mongo ObjectIds
|
|
87
|
-
// It inspects hook data as well as query data
|
|
88
|
-
export function convertObjectIDs (properties) {
|
|
89
|
-
return function (hook) {
|
|
90
|
-
let items = getItems(hook)
|
|
91
|
-
const isArray = Array.isArray(items)
|
|
92
|
-
items = (isArray ? items : [items])
|
|
93
|
-
items.forEach(item => toObjectIDs(item, properties))
|
|
94
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
95
|
-
|
|
96
|
-
if (hook.params.query) toObjectIDs(hook.params.query, properties)
|
|
97
|
-
|
|
98
|
-
return hook
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Utility function used to convert from string to Dates a fixed set of properties on a given object
|
|
103
|
-
export function toDates (object, properties, asMoment) {
|
|
104
|
-
properties.forEach(property => {
|
|
105
|
-
let date = _.get(object, property)
|
|
106
|
-
if (date) {
|
|
107
|
-
// We use moment to validate the date
|
|
108
|
-
date = moment.utc(date)
|
|
109
|
-
if (date.isValid()) {
|
|
110
|
-
if (!asMoment) {
|
|
111
|
-
date = date.toDate()
|
|
112
|
-
}
|
|
113
|
-
_.set(object, property, date)
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// The hook allows to transform a set of input properties as strings into a Date/Moment objects
|
|
120
|
-
// It inspects hook data as well as query data
|
|
121
|
-
export function convertDates (properties, asMoment) {
|
|
122
|
-
return function (hook) {
|
|
123
|
-
let items = getItems(hook)
|
|
124
|
-
const isArray = Array.isArray(items)
|
|
125
|
-
items = (isArray ? items : [items])
|
|
126
|
-
items.forEach(item => toDates(item, properties, asMoment))
|
|
127
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
128
|
-
|
|
129
|
-
if (hook.params.query) toDates(hook.params.query, properties, asMoment)
|
|
130
|
-
return hook
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// Utility function used to convert from string to JSON a fixed set of properties on a given object
|
|
135
|
-
export function toJson (object, properties) {
|
|
136
|
-
properties.forEach(property => {
|
|
137
|
-
const string = _.get(object, property)
|
|
138
|
-
if (string && (typeof string === 'string')) {
|
|
139
|
-
const json = JSON.parse(string)
|
|
140
|
-
_.set(object, property, json)
|
|
141
|
-
}
|
|
142
|
-
})
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// The hook allows to transform a set of input properties as strings into JSON objects
|
|
146
|
-
export function convertToJson (properties) {
|
|
147
|
-
return function (hook) {
|
|
148
|
-
let items = getItems(hook)
|
|
149
|
-
const isArray = Array.isArray(items)
|
|
150
|
-
items = (isArray ? items : [items])
|
|
151
|
-
items.forEach(item => toJson(item, properties))
|
|
152
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
153
|
-
|
|
154
|
-
return hook
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Utility function used to convert from string to JSON a fixed set of properties on a given object
|
|
159
|
-
export function toString (object, properties) {
|
|
160
|
-
properties.forEach(property => {
|
|
161
|
-
const json = _.get(object, property)
|
|
162
|
-
if (json && (typeof json === 'object')) _.set(object, property, JSON.stringify(json))
|
|
163
|
-
})
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// The hook allows to transform a set of input properties from JSON objects into strings
|
|
167
|
-
export function convertToString (properties) {
|
|
168
|
-
return function (hook) {
|
|
169
|
-
let items = getItems(hook)
|
|
170
|
-
const isArray = Array.isArray(items)
|
|
171
|
-
items = (isArray ? items : [items])
|
|
172
|
-
items.forEach(item => toString(item, properties))
|
|
173
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
174
|
-
|
|
175
|
-
return hook
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export async function populatePreviousObject (hook) {
|
|
180
|
-
if (hook.type !== 'before') {
|
|
181
|
-
throw new Error('The \'populatePreviousObject\' hook should only be used as a \'before\' hook.')
|
|
182
|
-
}
|
|
183
|
-
const item = getItems(hook)
|
|
184
|
-
const id = (hook.id ? hook.id : item._id)
|
|
185
|
-
// Retrieve previous version of the item and make it available to next hooks
|
|
186
|
-
if (id) {
|
|
187
|
-
hook.params.previousItem = await hook.service.get(id.toString())
|
|
188
|
-
debug('Populated previous object', hook.params.previousItem)
|
|
189
|
-
}
|
|
190
|
-
return hook
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export function setAsDeleted (hook) {
|
|
194
|
-
// Retrieve the items from the hook
|
|
195
|
-
let items = getItems(hook)
|
|
196
|
-
const isArray = Array.isArray(items)
|
|
197
|
-
items = (isArray ? items : [items])
|
|
198
|
-
// Apply the rules for each item
|
|
199
|
-
items.forEach(item => _.set(item, 'deleted', true))
|
|
200
|
-
// Replace the items within the hook
|
|
201
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
202
|
-
return hook
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
export function setExpireAfter (delayInSeconds) {
|
|
206
|
-
return function (hook) {
|
|
207
|
-
if (hook.type !== 'before') {
|
|
208
|
-
throw new Error('The \'setExpireAfter\' hook should only be used as a \'before\' hook.')
|
|
209
|
-
}
|
|
210
|
-
// Retrieve the items from the hook
|
|
211
|
-
let items = getItems(hook)
|
|
212
|
-
const isArray = Array.isArray(items)
|
|
213
|
-
items = (isArray ? items : [items])
|
|
214
|
-
// Apply the rules for each item
|
|
215
|
-
const date = new Date(Date.now() + 1000 * delayInSeconds)
|
|
216
|
-
items.forEach(item => _.set(item, 'expireAt', date))
|
|
217
|
-
// Replace the items within the hook
|
|
218
|
-
replaceItems(hook, isArray ? items : items[0])
|
|
219
|
-
return hook
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Allow to use the distinct function of MongoDB
|
|
224
|
-
export async function distinct (hook) {
|
|
225
|
-
const params = hook.params
|
|
226
|
-
const query = params.query
|
|
227
|
-
if (!query.$distinct) return hook
|
|
228
|
-
const collection = hook.service.Model
|
|
229
|
-
hook.result = await collection.distinct(query.$distinct, _.omit(query, ['$distinct']))
|
|
230
|
-
return hook
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Check for already existing object according to given service/id field
|
|
234
|
-
export function checkUnique (options = {}) {
|
|
235
|
-
return async (hook) => {
|
|
236
|
-
const service = (options.service ? hook.app.getService(options.service) : hook.service)
|
|
237
|
-
const field = options.field || 'name'
|
|
238
|
-
const id = _.get(hook, `data.${field}`)
|
|
239
|
-
// If not updating ID skip
|
|
240
|
-
if (id) {
|
|
241
|
-
const query = { [options.field]: id }
|
|
242
|
-
// Apply processing if required
|
|
243
|
-
if (typeof options.query === 'function') options.query(query, hook)
|
|
244
|
-
const result = await service.find({ query })
|
|
245
|
-
// Pagination on/off ?
|
|
246
|
-
const total = (Array.isArray(result) ? result.length : result.total)
|
|
247
|
-
if (total > 0) {
|
|
248
|
-
const error = new Conflict(`Object with ${options.field} equals to ${id} already exist for service ${service.name}`, {
|
|
249
|
-
translation: {
|
|
250
|
-
key: 'OBJECT_ID_ALREADY_TAKEN'
|
|
251
|
-
}
|
|
252
|
-
})
|
|
253
|
-
// Raise error when creating if another object with the same ID exists
|
|
254
|
-
if (hook.method === 'create') throw error
|
|
255
|
-
// When updating/patching we should check if it's the same object or not
|
|
256
|
-
const object = (Array.isArray(result) ? result[0] : result.data[0])
|
|
257
|
-
if (object._id.toString() !== hook.id.toString()) throw error
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return hook
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Prevent patch service calls from changing certain fields.
|
|
265
|
-
// Based on https://hooks-common.feathersjs.com/hooks.html#preventchanges
|
|
266
|
-
// but updated to handle dot notation
|
|
267
|
-
export function preventChanges(ifThrow, fieldNames) {
|
|
268
|
-
return (hook) => {
|
|
269
|
-
if ((hook.type !== 'before') || (hook.method !== 'patch')) {
|
|
270
|
-
throw new Error('The \'preventChanges\' hook should only be used as a \'before\' patch hook.')
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
let data = { ...hook.data }
|
|
274
|
-
// Check all data fields
|
|
275
|
-
_.forOwn(hook.data, (value, key) => {
|
|
276
|
-
fieldNames.forEach(name => {
|
|
277
|
-
// If a prevented field is found or dot notation with a prevented field is used
|
|
278
|
-
if ((key === name) || key.startsWith(`${name}.`)) {
|
|
279
|
-
if (ifThrow) {
|
|
280
|
-
throw new BadRequest(`Field ${name} may not be patched. (preventChanges)`);
|
|
281
|
-
}
|
|
282
|
-
delete data[key]
|
|
283
|
-
}
|
|
284
|
-
})
|
|
285
|
-
})
|
|
286
|
-
hook.data = data
|
|
287
|
-
|
|
288
|
-
return hook
|
|
289
|
-
}
|
|
290
|
-
}
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
import siftModule from 'sift'
|
|
3
|
+
import moment from 'moment'
|
|
4
|
+
import errors from '@feathersjs/errors'
|
|
5
|
+
import { objectifyIDs, toObjectIDs } from '../db.js'
|
|
6
|
+
import { marshallTimes, unmarshallTimes } from '../marshall.js'
|
|
7
|
+
import common from 'feathers-hooks-common'
|
|
8
|
+
import makeDebug from 'debug'
|
|
9
|
+
|
|
10
|
+
const { Conflict, BadRequest } = errors
|
|
11
|
+
const { discard, disallow, getItems, replaceItems } = common
|
|
12
|
+
const sift = siftModule.default
|
|
13
|
+
const debug = makeDebug('kdk:core:model:hooks')
|
|
14
|
+
|
|
15
|
+
// Need to convert from server side types (moment dates) to basic JS types when "writing" to DB adapters
|
|
16
|
+
export function processTimes (properties) {
|
|
17
|
+
return function (hook) {
|
|
18
|
+
let items = getItems(hook)
|
|
19
|
+
const isArray = Array.isArray(items)
|
|
20
|
+
items = (isArray ? items : [items])
|
|
21
|
+
items.forEach(item => marshallTimes(item, properties))
|
|
22
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
23
|
+
return hook
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Need to convert back to server side types (moment dates) from basic JS types when "reading" from DB adapters
|
|
28
|
+
export function unprocessTimes (properties) {
|
|
29
|
+
return function (hook) {
|
|
30
|
+
let items = getItems(hook)
|
|
31
|
+
const isArray = Array.isArray(items)
|
|
32
|
+
items = (isArray ? items : [items])
|
|
33
|
+
items.forEach(item => unmarshallTimes(item, properties))
|
|
34
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
35
|
+
return hook
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The hook serialize allows to copy/move some properties within the objects holded by the hook
|
|
40
|
+
// It applies an array of rules defined by:
|
|
41
|
+
// - source: the path to the property to be copied
|
|
42
|
+
// - target: the path where to copy the property
|
|
43
|
+
// - delete: a flag to define whether the hook has to delete the source property
|
|
44
|
+
export function serialize (rules, options = {}) {
|
|
45
|
+
return function (hook) {
|
|
46
|
+
// Retrieve the items from the hook
|
|
47
|
+
let items = getItems(hook)
|
|
48
|
+
const isArray = Array.isArray(items)
|
|
49
|
+
items = (isArray ? items : [items])
|
|
50
|
+
// Apply the rules for each item
|
|
51
|
+
items.forEach(item => {
|
|
52
|
+
rules.forEach(rule => {
|
|
53
|
+
let source = _.get(item, rule.source)
|
|
54
|
+
if (!_.isNil(source)) {
|
|
55
|
+
if (rule.filter) source = source.filter(sift(rule.filter))
|
|
56
|
+
_.set(item, rule.target, source)
|
|
57
|
+
if (rule.delete) {
|
|
58
|
+
_.unset(item, rule.source)
|
|
59
|
+
}
|
|
60
|
+
} else if (options.throwOnNotFound || rule.throwOnNotFound) {
|
|
61
|
+
throw new Error('Cannot find valid input value for property ' + rule.target)
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
})
|
|
65
|
+
// Replace the items within the hook
|
|
66
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// This hook allows to transform the values bound to '_id' like keys or
|
|
71
|
+
// operators (eg $ne, $in) provided as strings into Mongo ObjectIds
|
|
72
|
+
// It inspects hook data as well as query data
|
|
73
|
+
// If you have others properties to be converted use convertObjectIDs
|
|
74
|
+
export function processObjectIDs (hook) {
|
|
75
|
+
let items = getItems(hook)
|
|
76
|
+
const isArray = Array.isArray(items)
|
|
77
|
+
items = (isArray ? items : [items])
|
|
78
|
+
items.forEach(item => objectifyIDs(item))
|
|
79
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
80
|
+
|
|
81
|
+
if (hook.params.query) objectifyIDs(hook.params.query)
|
|
82
|
+
|
|
83
|
+
return hook
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// The hook allows to transform a set of input properties as strings into Mongo ObjectIds
|
|
87
|
+
// It inspects hook data as well as query data
|
|
88
|
+
export function convertObjectIDs (properties) {
|
|
89
|
+
return function (hook) {
|
|
90
|
+
let items = getItems(hook)
|
|
91
|
+
const isArray = Array.isArray(items)
|
|
92
|
+
items = (isArray ? items : [items])
|
|
93
|
+
items.forEach(item => toObjectIDs(item, properties))
|
|
94
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
95
|
+
|
|
96
|
+
if (hook.params.query) toObjectIDs(hook.params.query, properties)
|
|
97
|
+
|
|
98
|
+
return hook
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Utility function used to convert from string to Dates a fixed set of properties on a given object
|
|
103
|
+
export function toDates (object, properties, asMoment) {
|
|
104
|
+
properties.forEach(property => {
|
|
105
|
+
let date = _.get(object, property)
|
|
106
|
+
if (date) {
|
|
107
|
+
// We use moment to validate the date
|
|
108
|
+
date = moment.utc(date)
|
|
109
|
+
if (date.isValid()) {
|
|
110
|
+
if (!asMoment) {
|
|
111
|
+
date = date.toDate()
|
|
112
|
+
}
|
|
113
|
+
_.set(object, property, date)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The hook allows to transform a set of input properties as strings into a Date/Moment objects
|
|
120
|
+
// It inspects hook data as well as query data
|
|
121
|
+
export function convertDates (properties, asMoment) {
|
|
122
|
+
return function (hook) {
|
|
123
|
+
let items = getItems(hook)
|
|
124
|
+
const isArray = Array.isArray(items)
|
|
125
|
+
items = (isArray ? items : [items])
|
|
126
|
+
items.forEach(item => toDates(item, properties, asMoment))
|
|
127
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
128
|
+
|
|
129
|
+
if (hook.params.query) toDates(hook.params.query, properties, asMoment)
|
|
130
|
+
return hook
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Utility function used to convert from string to JSON a fixed set of properties on a given object
|
|
135
|
+
export function toJson (object, properties) {
|
|
136
|
+
properties.forEach(property => {
|
|
137
|
+
const string = _.get(object, property)
|
|
138
|
+
if (string && (typeof string === 'string')) {
|
|
139
|
+
const json = JSON.parse(string)
|
|
140
|
+
_.set(object, property, json)
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// The hook allows to transform a set of input properties as strings into JSON objects
|
|
146
|
+
export function convertToJson (properties) {
|
|
147
|
+
return function (hook) {
|
|
148
|
+
let items = getItems(hook)
|
|
149
|
+
const isArray = Array.isArray(items)
|
|
150
|
+
items = (isArray ? items : [items])
|
|
151
|
+
items.forEach(item => toJson(item, properties))
|
|
152
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
153
|
+
|
|
154
|
+
return hook
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Utility function used to convert from string to JSON a fixed set of properties on a given object
|
|
159
|
+
export function toString (object, properties) {
|
|
160
|
+
properties.forEach(property => {
|
|
161
|
+
const json = _.get(object, property)
|
|
162
|
+
if (json && (typeof json === 'object')) _.set(object, property, JSON.stringify(json))
|
|
163
|
+
})
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// The hook allows to transform a set of input properties from JSON objects into strings
|
|
167
|
+
export function convertToString (properties) {
|
|
168
|
+
return function (hook) {
|
|
169
|
+
let items = getItems(hook)
|
|
170
|
+
const isArray = Array.isArray(items)
|
|
171
|
+
items = (isArray ? items : [items])
|
|
172
|
+
items.forEach(item => toString(item, properties))
|
|
173
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
174
|
+
|
|
175
|
+
return hook
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export async function populatePreviousObject (hook) {
|
|
180
|
+
if (hook.type !== 'before') {
|
|
181
|
+
throw new Error('The \'populatePreviousObject\' hook should only be used as a \'before\' hook.')
|
|
182
|
+
}
|
|
183
|
+
const item = getItems(hook)
|
|
184
|
+
const id = (hook.id ? hook.id : item._id)
|
|
185
|
+
// Retrieve previous version of the item and make it available to next hooks
|
|
186
|
+
if (id) {
|
|
187
|
+
hook.params.previousItem = await hook.service.get(id.toString())
|
|
188
|
+
debug('Populated previous object', hook.params.previousItem)
|
|
189
|
+
}
|
|
190
|
+
return hook
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function setAsDeleted (hook) {
|
|
194
|
+
// Retrieve the items from the hook
|
|
195
|
+
let items = getItems(hook)
|
|
196
|
+
const isArray = Array.isArray(items)
|
|
197
|
+
items = (isArray ? items : [items])
|
|
198
|
+
// Apply the rules for each item
|
|
199
|
+
items.forEach(item => _.set(item, 'deleted', true))
|
|
200
|
+
// Replace the items within the hook
|
|
201
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
202
|
+
return hook
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function setExpireAfter (delayInSeconds) {
|
|
206
|
+
return function (hook) {
|
|
207
|
+
if (hook.type !== 'before') {
|
|
208
|
+
throw new Error('The \'setExpireAfter\' hook should only be used as a \'before\' hook.')
|
|
209
|
+
}
|
|
210
|
+
// Retrieve the items from the hook
|
|
211
|
+
let items = getItems(hook)
|
|
212
|
+
const isArray = Array.isArray(items)
|
|
213
|
+
items = (isArray ? items : [items])
|
|
214
|
+
// Apply the rules for each item
|
|
215
|
+
const date = new Date(Date.now() + 1000 * delayInSeconds)
|
|
216
|
+
items.forEach(item => _.set(item, 'expireAt', date))
|
|
217
|
+
// Replace the items within the hook
|
|
218
|
+
replaceItems(hook, isArray ? items : items[0])
|
|
219
|
+
return hook
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Allow to use the distinct function of MongoDB
|
|
224
|
+
export async function distinct (hook) {
|
|
225
|
+
const params = hook.params
|
|
226
|
+
const query = params.query
|
|
227
|
+
if (!query.$distinct) return hook
|
|
228
|
+
const collection = hook.service.Model
|
|
229
|
+
hook.result = await collection.distinct(query.$distinct, _.omit(query, ['$distinct']))
|
|
230
|
+
return hook
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Check for already existing object according to given service/id field
|
|
234
|
+
export function checkUnique (options = {}) {
|
|
235
|
+
return async (hook) => {
|
|
236
|
+
const service = (options.service ? hook.app.getService(options.service) : hook.service)
|
|
237
|
+
const field = options.field || 'name'
|
|
238
|
+
const id = _.get(hook, `data.${field}`)
|
|
239
|
+
// If not updating ID skip
|
|
240
|
+
if (id) {
|
|
241
|
+
const query = { [options.field]: id }
|
|
242
|
+
// Apply processing if required
|
|
243
|
+
if (typeof options.query === 'function') options.query(query, hook)
|
|
244
|
+
const result = await service.find({ query })
|
|
245
|
+
// Pagination on/off ?
|
|
246
|
+
const total = (Array.isArray(result) ? result.length : result.total)
|
|
247
|
+
if (total > 0) {
|
|
248
|
+
const error = new Conflict(`Object with ${options.field} equals to ${id} already exist for service ${service.name}`, {
|
|
249
|
+
translation: {
|
|
250
|
+
key: 'OBJECT_ID_ALREADY_TAKEN'
|
|
251
|
+
}
|
|
252
|
+
})
|
|
253
|
+
// Raise error when creating if another object with the same ID exists
|
|
254
|
+
if (hook.method === 'create') throw error
|
|
255
|
+
// When updating/patching we should check if it's the same object or not
|
|
256
|
+
const object = (Array.isArray(result) ? result[0] : result.data[0])
|
|
257
|
+
if (object._id.toString() !== hook.id.toString()) throw error
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return hook
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Prevent patch service calls from changing certain fields.
|
|
265
|
+
// Based on https://hooks-common.feathersjs.com/hooks.html#preventchanges
|
|
266
|
+
// but updated to handle dot notation
|
|
267
|
+
export function preventChanges(ifThrow, fieldNames) {
|
|
268
|
+
return (hook) => {
|
|
269
|
+
if ((hook.type !== 'before') || (hook.method !== 'patch')) {
|
|
270
|
+
throw new Error('The \'preventChanges\' hook should only be used as a \'before\' patch hook.')
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
let data = { ...hook.data }
|
|
274
|
+
// Check all data fields
|
|
275
|
+
_.forOwn(hook.data, (value, key) => {
|
|
276
|
+
fieldNames.forEach(name => {
|
|
277
|
+
// If a prevented field is found or dot notation with a prevented field is used
|
|
278
|
+
if ((key === name) || key.startsWith(`${name}.`)) {
|
|
279
|
+
if (ifThrow) {
|
|
280
|
+
throw new BadRequest(`Field ${name} may not be patched. (preventChanges)`);
|
|
281
|
+
}
|
|
282
|
+
delete data[key]
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
})
|
|
286
|
+
hook.data = data
|
|
287
|
+
|
|
288
|
+
return hook
|
|
289
|
+
}
|
|
290
|
+
}
|