@kalisio/kdk 2.6.4 → 2.7.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/core/api/application.js +2 -4
- package/core/api/authentication.js +2 -3
- package/core/api/db.js +10 -2
- package/core/api/hooks/hooks.authorisations.js +4 -2
- package/core/api/hooks/hooks.push.js +6 -2
- package/core/api/hooks/hooks.query.js +29 -12
- package/core/api/hooks/hooks.users.js +30 -17
- package/core/api/models/configurations.model.mongodb.js +4 -0
- package/core/api/services/authorisations/authorisations.service.js +1 -1
- package/core/api/services/configurations/configurations.hooks.js +33 -0
- package/core/api/services/index.js +41 -7
- package/core/api/services/messages/messages.hooks.js +9 -3
- package/core/client/api.js +14 -1
- package/core/client/capabilities.js +1 -6
- package/core/client/components/KAvatar.vue +24 -20
- package/core/client/components/account/KProfile.vue +10 -71
- package/core/client/components/account/index.js +0 -2
- package/core/client/components/app/KSettings.vue +1 -0
- package/core/client/components/collection/KBoard.vue +4 -3
- package/core/client/components/collection/KCardSection.vue +1 -0
- package/core/client/components/collection/KGrid.vue +2 -0
- package/core/client/components/collection/KTable.vue +5 -1
- package/core/client/components/collection/KTimeLine.vue +9 -1
- package/core/client/components/collection/index.js +0 -2
- package/core/client/components/form/KChipsField.vue +2 -1
- package/core/client/components/form/KEmailField.vue +1 -0
- package/core/client/components/form/KFileField.vue +22 -1
- package/core/client/components/form/KForm.vue +2 -0
- package/core/client/components/form/KItemField.vue +1 -0
- package/core/client/components/form/KNumberField.vue +1 -0
- package/core/client/components/form/KPasswordField.vue +1 -0
- package/core/client/components/form/KPhoneField.vue +1 -0
- package/core/client/components/form/KPropertyItemField.vue +1 -0
- package/core/client/components/form/KResolutionField.vue +1 -0
- package/core/client/components/form/KSelectField.vue +31 -0
- package/core/client/components/form/KTagField.vue +1 -0
- package/core/client/components/form/KTextField.vue +1 -0
- package/core/client/components/form/KTokenField.vue +1 -0
- package/core/client/components/form/KUnitField.vue +1 -0
- package/core/client/components/form/KUrlField.vue +1 -0
- package/core/client/components/graphics/KIcon.vue +3 -4
- package/core/client/components/layout/KPage.vue +1 -0
- package/core/client/components/layout/KWindow.vue +6 -3
- package/core/client/components/messages/KMessageComposer.vue +2 -1
- package/core/client/components/messages/KMessagesTimeLine.vue +1 -1
- package/core/client/components/time/KDate.vue +1 -2
- package/core/client/components/time/KDateTime.vue +11 -11
- package/core/client/components/time/KTime.vue +1 -1
- package/core/client/composables/collection.js +33 -8
- package/core/client/composables/errors.js +1 -1
- package/core/client/composables/layout.js +9 -9
- package/core/client/configurations.js +50 -0
- package/core/client/exporter.js +1 -1
- package/core/client/i18n/core_en.json +6 -39
- package/core/client/i18n/core_fr.json +6 -39
- package/core/client/index.js +2 -0
- package/core/client/layout.js +8 -8
- package/core/client/mixins/mixin.base-activity.js +5 -2
- package/core/client/mixins/mixin.base-field.js +3 -3
- package/core/client/search.js +2 -1
- package/core/client/utils/utils.collection.js +8 -8
- package/core/client/utils/utils.items.js +4 -0
- package/core/client/utils/utils.push.js +3 -3
- package/core/client/utils/utils.session.js +7 -5
- package/core/client/utils/utils.shapes.js +38 -7
- package/core/client/utils/utils.time.js +21 -22
- package/core/common/schemas/users.update-profile.json +3 -2
- package/coverage/core/api/application.js.html +392 -398
- package/coverage/core/api/authentication.js.html +352 -187
- package/coverage/core/api/db.js.html +165 -126
- package/coverage/core/api/hooks/hooks.authentication.js.html +22 -196
- package/coverage/core/api/hooks/hooks.authorisations.js.html +383 -662
- package/coverage/core/api/hooks/hooks.logger.js.html +41 -41
- package/coverage/core/api/hooks/hooks.model.js.html +113 -101
- package/coverage/core/api/hooks/hooks.push.js.html +124 -97
- package/coverage/core/api/hooks/hooks.query.js.html +292 -217
- package/coverage/core/api/hooks/hooks.schemas.js.html +123 -123
- package/coverage/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
- package/coverage/core/api/hooks/hooks.users.js.html +255 -447
- package/coverage/core/api/hooks/index.html +107 -122
- package/coverage/core/api/hooks/index.js.html +4 -10
- package/coverage/core/api/index.html +46 -61
- package/coverage/core/api/index.js.html +9 -9
- package/coverage/core/api/marshall.js.html +9 -9
- package/coverage/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
- package/coverage/core/api/models/index.html +35 -50
- package/coverage/core/api/models/messages.model.mongodb.js.html +39 -27
- package/coverage/core/api/models/tags.model.mongodb.js.html +26 -32
- package/coverage/core/api/models/users.model.mongodb.js.html +10 -10
- package/coverage/core/api/services/account/account.hooks.js.html +5 -5
- package/coverage/core/api/services/account/account.service.js.html +127 -127
- package/coverage/core/api/services/account/index.html +22 -22
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +213 -222
- package/coverage/core/api/services/authorisations/index.html +21 -21
- package/coverage/core/api/services/{organisations/organisations.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
- package/coverage/core/api/services/{groups → configurations}/index.html +8 -8
- 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/import-export/import-export.hooks.js.html +76 -76
- package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
- package/coverage/core/api/services/import-export/index.html +32 -32
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +313 -142
- package/coverage/core/api/services/mailer/index.html +32 -32
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
- package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
- package/coverage/core/api/services/messages/index.html +21 -21
- package/coverage/core/api/services/messages/messages.hooks.js.html +112 -76
- package/coverage/core/api/services/push/index.html +32 -32
- package/coverage/core/api/services/push/push.hooks.js.html +80 -80
- package/coverage/core/api/services/push/push.service.js.html +34 -34
- package/coverage/core/api/services/storage/index.html +29 -29
- package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
- package/coverage/core/api/services/storage/storage.service.js.html +29 -29
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +119 -71
- package/coverage/core/api/services/users/index.html +27 -12
- package/coverage/core/api/services/users/users.hooks.js.html +14 -11
- package/coverage/core/api/services/users/users.service.js.html +100 -0
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +1 -1
- package/coverage/core/common/permissions.js.html +166 -472
- package/coverage/core/common/schema.js.html +4 -4
- package/coverage/core/common/utils.js.html +31 -25
- package/coverage/core/common/utils.offline.js.html +199 -0
- package/coverage/index.html +192 -192
- package/coverage/lcov-report/core/api/application.js.html +392 -398
- package/coverage/lcov-report/core/api/authentication.js.html +352 -187
- package/coverage/lcov-report/core/api/db.js.html +165 -126
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +22 -196
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +383 -662
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +41 -41
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +113 -101
- package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +124 -97
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +292 -217
- package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +123 -123
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +255 -447
- package/coverage/lcov-report/core/api/hooks/index.html +107 -122
- package/coverage/lcov-report/core/api/hooks/index.js.html +4 -10
- package/coverage/lcov-report/core/api/index.html +46 -61
- package/coverage/lcov-report/core/api/index.js.html +9 -9
- package/coverage/lcov-report/core/api/marshall.js.html +9 -9
- package/coverage/lcov-report/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
- package/coverage/lcov-report/core/api/models/index.html +35 -50
- package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +39 -27
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +26 -32
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +10 -10
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +5 -5
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +127 -127
- package/coverage/lcov-report/core/api/services/account/index.html +22 -22
- 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 +213 -222
- package/coverage/lcov-report/core/api/services/authorisations/index.html +21 -21
- package/coverage/lcov-report/core/api/services/{groups/groups.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
- package/coverage/lcov-report/core/api/services/{groups → configurations}/index.html +8 -8
- 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/import-export/import-export.hooks.js.html +76 -76
- package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
- package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +313 -142
- package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
- package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
- package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +112 -76
- package/coverage/lcov-report/core/api/services/push/index.html +32 -32
- package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
- package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +29 -29
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +119 -71
- package/coverage/lcov-report/core/api/services/users/index.html +27 -12
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +14 -11
- package/coverage/lcov-report/core/api/services/users/users.service.js.html +100 -0
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +1 -1
- package/coverage/lcov-report/core/common/permissions.js.html +166 -472
- package/coverage/lcov-report/core/common/schema.js.html +4 -4
- package/coverage/lcov-report/core/common/utils.js.html +31 -25
- package/coverage/lcov-report/core/common/utils.offline.js.html +199 -0
- package/coverage/lcov-report/index.html +192 -192
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +169 -31
- package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +215 -35
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- 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 +82 -7
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/index.html +22 -7
- package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
- 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 +39 -12
- package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
- 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 +86 -11
- package/coverage/lcov-report/map/api/services/features/features.service.js.html +307 -4
- package/coverage/lcov-report/map/api/services/features/index.html +7 -7
- package/coverage/lcov-report/map/api/services/index.html +5 -5
- package/coverage/lcov-report/map/api/services/index.js.html +326 -50
- package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
- package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
- package/coverage/{core/api/services/organisations → lcov-report/map/api/services/styles}/index.html +10 -25
- package/coverage/lcov-report/{core/api/services/organisations/organisations.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +7 -10
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +19 -19
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +4 -7
- package/coverage/lcov-report/map/common/permissions.js.html +10 -4
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +9 -12
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +3 -3
- package/coverage/lcov-report/map/common/wcs-utils.js.html +12 -15
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +2 -2
- package/coverage/lcov-report/map/common/wfs-utils.js.html +14 -17
- package/coverage/lcov-report/map/common/wms-utils.js.html +30 -12
- package/coverage/lcov-report/map/common/wmts-utils.js.html +10 -13
- package/coverage/lcov.info +4157 -3816
- package/coverage/map/api/hooks/hooks.catalog.js.html +169 -31
- package/coverage/map/api/hooks/hooks.features.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +215 -35
- package/coverage/map/api/hooks/index.html +7 -7
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +82 -7
- package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/index.html +22 -7
- package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
- package/coverage/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -7
- 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 +39 -12
- package/coverage/map/api/services/catalog/index.html +5 -5
- 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 +86 -11
- package/coverage/map/api/services/features/features.service.js.html +307 -4
- package/coverage/map/api/services/features/index.html +7 -7
- package/coverage/map/api/services/index.html +5 -5
- package/coverage/map/api/services/index.js.html +326 -50
- package/coverage/map/api/services/projects/index.html +1 -1
- package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
- package/coverage/{lcov-report/core/api/services/organisations → map/api/services/styles}/index.html +10 -25
- package/coverage/{core/api/services/groups/groups.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +7 -10
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +19 -19
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +4 -7
- package/coverage/map/common/permissions.js.html +10 -4
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +9 -12
- package/coverage/map/common/wcs-grid-source.js.html +3 -3
- package/coverage/map/common/wcs-utils.js.html +12 -15
- package/coverage/map/common/weacast-grid-source.js.html +2 -2
- package/coverage/map/common/wfs-utils.js.html +14 -17
- package/coverage/map/common/wms-utils.js.html +30 -12
- package/coverage/map/common/wmts-utils.js.html +10 -13
- package/coverage/tmp/coverage-1028514-1773134124472-0.json +1 -0
- package/coverage/tmp/coverage-1028526-1773134124448-0.json +1 -0
- package/coverage/tmp/coverage-1028537-1773134124431-0.json +1 -0
- package/coverage/tmp/coverage-1028549-1773134124401-0.json +1 -0
- package/coverage/tmp/coverage-1028556-1773134124353-0.json +1 -0
- package/extras/configs/widgets.top.js +3 -3
- package/extras/tests/core/collection.mjs +2 -9
- package/extras/tours/pane.top.js +0 -9
- package/map/api/hooks/hooks.catalog.js +18 -4
- package/map/api/services/catalog/catalog.hooks.js +3 -0
- package/map/api/services/features/features.hooks.js +3 -1
- package/map/api/services/index.js +2 -6
- package/map/api/services/styles/styles.hooks.js +6 -1
- package/map/client/components/KFeatureActionButton.vue +9 -3
- package/map/client/components/KFeaturesFilterManager.vue +5 -5
- package/map/client/components/KFilterCondition.vue +17 -10
- package/map/client/components/KLayerEditor.vue +49 -39
- package/map/client/components/KMeasureTool.vue +7 -1
- package/map/client/components/KTimezoneMap.vue +29 -9
- package/map/client/components/catalog/KLayersPanel.vue +26 -16
- package/map/client/components/catalog/KLayersSelector.vue +13 -2
- package/map/client/components/catalog/KViewsPanel.vue +5 -4
- package/map/client/components/form/KSelectLayersField.vue +28 -17
- package/map/client/components/form/KSelectViewsField.vue +18 -9
- package/map/client/components/form/KTimezoneField.vue +1 -2
- package/map/client/components/legend/KVariablesLegend.vue +10 -1
- package/map/client/components/location/KLocationCardSection.vue +7 -2
- package/map/client/components/location/KLocationMap.vue +31 -7
- package/map/client/components/selection/KSelectedLayerFeatures.vue +2 -2
- package/map/client/components/stickies/KZoomControl.vue +1 -1
- package/map/client/components/styles/KStyleManager.vue +4 -1
- package/map/client/components/widget/KTimeSeries.vue +174 -497
- package/map/client/components/widget/KTimeSeriesSelector.vue +72 -0
- package/map/client/components/widget/KTimeSeriesToolbar.vue +83 -0
- package/map/client/composables/catalog.js +6 -10
- package/map/client/composables/highlight.js +12 -9
- package/map/client/composables/project.js +1 -1
- package/map/client/composables/selection.js +8 -7
- package/map/client/composables/weather.js +9 -2
- package/map/client/geolocation.js +8 -5
- package/map/client/i18n/map_en.json +11 -10
- package/map/client/i18n/map_fr.json +10 -9
- package/map/client/leaflet/TiledFeatureLayer.js +85 -82
- package/map/client/leaflet/utils/utils.geojson.js +3 -3
- package/map/client/mixins/globe/mixin.base-globe.js +15 -6
- package/map/client/mixins/globe/mixin.geojson-layers.js +27 -18
- package/map/client/mixins/map/mixin.edit-layers.js +9 -1
- package/map/client/mixins/map/mixin.pmtiles-layers.js +118 -29
- package/map/client/mixins/map/mixin.tiled-mesh-layers.js +12 -5
- package/map/client/mixins/map/mixin.tiled-wind-layers.js +19 -10
- package/map/client/mixins/mixin.activity.js +23 -30
- package/map/client/mixins/mixin.feature-selection.js +41 -5
- package/map/client/planets.js +1 -1
- package/map/client/readers/reader.kml.js +2 -3
- package/map/client/utils/utils.catalog.js +36 -10
- package/map/client/utils/utils.layers.js +39 -8
- package/map/client/utils/utils.project.js +4 -0
- package/map/client/utils/utils.style.js +37 -7
- package/map/client/utils/utils.time-series.js +215 -6
- package/map/common/schemas/catalog.update.json +1 -1
- package/map/common/weacast-grid-source.js +1 -1
- package/package.json +3 -3
- package/scripts/kash/CHANGELOG.md +0 -4
- package/scripts/kash/README.md +0 -9
- package/scripts/kash/kash.sh +45 -40
- package/scripts/kash/scripts/run_tests.sh +1 -4
- package/test/api/core/authentication.test.js +9 -4
- package/test/api/core/config/default.cjs +1 -0
- package/test/api/core/hooks.test.js +6 -0
- package/test/api/core/index.test.js +43 -18
- package/test/api/core/push.test.js +8 -8
- package/test/api/core/test-log-2026-03-10.log +60 -0
- package/test/api/core/users.test.js +384 -0
- package/test/api/map/grid-sources.test.js +1 -1
- package/test/api/map/test-log-2026-03-10.log +56 -0
- package/vite/package.json +11 -2
- package/vite/test/core/composables.test.js +77 -0
- package/vite/vitest.config.js +13 -0
- package/vite/yarn.lock +1096 -18
- package/.vscode/settings.json +0 -5
- package/core/client/components/account/KAccount.vue +0 -68
- package/core/client/components/account/KDeleteAccountManager.vue +0 -62
- package/core/client/components/account/KEmailManager.vue +0 -128
- package/core/client/components/account/KPasswordManager.vue +0 -90
- package/core/client/components/account/KVerifyEmailManager.vue +0 -105
- package/core/client/components/collection/KColumn.vue +0 -227
- package/core/client/components/collection/KHistory.vue +0 -113
- package/core/client/components/collection/KHistoryEntry.vue +0 -109
- package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
- package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
- package/coverage/core/api/utils.js.html +0 -118
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
- package/coverage/lcov-report/core/api/utils.js.html +0 -118
- package/coverage/tmp/coverage-151166-1723543324307-0.json +0 -1
- package/coverage/tmp/coverage-151178-1723543324283-0.json +0 -1
- package/coverage/tmp/coverage-151189-1723543324271-0.json +0 -1
- package/coverage/tmp/coverage-151201-1723543324248-0.json +0 -1
- package/coverage/tmp/coverage-151208-1723543324227-0.json +0 -1
- package/scripts/kash/LICENSE +0 -21
- package/test/api/core/test-log-2024-04-22.log +0 -84
- package/test/api/core/test-log-2024-04-23.log +0 -23
- package/test/api/core/test-log-2024-08-13.log +0 -3
- package/test/api/map/test-log-2025-03-08.log +0 -0
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/336</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/336</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -307,7 +307,191 @@
|
|
|
307
307
|
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
308
|
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
309
|
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-no"> </span>
|
|
407
|
+
<span class="cline-any cline-no"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
|
+
<span class="cline-any cline-no"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
|
+
<span class="cline-any cline-no"> </span>
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-no"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
418
|
+
<span class="cline-any cline-no"> </span>
|
|
419
|
+
<span class="cline-any cline-no"> </span>
|
|
420
|
+
<span class="cline-any cline-no"> </span>
|
|
421
|
+
<span class="cline-any cline-no"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-no"> </span>
|
|
424
|
+
<span class="cline-any cline-no"> </span>
|
|
425
|
+
<span class="cline-any cline-no"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
427
|
+
<span class="cline-any cline-no"> </span>
|
|
428
|
+
<span class="cline-any cline-no"> </span>
|
|
429
|
+
<span class="cline-any cline-no"> </span>
|
|
430
|
+
<span class="cline-any cline-no"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
433
|
+
<span class="cline-any cline-no"> </span>
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
435
|
+
<span class="cline-any cline-no"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-no"> </span>
|
|
438
|
+
<span class="cline-any cline-no"> </span>
|
|
439
|
+
<span class="cline-any cline-no"> </span>
|
|
440
|
+
<span class="cline-any cline-no"> </span>
|
|
441
|
+
<span class="cline-any cline-no"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
444
|
+
<span class="cline-any cline-no"> </span>
|
|
445
|
+
<span class="cline-any cline-no"> </span>
|
|
446
|
+
<span class="cline-any cline-no"> </span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
449
|
+
<span class="cline-any cline-no"> </span>
|
|
450
|
+
<span class="cline-any cline-no"> </span>
|
|
451
|
+
<span class="cline-any cline-no"> </span>
|
|
452
|
+
<span class="cline-any cline-no"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-no"> </span>
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-no"> </span>
|
|
460
|
+
<span class="cline-any cline-no"> </span>
|
|
461
|
+
<span class="cline-any cline-no"> </span>
|
|
462
|
+
<span class="cline-any cline-no"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
466
|
+
<span class="cline-any cline-no"> </span>
|
|
467
|
+
<span class="cline-any cline-no"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-no"> </span>
|
|
470
|
+
<span class="cline-any cline-no"> </span>
|
|
471
|
+
<span class="cline-any cline-no"> </span>
|
|
472
|
+
<span class="cline-any cline-no"> </span>
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
|
+
<span class="cline-any cline-no"> </span>
|
|
475
|
+
<span class="cline-any cline-no"> </span>
|
|
476
|
+
<span class="cline-any cline-no"> </span>
|
|
477
|
+
<span class="cline-any cline-no"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-no"> </span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-no"> </span>
|
|
486
|
+
<span class="cline-any cline-no"> </span>
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-no"> </span>
|
|
490
|
+
<span class="cline-any cline-no"> </span>
|
|
491
|
+
<span class="cline-any cline-no"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-no"> </span>
|
|
311
495
|
<span class="cline-any cline-no"> </span>
|
|
312
496
|
<span class="cline-any cline-no"> </span>
|
|
313
497
|
<span class="cline-any cline-no"> </span>
|
|
@@ -570,7 +754,7 @@
|
|
|
570
754
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
571
755
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
572
756
|
<span class="cstat-no" title="statement not covered" > debug('Creating features service with options', options)</span>
|
|
573
|
-
<span class="cstat-no" title="statement not covered" >
|
|
757
|
+
<span class="cstat-no" title="statement not covered" > const service = app.createService(options.collection, Object.assign({</span>
|
|
574
758
|
<span class="cstat-no" title="statement not covered" > modelName: 'features',</span>
|
|
575
759
|
<span class="cstat-no" title="statement not covered" > servicesPath,</span>
|
|
576
760
|
<span class="cstat-no" title="statement not covered" > modelsPath,</span>
|
|
@@ -578,28 +762,46 @@
|
|
|
578
762
|
<span class="cstat-no" title="statement not covered" > // FIXME: no real-time events for now since we create big batches,</span>
|
|
579
763
|
<span class="cstat-no" title="statement not covered" > // does not seem to be sufficient also require a hook (see https://github.com/feathersjs/feathers/issues/922)</span>
|
|
580
764
|
<span class="cstat-no" title="statement not covered" > events: ['features'],</span>
|
|
581
|
-
<span class="cstat-no" title="statement not covered" > methods: ['find', 'get', 'create', 'update', 'patch', 'remove', 'heatmap']</span>
|
|
765
|
+
<span class="cstat-no" title="statement not covered" > methods: ['find', 'get', 'create', 'update', 'patch', 'remove', 'heatmap', 'formatGeoJSON']</span>
|
|
582
766
|
<span class="cstat-no" title="statement not covered" > }, options))</span>
|
|
767
|
+
<span class="cstat-no" title="statement not covered" > // As a features service can be created dynamically register default permissions for it</span>
|
|
768
|
+
<span class="cstat-no" title="statement not covered" > permissions.defineAbilities.registerHook((subject, can, cannot) => {</span>
|
|
769
|
+
<span class="cstat-no" title="statement not covered" > can('service', options.collection)</span>
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > can('read', options.collection)</span>
|
|
771
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
772
|
+
<span class="cstat-no" title="statement not covered" > // We then need to update abilities cache</span>
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > const authorisationService = app.getService('authorisations')</span>
|
|
774
|
+
<span class="cstat-no" title="statement not covered" > if (authorisationService) authorisationService.clearAbilities()</span>
|
|
775
|
+
<span class="cstat-no" title="statement not covered" > return service</span>
|
|
583
776
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
584
777
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
585
778
|
<span class="cstat-no" title="statement not covered" >export function removeFeaturesService (options = {}) {</span>
|
|
586
779
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
780
|
+
<span class="cstat-no" title="statement not covered" > debug('Removing features service with options', options)</span>
|
|
587
781
|
<span class="cstat-no" title="statement not covered" > return app.removeService(app.getService(options.collection, options.context))</span>
|
|
588
782
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
589
783
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
590
784
|
<span class="cstat-no" title="statement not covered" >export function createCatalogService (options = {}) {</span>
|
|
591
785
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
592
786
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > // Read default categories/sublegends config, which can be overriden by options</span>
|
|
788
|
+
<span class="cstat-no" title="statement not covered" > const catalogConfig = app.get('catalog') || {}</span>
|
|
789
|
+
<span class="cstat-no" title="statement not covered" > const categories = catalogConfig.categories</span>
|
|
790
|
+
<span class="cstat-no" title="statement not covered" > const sublegends = catalogConfig.sublegends</span>
|
|
791
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
593
792
|
<span class="cstat-no" title="statement not covered" > debug('Creating catalog service with options', options)</span>
|
|
594
793
|
<span class="cstat-no" title="statement not covered" > return app.createService('catalog', Object.assign({</span>
|
|
595
794
|
<span class="cstat-no" title="statement not covered" > servicesPath,</span>
|
|
596
795
|
<span class="cstat-no" title="statement not covered" > modelsPath,</span>
|
|
597
|
-
<span class="cstat-no" title="statement not covered" > paginate: { default: 1000, max: 1000 }
|
|
796
|
+
<span class="cstat-no" title="statement not covered" > paginate: { default: 1000, max: 1000 },</span>
|
|
797
|
+
<span class="cstat-no" title="statement not covered" > categories,</span>
|
|
798
|
+
<span class="cstat-no" title="statement not covered" > sublegends</span>
|
|
598
799
|
<span class="cstat-no" title="statement not covered" > }, options))</span>
|
|
599
800
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
600
801
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
601
802
|
<span class="cstat-no" title="statement not covered" >export function removeCatalogService (options = {}) {</span>
|
|
602
803
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
804
|
+
<span class="cstat-no" title="statement not covered" > debug('Removing catalog service with options', options)</span>
|
|
603
805
|
<span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('catalog', options.context))</span>
|
|
604
806
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
605
807
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -616,6 +818,7 @@
|
|
|
616
818
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
617
819
|
<span class="cstat-no" title="statement not covered" >export function removeProjectsService (options = {}) {</span>
|
|
618
820
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
821
|
+
<span class="cstat-no" title="statement not covered" > debug('Removing projects service with options', options)</span>
|
|
619
822
|
<span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('projects', options.context))</span>
|
|
620
823
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
621
824
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -633,81 +836,107 @@
|
|
|
633
836
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
634
837
|
<span class="cstat-no" title="statement not covered" >export function removeAlertsService (options = {}) {</span>
|
|
635
838
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
839
|
+
<span class="cstat-no" title="statement not covered" > debug('Removing alerts service with options', options)</span>
|
|
636
840
|
<span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('alerts', options.context))</span>
|
|
637
841
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
638
842
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
639
843
|
<span class="cstat-no" title="statement not covered" >// Helper to register service and permissions for a layer</span>
|
|
640
|
-
<span class="cstat-no" title="statement not covered" >export async function createFeaturesServiceForLayer (
|
|
844
|
+
<span class="cstat-no" title="statement not covered" >export async function createFeaturesServiceForLayer (layer, context) {</span>
|
|
641
845
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
642
|
-
<span class="cstat-no" title="statement not covered" >
|
|
643
|
-
<span class="cstat-no" title="statement not covered" > //
|
|
644
|
-
<span class="cstat-no" title="statement not covered" >
|
|
645
|
-
<span class="cstat-no" title="statement not covered" >
|
|
646
|
-
<span class="cstat-no" title="statement not covered" >
|
|
647
|
-
<span class="cstat-no" title="statement not covered" >
|
|
648
|
-
<span class="cstat-no" title="statement not covered" >
|
|
846
|
+
<span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer</span>
|
|
847
|
+
<span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
|
|
848
|
+
<span class="cstat-no" title="statement not covered" > let probeService = (layer.probeService ? app.getService(layer.probeService, context) : null)</span>
|
|
849
|
+
<span class="cstat-no" title="statement not covered" > if (layer.probeService && !probeService) {</span>
|
|
850
|
+
<span class="cstat-no" title="statement not covered" > probeService = await createFeaturesService.call(app, Object.assign({</span>
|
|
851
|
+
<span class="cstat-no" title="statement not covered" > collection: layer.probeService,</span>
|
|
852
|
+
<span class="cstat-no" title="statement not covered" > context,</span>
|
|
853
|
+
<span class="cstat-no" title="statement not covered" > db: app.db.db(layer.dbName)</span>
|
|
854
|
+
<span class="cstat-no" title="statement not covered" > }, _.pick(layer, ['featureLabel', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
|
|
855
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
856
|
+
<span class="cstat-no" title="statement not covered" > let service = (layer.service ? app.getService(layer.service, context) : null)</span>
|
|
857
|
+
<span class="cstat-no" title="statement not covered" > if (layer.service && !service) {</span>
|
|
858
|
+
<span class="cstat-no" title="statement not covered" > service = await createFeaturesService.call(app, Object.assign({</span>
|
|
859
|
+
<span class="cstat-no" title="statement not covered" > collection: layer.service,</span>
|
|
860
|
+
<span class="cstat-no" title="statement not covered" > context,</span>
|
|
861
|
+
<span class="cstat-no" title="statement not covered" > db: app.db.db(layer.dbName)</span>
|
|
862
|
+
<span class="cstat-no" title="statement not covered" > }, _.pick(layer, ['ttl', 'featureId', 'featureIdType', 'featureLabel', 'variables', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
|
|
863
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
864
|
+
<span class="cstat-no" title="statement not covered" > return service || probeService</span>
|
|
865
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
866
|
+
<span class="cstat-no" title="statement not covered" >// Helper to unregister service for a layer</span>
|
|
867
|
+
<span class="cstat-no" title="statement not covered" >export async function removeFeaturesServiceForLayer (layer, context) {</span>
|
|
868
|
+
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
869
|
+
<span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer and remove it</span>
|
|
870
|
+
<span class="cstat-no" title="statement not covered" > let probeService = (layer.probeService ? app.getService(layer.probeService, context) : null)</span>
|
|
871
|
+
<span class="cstat-no" title="statement not covered" > if (layer.probeService && probeService) {</span>
|
|
872
|
+
<span class="cstat-no" title="statement not covered" > probeService = await removeFeaturesService.call(app, { collection: layer.probeService, context })</span>
|
|
873
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
874
|
+
<span class="cstat-no" title="statement not covered" > let service = (layer.service ? app.getService(layer.service, context) : null)</span>
|
|
875
|
+
<span class="cstat-no" title="statement not covered" > if (layer.service && service) {</span>
|
|
876
|
+
<span class="cstat-no" title="statement not covered" > service = await removeFeaturesService.call(app, { collection: layer.service, context })</span>
|
|
877
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
878
|
+
<span class="cstat-no" title="statement not covered" > return service || probeService</span>
|
|
649
879
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
650
880
|
<span class="cstat-no" title="statement not covered" >// Helper to create features from source for a layer</span>
|
|
651
|
-
<span class="cstat-no" title="statement not covered" >export async function createFeaturesForLayer (features, layer, options) {</span>
|
|
881
|
+
<span class="cstat-no" title="statement not covered" >export async function createFeaturesForLayer (features, layer, options = {}) {</span>
|
|
652
882
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
653
|
-
<span class="cstat-no" title="statement not covered" > const featuresService = app.getService(layer.service)</span>
|
|
883
|
+
<span class="cstat-no" title="statement not covered" > const featuresService = app.getService(layer.service, options.context)</span>
|
|
654
884
|
<span class="cstat-no" title="statement not covered" > if (options && options.filter) features = await options.filter(features, layer, app)</span>
|
|
885
|
+
<span class="cstat-no" title="statement not covered" > // User-defined layers requires layer ID</span>
|
|
886
|
+
<span class="cstat-no" title="statement not covered" > if (layer.service === 'features') {</span>
|
|
887
|
+
<span class="cstat-no" title="statement not covered" > features.forEach(feature => {</span>
|
|
888
|
+
<span class="cstat-no" title="statement not covered" > feature.layer = layer._id</span>
|
|
889
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
890
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
655
891
|
<span class="cstat-no" title="statement not covered" > if (!features.length) return</span>
|
|
656
892
|
<span class="cstat-no" title="statement not covered" > // The unordered option ensure a faster processing when inserting multiple items</span>
|
|
657
893
|
<span class="cstat-no" title="statement not covered" > // and that after an error remaining write operations in the queue will continue anyway</span>
|
|
658
894
|
<span class="cstat-no" title="statement not covered" > await featuresService.create(features, { mongodb: { ordered: false } })</span>
|
|
659
895
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
660
896
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
661
|
-
<span class="cstat-no" title="statement not covered"
|
|
897
|
+
<span class="cstat-no" title="statement not covered" >// Read default layers configured and create, if not found in DB, or update it accordingly</span>
|
|
898
|
+
<span class="cstat-no" title="statement not covered" >// Will also clean and feed default data (ie features) if provided as input file</span>
|
|
899
|
+
<span class="cstat-no" title="statement not covered" >export async function createDefaultCatalogLayers (options = {}) {</span>
|
|
662
900
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
663
|
-
<span class="cstat-no" title="statement not covered" >
|
|
664
|
-
<span class="cstat-no" title="statement not covered" > let context</span>
|
|
665
|
-
<span class="cstat-no" title="statement not covered" > if (typeof options === 'object') {</span>
|
|
666
|
-
<span class="cstat-no" title="statement not covered" > if (options.context) context = options.context</span>
|
|
667
|
-
<span class="cstat-no" title="statement not covered" > else if (options._id) context = options</span>
|
|
668
|
-
<span class="cstat-no" title="statement not covered" > } else if (typeof options === 'string') context = options</span>
|
|
669
|
-
<span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', context)</span>
|
|
901
|
+
<span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', options.context)</span>
|
|
670
902
|
<span class="cstat-no" title="statement not covered" > const catalog = app.get('catalog')</span>
|
|
671
903
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
672
904
|
<span class="cstat-no" title="statement not covered" > const defaultLayers = catalog ? catalog.layers || [] : []</span>
|
|
673
905
|
<span class="cstat-no" title="statement not covered" > const layers = await catalogService.find({ query: {}, paginate: false })</span>
|
|
674
906
|
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < defaultLayers.length; i++) {</span>
|
|
675
907
|
<span class="cstat-no" title="statement not covered" > const defaultLayer = defaultLayers[i]</span>
|
|
676
|
-
<span class="cstat-no" title="statement not covered" >
|
|
908
|
+
<span class="cstat-no" title="statement not covered" > let createdLayer = _.find(layers, { name: defaultLayer.name })</span>
|
|
909
|
+
<span class="cstat-no" title="statement not covered" > const isLayerAlreadyCreated = !_.isNil(createdLayer)</span>
|
|
910
|
+
<span class="cstat-no" title="statement not covered" > let featuresService</span>
|
|
677
911
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
912
|
+
<span class="cstat-no" title="statement not covered" > // Used to filter properties only used to initialize a layer and related data</span>
|
|
913
|
+
<span class="cstat-no" title="statement not covered" > const reservedProperties = ['filter', 'url', 'fileName', 'forceDataUpdate']</span>
|
|
678
914
|
<span class="cstat-no" title="statement not covered" > // Create or update the layer removing any option only used to manage layer setup</span>
|
|
679
|
-
<span class="cstat-no" title="statement not covered" > if (!
|
|
915
|
+
<span class="cstat-no" title="statement not covered" > if (!isLayerAlreadyCreated) {</span>
|
|
680
916
|
<span class="cstat-no" title="statement not covered" > app.logger.info('Adding default layer (name = ' + defaultLayer.name + ')')</span>
|
|
681
|
-
<span class="cstat-no" title="statement not covered" > await catalogService.create(_.omit(defaultLayer,
|
|
917
|
+
<span class="cstat-no" title="statement not covered" > createdLayer = await catalogService.create(_.omit(defaultLayer, reservedProperties))</span>
|
|
682
918
|
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
683
919
|
<span class="cstat-no" title="statement not covered" > app.logger.info('Updating default layer (name = ' + defaultLayer.name + ')')</span>
|
|
684
|
-
<span class="cstat-no" title="statement not covered" > await catalogService.update(createdLayer._id, _.omit(defaultLayer,
|
|
920
|
+
<span class="cstat-no" title="statement not covered" > createdLayer = await catalogService.update(createdLayer._id, _.omit(defaultLayer, reservedProperties))</span>
|
|
921
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
922
|
+
<span class="cstat-no" title="statement not covered" > // Features creation might require the layer ID</span>
|
|
923
|
+
<span class="cstat-no" title="statement not covered" > defaultLayer._id = createdLayer._id</span>
|
|
924
|
+
<span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer and create the related service(s) if required</span>
|
|
925
|
+
<span class="cstat-no" title="statement not covered" > if (defaultLayer.service) {</span>
|
|
926
|
+
<span class="cstat-no" title="statement not covered" > featuresService = app.getService(defaultLayer.service)</span>
|
|
927
|
+
<span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
|
|
928
|
+
<span class="cstat-no" title="statement not covered" > featuresService = await createFeaturesServiceForLayer.call(app, defaultLayer, options.context)</span>
|
|
685
929
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
686
930
|
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
687
931
|
<span class="cstat-no" title="statement not covered" > console.error(error)</span>
|
|
688
932
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
689
|
-
<span class="cstat-no" title="statement not covered" > // Check if service(s) are associated to this layer</span>
|
|
690
|
-
<span class="cstat-no" title="statement not covered" > let featuresService</span>
|
|
691
|
-
<span class="cstat-no" title="statement not covered" > if (defaultLayer.service) {</span>
|
|
692
|
-
<span class="cstat-no" title="statement not covered" > featuresService = app.getService(defaultLayer.service)</span>
|
|
693
|
-
<span class="cstat-no" title="statement not covered" > // Avoid create it twice as we can share services between different layers</span>
|
|
694
|
-
<span class="cstat-no" title="statement not covered" > if (featuresService) continue</span>
|
|
695
|
-
<span class="cstat-no" title="statement not covered" > featuresService = await createFeaturesServiceForLayer.call(app, Object.assign({</span>
|
|
696
|
-
<span class="cstat-no" title="statement not covered" > collection: defaultLayer.service,</span>
|
|
697
|
-
<span class="cstat-no" title="statement not covered" > db: app.db.db(defaultLayer.dbName)</span>
|
|
698
|
-
<span class="cstat-no" title="statement not covered" > }, _.pick(defaultLayer, ['ttl', 'featureId', 'featureIdType', 'featureLabel', 'variables', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
|
|
699
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
700
|
-
<span class="cstat-no" title="statement not covered" > if (defaultLayer.probeService) {</span>
|
|
701
|
-
<span class="cstat-no" title="statement not covered" > await createFeaturesServiceForLayer.call(app, Object.assign({</span>
|
|
702
|
-
<span class="cstat-no" title="statement not covered" > collection: defaultLayer.probeService,</span>
|
|
703
|
-
<span class="cstat-no" title="statement not covered" > db: app.db.db(defaultLayer.dbName)</span>
|
|
704
|
-
<span class="cstat-no" title="statement not covered" > }, _.pick(defaultLayer, ['featureLabel', 'simplifyResult', 'skipEvents', 'simplifyEvents'])))</span>
|
|
705
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
706
933
|
<span class="cstat-no" title="statement not covered" > // And if we need to initialize some data as well</span>
|
|
707
|
-
<span class="cstat-no" title="statement not covered" > if (!
|
|
934
|
+
<span class="cstat-no" title="statement not covered" > if ((!isLayerAlreadyCreated || defaultLayer.forceDataUpdate) && featuresService && (defaultLayer.url || defaultLayer.fileName)) {</span>
|
|
935
|
+
<span class="cstat-no" title="statement not covered" > app.logger.info('Updating data for default layer (name = ' + defaultLayer.name + ')')</span>
|
|
708
936
|
<span class="cstat-no" title="statement not covered" > // Cleanup</span>
|
|
709
937
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
710
|
-
<span class="cstat-no" title="statement not covered" >
|
|
938
|
+
<span class="cstat-no" title="statement not covered" > // Keep track of user-created content for editable layer, ie features having a layer ID</span>
|
|
939
|
+
<span class="cstat-no" title="statement not covered" > await featuresService.remove(null, { query: { layer: { $exists: false } } })</span>
|
|
711
940
|
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
712
941
|
<span class="cstat-no" title="statement not covered" > console.error(error)</span>
|
|
713
942
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -725,9 +954,11 @@
|
|
|
725
954
|
<span class="cstat-no" title="statement not covered" > .pipe(zlib.createGunzip())</span>
|
|
726
955
|
<span class="cstat-no" title="statement not covered" > .pipe(fs.createWriteStream(extractedFileName))</span>
|
|
727
956
|
<span class="cstat-no" title="statement not covered" > .on('close', async () => {</span>
|
|
728
|
-
<span class="cstat-no" title="statement not covered" >
|
|
957
|
+
<span class="cstat-no" title="statement not covered" > let geojson = fs.readJsonSync(extractedFileName)</span>
|
|
958
|
+
<span class="cstat-no" title="statement not covered" > // We allow GeoJson collection or features array</span>
|
|
959
|
+
<span class="cstat-no" title="statement not covered" > geojson = Array.isArray(geojson) ? geojson : geojson.features</span>
|
|
729
960
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
730
|
-
<span class="cstat-no" title="statement not covered" > await createFeaturesForLayer.call(app, geojson
|
|
961
|
+
<span class="cstat-no" title="statement not covered" > await createFeaturesForLayer.call(app, geojson, defaultLayer, options)</span>
|
|
731
962
|
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
732
963
|
<span class="cstat-no" title="statement not covered" > console.error(error)</span>
|
|
733
964
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -745,6 +976,46 @@
|
|
|
745
976
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
746
977
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
747
978
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
979
|
+
<span class="cstat-no" title="statement not covered" >// Create the required features services for layers found in catalog</span>
|
|
980
|
+
<span class="cstat-no" title="statement not covered" >export async function createCatalogFeaturesServices (options = {}) {</span>
|
|
981
|
+
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
982
|
+
<span class="cstat-no" title="statement not covered" > const catalogService = app.getService('catalog', options.context)</span>
|
|
983
|
+
<span class="cstat-no" title="statement not covered" > const layers = await catalogService.find({ query: { service: { $exists: true } }, paginate: false, $select: ['service'] })</span>
|
|
984
|
+
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < layers.length; i++) {</span>
|
|
985
|
+
<span class="cstat-no" title="statement not covered" > await createFeaturesServiceForLayer.call(app, layers[i], options.context)</span>
|
|
986
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
987
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
988
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
989
|
+
<span class="cstat-no" title="statement not covered" >export function createStylesService (options = {}) {</span>
|
|
990
|
+
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
991
|
+
<span class="cstat-no" title="statement not covered" > return app.createService('styles', Object.assign({</span>
|
|
992
|
+
<span class="cstat-no" title="statement not covered" > servicesPath,</span>
|
|
993
|
+
<span class="cstat-no" title="statement not covered" > modelsPath</span>
|
|
994
|
+
<span class="cstat-no" title="statement not covered" > }, options))</span>
|
|
995
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
996
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
997
|
+
<span class="cstat-no" title="statement not covered" >export function removeStylesService (options = {}) {</span>
|
|
998
|
+
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
999
|
+
<span class="cstat-no" title="statement not covered" > return app.removeService(app.getService('styles', options.context))</span>
|
|
1000
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1001
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1002
|
+
<span class="cstat-no" title="statement not covered" >export async function createDefaultStyles (context) {</span>
|
|
1003
|
+
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
1004
|
+
<span class="cstat-no" title="statement not covered" > const defaultStyles = app.get('styles').defaultStyles</span>
|
|
1005
|
+
<span class="cstat-no" title="statement not covered" > if (!defaultStyles) return</span>
|
|
1006
|
+
<span class="cstat-no" title="statement not covered" > const stylesService = app.getService('styles', context)</span>
|
|
1007
|
+
<span class="cstat-no" title="statement not covered" > // Create default styles if not already done</span>
|
|
1008
|
+
<span class="cstat-no" title="statement not covered" > const styles = await stylesService.find({ paginate: false })</span>
|
|
1009
|
+
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < defaultStyles.length; i++) {</span>
|
|
1010
|
+
<span class="cstat-no" title="statement not covered" > const defaultStyle = defaultStyles[i]</span>
|
|
1011
|
+
<span class="cstat-no" title="statement not covered" > const createdStyle = _.find(styles, { name: defaultStyle.name })</span>
|
|
1012
|
+
<span class="cstat-no" title="statement not covered" > if (!createdStyle) {</span>
|
|
1013
|
+
<span class="cstat-no" title="statement not covered" > app.logger.info('Initializing default style (name = ' + defaultStyle.name + ')')</span>
|
|
1014
|
+
<span class="cstat-no" title="statement not covered" > await stylesService.create(defaultStyle)</span>
|
|
1015
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1016
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1017
|
+
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1018
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
748
1019
|
<span class="cstat-no" title="statement not covered" >export default async function () {</span>
|
|
749
1020
|
<span class="cstat-no" title="statement not covered" > const app = this</span>
|
|
750
1021
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -768,6 +1039,11 @@
|
|
|
768
1039
|
<span class="cstat-no" title="statement not covered" > if (alertsConfig) {</span>
|
|
769
1040
|
<span class="cstat-no" title="statement not covered" > await createAlertsService.call(app)</span>
|
|
770
1041
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1042
|
+
<span class="cstat-no" title="statement not covered" > const stylesConfig = app.get('styles')</span>
|
|
1043
|
+
<span class="cstat-no" title="statement not covered" > if (stylesConfig) {</span>
|
|
1044
|
+
<span class="cstat-no" title="statement not covered" > await createStylesService.call(app, stylesConfig)</span>
|
|
1045
|
+
<span class="cstat-no" title="statement not covered" > debug('\'styles\' service created')</span>
|
|
1046
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
771
1047
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
772
1048
|
<span class="cstat-no" title="statement not covered" > /*</span>
|
|
773
1049
|
<span class="cstat-no" title="statement not covered" > app.createService('daptiles', Object.assign({</span>
|
|
@@ -802,7 +1078,7 @@
|
|
|
802
1078
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
803
1079
|
Code coverage generated by
|
|
804
1080
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
805
|
-
at
|
|
1081
|
+
at 2026-03-10T09:15:24.774Z
|
|
806
1082
|
</div>
|
|
807
1083
|
<script src="../../../prettify.js"></script>
|
|
808
1084
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at
|
|
104
|
+
at 2026-03-10T09:15:24.774Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
425
425
|
Code coverage generated by
|
|
426
426
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
427
|
-
at
|
|
427
|
+
at 2026-03-10T09:15:24.774Z
|
|
428
428
|
</div>
|
|
429
429
|
<script src="../../../../prettify.js"></script>
|
|
430
430
|
<script>
|