diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 134be4a50010..fb4dcd2a7453 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1196,7 +1196,7 @@ configurator_deb11:
- .test_script_job
- .test_devel_and_maintenance_rules
-pfappserver_el8:
+pfappserver_configurator_el8:
variables:
VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
extends:
@@ -1204,7 +1204,23 @@ pfappserver_el8:
- .test_script_job
- .test_devel_and_maintenance_rules
-pfappserver_deb11:
+pfappserver_configurator_deb11:
+ variables:
+ VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
+ extends:
+ - .test_job
+ - .test_script_job
+ - .test_devel_and_maintenance_rules
+
+pfappserver_configuration_el8:
+ variables:
+ VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
+ extends:
+ - .test_job
+ - .test_script_job
+ - .test_devel_and_maintenance_rules
+
+pfappserver_configuration_deb11:
variables:
VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
extends:
@@ -1361,7 +1377,25 @@ configurator_deb11_branches:
- .test_script_job
- .test_branches_only_rules
-pfappserver_el8_branches:
+pfappserver_configurator_el8_branches:
+ variables:
+ VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
+ VAGRANT_COMMON_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-common-devel
+ extends:
+ - .test_job
+ - .test_script_job
+ - .test_branches_only_rules
+
+pfappserver_configurator_deb11_branches:
+ variables:
+ VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
+ VAGRANT_COMMON_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-common-devel
+ extends:
+ - .test_job
+ - .test_script_job
+ - .test_branches_only_rules
+
+pfappserver_configuration_el8_branches:
variables:
VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
VAGRANT_COMMON_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-common-devel
@@ -1370,7 +1404,7 @@ pfappserver_el8_branches:
- .test_script_job
- .test_branches_only_rules
-pfappserver_deb11_branches:
+pfappserver_configuration_deb11_branches:
variables:
VAGRANT_PF_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-${CI_JOB_NAME}-${CI_JOB_ID}
VAGRANT_COMMON_DOTFILE_PATH: /var/local/gitlab-runner/vagrant/vagrant-common-devel
diff --git a/html/pfappserver/root/src/App.vue b/html/pfappserver/root/src/App.vue
index f625af383e74..c2ddb2080a9c 100644
--- a/html/pfappserver/root/src/App.vue
+++ b/html/pfappserver/root/src/App.vue
@@ -67,8 +67,9 @@
{{ hostname }}
-
+
+
@@ -192,6 +193,8 @@ const setup = (props, context) => {
})
}, { immediate: true })
+ const CatchNavigationDuplicated = e => { if (e.name !== "NavigationDuplicated") throw e }
+
useEvent('keydown', e => {
const { altKey = false, shiftKey = false, keyCode = false } = e
if (altKey && shiftKey) {
@@ -199,37 +202,37 @@ const setup = (props, context) => {
case keyCode === 65 && canRoute('/auditing'): // A
e.preventDefault()
$router.push('/auditing')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 67 && canRoute('/configuration'): // C
e.preventDefault()
$router.push('/configuration')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 72: // H
e.preventDefault()
$store.dispatch('documentation/toggleViewer')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 78 && canRoute('/nodes'): // N
e.preventDefault()
$router.push('/nodes')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 82 && canRoute('/reports'): // R
e.preventDefault()
$router.push('/reports')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 83 && canRoute('/status'): // S
e.preventDefault()
$router.push('/status')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
case keyCode === 85 && canRoute('/users'): // U
e.preventDefault()
$router.push('/users')
- .catch(e => { if (e.name !== "NavigationDuplicated") throw e })
+ .catch(CatchNavigationDuplicated)
break
default:
break
diff --git a/html/pfappserver/root/src/components/new/BaseButtonConfirm.vue b/html/pfappserver/root/src/components/new/BaseButtonConfirm.vue
index 97c27b6feaf7..dbe69dd5be29 100644
--- a/html/pfappserver/root/src/components/new/BaseButtonConfirm.vue
+++ b/html/pfappserver/root/src/components/new/BaseButtonConfirm.vue
@@ -21,6 +21,7 @@
([
- { text: 'Windows Phone OS', value: '33507' },
- { text: 'Mac OS X or macOS', value: '2' },
- { text: 'Android OS', value: '33453' },
- { text: 'Windows OS', value: '1' },
- { text: 'BlackBerry OS', value: '33471' },
- { text: 'iOS', value: '33450' },
- { text: 'Linux OS', value: '5' }
- ])
+ default: () => Object.entries(oses).map(([value, text]) => ({ text, value }))
}
}
diff --git a/html/pfappserver/root/src/views/Configuration/billingTiers/schema.js b/html/pfappserver/root/src/views/Configuration/billingTiers/schema.js
index 8f211f01f1e1..f8adc2a075a5 100644
--- a/html/pfappserver/root/src/views/Configuration/billingTiers/schema.js
+++ b/html/pfappserver/root/src/views/Configuration/billingTiers/schema.js
@@ -29,10 +29,14 @@ export default (props) => {
.nullable()
.required(i18n.t('Billing Tier required.'))
.billingTierIdentifierNotExistsExcept((!isNew && !isClone) ? id : undefined, i18n.t('Billing Tier exists.')),
- name: yup.string().nullable().label(i18n.t('Name')),
- description: yup.string().nullable().label(i18n.t('Description')),
+ name: yup.string().nullable().label(i18n.t('Name'))
+ .required(i18n.t('Name required.')),
+ description: yup.string().nullable().label(i18n.t('Description'))
+ .required(i18n.t('Description required.')),
price: yup.string().nullable().label(i18n.t('Price'))
- .isPrice(i18n.t('Invalid price.')),
+ .isPrice(i18n.t('Invalid price.'))
+ .required(i18n.t('Price required.')),
role: yup.string().nullable().label(i18n.t('Role'))
+ .required(i18n.t('Role required.'))
})
}
diff --git a/html/pfappserver/root/src/views/Configuration/connectionProfiles/_components/BaseFilter.vue b/html/pfappserver/root/src/views/Configuration/connectionProfiles/_components/BaseFilter.vue
index 5bd67cffa668..f31543fadff7 100644
--- a/html/pfappserver/root/src/views/Configuration/connectionProfiles/_components/BaseFilter.vue
+++ b/html/pfappserver/root/src/views/Configuration/connectionProfiles/_components/BaseFilter.vue
@@ -141,7 +141,7 @@ const setup = (props, context) => {
}
}
}
- return undefined
+ return BaseInput
})
const matchOptions = ref([])
diff --git a/html/pfappserver/root/src/views/Configuration/connectors/schema.js b/html/pfappserver/root/src/views/Configuration/connectors/schema.js
index af104ffa2bdd..9d7acd671c64 100644
--- a/html/pfappserver/root/src/views/Configuration/connectors/schema.js
+++ b/html/pfappserver/root/src/views/Configuration/connectors/schema.js
@@ -37,7 +37,10 @@ export default (props) => {
.nullable()
.required(i18n.t('Connector ID required.'))
.connectorIdentifierNotExistsExcept((!isNew && !isClone) ? id : undefined, i18n.t('Connector ID exists.')),
- description: yup.string().nullable().label(i18n.t('Description')),
- networks: schemaNetworks
+ description: yup.string().nullable().label(i18n.t('Description'))
+ .required(i18n.t('Description required.')),
+ networks: schemaNetworks,
+ secret: yup.string().nullable().label(i18n.t('Secret'))
+ .required(i18n.t('Secret required.'))
})
}
diff --git a/html/pfappserver/root/src/views/Configuration/floatingDevices/schema.js b/html/pfappserver/root/src/views/Configuration/floatingDevices/schema.js
index 44ddf8054a52..a8d3e11b0023 100644
--- a/html/pfappserver/root/src/views/Configuration/floatingDevices/schema.js
+++ b/html/pfappserver/root/src/views/Configuration/floatingDevices/schema.js
@@ -31,7 +31,8 @@ export default (props) => {
.isMAC(i18n.t('Invalid MAC address.'))
.floatingDeviceIdentifierNotExistsExcept((!isNew && !isClone) ? id : undefined, i18n.t('MAC Address exists.')),
ip: yup.string().nullable().label('IP'),
- pvid: yup.string().nullable().label('VLAN'),
+ pvid: yup.string().nullable().label('VLAN')
+ .required(i18n.t('VLAN required.')),
taggedVlan: yup.string().nullable().label('VLAN')
})
}
diff --git a/html/pfappserver/root/src/views/Configuration/pki/config.js b/html/pfappserver/root/src/views/Configuration/pki/config.js
index 8a3275ee75d3..a97b37914883 100644
--- a/html/pfappserver/root/src/views/Configuration/pki/config.js
+++ b/html/pfappserver/root/src/views/Configuration/pki/config.js
@@ -1,31 +1,17 @@
import { computed } from '@vue/composition-api'
import i18n from '@/utils/locale'
-export const digests = [
- { value: '0', text: 'UnknownSignatureAlgorithm' },
- { value: '1', text: 'MD2WithRSA' },
- { value: '2', text: 'MD5WithRSA' },
- { value: '3', text: 'SHA1WithRSA' },
- { value: '4', text: 'SHA256WithRSA' },
- { value: '5', text: 'SHA384WithRSA' },
- { value: '6', text: 'SHA512WithRSA' },
- { value: '7', text: 'DSAWithSHA1' },
- { value: '8', text: 'DSAWithSHA256' },
- { value: '9', text: 'ECDSAWithSHA1' },
- { value: '10', text: 'ECDSAWithSHA256' },
- { value: '11', text: 'ECDSAWithSHA384' },
- { value: '12', text: 'ECDSAWithSHA512' },
- { value: '13', text: 'SHA256WithRSAPSS' },
- { value: '14', text: 'SHA384WithRSAPSS' },
- { value: '15', text: 'SHA512WithRSAPSS' },
- { value: '16', text: 'PureEd25519' }
-]
+import {
+ digests as _digests,
+ keyTypes as _keyTypes,
+ keyUsages as _keyUsages,
+ extendedKeyUsages as _extendedKeyUsages,
+ revokeReasons as _revokeReasons,
+} from '@/globals/pki'
-export const keyTypes = [
- { value: '0', text: 'KEY_ECDSA', sizes: [ '256', '384', '521' ] },
- { value: '1', text: 'KEY_RSA', sizes: [ '2048', '4096' ] },
- { value: '2', text: 'KEY_DSA', sizes: [ '1024', '2048', '3071' ] }
-]
+export const digests = Object.entries(_digests).map(([value, text]) => ({ value: `${value}`, text }))
+
+export const keyTypes = Object.entries(_keyTypes).map(([value, [text, sizes]]) => ({ value: `${value}`, text, sizes: sizes.map(s => `${s}`) }))
export const keySizes = [...(new Set(
keyTypes.reduce((sizes, type) => ([ ...sizes, ...type.sizes.map(size => +size) ]), [])
@@ -33,47 +19,11 @@ export const keySizes = [...(new Set(
.sort((a, b) => (a > b))
.map(size => ({ value: `${size}`, text: `${size}` }))
-export const keyUsages = [
- { value: '1', text: 'DigitalSignature' },
- { value: '2', text: 'ContentCommitment' },
- { value: '4', text: 'KeyEncipherment' },
- { value: '8', text: 'DataEncipherment' },
- { value: '16', text: 'KeyAgreement' },
- { value: '32', text: 'CertSign' },
- { value: '64', text: 'CRLSign' },
- { value: '128', text: 'EncipherOnly' },
- { value: '256', text: 'DecipherOnly' }
-]
+export const keyUsages = Object.entries(_keyUsages).map(([value, text]) => ({ value: `${value}`, text }))
-export const extendedKeyUsages = [
- { value: '0', text: 'Any' },
- { value: '1', text: 'ServerAuth' },
- { value: '2', text: 'ClientAuth' },
- { value: '3', text: 'CodeSigning' },
- { value: '4', text: 'EmailProtection' },
- { value: '5', text: 'IPSECEndSystem' },
- { value: '6', text: 'IPSECTunnel' },
- { value: '7', text: 'IPSECUser' },
- { value: '8', text: 'TimeStamping' },
- { value: '9', text: 'OCSPSigning' },
- { value: '10', text: 'MicrosoftServerGatedCrypto' },
- { value: '11', text: 'NetscapeServerGatedCrypto' },
- { value: '12', text: 'MicrosoftCommercialCodeSigning' },
- { value: '13', text: 'MicrosoftKernelCodeSigning' }
-]
+export const extendedKeyUsages = Object.entries(_extendedKeyUsages).map(([value, text]) => ({ value: `${value}`, text }))
-export const revokeReasons = [
- { value: '0', text: 'Unspecified' },
- { value: '1', text: 'KeyCompromise' },
- { value: '2', text: 'CACompromise' },
- { value: '3', text: 'AffiliationChanged' },
- { value: '4', text: 'Superseded' },
- { value: '5', text: 'CessationOfOperation' },
- { value: '6', text: 'CertificateHold' },
- { value: '8', text: 'RemoveFromCRL' },
- { value: '9', text: 'PrivilegeWithdrawn' },
- { value: '10', text: 'AACompromise' }
-]
+export const revokeReasons = Object.entries(_revokeReasons).map(([value, text]) => ({ value: `${value}`, text }))
export const useServices = () => computed(() => {
return {
diff --git a/lib/pf/UnifiedApi/Controller/Config/Domains.pm b/lib/pf/UnifiedApi/Controller/Config/Domains.pm
index 59bf7b4cfd7b..c0d52ac2cbb7 100644
--- a/lib/pf/UnifiedApi/Controller/Config/Domains.pm
+++ b/lib/pf/UnifiedApi/Controller/Config/Domains.pm
@@ -67,6 +67,7 @@ sub create {
return 0;
}
+ my $ad_skip = $item->{ad_skip};
$item = $self->cleanupItemForCreate($item);
(my $status, $item, my $form) = $self->validate_item($item);
if (is_error($status)) {
@@ -180,6 +181,7 @@ sub update {
}
my $cs = $self->config_store;
+ my $ad_skip = delete $data->{ad_skip};
$self->cleanupItemForUpdate($old_item, $new_data, $data);
my $bind_dn = $new_item->{bind_dn};
diff --git a/t/html/pfappserver/Makefile b/t/html/pfappserver/Makefile
index 34f5ee441796..089a961733f7 100644
--- a/t/html/pfappserver/Makefile
+++ b/t/html/pfappserver/Makefile
@@ -1,4 +1,5 @@
#!make
+THIS_FILE := $(lastword $(MAKEFILE_LIST))
include .local_env
export $(shell sed 's/=.*//' .local_env)
@@ -11,6 +12,7 @@ DEBUG ?=
CI_PIPELINE_ID ?= $$(openssl rand -hex 16)
PROJECT_ID ?=
RECORD_KEY ?=
+CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT ?= 300000
.PHONY: all install test
@@ -49,22 +51,27 @@ install:
npm install --legacy-peer-deps
test:
- DEBUG=$(DEBUG) \
- DISPLAY= \
- NO_COLOR=1 \
- BROWSERSLIST_IGNORE_OLD_DATA=true \
- CYPRESS_baseUrl=$(BASE_URL) \
- cypress run --browser $(BROWSER) --config-file $(CONFIG_FILE) --config $(CONFIG) --e2e --env tags=[$(TAGS)] ; \
+ DEBUG=$(DEBUG) \
+ DISPLAY= \
+ NO_COLOR=1 \
+ BROWSERSLIST_IGNORE_OLD_DATA=true \
+ CYPRESS_baseUrl=$(BASE_URL) \
+ CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT=$(CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT) \
+ npx cypress run --browser $(BROWSER) --config-file $(CONFIG_FILE) --config $(CONFIG) --e2e --env tags=[$(TAGS)] ; \
+
+test-concurrent:
+ bash concurrent.sh $(MAKE) -f $(THIS_FILE) test
test-project:
- DEBUG=$(DEBUG) \
- DISPLAY= \
- NO_COLOR=1 \
- BROWSERSLIST_IGNORE_OLD_DATA=true \
- CYPRESS_baseUrl=$(BASE_URL) \
- cypress run --browser $(BROWSER) --config-file $(CONFIG_FILE) --config projectId=$(PROJECT_ID),$(CONFIG) --e2e --ci-build-id $(CI_PIPELINE_ID) --parallel --record --key $(RECORD_KEY) --tag $(TAG) --env tags=[$(TAGS)] ; \
+ DEBUG=$(DEBUG) \
+ DISPLAY= \
+ NO_COLOR=1 \
+ BROWSERSLIST_IGNORE_OLD_DATA=true \
+ CYPRESS_baseUrl=$(BASE_URL) \
+ CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT=$(CYPRESS_INTERNAL_BROWSER_CONNECT_TIMEOUT) \
+ npx cypress run --browser $(BROWSER) --config-file $(CONFIG_FILE) --config projectId=$(PROJECT_ID),$(CONFIG) --e2e --ci-build-id $(CI_PIPELINE_ID) --parallel --record --key $(RECORD_KEY) --tag $(TAG) --env tags=[$(TAGS)] ; \
test-x11:
DEBUG=$(DEBUG) \
CYPRESS_baseUrl=$(BASE_URL) \
- cypress open --browser $(BROWSER) --config-file $(CONFIG_FILE) --config $(CONFIG)
+ npx cypress open --browser $(BROWSER) --config-file $(CONFIG_FILE) --config $(CONFIG)
diff --git a/t/html/pfappserver/concurrent.sh b/t/html/pfappserver/concurrent.sh
new file mode 100755
index 000000000000..30380ae77d34
--- /dev/null
+++ b/t/html/pfappserver/concurrent.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+MAX_CONCURRENCY="${MAX_CONCURRENCY:=10}"
+MAX_EXEC_TIME="${MAX_EXEC_TIME:=60}"
+PARALLEL="${PARALLEL:=10}"
+
+mkfifo cfifo
+exec 10<>cfifo && rm -f cfifo
+for _ in $(seq 1 ${MAX_CONCURRENCY}); do { echo >&10; } done
+for SLICE in $(seq 0 $(($PARALLEL-1))); do
+ read -r -u10
+ {
+ CYPRESS_screenshotsFolder=cypress/results/screenshots/slice-${SLICE} \
+ CYPRESS_videosFolder=cypress/results/videos/slice-${SLICE} \
+ SLICE=${SLICE} \
+ timeout ${MAX_EXEC_TIME} \
+ $@
+
+ [[ $? -ne 0 ]] && echo "Slice $SLICE timeout"
+
+ echo >&10
+ } &
+done
+wait
+exec 10>&-
+exec 10<&-
diff --git a/t/html/pfappserver/config/bases/index.js b/t/html/pfappserver/config/bases/index.js
new file mode 100644
index 000000000000..1251884eaa63
--- /dev/null
+++ b/t/html/pfappserver/config/bases/index.js
@@ -0,0 +1,43 @@
+const access_durations = require('./modules/access_durations')
+const active_active = require('./modules/active_active')
+const admin_login = require('./modules/admin_login')
+const advanced = require('./modules/advanced')
+const alerting = require('./modules/alerting')
+const captive_portal = require('./modules/captive_portal')
+const database_advanced = require('./modules/database_advanced')
+const database_general = require('./modules/database_general')
+const database_proxysql = require('./modules/database_proxysql')
+const dns_configuration = require('./modules/dns_configuration')
+const fingerbank = require('./modules/fingerbank')
+const general = require('./modules/general')
+const monit = require('./modules/monit')
+const networks_fencing = require('./modules/networks_fencing')
+const networks_inline = require('./modules/networks_inline')
+const networks_network = require('./modules/networks_network')
+const networks_parking = require('./modules/networks_parking')
+const services = require('./modules/services')
+const snmp_traps = require('./modules/snmp_traps')
+const webservices = require('./modules/webservices')
+
+module.exports = {
+ access_durations,
+ active_active,
+ admin_login,
+ advanced,
+ alerting,
+ captive_portal,
+ database_advanced,
+ database_general,
+ database_proxysql,
+ dns_configuration,
+ fingerbank,
+ general,
+ monit,
+ networks_fencing,
+ networks_inline,
+ networks_network,
+ networks_parking,
+ services,
+ snmp_traps,
+ webservices
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/access_durations.js b/t/html/pfappserver/config/bases/modules/access_durations.js
new file mode 100644
index 000000000000..045cffcbec83
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/access_durations.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/guests_admin_registration';
+
+module.exports = {
+ id: 'configuration-access-durations',
+ description: 'Configuration - Access durations',
+ tests: [
+ {
+ description: 'Access durations - Passthrough Form',
+ url: '/configuration/access_duration',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/active_active.js b/t/html/pfappserver/config/bases/modules/active_active.js
new file mode 100644
index 000000000000..36ce1127d096
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/active_active.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/active_active';
+
+module.exports = {
+ id: 'configuration-active-active',
+ description: 'Configuration - Active active',
+ tests: [
+ {
+ description: 'Active active - Passthrough Form',
+ url: '/configuration/active_active',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/admin_login.js b/t/html/pfappserver/config/bases/modules/admin_login.js
new file mode 100644
index 000000000000..a196a132e35b
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/admin_login.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/admin_login';
+
+module.exports = {
+ id: 'configuration-admin-login',
+ description: 'Configuration - Admin login',
+ tests: [
+ {
+ description: 'Admin login - Passthrough Form',
+ url: '/configuration/admin_login',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/advanced.js b/t/html/pfappserver/config/bases/modules/advanced.js
new file mode 100644
index 000000000000..9ffc1126f725
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/advanced.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/advanced';
+
+module.exports = {
+ id: 'configuration-active-active',
+ description: 'Configuration - Advanced',
+ tests: [
+ {
+ description: 'Advanced - Passthrough Form',
+ url: '/configuration/advanced',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/alerting.js b/t/html/pfappserver/config/bases/modules/alerting.js
new file mode 100644
index 000000000000..757fa04ede01
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/alerting.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/alerting';
+
+module.exports = {
+ id: 'configuration-alerting',
+ description: 'Configuration - Alerting',
+ tests: [
+ {
+ description: 'Alerting - Passthrough Form',
+ url: '/configuration/alerting',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/captive_portal.js b/t/html/pfappserver/config/bases/modules/captive_portal.js
new file mode 100644
index 000000000000..eb9de4e7642a
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/captive_portal.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/captive_portal';
+
+module.exports = {
+ id: 'configuration-captive-portal',
+ description: 'Configuration - Captive Portal',
+ tests: [
+ {
+ description: 'Captive Portal - Passthrough Form',
+ url: '/configuration/captive_portal',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/database_advanced.js b/t/html/pfappserver/config/bases/modules/database_advanced.js
new file mode 100644
index 000000000000..02ff05a4532e
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/database_advanced.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/database_advanced';
+
+module.exports = {
+ id: 'configuration-database-advanced',
+ description: 'Configuration - Database advanced',
+ tests: [
+ {
+ description: 'Database advanced - Passthrough Form',
+ url: '/configuration/database_advanced',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/database_general.js b/t/html/pfappserver/config/bases/modules/database_general.js
new file mode 100644
index 000000000000..a6b04612ae58
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/database_general.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/database';
+
+module.exports = {
+ id: 'configuration-database-general',
+ description: 'Configuration - Database general',
+ tests: [
+ {
+ description: 'Database general - Passthrough Form',
+ url: '/configuration/database_general',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/database_proxysql.js b/t/html/pfappserver/config/bases/modules/database_proxysql.js
new file mode 100644
index 000000000000..144a6ac8fcf5
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/database_proxysql.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/database_proxysql';
+
+module.exports = {
+ id: 'configuration-database-proxysql',
+ description: 'Configuration - Database ProxySQL',
+ tests: [
+ {
+ description: 'Database ProxySQL - Passthrough Form',
+ url: '/configuration/database_proxysql',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/dns_configuration.js b/t/html/pfappserver/config/bases/modules/dns_configuration.js
new file mode 100644
index 000000000000..20eb527c3e54
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/dns_configuration.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/dns_configuration';
+
+module.exports = {
+ id: 'configuration-dns-configuration',
+ description: 'Configuration - DNS configuration',
+ tests: [
+ {
+ description: 'DNS configuration - Passthrough Form',
+ url: '/configuration/dns',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/fingerbank.js b/t/html/pfappserver/config/bases/modules/fingerbank.js
new file mode 100644
index 000000000000..0ad2deedcf78
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/fingerbank.js
@@ -0,0 +1,41 @@
+const expectByType = (type, req, fixture) => {
+ if (type in fixture) {
+ Object.keys(fixture[type]).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[type][key], key)
+ })
+ }
+};
+
+module.exports = {
+ id: 'configuration-fingerbank-general-settings',
+ description: 'Configuration - Fingerbank',
+ tests: [
+ {
+ description: 'General Settings - Passthrough Form',
+ url: '/configuration/fingerbank/general_settings',
+ interceptors: [
+ { method: 'GET', url: '/api/**/config/fingerbank_settings?*', fixture: res => res.body.items.reduce((fixture, { id, ...rest }) => ({ ...fixture, [id]: { id, ...rest } }), {}) },
+
+ { method: '+(PATCH|PUT)', url: '/api/**/config/fingerbank_setting/collector', expect: (req, fixture) => expectByType('collector', req, fixture) },
+ { method: '+(PATCH|PUT)', url: '/api/**/config/fingerbank_setting/proxy', expect: (req, fixture) => expectByType('proxy', req, fixture) },
+ { method: '+(PATCH|PUT)', url: '/api/**/config/fingerbank_setting/query', expect: (req, fixture) => expectByType('query', req, fixture) },
+ { method: '+(PATCH|PUT)', url: '/api/**/config/fingerbank_setting/upstream', expect: (req, fixture) => expectByType('upstream', req, fixture) },
+ ]
+ },
+ {
+ description: 'Device Change Detection - Passthrough Form',
+ url: '/configuration/fingerbank/device_change_detection',
+ interceptors: [
+ { method: 'GET', url: '/api/**/config/base/fingerbank_device_change', fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url: '/api/**/config/base/fingerbank_device_change', expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/general.js b/t/html/pfappserver/config/bases/modules/general.js
new file mode 100644
index 000000000000..bce3051966d2
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/general.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/general';
+
+module.exports = {
+ id: 'configuration-general',
+ description: 'Configuration - General',
+ tests: [
+ {
+ description: 'General - Passthrough Form',
+ url: '/configuration/general',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/monit.js b/t/html/pfappserver/config/bases/modules/monit.js
new file mode 100644
index 000000000000..4b351edfee12
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/monit.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/monit';
+
+module.exports = {
+ id: 'configuration-monit',
+ description: 'Configuration - Monit',
+ tests: [
+ {
+ description: 'Monit - Passthrough Form',
+ url: '/configuration/monit',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/networks_fencing.js b/t/html/pfappserver/config/bases/modules/networks_fencing.js
new file mode 100644
index 000000000000..367da2bf2485
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/networks_fencing.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/fencing';
+
+module.exports = {
+ id: 'configuration-networks-fencing',
+ description: 'Configuration - Networks fencing',
+ tests: [
+ {
+ description: 'Networks fencing - Passthrough Form',
+ url: '/configuration/fencing',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/networks_inline.js b/t/html/pfappserver/config/bases/modules/networks_inline.js
new file mode 100644
index 000000000000..cab406b95f3b
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/networks_inline.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/inline';
+
+module.exports = {
+ id: 'configuration-networks-inline',
+ description: 'Configuration - Networks inline',
+ tests: [
+ {
+ description: 'Networks inline - Passthrough Form',
+ url: '/configuration/inline',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/networks_network.js b/t/html/pfappserver/config/bases/modules/networks_network.js
new file mode 100644
index 000000000000..d513e8b4dcfd
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/networks_network.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/network';
+
+module.exports = {
+ id: 'configuration-networks-network',
+ description: 'Configuration - Networks network',
+ tests: [
+ {
+ description: 'Networks network - Passthrough Form',
+ url: '/configuration/network',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/networks_parking.js b/t/html/pfappserver/config/bases/modules/networks_parking.js
new file mode 100644
index 000000000000..1fbee320c7a7
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/networks_parking.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/parking';
+
+module.exports = {
+ id: 'configuration-networks-parking',
+ description: 'Configuration - Networks parking',
+ tests: [
+ {
+ description: 'Networks parking - Passthrough Form',
+ url: '/configuration/parking',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/services.js b/t/html/pfappserver/config/bases/modules/services.js
new file mode 100644
index 000000000000..f5476b601d29
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/services.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/services';
+
+module.exports = {
+ id: 'configuration-services',
+ description: 'Configuration - Services',
+ tests: [
+ {
+ description: 'Services - Passthrough Form',
+ url: '/configuration/services',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/snmp_traps.js b/t/html/pfappserver/config/bases/modules/snmp_traps.js
new file mode 100644
index 000000000000..15948516d18e
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/snmp_traps.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/snmp_traps';
+
+module.exports = {
+ id: 'configuration-snmp-traps',
+ description: 'Configuration - SNMP Traps',
+ tests: [
+ {
+ description: 'SNMP Traps - Passthrough Form',
+ url: '/configuration/snmp_traps',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/bases/modules/webservices.js b/t/html/pfappserver/config/bases/modules/webservices.js
new file mode 100644
index 000000000000..13d7c865f048
--- /dev/null
+++ b/t/html/pfappserver/config/bases/modules/webservices.js
@@ -0,0 +1,22 @@
+const url = '/api/**/config/base/webservices';
+
+module.exports = {
+ id: 'configuration-webservices',
+ description: 'Configuration - Web Services',
+ tests: [
+ {
+ description: 'Webservices - Passthrough Form',
+ url: '/configuration/webservices',
+ interceptors: [
+ { method: 'GET', url, fixture: res => res.body.item },
+
+ { method: '+(PATCH|PUT)', url, expect: (req, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(req.body).to.have.property(key)
+ expect(req.body[key]).to.deep.equal(fixture[key], key)
+ })
+ } },
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/config.js b/t/html/pfappserver/config/collections/config.js
new file mode 100644
index 000000000000..02f084f27e41
--- /dev/null
+++ b/t/html/pfappserver/config/collections/config.js
@@ -0,0 +1,9 @@
+const SCOPE_INSERT = 'insert';
+const SCOPE_UPDATE = 'update';
+const SCOPE_DELETE = 'delete';
+
+module.exports = {
+ SCOPE_INSERT,
+ SCOPE_UPDATE,
+ SCOPE_DELETE
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/domains.js b/t/html/pfappserver/config/collections/domains.js
deleted file mode 100644
index 82838d3caede..000000000000
--- a/t/html/pfappserver/config/collections/domains.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- id: 'domains',
- name: 'Domains',
- url: '/configuration/domains',
-};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/index.js b/t/html/pfappserver/config/collections/index.js
index e42bdcb29418..821d08314fbc 100644
--- a/t/html/pfappserver/config/collections/index.js
+++ b/t/html/pfappserver/config/collections/index.js
@@ -1,7 +1,79 @@
-const domains = require('./domains')
-const roles = require('./roles')
+const adminRoles = require('./modules/adminRoles')
+const billingTiers = require('./modules/billingTiers')
+const clouds = require('./modules/clouds')
+const connectionProfiles = require('./modules/connectionProfiles')
+const connectors = require('./modules/connectors')
+const domains = require('./modules/domains')
+const eventLoggers = require('./modules/eventLoggers')
+const filterEngines = require('./modules/filterEngines')
+const fingerbankCombinations = require('./modules/fingerbankCombinations')
+const fingerbankDevices = require('./modules/fingerbankDevices')
+const fingerbankDhcpFingerprints = require('./modules/fingerbankDhcpFingerprints')
+const fingerbankDhcpv6Enterprises = require('./modules/fingerbankDhcpv6Enterprises')
+const fingerbankDhcpv6Fingerprints = require('./modules/fingerbankDhcpv6Fingerprints')
+const fingerbankDhcpVendors = require('./modules/fingerbankDhcpVendors')
+const fingerbankMacVendors = require('./modules/fingerbankMacVendors')
+const fingerbankUserAgents = require('./modules/fingerbankUserAgents')
+const firewalls = require('./modules/firewalls')
+const floatingDevices = require('./modules/floatingDevices')
+const maintenaceTasks = require('./modules/maintenanceTasks')
+const mfas = require('./modules/mfas')
+const networkBehaviorPolicies = require('./modules/networkBehaviorPolicies')
+const pkiCas = require('./modules/pkiCas')
+const pkiProviders = require('./modules/pkiProviders')
+const provisionings = require('./modules/provisionings')
+const radiusProfiles = require('./modules/radiusProfiles')
+const radiusSslCertificates = require('./modules/radiusSslCertificates')
+const realms = require('./modules/realms')
+const roles = require('./modules/roles')
+const scanEngines = require('./modules/scanEngines')
+const securityEvents = require('./modules/securityEvents')
+const selfServices = require('./modules/selfServices')
+const sources = require('./modules/sources')
+const switches = require('./modules/switches')
+const switchGroups = require('./modules/switchGroups')
+const switchTemplates = require('./modules/switchTemplates')
+const syslogForwarders = require('./modules/syslogForwarders')
+const syslogParsers = require('./modules/syslogParsers')
+const wrixLocations = require('./modules/wrixLocations')
module.exports = {
+ adminRoles,
+ billingTiers,
+ clouds,
+ connectionProfiles,
+ connectors,
domains,
- roles
+ eventLoggers,
+// filterEngines, // issue(s)
+ fingerbankCombinations,
+ fingerbankDevices,
+ fingerbankDhcpFingerprints,
+ fingerbankDhcpv6Enterprises,
+ fingerbankDhcpv6Fingerprints,
+ fingerbankDhcpVendors,
+ fingerbankMacVendors,
+ fingerbankUserAgents,
+ firewalls,
+ floatingDevices,
+ networkBehaviorPolicies,
+ maintenaceTasks,
+ mfas,
+// pkiCas, // incomplete
+ pkiProviders,
+ provisionings,
+ radiusProfiles,
+ radiusSslCertificates,
+ realms,
+ roles,
+ scanEngines,
+ securityEvents,
+ selfServices,
+ sources,
+ switches,
+ switchGroups,
+ switchTemplates,
+ syslogForwarders,
+ syslogParsers,
+ wrixLocations
}
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/adminRoles.js b/t/html/pfappserver/config/collections/modules/adminRoles.js
new file mode 100644
index 000000000000..7094fd73773a
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/adminRoles.js
@@ -0,0 +1,79 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/admin_roles';
+const resource_url = id => `/configuration/admin_role/${id}`;
+
+const fixture = 'collections/adminRole.json';
+
+const acls = require('../../../cypress/fixtures/runtime/acls.json');
+const map = (value, namespace = '') => {
+ if (namespace === 'actions') { // re-map actions
+ return value.map(v => acls[v])
+ }
+ return value
+}
+
+module.exports = {
+ id: 'adminRoles',
+ description: 'Admin Roles',
+ tests: [
+ {
+ description: 'Admin Roles - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ map,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Admin Role)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/admin_roles',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Admin Roles - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/admin_role/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Admin Roles - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/admin_role/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/billingTiers.js b/t/html/pfappserver/config/collections/modules/billingTiers.js
new file mode 100644
index 000000000000..b4a4d93722ab
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/billingTiers.js
@@ -0,0 +1,87 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/billing_tiers';
+const resource_url = id => `/configuration/billing_tier/${id}`;
+
+const fixture = 'collections/billingTier.json';
+const flatten = true;
+
+const map = (value, namespace = '') => {
+ if (namespace.endsWith('.unit')) { // re-map access durations
+ switch (value) {
+ case 's': return 'second'
+ case 'm': return 'minute'
+ case 'h': return 'hour'
+ case 'D': return 'day'
+ case 'W': return 'week'
+ case 'M': return 'month'
+ case 'Y': return 'year'
+ }
+ }
+ return value
+}
+
+module.exports = {
+ id: 'billingTiers',
+ description: 'Billing Tiers',
+ tests: [
+ {
+ description: 'Billing Tiers - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ flatten,
+ map,
+ url: collection_url,
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/billing_tiers',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Billing Tiers - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ flatten,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/billing_tier/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Billing Tiers - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ flatten,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/billing_tier/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/clouds.js b/t/html/pfappserver/config/collections/modules/clouds.js
new file mode 100644
index 000000000000..959d81b6b655
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/clouds.js
@@ -0,0 +1,78 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ intune: 'Intune'
+}
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/clouds';
+ const resource_url = (id) => `/configuration/cloud/${id}`;
+ const fixture = `collections/cloud/${type}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Clouds (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Cloud)`, `ul li a[href$="/new/${name}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/clouds',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Clouds (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/cloud/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Clouds (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/cloud/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'clouds',
+ description: 'Clouds',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/connectionProfiles.js b/t/html/pfappserver/config/collections/modules/connectionProfiles.js
new file mode 100644
index 000000000000..baa4cab64e90
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/connectionProfiles.js
@@ -0,0 +1,86 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/connection_profiles';
+const resource_url = id => `/configuration/connection_profile/${id}`;
+
+const fixture = 'collections/connectionProfile.json';
+const flatten = true;
+
+module.exports = {
+ id: 'connectionProfiles',
+ description: 'Connection Profiles',
+ tests: [
+ {
+ description: 'Connection Profiles - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ flatten,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Connection Profile)'],
+ },
+ beforeFormFill: (selector, options) => { // "filter" required
+ cy.get(selector, options).then($selector => {
+ const buttonSelector = `button[type="button"]:contains(Add Filter)`
+ if ($selector.find(buttonSelector).length) {
+ cy.get(buttonSelector, options).each((button, n) => {
+ // click button
+ cy.get(button, options)
+ .click({ log: true })
+ })
+ }
+ })
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/connection_profiles',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Connection Profiles - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ flatten,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/connection_profile/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Connection Profiles - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ flatten,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/connection_profile/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/connectors.js b/t/html/pfappserver/config/collections/modules/connectors.js
new file mode 100644
index 000000000000..2d27477fa37e
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/connectors.js
@@ -0,0 +1,71 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/connectors';
+const resource_url = id => `/configuration/connector/${id}`;
+const fixture = 'collections/connector.json';
+
+module.exports = {
+ id: 'connectors',
+ description: 'Connectors',
+ tests: [
+ {
+ description: 'Connectors - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/connectors',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ const { body: { id } = {} } = response
+ return { id } // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Connectors - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/connector/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Connectors - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/connector/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/domains.js b/t/html/pfappserver/config/collections/modules/domains.js
new file mode 100644
index 000000000000..6fd276531dee
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/domains.js
@@ -0,0 +1,74 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/domains';
+const resource_url = id => `/configuration/domain/${id}`;
+const fixture = 'collections/domain.json';
+
+const mutatedKeys = ['machine_account_password']; // form values mutated post-create
+
+module.exports = {
+ id: 'domains',
+ description: 'Domains',
+ tests: [
+ {
+ description: 'Domains - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/domains',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ request.body.ad_skip = true // skip add_computer w/ AD
+ return request
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Domains - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/domain/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ if (!mutatedKeys.includes(key)) { // ignore mutated
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ }
+ })
+ request.body.ad_skip = true // don't use AD
+ return request
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Domains - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/domain/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/eventLoggers.js b/t/html/pfappserver/config/collections/modules/eventLoggers.js
new file mode 100644
index 000000000000..04ab2581aadd
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/eventLoggers.js
@@ -0,0 +1,79 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ syslog: 'Syslog'
+};
+
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/event_loggers';
+ const resource_url = (id) => `/configuration/event_logger/${id}`;
+ const fixture = `collections/eventLogger/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Event Loggers (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Event Logger)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/event_loggers',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Event Loggers (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/event_logger/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Event Loggers (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/event_logger/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'eventLoggers',
+ description: 'Event Loggers',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/filterEngines.js b/t/html/pfappserver/config/collections/modules/filterEngines.js
new file mode 100644
index 000000000000..24b0ee2c2039
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/filterEngines.js
@@ -0,0 +1,84 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = { // singular, 's' is appended for plural
+ dhcp_filter: 'DHCP Filter',
+ dns_filter: 'DNS Filter',
+ radius_filter: 'RADIUS Filter',
+ switch_filter: 'Switch Filter',
+ vlan_filter: 'VLAN Filter'
+};
+
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = `/configuration/filter_engines/${type}s`;
+ const resource_url = (id) => `/configuration/filter_engines/${type}s/${id}`;
+ const fixture = `collections/filterEngine/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Filter Engines (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Filter)`],
+ tabSelector: false,
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: `/api/**/config/filter_engines/${type}s`,
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Filter Engines (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: `/api/**/config/filter_engines/${type}/**`,
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Filter Engines (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: `/api/**/config/filter_engines/${type}/**`, expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'filterEngines',
+ description: 'Filter Engines',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankCombinations.js b/t/html/pfappserver/config/collections/modules/fingerbankCombinations.js
new file mode 100644
index 000000000000..4667281352e6
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankCombinations.js
@@ -0,0 +1,82 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const { oses } = require('../../../config/global/fingerbank');
+
+const collection_url = 'configuration/fingerbank/combinations';
+const resource_url = id => `/configuration/fingerbank/local/combination/${id}`;
+const fixture = 'collections/fingerbank/combination.json';
+
+const map = (value, namespace = '') => {
+ if (namespace === 'device_id') { // remap device_id
+ return oses[value]
+ }
+ return value
+}
+
+module.exports = {
+ id: 'fingerbankCombinations',
+ description: 'Fingerbank Combinations',
+ tests: [
+ {
+ description: 'Fingerbank Combinations - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ map,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Combination)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/combinations',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank Combinations - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/combination/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank Combinations - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/combination/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankDevices.js b/t/html/pfappserver/config/collections/modules/fingerbankDevices.js
new file mode 100644
index 000000000000..c9f3d123d27a
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankDevices.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/devices';
+const resource_url = id => `/configuration/fingerbank/local/device/${id}`;
+const fixture = 'collections/fingerbank/device.json';
+
+module.exports = {
+ id: 'fingerbankDevices',
+ description: 'Fingerbank Devices',
+ tests: [
+ {
+ description: 'Fingerbank Devices - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Device)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/devices',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank Devices - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/device/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank Devices - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/device/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankDhcpFingerprints.js b/t/html/pfappserver/config/collections/modules/fingerbankDhcpFingerprints.js
new file mode 100644
index 000000000000..4fe565b55902
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankDhcpFingerprints.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/dhcp_fingerprints';
+const resource_url = id => `/configuration/fingerbank/local/dhcp_fingerprint/${id}`;
+const fixture = 'collections/fingerbank/dhcpFingerprint.json';
+
+module.exports = {
+ id: 'fingerbankDhcpFingerprints',
+ description: 'Fingerbank DHCP Fingerprints',
+ tests: [
+ {
+ description: 'Fingerbank DHCP Fingerprints - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New DHCP Fingerprint)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/dhcp_fingerprints',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCP Fingerprints - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/dhcp_fingerprint/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCP Fingerprints - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/dhcp_fingerprint/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankDhcpVendors.js b/t/html/pfappserver/config/collections/modules/fingerbankDhcpVendors.js
new file mode 100644
index 000000000000..17920e31e914
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankDhcpVendors.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/dhcp_vendors';
+const resource_url = id => `/configuration/fingerbank/local/dhcp_vendor/${id}`;
+const fixture = 'collections/fingerbank/dhcpVendor.json';
+
+module.exports = {
+ id: 'fingerbankDhcpVendors',
+ description: 'Fingerbank DHCP Vendors',
+ tests: [
+ {
+ description: 'Fingerbank DHCP Vendors - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New DHCP Vendor)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/dhcp_vendors',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCP Vendors - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/dhcp_vendor/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCP Vendors - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/dhcp_vendor/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Enterprises.js b/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Enterprises.js
new file mode 100644
index 000000000000..e2e9e9001829
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Enterprises.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/dhcpv6_enterprises';
+const resource_url = id => `/configuration/fingerbank/local/dhcpv6_enterprise/${id}`;
+const fixture = 'collections/fingerbank/dhcpv6Enterprise.json';
+
+module.exports = {
+ id: 'fingerbankDhcpv6Enterprises',
+ description: 'Fingerbank DHCPv6 Enterprises',
+ tests: [
+ {
+ description: 'Fingerbank DHCPv6 Enterprises - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New DHCPv6 Enterprise)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/dhcp6_enterprises',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCPv6 Enterprises - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/dhcp6_enterprise/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCPv6 Enterprises - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/dhcp6_enterprise/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Fingerprints.js b/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Fingerprints.js
new file mode 100644
index 000000000000..36b4e2ed11ac
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankDhcpv6Fingerprints.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/dhcpv6_fingerprints';
+const resource_url = id => `/configuration/fingerbank/local/dhcpv6_fingerprint/${id}`;
+const fixture = 'collections/fingerbank/dhcpv6Fingerprint.json';
+
+module.exports = {
+ id: 'fingerbankDhcpv6Fingerprints',
+ description: 'Fingerbank DHCPv6 Fingerprints',
+ tests: [
+ {
+ description: 'Fingerbank DHCPv6 Fingerprints - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New DHCPv6 Fingerprint)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/dhcp6_fingerprints',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCPv6 Fingerprints - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/dhcp6_fingerprint/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank DHCPv6 Fingerprints - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/dhcp6_fingerprint/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankMacVendors.js b/t/html/pfappserver/config/collections/modules/fingerbankMacVendors.js
new file mode 100644
index 000000000000..1c394c63ad71
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankMacVendors.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/mac_vendors';
+const resource_url = id => `/configuration/fingerbank/local/mac_vendor/${id}`;
+const fixture = 'collections/fingerbank/macVendor.json';
+
+module.exports = {
+ id: 'fingerbankMacVendors',
+ description: 'Fingerbank MAC Vendors',
+ tests: [
+ {
+ description: 'Fingerbank MAC Vendors - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New MAC Vendor)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/mac_vendors',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank MAC Vendors - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/mac_vendor/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank MAC Vendors - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/mac_vendor/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/fingerbankUserAgents.js b/t/html/pfappserver/config/collections/modules/fingerbankUserAgents.js
new file mode 100644
index 000000000000..6a83d49f751f
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/fingerbankUserAgents.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const collection_url = 'configuration/fingerbank/user_agents';
+const resource_url = id => `/configuration/fingerbank/local/user_agent/${id}`;
+const fixture = 'collections/fingerbank/userAgent.json';
+
+module.exports = {
+ id: 'fingerbankUserAgents',
+ description: 'Fingerbank User Agents',
+ tests: [
+ {
+ description: 'Fingerbank User Agents - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New User Agent)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/fingerbank/local/user_agents',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ return response.body // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank User Agents - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/fingerbank/local/user_agent/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Fingerbank User Agents - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/fingerbank/local/user_agent/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/firewalls.js b/t/html/pfappserver/config/collections/modules/firewalls.js
new file mode 100644
index 000000000000..2fd9f90cfdb2
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/firewalls.js
@@ -0,0 +1,90 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ BarracudaNG: 'BarracudaNG',
+ Checkpoint: 'Checkpoint',
+ ContentKeeper: 'ContentKeeper',
+ CiscoIsePic: 'Cisco ISE-PIC',
+ FamilyZone: 'FamilyZone',
+ FortiGate: 'FortiGate',
+ Iboss: 'Iboss',
+ JSONRPC: 'JSONRPC',
+ JuniperSRX: 'JuniperSRX',
+ LightSpeedRocket: 'LightSpeedRocket',
+ PaloAlto: 'PaloAlto',
+ SmoothWall: 'SmoothWall',
+ WatchGuard: 'WatchGuard'
+};
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/firewalls';
+ const resource_url = (id) => `/configuration/firewall/${id}`;
+ const fixture = `collections/firewall/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Firewalls (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Firewall)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/firewalls',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Firewalls (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/firewall/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Firewalls (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/firewall/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'firewalls',
+ description: 'Firewalls',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/floatingDevices.js b/t/html/pfappserver/config/collections/modules/floatingDevices.js
new file mode 100644
index 000000000000..b8fc4f829b3b
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/floatingDevices.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/floating_devices';
+const resource_url = id => `/configuration/floating_device/${id}`;
+const fixture = 'collections/floatingDevice.json';
+
+module.exports = {
+ id: 'floatingDevices',
+ description: 'Floating Devices',
+ tests: [
+ {
+ description: 'Floating Devices - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Floating Device)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/floating_devices',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Floating Devices - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/floating_device/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Floating Devices - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/floating_device/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/maintenanceTasks.js b/t/html/pfappserver/config/collections/modules/maintenanceTasks.js
new file mode 100644
index 000000000000..4fffc657ceda
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/maintenanceTasks.js
@@ -0,0 +1,33 @@
+const { SCOPE_UPDATE } = require('../config');
+const maintenanceTasks = require('../../../cypress/fixtures/runtime/maintenanceTasks.json');
+const collection_url = '/configuration/maintenance_tasks';
+const resource_url = id => `/configuration/maintenance_task/${id}`;
+
+module.exports = {
+ id: 'maintenaceTasks',
+ description: 'Maintenance Tasks',
+ tests: maintenanceTasks.map(id => {
+ const fixture = require(`../../../cypress/fixtures/runtime/maintenanceTask-${id}.json`)
+ return {
+ description: `Maintenance Task (${id}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture: `/runtime/maintenanceTask-${id}.json`,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/maintenance_task/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ })
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/mfas.js b/t/html/pfappserver/config/collections/modules/mfas.js
new file mode 100644
index 000000000000..aef158f59644
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/mfas.js
@@ -0,0 +1,79 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ Akamai: 'Akamai',
+ TOTP: 'TOTP'
+}
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/mfas';
+ const resource_url = (id) => `/configuration/mfa/${id}`;
+ const fixture = `collections/mfa/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `MFAs (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New MFA)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/mfas',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `MFAs (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/mfa/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `MFAs (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/mfa/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'mfas',
+ description: 'MFAs',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/networkBehaviorPolicies.js b/t/html/pfappserver/config/collections/modules/networkBehaviorPolicies.js
new file mode 100644
index 000000000000..545b3929d67c
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/networkBehaviorPolicies.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/fingerbank/network_behavior_policies';
+const resource_url = id => `/configuration/network_behavior_policy/${id}`;
+const fixture = 'collections/networkBehaviorPolicy.json';
+
+module.exports = {
+ id: 'networkBehaviorPolicies',
+ description: 'Network Behavior Policies',
+ tests: [
+ {
+ description: 'Network Behavior Policies - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Network Behaviour Policy)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/network_behavior_policies',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Network Behavior Policies - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/network_behavior_policy/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Network Behavior Policies - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/network_behavior_policy/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/pkiCas.js b/t/html/pfappserver/config/collections/modules/pkiCas.js
new file mode 100644
index 000000000000..207b54b0a684
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/pkiCas.js
@@ -0,0 +1,80 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const countries = require('../../../config/global/countries');
+const { digests, keyTypes } = require('../../../config/global/pki');
+
+const collection_url = 'configuration/pki/cas';
+const resource_url = id => `/configuration/pki/ca/${id}`;
+const fixture = 'collections/pki/ca.json';
+
+const map = (value, namespace = '') => {
+ if (namespace === 'country') { // remap country
+ return countries.default[value]
+ }
+ if (namespace === 'digest') { // remap digest
+ return digests[value]
+ }
+ if (namespace === 'key_type') { // remap key_type
+ return keyTypes[value]
+ }
+ return value
+}
+
+module.exports = {
+ id: 'pkiCas',
+ description: 'PKI Certificate Authorities',
+ tests: [
+ {
+ description: 'PKI Certificate Authorities - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ map,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Certificate Authority)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/pki/cas',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ const { body: { items: { 0: { ID } = {} } = {} } = {} } = response
+ return { ID } // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'PKI Certificate Authorities - Resign Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.ID,
+ selectors: {
+ buttonDeleteSelector: 'button[type="button"]:contains(Re-Sign)',
+ buttonDeleteConfirmSelector: 'button[type="button"][data-confirm]:contains(Re-Sign)'
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/pki/ca/resign/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/pkiProviders.js b/t/html/pfappserver/config/collections/modules/pkiProviders.js
new file mode 100644
index 000000000000..4ee7e7cd78b1
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/pkiProviders.js
@@ -0,0 +1,80 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ packetfence_local: 'Packetfence Local',
+ packetfence_pki: 'Packetfence PKI',
+ scep: 'SCEP PKI'
+}
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/pki_providers';
+ const resource_url = (id) => `/configuration/pki_provider/${id}`;
+ const fixture = `collections/pkiProvider/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `PKI Providers (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New PKI Provider)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/pki_providers',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `PKI Providers (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/pki_provider/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `PKI Providers (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/pki_provider/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'pkiProviders',
+ description: 'PKI Providers',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/provisionings.js b/t/html/pfappserver/config/collections/modules/provisionings.js
new file mode 100644
index 000000000000..323c1492686e
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/provisionings.js
@@ -0,0 +1,90 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ accept: 'Accept',
+ airwatch: 'Airwatch',
+ android: 'Android',
+ deny: 'Deny',
+ dpsk: 'DPSK',
+ jamf: 'Jamf',
+ kandji: 'Kandji',
+ mobileconfig: 'Apple Devices',
+ mobileiron: 'Mobileiron',
+ sentinelone: 'SentinelOne',
+ windows: 'Windows',
+ intune: 'Microsoft Intune',
+ google_workspace_chromebook: 'Google Workspace Chromebook'
+};
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/provisionings';
+ const resource_url = (id) => `/configuration/provisioning/${id}`;
+ const fixture = `collections/provisioning/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Provisionings (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Provisioner)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/provisionings',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Provisionings (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/provisioning/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Provisionings (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/provisioning/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'provisionings',
+ description: 'Provisionings',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/radiusProfiles.js b/t/html/pfappserver/config/collections/modules/radiusProfiles.js
new file mode 100644
index 000000000000..af022ad4d033
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/radiusProfiles.js
@@ -0,0 +1,83 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = { // singular, 's' is appended for plural
+ eap: 'EAP Profile',
+ tls: 'TLS Profile',
+ fast: 'Fast Profile',
+ ocsp: 'OCSP Profile'
+};
+
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = `/configuration/radius/${type}`;
+ const resource_url = (id) => `/configuration/radius/${type}/${id}`;
+ const fixture = `collections/radius/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `RADIUS Profiles (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New ${name})`],
+ tabSelector: false,
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: `/api/**/config/radiusd/${type}_profiles`,
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `RADIUS Profiles (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: `/api/**/config/radiusd/${type}_profile/**`,
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `RADIUS Profiles (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: `/api/**/config/radiusd/${type}_profile/**`, expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'radiusProfiles',
+ description: 'RADIUS Profiles',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/radiusSslCertificates.js b/t/html/pfappserver/config/collections/modules/radiusSslCertificates.js
new file mode 100644
index 000000000000..533153f7685a
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/radiusSslCertificates.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/radius/ssl';
+const resource_url = id => `/configuration/radius/ssl/${id}`;
+const fixture = 'collections/radius/ssl.json';
+
+module.exports = {
+ id: 'radiusSslCertificates',
+ description: 'RADIUS SSL Certificates',
+ tests: [
+ {
+ description: 'RADIUS SSL Certificates - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New SSL Certificate)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/ssl_certificates',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'RADIUS SSL Certificates - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/ssl_certificate/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'RADIUS SSL Certificates - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/ssl_certificate/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/realms.js b/t/html/pfappserver/config/collections/modules/realms.js
new file mode 100644
index 000000000000..3a98f157eb15
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/realms.js
@@ -0,0 +1,61 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/realms';
+const resource_url = id => `/configuration/realm/${id}`;
+const fixture = 'collections/realm.json';
+
+module.exports = {
+ id: 'realms',
+ description: 'Realms',
+ tests: [
+ {
+ description: 'Realms - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ interceptors: [
+ {
+ method: 'POST', url: '/api/**/config/realms', expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ }
+ }
+ ]
+ },
+ {
+ description: 'Realms - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/realm/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Realms - Delete Existing',
+ scope: SCOPE_DELETE,
+ url: resource_url,
+ fixture,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/realm/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/roles.js b/t/html/pfappserver/config/collections/modules/roles.js
new file mode 100644
index 000000000000..3610adc21b6d
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/roles.js
@@ -0,0 +1,61 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/roles';
+const resource_url = id => `/configuration/role/${id}`;
+const fixture = 'collections/role.json';
+
+module.exports = {
+ id: 'roles',
+ description: 'Roles',
+ tests: [
+ {
+ description: 'Roles - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ interceptors: [
+ {
+ method: 'POST', url: '/api/**/config/roles', expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ }
+ }
+ ]
+ },
+ {
+ description: 'Roles - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/role/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Roles - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/role/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/scanEngines.js b/t/html/pfappserver/config/collections/modules/scanEngines.js
new file mode 100644
index 000000000000..3de890edc7c3
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/scanEngines.js
@@ -0,0 +1,81 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ nessus: 'Nessus',
+ nessus6: 'Nessus 6',
+ openvas: 'OpenVAS',
+ rapid7: 'Rapid7'
+}
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/scan_engines';
+ const resource_url = (id) => `/configuration/scan_engine/${id}`;
+ const fixture = `collections/scanEngine/${type}.json`;
+
+ return [...tests, ...[
+ {
+ description: `ScanEngines (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Scan Engine)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/scans',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `ScanEngines (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/scan/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `ScanEngines (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/scan/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'scans',
+ description: 'Scan Engines',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/securityEvents.js b/t/html/pfappserver/config/collections/modules/securityEvents.js
new file mode 100644
index 000000000000..da4cf6b99083
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/securityEvents.js
@@ -0,0 +1,73 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/security_events';
+const resource_url = id => `/configuration/security_event/${id}`;
+const fixture = 'collections/securityEvent.json';
+
+module.exports = {
+ id: 'securityEvents',
+ description: 'Security Events',
+ tests: [
+ {
+ description: 'Security Events - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/security_events',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ const { body: { id } = {} } = response
+ return { id } // push `id` to fixture
+ }
+ }
+ ]
+ },
+ {
+ description: 'Security Events - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/security_event/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Security Events - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ idFrom: (_, cache) => cache.id,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/security_event/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/selfServices.js b/t/html/pfappserver/config/collections/modules/selfServices.js
new file mode 100644
index 000000000000..78e482704fcf
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/selfServices.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/self_services';
+const resource_url = id => `/configuration/self_service/${id}`;
+const fixture = 'collections/selfService.json';
+
+module.exports = {
+ id: 'selfServices',
+ description: 'Self Services',
+ tests: [
+ {
+ description: 'Self Services - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Self Service)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/self_services',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Self Services - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/self_service/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Self Services - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/self_service/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/sources.js b/t/html/pfappserver/config/collections/modules/sources.js
new file mode 100644
index 000000000000..ceec10307e6b
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/sources.js
@@ -0,0 +1,128 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const typeCategories = {
+ INTERNAL: 'Internal',
+ EXTERNAL: 'External',
+ EXCLUSIVE: 'Exclusive',
+ BILLING: 'Billing'
+}
+
+const typesByCategory = {
+ [typeCategories.INTERNAL]: [
+ 'AD',
+ 'Authorization',
+ 'AzureAD',
+ 'EAPTLS',
+ 'EDIR',
+ 'Htpasswd',
+ 'GoogleWorkspaceLDAP',
+ 'HTTP',
+ 'Kerberos',
+ 'LDAP',
+// 'Potd', // Issue #TODO
+ 'RADIUS',
+ 'SAML'
+ ],
+ [typeCategories.EXTERNAL]: [
+ 'Clickatell',
+ 'Email',
+ 'Facebook',
+ 'Github',
+ 'Google',
+ 'Kickbox',
+ 'LinkedIn',
+ 'Null',
+ 'OpenID',
+ 'SMS',
+ 'SponsorEmail',
+ 'Twilio',
+ 'WindowsLive'
+ ],
+ [typeCategories.EXCLUSIVE]: [
+ 'AdminProxy',
+ 'Blackhole',
+ 'Eduroam',
+ ],
+ [typeCategories.BILLING]: [
+ 'Paypal',
+ 'Stripe'
+ ]
+};
+
+const types = Object.entries(typesByCategory).reduce((types, [category, categoryTypes]) => {
+ return [ ...types, ...categoryTypes.map(type => ({ [type]: category })) ]
+}, [])
+
+const tests = types.reduce((tests, typeCategory) => {
+ const { 0: [type, category] } = Object.entries(typeCategory)
+ const collection_url = '/configuration/sources';
+ const resource_url = (id) => `/configuration/source/${id}`;
+ const fixture = `collections/source/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Sources (${category}/${type}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New ${category.toLowerCase()})`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/sources',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Sources (${category}/${type}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/source/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Sources (${category}/${type}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/source/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'sources',
+ description: 'Sources',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/switchGroups.js b/t/html/pfappserver/config/collections/modules/switchGroups.js
new file mode 100644
index 000000000000..ec8fd3c056f3
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/switchGroups.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/switch_groups';
+const resource_url = id => `/configuration/switch_group/${id}`;
+const fixture = 'collections/switchGroup.json';
+
+module.exports = {
+ id: 'switchGroups',
+ description: 'Switch Groups',
+ tests: [
+ {
+ description: 'Switch Groups - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Switch Group)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/switch_groups',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switch Groups - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/switch_group/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switch Groups - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/switch_group/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/switchTemplates.js b/t/html/pfappserver/config/collections/modules/switchTemplates.js
new file mode 100644
index 000000000000..9715a6e18873
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/switchTemplates.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/switch_templates';
+const resource_url = id => `/configuration/switch_template/${id}`;
+const fixture = 'collections/switchTemplate.json';
+
+module.exports = {
+ id: 'switchTemplates',
+ description: 'Switch Templates',
+ tests: [
+ {
+ description: 'Switch Templates - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Switch Template)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/template_switches',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switch Templates - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/template_switch/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switch Templates - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/template_switch/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/switches.js b/t/html/pfappserver/config/collections/modules/switches.js
new file mode 100644
index 000000000000..24c7f2d29987
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/switches.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = '/configuration/switches';
+const resource_url = id => `/configuration/switch/${id}`;
+const fixture = 'collections/switch.json';
+
+module.exports = {
+ id: 'switches',
+ description: 'Switches',
+ tests: [
+ {
+ description: 'Switches - Create New',
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New)', 'ul li a[href]:contains(default)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/switches',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switches - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/switch/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Switches - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/switch/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/syslogForwarders.js b/t/html/pfappserver/config/collections/modules/syslogForwarders.js
new file mode 100644
index 000000000000..bb576d0ec57e
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/syslogForwarders.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/syslog';
+const resource_url = id => `/configuration/syslog/${id}`;
+const fixture = 'collections/syslogForwarder.json';
+
+module.exports = {
+ id: 'syslogForwarders',
+ description: 'Syslog Forwarders',
+ tests: [
+ {
+ description: 'Syslog Forwarders - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New Syslog Entry)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/syslog_forwarders',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Syslog Forwarders - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/syslog_forwarder/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'Syslog Forwarders - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/syslog_forwarder/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/syslogParsers.js b/t/html/pfappserver/config/collections/modules/syslogParsers.js
new file mode 100644
index 000000000000..78895b08afac
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/syslogParsers.js
@@ -0,0 +1,86 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+
+const types = {
+ dhcp: 'DHCP',
+ fortianalyser: 'FortiAnalyzer',
+ nexpose: 'Nexpose',
+ regex: 'Regex',
+ security_onion: 'Security Onion',
+ snort: 'Snort',
+ suricata: 'Suricata',
+ suricata_md5: 'Suricata MD5'
+};
+
+
+const tests = Object.entries(types).reduce((tests, [type, name]) => {
+ const collection_url = '/configuration/pfdetect';
+ const resource_url = (id) => `/configuration/pfdetect/${id}`;
+ const fixture = `collections/syslogParser/${type.toLowerCase()}.json`;
+
+ return [...tests, ...[
+ {
+ description: `Syslog Parsers (${name}) - Create New`,
+ scope: SCOPE_INSERT,
+ url: collection_url,
+ fixture,
+ selectors: {
+ buttonNewSelectors: [`button[type="button"]:contains(New Syslog Parser)`, `ul li a[href$="/new/${type}"]`],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/config/syslog_parsers',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: `Syslog Parsers (${name}) - Update Existing`,
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/config/syslog_parser/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: `Syslog Parsers (${name}) - Delete Existing`,
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/config/syslog_parser/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]]
+}, [])
+
+module.exports = {
+ id: 'syslogParsers',
+ description: 'Syslog Parsers',
+ tests
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/modules/wrixLocations.js b/t/html/pfappserver/config/collections/modules/wrixLocations.js
new file mode 100644
index 000000000000..52c04e0da5f5
--- /dev/null
+++ b/t/html/pfappserver/config/collections/modules/wrixLocations.js
@@ -0,0 +1,69 @@
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('../config');
+const collection_url = 'configuration/wrix';
+const resource_url = id => `/configuration/wrix/${id}`;
+const fixture = 'collections/wrix.json';
+
+module.exports = {
+ id: 'wrixLocations',
+ description: 'WRIX Locations',
+ tests: [
+ {
+ description: 'WRIX Locations - Create New',
+ scope: SCOPE_INSERT,
+ fixture,
+ url: collection_url,
+ selectors: {
+ buttonNewSelectors: ['button[type="button"]:contains(New WRIX Location)'],
+ },
+ interceptors: [
+ {
+ method: 'POST',
+ url: '/api/**/wrix_locations',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(201)
+ }
+ }
+ ]
+ },
+ {
+ description: 'WRIX Locations - Update Existing',
+ scope: SCOPE_UPDATE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: '+(PATCH|PUT)',
+ url: '/api/**/wrix_location/**',
+ expectRequest: (request, fixture) => {
+ Object.keys(fixture).forEach(key => {
+ expect(request.body).to.have.property(key)
+ expect(request.body[key]).to.deep.equal(fixture[key], key)
+ })
+ },
+ expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ },
+ {
+ description: 'WRIX Locations - Delete Existing',
+ scope: SCOPE_DELETE,
+ fixture,
+ url: resource_url,
+ interceptors: [
+ {
+ method: 'DELETE', url: '/api/**/wrix_location/**', expectResponse: (response, fixture) => {
+ expect(response.statusCode).to.equal(200)
+ }
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/collections/roles.js b/t/html/pfappserver/config/collections/roles.js
deleted file mode 100644
index f146aefcb3e7..000000000000
--- a/t/html/pfappserver/config/collections/roles.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- id: 'roles',
- name: 'Roles',
- url: '/configuration/roles',
-};
\ No newline at end of file
diff --git a/t/html/pfappserver/config/global/countries.js b/t/html/pfappserver/config/global/countries.js
new file mode 120000
index 000000000000..652913278d9f
--- /dev/null
+++ b/t/html/pfappserver/config/global/countries.js
@@ -0,0 +1 @@
+../../../../../html/pfappserver/root/src/globals/countries.js
\ No newline at end of file
diff --git a/t/html/pfappserver/config/global/fingerbank.js b/t/html/pfappserver/config/global/fingerbank.js
new file mode 120000
index 000000000000..12c6aaf8a0e6
--- /dev/null
+++ b/t/html/pfappserver/config/global/fingerbank.js
@@ -0,0 +1 @@
+../../../../../html/pfappserver/root/src/globals/fingerbank.js
\ No newline at end of file
diff --git a/t/html/pfappserver/config/global/index.js b/t/html/pfappserver/config/global/index.js
new file mode 100644
index 000000000000..91f7ff2476b8
--- /dev/null
+++ b/t/html/pfappserver/config/global/index.js
@@ -0,0 +1,9 @@
+const countries = require('./countries');
+const url = '/admin#';
+const interceptorTimeoutMs = 60E3;
+
+module.exports = {
+ countries,
+ url,
+ interceptorTimeoutMs
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/config/global/pki.js b/t/html/pfappserver/config/global/pki.js
new file mode 120000
index 000000000000..a8699a6f9e54
--- /dev/null
+++ b/t/html/pfappserver/config/global/pki.js
@@ -0,0 +1 @@
+../../../../../html/pfappserver/root/src/globals/pki.js
\ No newline at end of file
diff --git a/t/html/pfappserver/config/index.js b/t/html/pfappserver/config/index.js
new file mode 100644
index 000000000000..219ec0416c40
--- /dev/null
+++ b/t/html/pfappserver/config/index.js
@@ -0,0 +1,15 @@
+const global = require('./global')
+const bases = require('./bases')
+const collections = require('./collections')
+
+const latencyInterceptor = (url = `${global.url}**`, setDelayMs = 1E3) => {
+ cy.intercept({ url, middleware: true, }, req => Cypress.Promise.delay(setDelayMs).then(req.reply))
+}
+
+module.exports = {
+ global,
+ bases,
+ collections,
+
+ latencyInterceptor,
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/config/cypress.config-configuration.js b/t/html/pfappserver/cypress/config/cypress.config-configuration.js
index f1d08b219c59..d692ec9f8d78 100644
--- a/t/html/pfappserver/cypress/config/cypress.config-configuration.js
+++ b/t/html/pfappserver/cypress/config/cypress.config-configuration.js
@@ -1,13 +1,54 @@
-const config = require('./cypress.config.js');
+const fs = require('fs-extra');
+const fetch = require('node-fetch');
+const path = require('path');
+const base = require('./cypress.config.js');
+const fixturesPath = path.join(__dirname, '../fixtures');
module.exports = {
- ...config,
+ ...base,
e2e: {
- ...config.e2e,
+ ...base.e2e,
+ setupNodeEvents: (on, config) => {
+ on('before:run', async (details) => {
+ await fs.readFile('/usr/local/pf/conf/unified_api_system_pass', 'utf-8', async (err, password) => {
+ // login, get auth token
+ let request = JSON.stringify({ username: 'system', password: password.trim() });
+ let response = await fetch(`${base.e2e.baseUrl}/api/v1/login`, { method: 'POST', body: request });
+ let body = await response.text();
+ let { token } = JSON.parse(body);
+ let headers = { 'Authorization': `Bearer ${token}` };
+
+ // get maintenance tasks, write fixtures
+ response = await fetch(`${base.e2e.baseUrl}/api/v1/config/maintenance_tasks?limit=1000`, { method: 'GET', headers });
+ body = await response.text();
+ let { items = [] } = JSON.parse(body);
+ await fs.writeJson(`${fixturesPath}/runtime/maintenanceTasks.json`, items.map(item => item.id), { spaces: '\t' });
+ await items.forEach(async item => {
+ await fs.writeJson(`${fixturesPath}/runtime/maintenanceTask-${item.id}.json`, item, { spaces: '\t' });
+ })
+
+ // get ACLs, write fixtures
+ response = await fetch(`${base.e2e.baseUrl}/api/v1/config/admin_roles`, { method: 'OPTIONS', headers });
+ body = await response.text();
+ let { meta: { actions: { item: { allowed = [] } = {} } = {} } = {} } = JSON.parse(body);
+ let acls = allowed.reduce((acls, { options }) => {
+ options.forEach(({ text, value }) => {
+ acls[value] = text
+ })
+ return acls
+ }, {})
+ await fs.writeJson(`${fixturesPath}/runtime/acls.json`, acls, { spaces: '\t' });
+ })
+ });
+ return base.e2e.setupNodeEvents(on, config);
+ },
+
+ defaultCommandTimeout: 60E3,
+ requestTimeout: 60E3,
specPattern: [
'cypress/specs/e2e/*-configuration/**/*.cy.{js,jsx,ts,tsx}',
],
- }
+ },
};
diff --git a/t/html/pfappserver/cypress/config/cypress.config.js b/t/html/pfappserver/cypress/config/cypress.config.js
index 9b34a3665ac9..eccc797c306b 100644
--- a/t/html/pfappserver/cypress/config/cypress.config.js
+++ b/t/html/pfappserver/cypress/config/cypress.config.js
@@ -4,6 +4,12 @@ const webpackOptions = {
watchOptions: {}
}
+require('dotenv').config()
+
+// screenshot and video resolution
+const width = 3840 // 4k
+const height = 2160 // 4k
+
// see https://docs.cypress.io/guides/references/configuration#Global
module.exports = {
@@ -18,22 +24,42 @@ module.exports = {
on('before:browser:launch', (browser = {}, launchOptions) => {
switch (browser.name) {
case 'chrome':
+ case 'chrome:canary':
+ case 'chromium':
launchOptions.args.push('--disable-gpu'); // headless
+ launchOptions.args.push(`--window-size=${width},${height}`)
+ launchOptions.args.push('--force-device-scale-factor=1')
+ break;
+ case 'electron':
+ launchOptions.preferences.width = width
+ launchOptions.preferences.height = height
break;
case 'firefox':
launchOptions.args.push('-headless'); // headless
+ launchOptions.args.push(`--width=${width}`)
+ launchOptions.args.push(`--height=${height}`)
break;
}
return launchOptions;
});
on('task', {
log(message) {
- console.log(message)
+ console.log(`\t => ${message}`)
+ return null
+ }
+ });
+ on('task', {
+ error(message) {
+ console.error(`\t => ${message}`)
return null
}
- })
+ });
return config;
},
+ env: {
+ PARALLEL: +process.env.PARALLEL || 1,
+ SLICE: +process.env.SLICE || 0,
+ },
specPattern: [
'cypress/specs/e2e/*.cy.{js,jsx,ts,tsx}',
],
@@ -43,13 +69,10 @@ module.exports = {
screenshotsFolder: 'cypress/results/screenshots',
video: false,
videosFolder: 'cypress/results/videos',
- viewportWidth: 1280,
- viewportHeight: 1024,
+ viewportWidth: width,
+ viewportHeight: height,
// The number of tests for which snapshots and command data are kept in memory (default: 50).
// Reduce this number if you are experiencing high memory consumption in your browser during a test run.
numTestsKeptInMemory: 1,
-
- // Enables support for improved memory management within Chromium-based browsers.
- experimentalMemoryManagement: true,
};
diff --git a/t/html/pfappserver/cypress/fixtures/collections/adminRole.json b/t/html/pfappserver/cypress/fixtures/collections/adminRole.json
new file mode 100644
index 000000000000..26dbb5c351ec
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/adminRole.json
@@ -0,0 +1,10 @@
+{
+ "id": "test",
+ "description": "test",
+ "actions": [
+ "NODES_READ",
+ "NODES_CREATE",
+ "NODES_UPDATE",
+ "NODES_DELETE"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/billingTier.json b/t/html/pfappserver/cypress/fixtures/collections/billingTier.json
new file mode 100644
index 000000000000..16ee0cdcbc17
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/billingTier.json
@@ -0,0 +1,11 @@
+{
+ "id": "test",
+ "name": "test",
+ "description": "test",
+ "price": "13.37",
+ "role": "guest",
+ "access_duration": {
+ "interval": "1",
+ "unit": "D"
+ }
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/cloud/intune.json b/t/html/pfappserver/cypress/fixtures/collections/cloud/intune.json
new file mode 100644
index 000000000000..42571dd3ef37
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/cloud/intune.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "tenant_id": "foo",
+ "client_id": "bar",
+ "client_secret": "baz"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/connectionProfile.json b/t/html/pfappserver/cypress/fixtures/collections/connectionProfile.json
new file mode 100644
index 000000000000..2125bcc645e0
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/connectionProfile.json
@@ -0,0 +1,9 @@
+{
+ "id": "test",
+ "filter": [
+ {
+ "type": "port",
+ "match": "1337"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/connector.json b/t/html/pfappserver/cypress/fixtures/collections/connector.json
new file mode 100644
index 000000000000..486ae15149b8
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/connector.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "secret": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/domain.json b/t/html/pfappserver/cypress/fixtures/collections/domain.json
new file mode 100644
index 000000000000..5117fe9f2ac7
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/domain.json
@@ -0,0 +1,9 @@
+{
+ "id": "test",
+ "workgroup": "test",
+ "dns_name": "test.local",
+ "ad_server": "1.2.3.4",
+ "ad_fqdn": "test.local",
+ "dns_servers": "8.8.8.8",
+ "machine_account_password": "foobarbaz"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/eventLogger/syslog.json b/t/html/pfappserver/cypress/fixtures/collections/eventLogger/syslog.json
new file mode 100644
index 000000000000..30109fdd0ff6
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/eventLogger/syslog.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": "foo",
+ "facility": "syslog"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dhcp_filter.json b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dhcp_filter.json
new file mode 100644
index 000000000000..c864fd891eaa
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dhcp_filter.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "scopes": [
+ "Discover"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dns_filter.json b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dns_filter.json
new file mode 100644
index 000000000000..5df64c385966
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/dns_filter.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "scopes": [
+ "registration"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/filterEngine/radius_filter.json b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/radius_filter.json
new file mode 100644
index 000000000000..723b2b91f49e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/radius_filter.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "scopes": [
+ "returnRadiusAccessAccept"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/filterEngine/switch_filter.json b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/switch_filter.json
new file mode 100644
index 000000000000..f19635f7427f
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/switch_filter.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "scopes": [
+ "radius_request"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/filterEngine/vlan_filter.json b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/vlan_filter.json
new file mode 100644
index 000000000000..c61c64f1a431
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/filterEngine/vlan_filter.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "scopes": [
+ "RegistrationRole"
+ ]
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/combination.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/combination.json
new file mode 100644
index 000000000000..257590f51716
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/combination.json
@@ -0,0 +1,3 @@
+{
+ "device_id": "33507"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/device.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/device.json
new file mode 100644
index 000000000000..2f37dc5b0939
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/device.json
@@ -0,0 +1,3 @@
+{
+ "name": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpFingerprint.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpFingerprint.json
new file mode 100644
index 000000000000..0dd12ec0f9f6
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpFingerprint.json
@@ -0,0 +1,3 @@
+{
+ "value": "1,2,3"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpVendor.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpVendor.json
new file mode 100644
index 000000000000..a2eef532e428
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpVendor.json
@@ -0,0 +1,3 @@
+{
+ "value": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Enterprise.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Enterprise.json
new file mode 100644
index 000000000000..a2eef532e428
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Enterprise.json
@@ -0,0 +1,3 @@
+{
+ "value": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Fingerprint.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Fingerprint.json
new file mode 100644
index 000000000000..0dd12ec0f9f6
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/dhcpv6Fingerprint.json
@@ -0,0 +1,3 @@
+{
+ "value": "1,2,3"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/macVendor.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/macVendor.json
new file mode 100644
index 000000000000..b7d2bea7e19e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/macVendor.json
@@ -0,0 +1,4 @@
+{
+ "name": "test",
+ "mac": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/fingerbank/userAgent.json b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/userAgent.json
new file mode 100644
index 000000000000..a2eef532e428
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/fingerbank/userAgent.json
@@ -0,0 +1,3 @@
+{
+ "value": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/barracudang.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/barracudang.json
new file mode 100644
index 000000000000..85323df3a52f
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/barracudang.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/checkpoint.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/checkpoint.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/checkpoint.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/ciscoisepic.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/ciscoisepic.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/ciscoisepic.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/contentkeeper.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/contentkeeper.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/contentkeeper.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/familyzone.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/familyzone.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/familyzone.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/fortigate.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/fortigate.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/fortigate.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/iboss.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/iboss.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/iboss.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/jsonrpc.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/jsonrpc.json
new file mode 100644
index 000000000000..85323df3a52f
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/jsonrpc.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/junipersrx.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/junipersrx.json
new file mode 100644
index 000000000000..85323df3a52f
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/junipersrx.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/lightspeedrocket.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/lightspeedrocket.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/lightspeedrocket.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/paloalto.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/paloalto.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/paloalto.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/smoothwall.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/smoothwall.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/smoothwall.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/firewall/watchguard.json b/t/html/pfappserver/cypress/fixtures/collections/firewall/watchguard.json
new file mode 100644
index 000000000000..b853ed858384
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/firewall/watchguard.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "password": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/floatingDevice.json b/t/html/pfappserver/cypress/fixtures/collections/floatingDevice.json
new file mode 100644
index 000000000000..3af397305ba4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/floatingDevice.json
@@ -0,0 +1,4 @@
+{
+ "id": "de:ad:b4:c0:ff:ee",
+ "pvid": "1337"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/mfa/akamai.json b/t/html/pfappserver/cypress/fixtures/collections/mfa/akamai.json
new file mode 100644
index 000000000000..11a1a6029955
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/mfa/akamai.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "app_id": "foo",
+ "signing_key": "bar",
+ "verify_key": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/mfa/totp.json b/t/html/pfappserver/cypress/fixtures/collections/mfa/totp.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/mfa/totp.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/networkBehaviorPolicy.json b/t/html/pfappserver/cypress/fixtures/collections/networkBehaviorPolicy.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/networkBehaviorPolicy.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/pki/ca.json b/t/html/pfappserver/cypress/fixtures/collections/pki/ca.json
new file mode 100644
index 000000000000..e2f9e05d4c5a
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/pki/ca.json
@@ -0,0 +1,12 @@
+{
+ "cn": "test",
+ "mail": "email@test.local",
+ "organisation": "test",
+ "country": "CA",
+ "state": "Quebec",
+ "locality": "Montreal",
+ "key_type": "1",
+ "key_size": "2048",
+ "digest": "4",
+ "days": "365"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_local.json b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_local.json
new file mode 100644
index 000000000000..460cfc6773c9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_local.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "client_cert_path": "/dev/null",
+ "client_key_path": "/dev/null",
+ "ca_cert_path": "/dev/null",
+ "server_cert_path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_pki.json b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_pki.json
new file mode 100644
index 000000000000..44d761119eaa
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/packetfence_pki.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "ca_cert_path": "/dev/null",
+ "server_cert_path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/scep.json b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/scep.json
new file mode 100644
index 000000000000..44d761119eaa
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/pkiProvider/scep.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "ca_cert_path": "/dev/null",
+ "server_cert_path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/accept.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/accept.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/accept.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/airwatch.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/airwatch.json
new file mode 100644
index 000000000000..6ae168e8181d
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/airwatch.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "api_username": "foo",
+ "api_password": "bar",
+ "tenant_code": "baz"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/android.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/android.json
new file mode 100644
index 000000000000..a171a89f7627
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/android.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "ssid": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/deny.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/deny.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/deny.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/dpsk.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/dpsk.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/dpsk.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/google_workspace_chromebook.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/google_workspace_chromebook.json
new file mode 100644
index 000000000000..1a74e5011c26
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/google_workspace_chromebook.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "user": "foobar",
+ "service_account": "{}"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/intune.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/intune.json
new file mode 100644
index 000000000000..3d1c6a575641
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/intune.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "applicationID": "foobar",
+ "applicationSecret": "foobaz",
+ "tenantID": "farboo"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/jamf.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/jamf.json
new file mode 100644
index 000000000000..03b249ef7998
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/jamf.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "api_username": "foo",
+ "api_password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/kandji.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/kandji.json
new file mode 100644
index 000000000000..cfa39364c76a
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/kandji.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "api_token": "foobar",
+ "host": "test.local"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileconfig.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileconfig.json
new file mode 100644
index 000000000000..a171a89f7627
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileconfig.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "ssid": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileiron.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileiron.json
new file mode 100644
index 000000000000..a40ec821a74d
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/mobileiron.json
@@ -0,0 +1,11 @@
+{
+ "id": "test",
+ "username": "foo",
+ "password": "bar",
+ "host": "test.local",
+ "android_download_uri": "https://test.local",
+ "ios_download_uri": "https://test.local",
+ "windows_phone_download_uri": "https://test.local",
+ "boarding_host": "test.local",
+ "boarding_port": "1337"
+ }
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/sentinelone.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/sentinelone.json
new file mode 100644
index 000000000000..8630b5d87b91
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/sentinelone.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "api_username": "foo",
+ "api_password": "bar",
+ "windows_agent_download_uri": "https://test.local",
+ "mac_osx_agent_download_uri": "https://test.local"
+ }
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/provisioning/windows.json b/t/html/pfappserver/cypress/fixtures/collections/provisioning/windows.json
new file mode 100644
index 000000000000..a171a89f7627
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/provisioning/windows.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "ssid": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/radius/eap.json b/t/html/pfappserver/cypress/fixtures/collections/radius/eap.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/radius/eap.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/radius/fast.json b/t/html/pfappserver/cypress/fixtures/collections/radius/fast.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/radius/fast.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/radius/ocsp.json b/t/html/pfappserver/cypress/fixtures/collections/radius/ocsp.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/radius/ocsp.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/radius/ssl.json b/t/html/pfappserver/cypress/fixtures/collections/radius/ssl.json
new file mode 100644
index 000000000000..0de45e902f60
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/radius/ssl.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "cert": "foo",
+ "key": "bar",
+ "intermediate": "baz"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/radius/tls.json b/t/html/pfappserver/cypress/fixtures/collections/radius/tls.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/radius/tls.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/realm.json b/t/html/pfappserver/cypress/fixtures/collections/realm.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/realm.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/role.json b/t/html/pfappserver/cypress/fixtures/collections/role.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/role.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus.json b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus.json
new file mode 100644
index 000000000000..05bd15d511c1
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "ip": "test.local",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus6.json b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus6.json
new file mode 100644
index 000000000000..05bd15d511c1
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/nessus6.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "ip": "test.local",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/scanEngine/openvas.json b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/openvas.json
new file mode 100644
index 000000000000..05bd15d511c1
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/openvas.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "ip": "test.local",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/scanEngine/rapid7.json b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/rapid7.json
new file mode 100644
index 000000000000..92e58b0e3bd3
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/scanEngine/rapid7.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "host": "test.local",
+ "username": "foo",
+ "password": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/securityEvent.json b/t/html/pfappserver/cypress/fixtures/collections/securityEvent.json
new file mode 100644
index 000000000000..7ce6fe30f066
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/securityEvent.json
@@ -0,0 +1,3 @@
+{
+ "desc": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/selfService.json b/t/html/pfappserver/cypress/fixtures/collections/selfService.json
new file mode 100644
index 000000000000..7f3445f98133
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/selfService.json
@@ -0,0 +1,3 @@
+{
+ "id": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/ad.json b/t/html/pfappserver/cypress/fixtures/collections/source/ad.json
new file mode 100644
index 000000000000..3287e4cc2ed4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/ad.json
@@ -0,0 +1,9 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": [
+ "foo",
+ "bar"
+ ],
+ "basedn": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/adminproxy.json b/t/html/pfappserver/cypress/fixtures/collections/source/adminproxy.json
new file mode 100644
index 000000000000..bba31b3f951c
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/adminproxy.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "proxy_addresses": "1.2.3.4",
+ "user_header": "foo",
+ "group_header": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/authorization.json b/t/html/pfappserver/cypress/fixtures/collections/source/authorization.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/authorization.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/azuread.json b/t/html/pfappserver/cypress/fixtures/collections/source/azuread.json
new file mode 100644
index 000000000000..3365f5706d13
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/azuread.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar",
+ "tenant_id": "baz"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/blackhole.json b/t/html/pfappserver/cypress/fixtures/collections/source/blackhole.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/blackhole.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/clickatell.json b/t/html/pfappserver/cypress/fixtures/collections/source/clickatell.json
new file mode 100644
index 000000000000..1a7e5cbc0d03
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/clickatell.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "api_key": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/eaptls.json b/t/html/pfappserver/cypress/fixtures/collections/source/eaptls.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/eaptls.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/edir.json b/t/html/pfappserver/cypress/fixtures/collections/source/edir.json
new file mode 100644
index 000000000000..542a217a5a39
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/edir.json
@@ -0,0 +1,10 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": [
+ "foo",
+ "bar"
+ ],
+ "basedn": "baz",
+ "usernameattribute": "cn"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/eduroam.json b/t/html/pfappserver/cypress/fixtures/collections/source/eduroam.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/eduroam.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/email.json b/t/html/pfappserver/cypress/fixtures/collections/source/email.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/email.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/facebook.json b/t/html/pfappserver/cypress/fixtures/collections/source/facebook.json
new file mode 100644
index 000000000000..b791ff83a7c4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/facebook.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/github.json b/t/html/pfappserver/cypress/fixtures/collections/source/github.json
new file mode 100644
index 000000000000..b791ff83a7c4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/github.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/google.json b/t/html/pfappserver/cypress/fixtures/collections/source/google.json
new file mode 100644
index 000000000000..b791ff83a7c4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/google.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/googleworkspaceldap.json b/t/html/pfappserver/cypress/fixtures/collections/source/googleworkspaceldap.json
new file mode 100644
index 000000000000..c91b8d1326b7
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/googleworkspaceldap.json
@@ -0,0 +1,12 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": [
+ "foo",
+ "bar"
+ ],
+ "basedn": "baz",
+ "usernameattribute": "cn",
+ "client_cert_file": "/usr/local/pf/conf/ssl/server.crt",
+ "client_key_file": "/usr/local/pf/conf/ssl/server.key"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/htpasswd.json b/t/html/pfappserver/cypress/fixtures/collections/source/htpasswd.json
new file mode 100644
index 000000000000..ad7bf744897c
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/htpasswd.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/http.json b/t/html/pfappserver/cypress/fixtures/collections/source/http.json
new file mode 100644
index 000000000000..01b09c8e231d
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/http.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "authentication_url": "foo",
+ "authorization_url": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/kerberos.json b/t/html/pfappserver/cypress/fixtures/collections/source/kerberos.json
new file mode 100644
index 000000000000..32906116968e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/kerberos.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": "foo",
+ "authenticate_realm": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/kickbox.json b/t/html/pfappserver/cypress/fixtures/collections/source/kickbox.json
new file mode 100644
index 000000000000..1a7e5cbc0d03
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/kickbox.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "api_key": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/ldap.json b/t/html/pfappserver/cypress/fixtures/collections/source/ldap.json
new file mode 100644
index 000000000000..542a217a5a39
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/ldap.json
@@ -0,0 +1,10 @@
+{
+ "id": "test",
+ "description": "test",
+ "host": [
+ "foo",
+ "bar"
+ ],
+ "basedn": "baz",
+ "usernameattribute": "cn"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/linkedin.json b/t/html/pfappserver/cypress/fixtures/collections/source/linkedin.json
new file mode 100644
index 000000000000..b791ff83a7c4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/linkedin.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/null.json b/t/html/pfappserver/cypress/fixtures/collections/source/null.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/null.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/openid.json b/t/html/pfappserver/cypress/fixtures/collections/source/openid.json
new file mode 100644
index 000000000000..c8958c03f9e6
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/openid.json
@@ -0,0 +1,11 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar",
+ "site": "foobar",
+ "authorize_path": "foobar",
+ "access_token_path": "foobar",
+ "protected_resource_url": "foobar",
+ "domains": "foobar.local"
+}
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/paypal.json b/t/html/pfappserver/cypress/fixtures/collections/source/paypal.json
new file mode 100644
index 000000000000..ef4dff4717d7
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/paypal.json
@@ -0,0 +1,10 @@
+{
+ "id": "test",
+ "description": "test",
+ "identity_token": "test",
+ "cert_id": "test",
+ "cert_file": "/dev/null",
+ "key_file": "/dev/null",
+ "paypal_cert_file": "/dev/null",
+ "email_address": "user@example.com"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/potd.json b/t/html/pfappserver/cypress/fixtures/collections/source/potd.json
new file mode 100644
index 000000000000..df3b29c9e109
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/potd.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "password_email_update": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/radius.json b/t/html/pfappserver/cypress/fixtures/collections/source/radius.json
new file mode 100644
index 000000000000..486ae15149b8
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/radius.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "description": "test",
+ "secret": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/saml.json b/t/html/pfappserver/cypress/fixtures/collections/source/saml.json
new file mode 100644
index 000000000000..866b62ef3585
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/saml.json
@@ -0,0 +1,12 @@
+{
+ "id": "test",
+ "description": "test",
+ "sp_entity_id": "foo",
+ "sp_key_path": "/dev/null",
+ "sp_cert_path": "/dev/null",
+ "idp_entity_id": "bar",
+ "idp_metadata_path": "/dev/null",
+ "idp_cert_path": "/dev/null",
+ "idp_ca_cert_path": "/dev/null",
+ "authorization_source_id": "local"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/sms.json b/t/html/pfappserver/cypress/fixtures/collections/source/sms.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/sms.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/sponsoremail.json b/t/html/pfappserver/cypress/fixtures/collections/source/sponsoremail.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/sponsoremail.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/stripe.json b/t/html/pfappserver/cypress/fixtures/collections/source/stripe.json
new file mode 100644
index 000000000000..93fb6c480eae
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/stripe.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "secret_key": "foo",
+ "publishable_key": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/twilio.json b/t/html/pfappserver/cypress/fixtures/collections/source/twilio.json
new file mode 100644
index 000000000000..a012c2f29304
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/twilio.json
@@ -0,0 +1,7 @@
+{
+ "id": "test",
+ "description": "test",
+ "account_sid": "foo",
+ "auth_token": "bar",
+ "twilio_phone_number": "(555) 555-5555"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/source/windowslive.json b/t/html/pfappserver/cypress/fixtures/collections/source/windowslive.json
new file mode 100644
index 000000000000..b791ff83a7c4
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/source/windowslive.json
@@ -0,0 +1,6 @@
+{
+ "id": "test",
+ "description": "test",
+ "client_id": "foo",
+ "client_secret": "bar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/switch.json b/t/html/pfappserver/cypress/fixtures/collections/switch.json
new file mode 100644
index 000000000000..9ed1646004ca
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/switch.json
@@ -0,0 +1,4 @@
+{
+ "id": "1.2.3.4",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/switchGroup.json b/t/html/pfappserver/cypress/fixtures/collections/switchGroup.json
new file mode 100644
index 000000000000..9ed1646004ca
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/switchGroup.json
@@ -0,0 +1,4 @@
+{
+ "id": "1.2.3.4",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/switchTemplate.json b/t/html/pfappserver/cypress/fixtures/collections/switchTemplate.json
new file mode 100644
index 000000000000..29ac6101f3b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/switchTemplate.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "description": "test"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogForwarder.json b/t/html/pfappserver/cypress/fixtures/collections/syslogForwarder.json
new file mode 100644
index 000000000000..97c5ab15dcbe
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogForwarder.json
@@ -0,0 +1,5 @@
+{
+ "id": "test",
+ "proto": "tcp",
+ "host": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/dhcp.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/dhcp.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/dhcp.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/fortianalyser.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/fortianalyser.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/fortianalyser.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/nexpose.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/nexpose.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/nexpose.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/regex.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/regex.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/regex.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/security_onion.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/security_onion.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/security_onion.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/snort.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/snort.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/snort.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata_md5.json b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata_md5.json
new file mode 100644
index 000000000000..2788fdd8215e
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/syslogParser/suricata_md5.json
@@ -0,0 +1,4 @@
+{
+ "id": "test",
+ "path": "/dev/null"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/collections/wrix.json b/t/html/pfappserver/cypress/fixtures/collections/wrix.json
new file mode 100644
index 000000000000..c2bfa08eadea
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/collections/wrix.json
@@ -0,0 +1,15 @@
+{
+ "id": "test",
+ "Provider_Identifier": "foobar",
+ "Location_Identifier": "foobar",
+ "Service_Provider_Brand": "foobar",
+ "Location_Type": "foobar",
+ "Sub_Location_Type": "foobar",
+ "English_Location_Name": "foobar",
+ "Location_Address1": "foobar",
+ "English_Location_City": "foobar",
+ "Location_Zip_Postal_Code": "foobar",
+ "Location_State_Province_Name": "foobar",
+ "Location_Country_Name": "foobar",
+ "Location_Phone_Number": "foobar"
+}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/configurator.js b/t/html/pfappserver/cypress/fixtures/configurator.js
index 9fdf85d3c6b8..12782e775a1c 100644
--- a/t/html/pfappserver/cypress/fixtures/configurator.js
+++ b/t/html/pfappserver/cypress/fixtures/configurator.js
@@ -8,4 +8,4 @@
fingerbank: {
'upstream.api_key': null
}
-}
\ No newline at end of file
+}
diff --git a/t/html/pfappserver/cypress/fixtures/empty.json b/t/html/pfappserver/cypress/fixtures/empty.json
new file mode 100644
index 000000000000..9e26dfeeb6e6
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/empty.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/fixtures/runtime/.gitignore b/t/html/pfappserver/cypress/fixtures/runtime/.gitignore
new file mode 100644
index 000000000000..c96a04f008ee
--- /dev/null
+++ b/t/html/pfappserver/cypress/fixtures/runtime/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/00-configurator/01-configurator.cy.js b/t/html/pfappserver/cypress/specs/e2e/00-configurator/01-configurator.cy.js
index f2096ec2b793..42aac14c1e69 100644
--- a/t/html/pfappserver/cypress/specs/e2e/00-configurator/01-configurator.cy.js
+++ b/t/html/pfappserver/cypress/specs/e2e/00-configurator/01-configurator.cy.js
@@ -95,7 +95,7 @@ describe('Configurator', () => {
// wait for form, then fill it out
cy.get('.base-form').then(() => {
cy.fixture('configurator').then(configurator => {
- cy.formFillNamespace('.base-form', configurator.network)
+ cy.formFillNamespace(configurator.network, '.base-form')
})
})
@@ -137,7 +137,7 @@ describe('Configurator', () => {
// fill administrator form
cy.fixture('configurator').then(configurator => {
- cy.formFillNamespace('*[data-form="administrator"]', configurator.administrator)
+ cy.formFillNamespace(configurator.administrator, '*[data-form="administrator"]')
})
// next button enabled
@@ -164,7 +164,7 @@ describe('Configurator', () => {
// wait for form, then fill it out
cy.get('.base-form').then(() => {
cy.fixture('configurator').then(configurator => {
- cy.formFillNamespace('.base-form', configurator.fingerbank)
+ cy.formFillNamespace(configurator.fingerbank, '.base-form')
// verify fingerbank upstream api_key
if (configurator.fingerbank['upstream.api_key']) {
cy.get('button[type="button"]:contains(Verify)').click()
diff --git a/t/html/pfappserver/cypress/specs/e2e/10-configuration/10-bases.cy.js b/t/html/pfappserver/cypress/specs/e2e/10-configuration/10-bases.cy.js
new file mode 100644
index 000000000000..293e0402f9dc
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/10-configuration/10-bases.cy.js
@@ -0,0 +1,72 @@
+///
+
+const { global, bases } = require('config');
+
+const PARALLEL = Cypress.env('PARALLEL')
+const SLICE = Cypress.env('SLICE')
+
+describe('Bases', () => {
+ Object.values(bases).forEach((base, b) => {
+ context(`Base - ${base.description}`, () => {
+ beforeEach('Login as system', () => {
+ cy.session('system', () => {
+ cy.pfSystemLogin()
+ })
+ })
+ base.tests.forEach(test => {
+ const { description, url, interceptors = [], selectors } = test
+ const {
+ buttonSelector = 'button[type="submit"]'
+ } = selectors || []
+
+ const unit = () => {
+
+ // storage from getter (fixture) to setter (expect)
+ let cache = {}
+
+ // setup API interceptors
+ interceptors.forEach((interceptor, i) => {
+ const { method, url, expect, timeout = 3E3 } = interceptor
+ cy.intercept({ method, url }, (req) => {
+ if (expect) {
+ req.destroy() // block
+ cy.window().then(() => {
+ expect(req, cache) // expect
+ })
+ }
+ else {
+ req.continue() // passthrough
+ }
+ }).as(`interceptor${i}`)
+ })
+
+ // load page
+ cy.visit(`${global.url}${url}`)
+
+ interceptors.forEach(async (interceptor, i) => {
+ const { url, fixture, timeout = 10E3 } = interceptor
+ if (fixture) {
+ await cy.wait(`@interceptor${i}`, { timeout })
+ .then(interception => {
+ const response = interception.response
+ cache = fixture(response) || response
+ })
+ }
+ })
+
+ // click button
+ cy.get(buttonSelector).first().as('button')
+ cy.get('@button')
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ .click()
+ }
+ if (PARALLEL > 1 && ((b % PARALLEL) !== SLICE)) {
+ // parallel processing, skip slice
+ return it.skip(`[${b % PARALLEL}/${PARALLEL}: skip] ${description}`, unit)
+ }
+ it(`[${b % PARALLEL}/${PARALLEL}: run] ${description}`, unit)
+ })
+ })
+ })
+});
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/10-configuration/20-collections.cy.js b/t/html/pfappserver/cypress/specs/e2e/10-configuration/20-collections.cy.js
new file mode 100644
index 000000000000..e1ce53736334
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/10-configuration/20-collections.cy.js
@@ -0,0 +1,261 @@
+///
+const { global, collections } = require('config');
+const { flatten } = require('utils')
+const { SCOPE_INSERT, SCOPE_UPDATE, SCOPE_DELETE } = require('config/collections/config');
+
+const PARALLEL = Cypress.env('PARALLEL')
+const SLICE = Cypress.env('SLICE')
+
+describe('Collections', () => {
+ Object.values(collections).forEach((collection, c) => {
+ context(`Collection - ${collection.description}`, () => {
+ beforeEach('Login as system', () => {
+ cy.session('system', () => {
+ cy.pfSystemLogin()
+ })
+ })
+ let cache = {};
+ collection.tests.forEach(test => {
+ const { description, fixture = 'empty.json', flatten: flattenFixture, scope, url, interceptors = [], selectors,
+ timeout = 15E3,
+ idFrom = ({ id }) => id,
+ beforeFormFill,
+ map = (v) => v,
+ } = test
+ const {
+ containerSelector = 'div[data-router-view] > div > div.card',
+ buttonNewSelectors = ['button[type="button"]:contains(New)'],
+ buttonCreateSelector = 'button[type="submit"]:contains(Create)',
+ buttonDeleteSelector = 'button[type="button"]:contains(Delete)',
+ buttonDeleteConfirmSelector = 'button[type="button"][data-confirm]:contains(Delete)',
+ buttonSaveSelector = 'button[type="submit"]:contains(Save)',
+ tabSelector = 'div.tabs a[role="tab"]:is(:visible)',
+ } = selectors || {};
+ const selectorOptions = { timeout }
+
+ const unit = () => {
+ cy.fixture(fixture).then((data) => {
+ const associative = (flattenFixture) ? flatten(data): data
+ const form = Object.entries(associative).reduce((items, [k, v]) => {
+ return { ...items, [k]: map(v, k) }
+ }, {})
+ const resourceId = idFrom(data, cache) // `id` may only be available post-create
+ const resourceUrl = (url.constructor == Function) ? url(resourceId) : url
+
+ switch (scope) {
+
+
+ /**
+ * SCOPE_INSERT
+ */
+ case SCOPE_INSERT:
+ cy.visit(`${global.url}${url}`)
+
+ // click "New" button(s)
+ buttonNewSelectors.forEach((buttonNewSelector, n) => {
+ cy.get(buttonNewSelector, selectorOptions).first().as(`buttonNew${n}`)
+ cy.get(`@buttonNew${n}`, selectorOptions)
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ .click({ log: true, force: true })
+ })
+
+ // expect new url
+ cy.url().should('not.equal', url)
+
+ // setup API interceptors
+ interceptors.forEach((interceptor, i) => {
+ const { method, url, expectRequest, timeout = global.interceptorTimeoutMs, block } = interceptor
+ cy.intercept({ method, url }, (request) => {
+ if (expectRequest) {
+ let retVal = expectRequest(request, data, cache) // expect
+ request = retVal || request
+ }
+ if (block) {
+ request.destroy() // block
+ }
+ else {
+ request.continue() // passthrough
+ }
+ }).as(`interceptor${i}`)
+ })
+
+ // wait for progress
+ cy.get('div.progress[style*="display: none"]', selectorOptions).should('exist')
+
+ cy.get(containerSelector, selectorOptions).within($body => { // DOM ready
+
+ // iterate tabs (optional)
+ if ($body.find(tabSelector).length) {
+ cy.get(tabSelector, selectorOptions).should("have.length.gte", 0).then((tab, n) => {
+ // click tab
+ cy.get(tab, selectorOptions)
+ .click({ log: true })
+ .invoke('attr', 'aria-selected').should('eq', 'true')
+
+ cy.get(`div[role="tabpanel"]:nth-child(${n + 1})`, selectorOptions).as(`tab${n}`)
+ cy.get(`@tab${n}`, selectorOptions)
+ .invoke('attr', 'aria-hidden').should('eq', 'false')
+
+ // before form fill
+ if (beforeFormFill) {
+ beforeFormFill(`@tab${n}`, selectorOptions)
+ }
+
+ // fill form
+ cy.formFillNamespace(form, `@tab${n}`)
+ })
+
+ // click first tab
+ cy.get(tabSelector, selectorOptions).first()
+ .click({ log: true })
+ .invoke('attr', 'aria-selected').should('eq', 'true')
+ }
+ else {
+ // before form fill
+ if (beforeFormFill) {
+ beforeFormFill($body, selectorOptions)
+ }
+
+ // fill form
+ cy.formFillNamespace(form, $body)
+ }
+ })
+
+ // click "Create" button
+ cy.get(buttonCreateSelector, selectorOptions).first().as('buttonCreate')
+ cy.get('@buttonCreate', selectorOptions)
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ .click({ log: true })
+
+ // wait, expect response
+ interceptors.forEach(async (interceptor, i) => {
+ const { url, expectResponse, timeout = global.interceptorTimeoutMs } = interceptor
+ await cy.wait(`@interceptor${i}`, { timeout }).then(({ request, response }) => {
+ if (expectResponse) {
+ let retVal = expectResponse(response, data, cache)
+ if (retVal) {
+ cache = { ...cache, ...retVal }
+ }
+ }
+ })
+ })
+ break;
+
+
+ /**
+ * SCOPE_UPDATE
+ */
+ case SCOPE_UPDATE:
+
+ // setup API interceptors
+ interceptors.forEach((interceptor, i) => {
+ const { method, url, expectRequest, timeout = global.interceptorTimeoutMs, block } = interceptor
+ cy.intercept({ method, url }, (request) => {
+ if (expectRequest) {
+ let retVal = expectRequest(request, data, cache) // expect
+ request = retVal || request
+ }
+ if (block) {
+ request.destroy() // block
+ }
+ else {
+ request.continue() // passthrough
+ }
+ }).as(`interceptor${i}`)
+ })
+
+ cy.visit(`${global.url}${resourceUrl}`)
+
+ cy.get(containerSelector, selectorOptions).then($body => { // DOM ready
+ // wait for progress
+ cy.get('div.progress[style*="display: none"]', selectorOptions).should('exist')
+
+ // click "Save" button
+ cy.get(buttonSaveSelector, selectorOptions).first().as('buttonSave')
+ cy.get('@buttonSave', selectorOptions)
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ .click({ log: true })
+
+ // wait, expect response
+ interceptors.forEach(async (interceptor, i) => {
+ const { url, expectResponse, timeout = global.interceptorTimeoutMs } = interceptor
+ await cy.wait(`@interceptor${i}`, { timeout }).then(({ request, response }) => {
+ if (expectResponse) {
+ let retVal = expectResponse(response, data, cache)
+ if (retVal) {
+ cache = { ...cache, ...retVal }
+ }
+ }
+ })
+ })
+ })
+ break;
+
+
+ /**
+ * SCOPE_DELETE
+ */
+ case SCOPE_DELETE:
+ // setup API interceptors
+ interceptors.forEach((interceptor, i) => {
+ const { method, url, timeout = global.interceptorTimeoutMs, block } = interceptor
+ cy.intercept({ method, url }, (request) => {
+ if (block) {
+ request.destroy() // block
+ }
+ else {
+ request.continue() // passthrough
+ }
+ }).as(`interceptor${i}`)
+ })
+
+ cy.visit(`${global.url}${resourceUrl}`)
+
+ cy.get(containerSelector, selectorOptions).then($body => { // DOM ready
+ // wait for progress
+ cy.get('div.progress[style*="display: none"]', selectorOptions).should('exist')
+
+ // click "Delete" button
+ cy.get(buttonDeleteSelector, selectorOptions).first().as('buttonDelete')
+ cy.get('@buttonDelete', selectorOptions)
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ .click({ log: true })
+
+ // click "Delete" button again (confirm)
+ cy.get(buttonDeleteConfirmSelector, selectorOptions).first().as('buttonDeleteConfirm')
+ cy.get('@buttonDeleteConfirm', selectorOptions)
+ .click({ log: true })
+
+ // wait, expect response
+ interceptors.forEach(async (interceptor, i) => {
+ const { url, expectResponse, timeout = global.interceptorTimeoutMs } = interceptor
+ await cy.wait(`@interceptor${i}`, { timeout }).then(({ request, response }) => {
+ if (expectResponse) {
+ let retVal = expectResponse(response, data, cache)
+ if (retVal) {
+ cache = { ...cache, ...retVal }
+ }
+ }
+ })
+ })
+ })
+ break;
+
+ default:
+ cy.task('error', `Unhandled scope '${scope || 'unknown'}'`)
+ }
+ })
+ }
+ if (PARALLEL > 1 && ((c % PARALLEL) !== SLICE)) {
+ // parallel processing, skip slice
+ return it.skip(`[${c % PARALLEL}/${PARALLEL}: skip] ${description}`, unit)
+ }
+ it(`[${c % PARALLEL}/${PARALLEL}: run] ${description}`, unit)
+ })
+ })
+ })
+})
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/90-configuration/40-policies-and-access-control/01-roles.cy.js b/t/html/pfappserver/cypress/specs/e2e/90-configuration/40-policies-and-access-control/01-roles.cy.js
new file mode 100644
index 000000000000..0f018c464bc5
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/90-configuration/40-policies-and-access-control/01-roles.cy.js
@@ -0,0 +1,25 @@
+///
+
+describe('Roles', () => {
+
+ context('Roles List', () => {
+
+ before('Login as system', () => {
+ cy.pfConfiguratorDisable()
+ cy.pfSystemLogin()
+ })
+
+ beforeEach('Load URI', () => {
+ cy.visit('/admin#/configuration/roles')
+ })
+
+ it('assert add new button exists', () => {
+ cy.get('form button[type="submit"]').first().as('btnSubmit')
+ cy.get('@btnSubmit')
+ .should('have.class', 'disabled')
+ .and('have.disabled', 'disabled')
+ })
+
+ })
+
+})
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/90-extras/01-login.cy.js b/t/html/pfappserver/cypress/specs/e2e/90-extras/01-login.cy.js
new file mode 100644
index 000000000000..418b68ac34b9
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/90-extras/01-login.cy.js
@@ -0,0 +1,41 @@
+///
+
+context('Login', () => {
+
+ before(() => {
+ cy.pfConfiguratorDisable()
+ })
+
+ beforeEach(() => {
+ cy.visit('/')
+ })
+
+ it('assert login button is disabled when form is empty', () => {
+ cy.get('form button[type="submit"]').first().as('btnSubmit')
+ cy.get('@btnSubmit')
+ .should('have.class', 'disabled')
+ .and('have.disabled', 'disabled')
+ })
+
+ it('assert login button is enabled when form is filled', () => {
+ cy.get('form input#username').first().as('inputUsername')
+ cy.get('form input#password').first().as('inputPassword')
+ cy.get('form button[type="submit"]').first().as('btnSubmit')
+ cy.get('@inputUsername').type('foo')
+ cy.get('@inputPassword').type('bar')
+ cy.get('@btnSubmit')
+ .should('not.have.class', 'disabled')
+ .and('not.have.disabled', 'disabled')
+ })
+
+ it('assert invalid login shows an alert', () => {
+ cy.get('form input#username').first().as('inputUsername')
+ cy.get('form input#password').first().as('inputPassword')
+ cy.get('form button[type="submit"]').first().as('btnSubmit')
+ cy.get('@inputUsername').type('foo')
+ cy.get('@inputPassword').type('bar')
+ cy.get('@btnSubmit').click()
+ cy.get('form div[role="alert"]').first().should('contain', `Wasn't able to authenticate those credentials`)
+ })
+
+})
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/90-extras/02-locale.cy.js b/t/html/pfappserver/cypress/specs/e2e/90-extras/02-locale.cy.js
new file mode 100644
index 000000000000..296da0050143
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/90-extras/02-locale.cy.js
@@ -0,0 +1,14 @@
+///
+
+context('Locale', () => {
+
+ before(() => {
+ cy.pfConfiguratorDisable()
+ cy.pfSystemLogin()
+ })
+
+ beforeEach(() => {
+ cy.visit('/admin')
+ })
+
+})
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/specs/e2e/90-extras/40-policies-and-access-control/01-roles.cy.js b/t/html/pfappserver/cypress/specs/e2e/90-extras/40-policies-and-access-control/01-roles.cy.js
new file mode 100644
index 000000000000..0f018c464bc5
--- /dev/null
+++ b/t/html/pfappserver/cypress/specs/e2e/90-extras/40-policies-and-access-control/01-roles.cy.js
@@ -0,0 +1,25 @@
+///
+
+describe('Roles', () => {
+
+ context('Roles List', () => {
+
+ before('Login as system', () => {
+ cy.pfConfiguratorDisable()
+ cy.pfSystemLogin()
+ })
+
+ beforeEach('Load URI', () => {
+ cy.visit('/admin#/configuration/roles')
+ })
+
+ it('assert add new button exists', () => {
+ cy.get('form button[type="submit"]').first().as('btnSubmit')
+ cy.get('@btnSubmit')
+ .should('have.class', 'disabled')
+ .and('have.disabled', 'disabled')
+ })
+
+ })
+
+})
\ No newline at end of file
diff --git a/t/html/pfappserver/cypress/support/commands.js b/t/html/pfappserver/cypress/support/commands.js
index 6b822ba337fb..96f87b120c4f 100644
--- a/t/html/pfappserver/cypress/support/commands.js
+++ b/t/html/pfappserver/cypress/support/commands.js
@@ -54,20 +54,47 @@ Cypress.Commands.add('pfConfiguratorDisable', () => {
})
})
-Cypress.Commands.add('formFillNamespace', (selector, data) => {
- cy.get(selector).then($ => {
- for (let entry of Object.entries(data)) {
- const [namespace, value] = entry
- cy.get(`${selector} *[data-namespace="${namespace}"]:not([disabled])`).first().then(el => {
- const tagName = Cypress.$(el)[0].tagName.toLowerCase()
- switch (tagName) {
- case "input":
- cy.get(el).type(`{selectAll}{del}${value}`)
- break
- default:
- throw new Error(`unhandled form tagName "${tagName}"`)
- }
- })
- }
+Cypress.Commands.add('formFillNamespace', (data, selector = 'body') => {
+ return cy.get(selector)
+ .should('exist')
+ .each(() => {
+ const list = Object.keys(data).map(key => `*[data-namespace="${key}"]`).join(',');
+ return cy.get(list)
+ .should("have.length.gte", 0)
+ .each(element => {
+// if (element.is(':visible')) {
+ const namespace = element.attr('data-namespace')
+ const chosen = element.attr('data-chosen')
+ if (namespace in data && data[namespace]) {
+ const value = data[namespace]
+ const type = element.attr('type')
+ const e = Cypress.$(element)[0]
+ const tagName = e.tagName.toLowerCase()
+ switch (true) {
+ case tagName === 'input' && ['text', 'password', 'number'].includes(type):
+ case tagName === 'textarea':
+ cy.get(`*[data-namespace="${namespace}"]`).as(namespace)
+ cy.get(`@${namespace}`)
+ .clear({ log: true, force: true })
+ .type(value, { log: true, force: true })
+ break
+ case tagName === 'input' && ['range'].includes(type):
+ // TODO
+ break
+ case tagName === 'div' && !!chosen:
+ cy.get(`*[data-namespace="${namespace}"]`).within(() => {
+ const values = ((Array.isArray(value)) ? value : [value]).reduce((values, _value) => `${values}${_value}{selectAll}{enter}`, '')
+ cy.get('input.multiselect__input').as(namespace)
+ cy.get(`@${namespace}`)
+ .clear({ log: true, force: true })
+ .type(values, { log: true, force: true })
+ })
+ break
+ default:
+ throw new Error(`unhandled element <${tagName} type="${type || ''}" data-chosen="${chosen}" data-namespace="${namespace}" />`)
+ }
+ }
+// }
+ })
})
})
diff --git a/t/html/pfappserver/package-lock.json b/t/html/pfappserver/package-lock.json
index de4f85f396d9..adaaf4878ffb 100644
--- a/t/html/pfappserver/package-lock.json
+++ b/t/html/pfappserver/package-lock.json
@@ -1,17 +1,20 @@
{
"name": "packetfence-e2e",
"version": "0.99.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "packetfence-e2e",
"version": "0.99.0",
"dependencies": {
- "@babel/core": "^7.24.3",
- "@babel/preset-env": "^7.24.3",
- "@cypress/webpack-preprocessor": "^5.15.3",
+ "@babel/core": "^7.24.5",
+ "@babel/preset-env": "^7.24.5",
+ "@cypress/webpack-preprocessor": "^6.0.0",
"babel-loader": "^9.1.3",
+ "dotenv": "^16.3.1",
+ "fs-extra": "^11.2.0",
+ "node-fetch": "^2.7.0",
"webpack": "^5.91.0"
}
},
@@ -28,11 +31,11 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
- "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz",
+ "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==",
"dependencies": {
- "@babel/highlight": "^7.24.2",
+ "@babel/highlight": "^7.24.6",
"picocolors": "^1.0.0"
},
"engines": {
@@ -40,28 +43,28 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
- "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz",
+ "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz",
- "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz",
+ "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.24.2",
- "@babel/generator": "^7.24.4",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.24.4",
- "@babel/parser": "^7.24.4",
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "@babel/code-frame": "^7.24.6",
+ "@babel/generator": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helpers": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/template": "^7.24.6",
+ "@babel/traverse": "^7.24.6",
+ "@babel/types": "^7.24.6",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -77,11 +80,11 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz",
- "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz",
+ "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==",
"dependencies": {
- "@babel/types": "^7.24.0",
+ "@babel/types": "^7.24.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -104,34 +107,34 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz",
+ "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz",
+ "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==",
"dependencies": {
- "@babel/types": "^7.22.15"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz",
+ "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==",
"dependencies": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
+ "@babel/compat-data": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
"browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -141,18 +144,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz",
- "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz",
+ "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-member-expression-to-functions": "^7.24.6",
+ "@babel/helper-optimise-call-expression": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
"semver": "^6.3.1"
},
"engines": {
@@ -163,11 +166,11 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz",
+ "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-annotate-as-pure": "^7.24.6",
"regexpu-core": "^5.3.1",
"semver": "^6.3.1"
},
@@ -179,9 +182,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
- "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -194,68 +197,68 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz",
+ "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz",
+ "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==",
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz",
+ "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz",
+ "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==",
"dependencies": {
- "@babel/types": "^7.23.0"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
- "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz",
+ "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==",
"dependencies": {
- "@babel/types": "^7.24.0"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz",
+ "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-simple-access": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -265,32 +268,32 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz",
+ "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
- "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz",
+ "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz",
+ "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-wrap-function": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -300,13 +303,13 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
- "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz",
+ "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-member-expression-to-functions": "^7.24.6",
+ "@babel/helper-optimise-call-expression": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -316,94 +319,93 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz",
+ "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz",
+ "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz",
+ "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==",
"dependencies": {
- "@babel/types": "^7.22.5"
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
- "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz",
+ "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz",
+ "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
- "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz",
+ "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz",
+ "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==",
"dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz",
- "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz",
+ "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==",
"dependencies": {
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0"
+ "@babel/template": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
- "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz",
+ "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-validator-identifier": "^7.24.6",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
@@ -413,9 +415,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
- "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz",
+ "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -424,12 +426,12 @@
}
},
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz",
- "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz",
+ "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -439,11 +441,11 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
- "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz",
+ "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -453,13 +455,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz",
+ "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
+ "@babel/plugin-transform-optional-chaining": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -469,12 +471,12 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
- "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz",
+ "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -553,11 +555,11 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
- "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz",
+ "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -567,11 +569,11 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
- "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz",
+ "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -712,11 +714,11 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
- "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz",
+ "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -726,13 +728,13 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
- "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz",
+ "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-remap-async-to-generator": "^7.24.6",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
@@ -743,13 +745,13 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
- "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz",
+ "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20"
+ "@babel/helper-module-imports": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-remap-async-to-generator": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -759,11 +761,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
- "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz",
+ "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -773,11 +775,11 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz",
- "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz",
+ "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -787,12 +789,12 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
- "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz",
+ "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -802,12 +804,12 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz",
- "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz",
+ "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.4",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
@@ -818,17 +820,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
- "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-split-export-declaration": "^7.22.6",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz",
+ "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
"globals": "^11.1.0"
},
"engines": {
@@ -839,12 +841,12 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
- "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz",
+ "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/template": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/template": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -854,11 +856,11 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
- "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz",
+ "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -868,12 +870,12 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
- "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz",
+ "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -883,11 +885,11 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
- "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz",
+ "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -897,11 +899,11 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
- "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz",
+ "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
@@ -912,12 +914,12 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
- "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz",
+ "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -927,11 +929,11 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
- "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz",
+ "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
@@ -942,12 +944,12 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
- "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz",
+ "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -957,13 +959,13 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
- "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz",
+ "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -973,11 +975,11 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
- "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz",
+ "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
@@ -988,11 +990,11 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
- "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz",
+ "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1002,11 +1004,11 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
- "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz",
+ "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
@@ -1017,11 +1019,11 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
- "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz",
+ "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1031,12 +1033,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
- "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz",
+ "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1046,13 +1048,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
- "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz",
+ "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-simple-access": "^7.22.5"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-simple-access": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1062,14 +1064,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
- "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz",
+ "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==",
"dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-identifier": "^7.22.20"
+ "@babel/helper-hoist-variables": "^7.24.6",
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1079,12 +1081,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
- "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz",
+ "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==",
"dependencies": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-module-transforms": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1094,12 +1096,12 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
- "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz",
+ "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1109,11 +1111,11 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
- "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz",
+ "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1123,11 +1125,11 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
- "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz",
+ "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
@@ -1138,11 +1140,11 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
- "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz",
+ "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
@@ -1153,14 +1155,14 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
- "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz",
+ "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.1"
+ "@babel/plugin-transform-parameters": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1170,12 +1172,12 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
- "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz",
+ "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-replace-supers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1185,11 +1187,11 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
- "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz",
+ "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
@@ -1200,12 +1202,12 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz",
+ "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
@@ -1216,11 +1218,11 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
- "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz",
+ "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1230,12 +1232,12 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
- "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz",
+ "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1245,13 +1247,13 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
- "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz",
+ "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-annotate-as-pure": "^7.24.6",
+ "@babel/helper-create-class-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -1262,11 +1264,11 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
- "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz",
+ "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1276,11 +1278,11 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
- "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz",
+ "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
+ "@babel/helper-plugin-utils": "^7.24.6",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -1291,11 +1293,11 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
- "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz",
+ "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1305,11 +1307,11 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
- "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz",
+ "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1319,12 +1321,12 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
- "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz",
+ "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1334,11 +1336,11 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
- "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz",
+ "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1348,11 +1350,11 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
- "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz",
+ "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1362,11 +1364,11 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
- "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz",
+ "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1376,11 +1378,11 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
- "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz",
+ "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1390,12 +1392,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
- "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz",
+ "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1405,12 +1407,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
- "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz",
+ "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1420,12 +1422,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
- "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz",
+ "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1435,26 +1437,26 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz",
- "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==",
- "dependencies": {
- "@babel/compat-data": "^7.24.4",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-option": "^7.23.5",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz",
+ "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==",
+ "dependencies": {
+ "@babel/compat-data": "^7.24.6",
+ "@babel/helper-compilation-targets": "^7.24.6",
+ "@babel/helper-plugin-utils": "^7.24.6",
+ "@babel/helper-validator-option": "^7.24.6",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.24.1",
- "@babel/plugin-syntax-import-attributes": "^7.24.1",
+ "@babel/plugin-syntax-import-assertions": "^7.24.6",
+ "@babel/plugin-syntax-import-attributes": "^7.24.6",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
@@ -1466,54 +1468,54 @@
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.24.1",
- "@babel/plugin-transform-async-generator-functions": "^7.24.3",
- "@babel/plugin-transform-async-to-generator": "^7.24.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.24.1",
- "@babel/plugin-transform-block-scoping": "^7.24.4",
- "@babel/plugin-transform-class-properties": "^7.24.1",
- "@babel/plugin-transform-class-static-block": "^7.24.4",
- "@babel/plugin-transform-classes": "^7.24.1",
- "@babel/plugin-transform-computed-properties": "^7.24.1",
- "@babel/plugin-transform-destructuring": "^7.24.1",
- "@babel/plugin-transform-dotall-regex": "^7.24.1",
- "@babel/plugin-transform-duplicate-keys": "^7.24.1",
- "@babel/plugin-transform-dynamic-import": "^7.24.1",
- "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
- "@babel/plugin-transform-export-namespace-from": "^7.24.1",
- "@babel/plugin-transform-for-of": "^7.24.1",
- "@babel/plugin-transform-function-name": "^7.24.1",
- "@babel/plugin-transform-json-strings": "^7.24.1",
- "@babel/plugin-transform-literals": "^7.24.1",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
- "@babel/plugin-transform-member-expression-literals": "^7.24.1",
- "@babel/plugin-transform-modules-amd": "^7.24.1",
- "@babel/plugin-transform-modules-commonjs": "^7.24.1",
- "@babel/plugin-transform-modules-systemjs": "^7.24.1",
- "@babel/plugin-transform-modules-umd": "^7.24.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.24.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
- "@babel/plugin-transform-numeric-separator": "^7.24.1",
- "@babel/plugin-transform-object-rest-spread": "^7.24.1",
- "@babel/plugin-transform-object-super": "^7.24.1",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
- "@babel/plugin-transform-optional-chaining": "^7.24.1",
- "@babel/plugin-transform-parameters": "^7.24.1",
- "@babel/plugin-transform-private-methods": "^7.24.1",
- "@babel/plugin-transform-private-property-in-object": "^7.24.1",
- "@babel/plugin-transform-property-literals": "^7.24.1",
- "@babel/plugin-transform-regenerator": "^7.24.1",
- "@babel/plugin-transform-reserved-words": "^7.24.1",
- "@babel/plugin-transform-shorthand-properties": "^7.24.1",
- "@babel/plugin-transform-spread": "^7.24.1",
- "@babel/plugin-transform-sticky-regex": "^7.24.1",
- "@babel/plugin-transform-template-literals": "^7.24.1",
- "@babel/plugin-transform-typeof-symbol": "^7.24.1",
- "@babel/plugin-transform-unicode-escapes": "^7.24.1",
- "@babel/plugin-transform-unicode-property-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
+ "@babel/plugin-transform-arrow-functions": "^7.24.6",
+ "@babel/plugin-transform-async-generator-functions": "^7.24.6",
+ "@babel/plugin-transform-async-to-generator": "^7.24.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.6",
+ "@babel/plugin-transform-block-scoping": "^7.24.6",
+ "@babel/plugin-transform-class-properties": "^7.24.6",
+ "@babel/plugin-transform-class-static-block": "^7.24.6",
+ "@babel/plugin-transform-classes": "^7.24.6",
+ "@babel/plugin-transform-computed-properties": "^7.24.6",
+ "@babel/plugin-transform-destructuring": "^7.24.6",
+ "@babel/plugin-transform-dotall-regex": "^7.24.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.6",
+ "@babel/plugin-transform-dynamic-import": "^7.24.6",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.6",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.6",
+ "@babel/plugin-transform-for-of": "^7.24.6",
+ "@babel/plugin-transform-function-name": "^7.24.6",
+ "@babel/plugin-transform-json-strings": "^7.24.6",
+ "@babel/plugin-transform-literals": "^7.24.6",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.6",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.6",
+ "@babel/plugin-transform-modules-amd": "^7.24.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.24.6",
+ "@babel/plugin-transform-modules-umd": "^7.24.6",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6",
+ "@babel/plugin-transform-new-target": "^7.24.6",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6",
+ "@babel/plugin-transform-numeric-separator": "^7.24.6",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.6",
+ "@babel/plugin-transform-object-super": "^7.24.6",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.6",
+ "@babel/plugin-transform-optional-chaining": "^7.24.6",
+ "@babel/plugin-transform-parameters": "^7.24.6",
+ "@babel/plugin-transform-private-methods": "^7.24.6",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.6",
+ "@babel/plugin-transform-property-literals": "^7.24.6",
+ "@babel/plugin-transform-regenerator": "^7.24.6",
+ "@babel/plugin-transform-reserved-words": "^7.24.6",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.6",
+ "@babel/plugin-transform-spread": "^7.24.6",
+ "@babel/plugin-transform-sticky-regex": "^7.24.6",
+ "@babel/plugin-transform-template-literals": "^7.24.6",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.6",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.6",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.6",
+ "@babel/plugin-transform-unicode-regex": "^7.24.6",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.6",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
@@ -1547,9 +1549,9 @@
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
},
"node_modules/@babel/runtime": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
- "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
+ "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -1558,31 +1560,31 @@
}
},
"node_modules/@babel/template": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
- "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz",
+ "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==",
"dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0"
+ "@babel/code-frame": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/types": "^7.24.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
- "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
- "dependencies": {
- "@babel/code-frame": "^7.24.1",
- "@babel/generator": "^7.24.1",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.1",
- "@babel/types": "^7.24.0",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz",
+ "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.6",
+ "@babel/generator": "^7.24.6",
+ "@babel/helper-environment-visitor": "^7.24.6",
+ "@babel/helper-function-name": "^7.24.6",
+ "@babel/helper-hoist-variables": "^7.24.6",
+ "@babel/helper-split-export-declaration": "^7.24.6",
+ "@babel/parser": "^7.24.6",
+ "@babel/types": "^7.24.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1591,12 +1593,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
- "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz",
+ "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==",
"dependencies": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
+ "@babel/helper-string-parser": "^7.24.6",
+ "@babel/helper-validator-identifier": "^7.24.6",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -1604,23 +1606,18 @@
}
},
"node_modules/@cypress/webpack-preprocessor": {
- "version": "5.15.4",
- "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.15.4.tgz",
- "integrity": "sha512-spqrTlso5AC4tGET/bsgpC5aUiyZkPVi+aZnmg0xEvTdD/5QXRe3Tyh8t92en6rcJVzlc4PqLkZqDZEYySYyZQ==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.1.tgz",
+ "integrity": "sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA==",
"dependencies": {
"bluebird": "3.7.1",
- "debug": "^4.3.2",
- "fs-extra": "^10.1.0",
- "loader-utils": "^2.0.0",
- "lodash": "^4.17.20",
- "md5": "2.3.0",
- "source-map": "^0.6.1",
- "webpack-virtual-modules": "^0.4.4"
+ "debug": "^4.3.4",
+ "lodash": "^4.17.20"
},
"peerDependencies": {
"@babel/core": "^7.0.1",
"@babel/preset-env": "^7.0.0",
- "babel-loader": "^8.0.2",
+ "babel-loader": "^8.3 || ^9",
"webpack": "^4 || ^5"
}
},
@@ -1954,12 +1951,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz",
- "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.1",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -1979,24 +1976,16 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz",
- "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.1"
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/bluebird": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
@@ -2039,9 +2028,9 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001610",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz",
- "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==",
+ "version": "1.0.30001612",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz",
+ "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==",
"funding": [
{
"type": "opencollective",
@@ -2070,14 +2059,6 @@
"node": ">=4"
}
},
- "node_modules/charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
@@ -2115,9 +2096,9 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/core-js-compat": {
- "version": "3.36.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz",
- "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==",
+ "version": "3.37.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz",
+ "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==",
"dependencies": {
"browserslist": "^4.23.0"
},
@@ -2126,14 +2107,6 @@
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2150,19 +2123,22 @@
}
}
},
- "node_modules/electron-to-chromium": {
- "version": "1.4.737",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz",
- "integrity": "sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw=="
- },
- "node_modules/emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"engines": {
- "node": ">= 4"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.749",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.749.tgz",
+ "integrity": "sha512-LRMMrM9ITOvue0PoBrvNIraVmuDbJV5QC9ierz/z5VilMdPOVMjOtpICNld3PuXuTZ3CHH/UPxX9gHhAPwi+0Q=="
+ },
"node_modules/enhanced-resolve": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
@@ -2292,16 +2268,16 @@
}
},
"node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14.14"
}
},
"node_modules/function-bind": {
@@ -2357,11 +2333,6 @@
"node": ">= 0.4"
}
},
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
@@ -2464,19 +2435,6 @@
"node": ">=6.11.5"
}
},
- "node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
"node_modules/locate-path": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
@@ -2509,16 +2467,6 @@
"yallist": "^3.0.2"
}
},
- "node_modules/md5": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
- "dependencies": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "~1.1.6"
- }
- },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -2553,6 +2501,25 @@
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
},
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
@@ -2823,9 +2790,9 @@
}
},
"node_modules/terser": {
- "version": "5.30.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
- "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
+ "version": "5.30.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz",
+ "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -2925,6 +2892,11 @@
"node": ">=4"
}
},
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -2967,9 +2939,9 @@
}
},
"node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
@@ -3023,6 +2995,11 @@
"node": ">=10.13.0"
}
},
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
"node_modules/webpack": {
"version": "5.91.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
@@ -3077,11 +3054,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/webpack-virtual-modules": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
- "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA=="
- },
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -3127,6 +3099,15 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -3143,2191 +3124,5 @@
"url": "https://github.com/sponsors/sindresorhus"
}
}
- },
- "dependencies": {
- "@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@babel/code-frame": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
- "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
- "requires": {
- "@babel/highlight": "^7.24.2",
- "picocolors": "^1.0.0"
- }
- },
- "@babel/compat-data": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
- "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ=="
- },
- "@babel/core": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz",
- "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==",
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.24.2",
- "@babel/generator": "^7.24.4",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.24.4",
- "@babel/parser": "^7.24.4",
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- }
- },
- "@babel/generator": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz",
- "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==",
- "requires": {
- "@babel/types": "^7.24.0",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "requires": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- }
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
- "requires": {
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
- "requires": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
- "browserslist": "^4.22.2",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz",
- "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "regexpu-core": "^5.3.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-define-polyfill-provider": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
- "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
- "requires": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
- },
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
- "requires": {
- "@babel/types": "^7.23.0"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
- "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
- "requires": {
- "@babel/types": "^7.24.0"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
- "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w=="
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
- "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.23.0",
- "@babel/helper-optimise-call-expression": "^7.22.5"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
- "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ=="
- },
- "@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
- },
- "@babel/helper-validator-option": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
- "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw=="
- },
- "@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
- "requires": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
- }
- },
- "@babel/helpers": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz",
- "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==",
- "requires": {
- "@babel/template": "^7.24.0",
- "@babel/traverse": "^7.24.1",
- "@babel/types": "^7.24.0"
- }
- },
- "@babel/highlight": {
- "version": "7.24.2",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
- "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
- "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg=="
- },
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz",
- "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==",
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz",
- "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.24.1"
- }
- },
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz",
- "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==",
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
- "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "requires": {}
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-import-assertions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz",
- "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-syntax-import-attributes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz",
- "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-unicode-sets-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
- "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz",
- "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-async-generator-functions": {
- "version": "7.24.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz",
- "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==",
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz",
- "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==",
- "requires": {
- "@babel/helper-module-imports": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-remap-async-to-generator": "^7.22.20"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz",
- "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz",
- "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-class-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz",
- "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==",
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-class-static-block": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz",
- "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==",
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.24.4",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz",
- "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz",
- "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/template": "^7.24.0"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz",
- "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz",
- "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz",
- "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-dynamic-import": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz",
- "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz",
- "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==",
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz",
- "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz",
- "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz",
- "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==",
- "requires": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-json-strings": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz",
- "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz",
- "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz",
- "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz",
- "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz",
- "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==",
- "requires": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
- "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
- "requires": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-simple-access": "^7.22.5"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz",
- "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==",
- "requires": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-identifier": "^7.22.20"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz",
- "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==",
- "requires": {
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
- "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz",
- "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz",
- "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- }
- },
- "@babel/plugin-transform-numeric-separator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz",
- "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- }
- },
- "@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz",
- "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==",
- "requires": {
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.1"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz",
- "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-replace-supers": "^7.24.1"
- }
- },
- "@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz",
- "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- }
- },
- "@babel/plugin-transform-optional-chaining": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz",
- "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz",
- "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-private-methods": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz",
- "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==",
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz",
- "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.24.1",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz",
- "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz",
- "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "regenerator-transform": "^0.15.2"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz",
- "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
- "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz",
- "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz",
- "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz",
- "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz",
- "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz",
- "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz",
- "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz",
- "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz",
- "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.24.0"
- }
- },
- "@babel/preset-env": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz",
- "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==",
- "requires": {
- "@babel/compat-data": "^7.24.4",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-plugin-utils": "^7.24.0",
- "@babel/helper-validator-option": "^7.23.5",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.24.1",
- "@babel/plugin-syntax-import-attributes": "^7.24.1",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.24.1",
- "@babel/plugin-transform-async-generator-functions": "^7.24.3",
- "@babel/plugin-transform-async-to-generator": "^7.24.1",
- "@babel/plugin-transform-block-scoped-functions": "^7.24.1",
- "@babel/plugin-transform-block-scoping": "^7.24.4",
- "@babel/plugin-transform-class-properties": "^7.24.1",
- "@babel/plugin-transform-class-static-block": "^7.24.4",
- "@babel/plugin-transform-classes": "^7.24.1",
- "@babel/plugin-transform-computed-properties": "^7.24.1",
- "@babel/plugin-transform-destructuring": "^7.24.1",
- "@babel/plugin-transform-dotall-regex": "^7.24.1",
- "@babel/plugin-transform-duplicate-keys": "^7.24.1",
- "@babel/plugin-transform-dynamic-import": "^7.24.1",
- "@babel/plugin-transform-exponentiation-operator": "^7.24.1",
- "@babel/plugin-transform-export-namespace-from": "^7.24.1",
- "@babel/plugin-transform-for-of": "^7.24.1",
- "@babel/plugin-transform-function-name": "^7.24.1",
- "@babel/plugin-transform-json-strings": "^7.24.1",
- "@babel/plugin-transform-literals": "^7.24.1",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.1",
- "@babel/plugin-transform-member-expression-literals": "^7.24.1",
- "@babel/plugin-transform-modules-amd": "^7.24.1",
- "@babel/plugin-transform-modules-commonjs": "^7.24.1",
- "@babel/plugin-transform-modules-systemjs": "^7.24.1",
- "@babel/plugin-transform-modules-umd": "^7.24.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.24.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1",
- "@babel/plugin-transform-numeric-separator": "^7.24.1",
- "@babel/plugin-transform-object-rest-spread": "^7.24.1",
- "@babel/plugin-transform-object-super": "^7.24.1",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.1",
- "@babel/plugin-transform-optional-chaining": "^7.24.1",
- "@babel/plugin-transform-parameters": "^7.24.1",
- "@babel/plugin-transform-private-methods": "^7.24.1",
- "@babel/plugin-transform-private-property-in-object": "^7.24.1",
- "@babel/plugin-transform-property-literals": "^7.24.1",
- "@babel/plugin-transform-regenerator": "^7.24.1",
- "@babel/plugin-transform-reserved-words": "^7.24.1",
- "@babel/plugin-transform-shorthand-properties": "^7.24.1",
- "@babel/plugin-transform-spread": "^7.24.1",
- "@babel/plugin-transform-sticky-regex": "^7.24.1",
- "@babel/plugin-transform-template-literals": "^7.24.1",
- "@babel/plugin-transform-typeof-symbol": "^7.24.1",
- "@babel/plugin-transform-unicode-escapes": "^7.24.1",
- "@babel/plugin-transform-unicode-property-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-regex": "^7.24.1",
- "@babel/plugin-transform-unicode-sets-regex": "^7.24.1",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.4",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.31.0",
- "semver": "^6.3.1"
- }
- },
- "@babel/preset-modules": {
- "version": "0.1.6-no-external-plugins",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
- "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- }
- },
- "@babel/regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
- },
- "@babel/runtime": {
- "version": "7.24.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
- "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
- },
- "@babel/template": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
- "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
- "requires": {
- "@babel/code-frame": "^7.23.5",
- "@babel/parser": "^7.24.0",
- "@babel/types": "^7.24.0"
- }
- },
- "@babel/traverse": {
- "version": "7.24.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz",
- "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==",
- "requires": {
- "@babel/code-frame": "^7.24.1",
- "@babel/generator": "^7.24.1",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.24.1",
- "@babel/types": "^7.24.0",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
- "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
- "requires": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@cypress/webpack-preprocessor": {
- "version": "5.15.4",
- "resolved": "https://registry.npmjs.org/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.15.4.tgz",
- "integrity": "sha512-spqrTlso5AC4tGET/bsgpC5aUiyZkPVi+aZnmg0xEvTdD/5QXRe3Tyh8t92en6rcJVzlc4PqLkZqDZEYySYyZQ==",
- "requires": {
- "bluebird": "3.7.1",
- "debug": "^4.3.2",
- "fs-extra": "^10.1.0",
- "loader-utils": "^2.0.0",
- "lodash": "^4.17.20",
- "md5": "2.3.0",
- "source-map": "^0.6.1",
- "webpack-virtual-modules": "^0.4.4"
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
- },
- "@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
- },
- "@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "requires": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- }
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@types/eslint": {
- "version": "8.4.10",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
- "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
- "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
- },
- "@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
- },
- "@types/node": {
- "version": "20.12.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
- "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
- "requires": {
- "undici-types": "~5.26.4"
- }
- },
- "@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw=="
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q=="
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw=="
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA=="
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA=="
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
- },
- "acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
- },
- "acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
- "requires": {}
- },
- "ajv": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "requires": {
- "ajv": "^8.0.0"
- }
- },
- "ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "requires": {
- "fast-deep-equal": "^3.1.3"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "babel-loader": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
- "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
- "requires": {
- "find-cache-dir": "^4.0.0",
- "schema-utils": "^4.0.0"
- }
- },
- "babel-plugin-polyfill-corejs2": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz",
- "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==",
- "requires": {
- "@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.1",
- "semver": "^6.3.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
- "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.6.1",
- "core-js-compat": "^3.36.1"
- }
- },
- "babel-plugin-polyfill-regenerator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz",
- "integrity": "sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==",
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.6.1"
- }
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
- },
- "bluebird": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
- "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg=="
- },
- "browserslist": {
- "version": "4.23.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
- "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
- "requires": {
- "caniuse-lite": "^1.0.30001587",
- "electron-to-chromium": "^1.4.668",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.13"
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
- },
- "caniuse-lite": {
- "version": "1.0.30001610",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz",
- "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA=="
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
- },
- "chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "common-path-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
- "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
- },
- "convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
- },
- "core-js-compat": {
- "version": "3.36.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz",
- "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==",
- "requires": {
- "browserslist": "^4.23.0"
- }
- },
- "crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "electron-to-chromium": {
- "version": "1.4.737",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz",
- "integrity": "sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw=="
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
- },
- "enhanced-resolve": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
- "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
- "requires": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- }
- },
- "es-module-lexer": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
- "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw=="
- },
- "escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "find-cache-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
- "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
- "requires": {
- "common-path-prefix": "^3.0.0",
- "pkg-dir": "^7.0.0"
- }
- },
- "find-up": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
- "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "requires": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- }
- },
- "fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
- },
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
- },
- "graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
- },
- "hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "requires": {
- "hasown": "^2.0.0"
- }
- },
- "jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "requires": {
- "p-locate": "^6.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "md5": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
- "requires": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "~1.1.6"
- }
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
- },
- "node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
- },
- "p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "requires": {
- "yocto-queue": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "requires": {
- "p-limit": "^4.0.0"
- }
- },
- "path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "pkg-dir": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
- "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
- "requires": {
- "find-up": "^6.3.0"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
- },
- "regenerate-unicode-properties": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
- "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
- "requires": {
- "regenerate": "^1.4.2"
- }
- },
- "regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "regenerator-transform": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
- "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
- "requires": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "regexpu-core": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
- "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
- "requires": {
- "@babel/regjsgen": "^0.8.0",
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.1.0",
- "regjsparser": "^0.9.1",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
- }
- },
- "regjsparser": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
- "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA=="
- }
- }
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
- },
- "resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "schema-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
- "requires": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.8.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.0.0"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
- },
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
- },
- "terser": {
- "version": "5.30.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
- "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
- "requires": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- }
- },
- "terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
- },
- "undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ=="
- },
- "unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
- "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA=="
- },
- "unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
- "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
- },
- "update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "watchpack": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
- "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
- "requires": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- }
- },
- "webpack": {
- "version": "5.91.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
- "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
- "requires": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
- "browserslist": "^4.21.10",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.16.0",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "requires": {}
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
- },
- "webpack-virtual-modules": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
- "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA=="
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "yocto-queue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g=="
- }
}
}
diff --git a/t/html/pfappserver/package.json b/t/html/pfappserver/package.json
index fcf291419173..cac7c017a054 100644
--- a/t/html/pfappserver/package.json
+++ b/t/html/pfappserver/package.json
@@ -5,8 +5,11 @@
"dependencies": {
"@babel/core": "^7.24.5",
"@babel/preset-env": "^7.24.5",
- "@cypress/webpack-preprocessor": "^5.15.3",
+ "@cypress/webpack-preprocessor": "^6.0.0",
"babel-loader": "^9.1.3",
+ "dotenv": "^16.3.1",
+ "fs-extra": "^11.2.0",
+ "node-fetch": "^2.7.0",
"webpack": "^5.91.0"
}
}
diff --git a/t/html/pfappserver/utils/index.js b/t/html/pfappserver/utils/index.js
new file mode 100644
index 000000000000..9afdc17de291
--- /dev/null
+++ b/t/html/pfappserver/utils/index.js
@@ -0,0 +1,34 @@
+const splitKeys = (o, s='.') => {
+ return Object.entries(o)
+ .reduce((types, [ns, v]) => {
+ const [t, k] = ns.split(s, 2)
+ types[t] = { ...types[t], [k]: v }
+ return types
+ }, {})
+};
+
+const flatten = (data, prefix = false, result = null) => {
+ result = result || {};
+ if (prefix && typeof data === 'object' && data !== null && Object.keys(data).length === 0) {
+ result[prefix] = Array.isArray(data) ? [] : {};
+ return result;
+ }
+ prefix = prefix ? prefix + '.' : ''
+ for (const i in data) {
+ if (Object.prototype.hasOwnProperty.call(data, i)) {
+ // Only recurse on true objects and arrays, ignore custom classes like dates
+ if (typeof data[i] === 'object' && (Array.isArray(data[i]) || Object.prototype.toString.call(data[i]) === '[object Object]') && data[i] !== null) {
+ // Recursion on deeper objects
+ flatten(data[i], prefix + i, result)
+ } else {
+ result[prefix + i] = data[i]
+ }
+ }
+ }
+ return result
+};
+
+module.exports = {
+ splitKeys,
+ flatten
+};
\ No newline at end of file
diff --git a/t/html/pfappserver/webpack.config.js b/t/html/pfappserver/webpack.config.js
index c24208487d88..b8875b28a81d 100644
--- a/t/html/pfappserver/webpack.config.js
+++ b/t/html/pfappserver/webpack.config.js
@@ -18,7 +18,8 @@ module.exports = {
},
resolve: {
modules: [
+ path.resolve(__dirname, './'),
path.resolve(__dirname, './cypress'),
],
- }
+ },
};
\ No newline at end of file
diff --git a/t/venom/Makefile b/t/venom/Makefile
index 61b246810176..99beaeb40f26 100644
--- a/t/venom/Makefile
+++ b/t/venom/Makefile
@@ -232,16 +232,28 @@ inline_l2_and_radius_deb11:
SCENARIOS_TO_RUN=inline_l2_and_radius \
$(MAKE_TARGET)
-pfappserver_el8:
+pfappserver_configurator_el8:
make \
PF_VM_NAMES=pfel8$(DEV_ENV) \
- SCENARIOS_TO_RUN=pfappserver \
+ SCENARIOS_TO_RUN=pfappserver_configurator \
$(MAKE_TARGET)
-pfappserver_deb11:
+pfappserver_configurator_deb11:
make \
PF_VM_NAMES=pfdeb11$(DEV_ENV) \
- SCENARIOS_TO_RUN=pfappserver \
+ SCENARIOS_TO_RUN=pfappserver_configurator \
+ $(MAKE_TARGET)
+
+pfappserver_configuration_el8:
+ make \
+ PF_VM_NAMES=pfel8$(DEV_ENV) \
+ SCENARIOS_TO_RUN=pfappserver_configuration \
+ $(MAKE_TARGET)
+
+pfappserver_configuration_deb11:
+ make \
+ PF_VM_NAMES=pfdeb11$(DEV_ENV) \
+ SCENARIOS_TO_RUN=pfappserver_configuration \
$(MAKE_TARGET)
example_el8: SCENARIOS_TO_RUN=example
@@ -302,5 +314,7 @@ mac_auth_deb11_branches: mac_auth_deb11
mac_auth_el8_branches: mac_auth_el8
security_events_deb11_branches: security_events_deb11
unit_tests_el8_branches: unit_tests_el8
-pfappserver_el8_branches: pfappserver_el8
-pfappserver_deb11_branches: pfappserver_deb11
+pfappserver_configurator_el8_branches: pfappserver_configurator_el8
+pfappserver_configurator_deb11_branches: pfappserver_configurator_deb11
+pfappserver_configuration_el8_branches: pfappserver_configuration_el8
+pfappserver_configuration_deb11_branches: pfappserver_configuration_deb11
diff --git a/t/venom/lib/html_e2e.yml b/t/venom/lib/html_e2e.yml
index fce96df6f1a5..156409ef0593 100644
--- a/t/venom/lib/html_e2e.yml
+++ b/t/venom/lib/html_e2e.yml
@@ -13,6 +13,7 @@ steps:
CONFIG_FILE={{.input.config_file}} \
CONFIG="downloadsFolder={{.test_suite_results_dir}}/downloads,screenshotsFolder={{.test_suite_results_dir}}/screenshots,videosFolder={{.test_suite_results_dir}}/videos" \
TAG="{{.input.tag}}" \
+ DEBUG=cypress:* \
# Info is only returned if assertion passes
info:
- "{{.result.systemout}}"
diff --git a/t/venom/scenarios/pfappserver/site.yml b/t/venom/scenarios/pfappserver/site.yml
deleted file mode 100644
index 97ba9bff099c..000000000000
--- a/t/venom/scenarios/pfappserver/site.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-# rsync before tests when doing local development
-- import_playbook: playbooks/rsync.yml
- when: lookup("env", "CI") != 'true'
-
-- import_playbook: playbooks/configure.yml
-
-- import_playbook: playbooks/localdev.yml
- when: lookup("env", "CI") != 'true'
-
-- import_playbook: playbooks/run_tests.yml
diff --git a/t/venom/scenarios/pfappserver/playbooks/configure.yml b/t/venom/scenarios/pfappserver_common/playbooks/configure.yml
similarity index 100%
rename from t/venom/scenarios/pfappserver/playbooks/configure.yml
rename to t/venom/scenarios/pfappserver_common/playbooks/configure.yml
diff --git a/t/venom/scenarios/pfappserver/playbooks/localdev.yml b/t/venom/scenarios/pfappserver_common/playbooks/localdev.yml
similarity index 100%
rename from t/venom/scenarios/pfappserver/playbooks/localdev.yml
rename to t/venom/scenarios/pfappserver_common/playbooks/localdev.yml
diff --git a/t/venom/scenarios/pfappserver/playbooks/rsync.yml b/t/venom/scenarios/pfappserver_common/playbooks/rsync.yml
similarity index 100%
rename from t/venom/scenarios/pfappserver/playbooks/rsync.yml
rename to t/venom/scenarios/pfappserver_common/playbooks/rsync.yml
diff --git a/t/venom/scenarios/pfappserver_configuration/playbooks/run_tests.yml b/t/venom/scenarios/pfappserver_configuration/playbooks/run_tests.yml
new file mode 100644
index 000000000000..81946e0beb1c
--- /dev/null
+++ b/t/venom/scenarios/pfappserver_configuration/playbooks/run_tests.yml
@@ -0,0 +1,28 @@
+---
+- hosts: pfservers
+ name: Run HTML pfappserver configuration tests
+ become: True
+
+ vars:
+ test_suites:
+ - pfappserver_configurator
+ - pfappserver_configuration
+
+ tasks:
+ - name: Run Venom testsuites
+ command: '{{ venom_dir }}/venom-wrapper.sh {{ venom_dir }}/test_suites/{{ item }}'
+ args:
+ chdir: '{{ venom_dir }}'
+ loop: '{{ test_suites }}'
+ vars:
+ venom_wrapper_args:
+ # temp, overcome Venom issue:
+ # - when running test suite one by one, previous logs and results are overriden
+ # Venom will create one directory per test suite to store results
+ VENOM_COMMON_FLAGS: '--output-dir={{ venom_dir }}/results/{{ item }}
+ --var test_suite_results_dir={{ venom_dir }}/results/{{ item }}'
+
+ # add inventory__group_environment to Ansible environment
+ # useful to make env vars available for Venom
+ environment: '{{ inventory__group_environment | d({})
+ | combine(venom_wrapper_args | d({})) }}'
diff --git a/t/venom/scenarios/pfappserver_configuration/site.yml b/t/venom/scenarios/pfappserver_configuration/site.yml
new file mode 100644
index 000000000000..8936e63c470a
--- /dev/null
+++ b/t/venom/scenarios/pfappserver_configuration/site.yml
@@ -0,0 +1,11 @@
+---
+# rsync before tests when doing local development
+- import_playbook: ../pfappserver_common/playbooks/rsync.yml
+ when: lookup("env", "CI") != 'true'
+
+- import_playbook: ../pfappserver_common/playbooks/configure.yml
+
+- import_playbook: ../pfappserver_common/playbooks/localdev.yml
+ when: lookup("env", "CI") != 'true'
+
+- import_playbook: playbooks/run_tests.yml
diff --git a/t/venom/scenarios/pfappserver/playbooks/run_tests.yml b/t/venom/scenarios/pfappserver_configurator/playbooks/run_tests.yml
similarity index 100%
rename from t/venom/scenarios/pfappserver/playbooks/run_tests.yml
rename to t/venom/scenarios/pfappserver_configurator/playbooks/run_tests.yml
diff --git a/t/venom/scenarios/pfappserver_configurator/site.yml b/t/venom/scenarios/pfappserver_configurator/site.yml
new file mode 100644
index 000000000000..8936e63c470a
--- /dev/null
+++ b/t/venom/scenarios/pfappserver_configurator/site.yml
@@ -0,0 +1,11 @@
+---
+# rsync before tests when doing local development
+- import_playbook: ../pfappserver_common/playbooks/rsync.yml
+ when: lookup("env", "CI") != 'true'
+
+- import_playbook: ../pfappserver_common/playbooks/configure.yml
+
+- import_playbook: ../pfappserver_common/playbooks/localdev.yml
+ when: lookup("env", "CI") != 'true'
+
+- import_playbook: playbooks/run_tests.yml
diff --git a/t/venom/test_suites/pfappserver_configuration/TESTSUITE.md b/t/venom/test_suites/pfappserver_configuration/TESTSUITE.md
new file mode 100644
index 000000000000..dc58926c792d
--- /dev/null
+++ b/t/venom/test_suites/pfappserver_configuration/TESTSUITE.md
@@ -0,0 +1,13 @@
+# Venom End To End (E2E) Testing - Pfappserver
+
+## Test Suites
+
+* [Configurator](../../test_suites/pfappserver_configurator/run_e2e.yml)
+
+## Execution
+
+This scenario uses Cypress E2E testing through a custom Venom executor [`html_e2e`](../../lib/html_e2e.yml).
+
+## More Information
+
+See the [Cypress E2E Testing README](../../../html/pfappserver/README.md) for more information about running the tests without Ansible or Venom.
\ No newline at end of file
diff --git a/t/venom/test_suites/pfappserver_configuration/run_e2e.yml b/t/venom/test_suites/pfappserver_configuration/run_e2e.yml
new file mode 100644
index 000000000000..5e4a5648d6ef
--- /dev/null
+++ b/t/venom/test_suites/pfappserver_configuration/run_e2e.yml
@@ -0,0 +1,14 @@
+name: Run Cypress E2E Tests
+testcases:
+
+- name: run_e2e
+ steps:
+ - type: html_e2e
+ base_url: "{{.html.pfappserver_baseurl}}"
+ browser: firefox
+ config_file: "cypress/config/cypress.config-configuration.js"
+ tag: "pfappserver_configuration"
+ info:
+ - "{{.result.html_e2e_systemout}}"
+ assertions:
+ - result.html_e2e_code ShouldEqual 0
\ No newline at end of file