dist/
ui/web/
-# FIXME: ESM import parse error
-build-requirements.js
# Docs: https://docs.github.com/en/code-security/supply-chain-security/configuration-options-for-dependency-updates
version: 2
updates:
- - package-ecosystem: 'github-actions'
+ - package-ecosystem: github-actions
directory: '/'
schedule:
- interval: 'daily'
+ interval: daily
labels:
- 'github-actions'
reviewers:
- 'jerome-benoit'
- 'olivierbagot'
- - package-ecosystem: 'npm'
+ - package-ecosystem: npm
directory: '/'
schedule:
- interval: 'daily'
+ interval: daily
labels:
- 'dependencies'
reviewers:
- 'jerome-benoit'
- 'olivierbagot'
versioning-strategy: increase
+ - package-ecosystem: pip
+ directory: 'tests/ocpp-server'
+ schedule:
+ interval: daily
+ labels:
+ - 'dependencies'
+ reviewers:
+ - 'jerome-benoit'
+ - 'olivierbagot'
else
echo "defined=false" >> $GITHUB_OUTPUT;
fi
+ build-ocpp-server:
+ strategy:
+ matrix:
+ python:
+ - 3.12
+ name: Build OCPP mock server with Python ${{ matrix.python }}
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: tests/ocpp-server
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup Python ${{ matrix.python }}
+ uses: actions/setup-python@v5
+ with:
+ python-version: ${{ matrix.python }}
+ - name: Install Poetry
+ run: |
+ python -m pip install --upgrade pip
+ pip install poetry
+ - name: Install Dependencies
+ run: poetry install --no-root
+ - name: Lint
+ run: poetry run task lint
build-simulator:
needs: [check-secrets]
strategy:
- name: Pull Request Dependency Review
if: ${{ github.event_name == 'pull_request' && matrix.os == 'ubuntu-latest' && matrix.node == '20.x' }}
uses: actions/dependency-review-action@v4
- - uses: pnpm/action-setup@v3
- with:
- version: 9
+ - uses: pnpm/action-setup@v4
- name: Setup node ${{ matrix.node }}
uses: actions/setup-node@v4
with:
run: pnpm coverage
- name: SonarCloud Scan
if: ${{ needs.check-secrets.outputs.sonar-token-exists == 'true' && github.repository == 'sap/e-mobility-charging-stations-simulator' && matrix.os == 'ubuntu-latest' && matrix.node == '20.x' }}
- uses: sonarsource/sonarcloud-github-action@v2.1.1
+ uses: sonarsource/sonarcloud-github-action@v2.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- name: Pull Request Dependency Review
if: ${{ github.event_name == 'pull_request' && matrix.os == 'ubuntu-latest' && matrix.node == '20.x' }}
uses: actions/dependency-review-action@v4
- - uses: pnpm/action-setup@v3
- with:
- version: 9
+ - uses: pnpm/action-setup@v4
- name: Setup node ${{ matrix.node }}
uses: actions/setup-node@v4
with:
run: pnpm coverage
- name: SonarCloud Scan
if: ${{ needs.check-secrets.outputs.sonar-token-exists == 'true' && github.repository == 'sap/e-mobility-charging-stations-simulator' && matrix.os == 'ubuntu-latest' && matrix.node == '20.x' }}
- uses: sonarsource/sonarcloud-github-action@v2.1.1
+ uses: sonarsource/sonarcloud-github-action@v2.3.0
with:
projectBaseDir: ui/web
env:
{
"git": {
"requireBranch": "main",
- "changelog": "npx auto-changelog --stdout --commit-limit false --unreleased --template https://raw.githubusercontent.com/release-it/release-it/master/templates/changelog-compact.hbs",
+ "changelog": "pnpm exec auto-changelog --stdout --commit-limit false --unreleased --template https://raw.githubusercontent.com/release-it/release-it/master/templates/changelog-compact.hbs",
"commitMessage": "chore: version ${version}",
"tagAnnotation": "Version ${version}",
"tagExclude": "*[-]*",
}
},
"hooks": {
- "after:bump": "npx auto-changelog --commit-limit false --package --template https://raw.githubusercontent.com/release-it/release-it/master/templates/keepachangelog.hbs"
+ "after:bump": "pnpm exec auto-changelog --commit-limit false --package --template https://raw.githubusercontent.com/release-it/release-it/master/templates/keepachangelog.hbs"
}
}
# Changelog
-## [v1.3.2](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.1...v1.3.2)
+## [v1.3.6](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.5...v1.3.6)
+
+- build(deps-dev): apply updates [`01ffb6d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/01ffb6d3583ab4da138dad815803121f3cc6d336)
+- feat: handle CHARGE_POINT_MAX_PROFILE charging profiles at power [`3579910`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/357991053f9d8910cdfaebde426eca58f813c05f)
+- build(deps-dev): apply updates [`7b0a334`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7b0a334d2c0e42768b246cbc962718d605ca7464)
+- refactor: cleanup power limitation code [`21f68e2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/21f68e222da0b9ac5d43a70b96beaf3f13ff3926)
+- refactor: cleanup charging profiles handling code [`c76d9c8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c76d9c83dba681eeccd78dcfae661b085d7ccf2b)
+- fix: ensure no charging profile purpose TxProfile is loaded at startup [`3edfdf5`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3edfdf53dc3c75bf26b4737bb014e6e98239ef38)
+- build(deps-dev): apply updates [`1056f1b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1056f1b4cf5e305c45351093cb062d05468c83e8)
+- build: apply volta pnpm update [`c9a92ed`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c9a92ed7a2ef6d5258f075620b7f4878ba12c454)
+- fix: fix TxProfile removal with transaction id defined at Tx stop [`d020e24`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d020e249e5206699107d6e63d3d585a7e72e7830)
+
+## [v1.3.5](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.4...v1.3.5) (2024-06-09)
+
+- test: add ErrorUtils test [`d05b53c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d05b53c7a03b8fad2e106caee68d5871cc6aac6e)
+- test: improve ErrorUtils coverage [`2d4928a`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/2d4928a7237a906158f2e9652e08f0392eeabdcd)
+- build(deps-dev): apply updates [`c4387ed`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c4387ed4b3d2021034f452deeb35276fabe022e2)
+- feat: handle charging profile purpose TxProfile [`7abb61b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7abb61bb4a4e1de238c6bdb31b1a017bcf56d7b6)
+- build(deps-dev): apply updates [`65b608f`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/65b608f0259f6f59138406ea327d22ecd6a19361)
+- test: add tests [`b49550e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b49550e256d11c7a30fb19cd672e5e3611d01553)
+- test: improve coverage on existing tests [`ff40d2c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ff40d2cc466140d6f18bc15b742100dd4f060d0f)
+- chore: version 1.3.5 [`cc04ce3`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/cc04ce3549100de93505abdd6ff43fd3d968998d)
+- fix: restart metervalues interval if MeterValueSampleInterval is changed [`b8e3363`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b8e3363a179fcf79d8bb66f47724b377d4d38a75)
+- refactor: rename Storage.handleDBError -> Storage.handleDBStorageError [`a03b18c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a03b18c4731bfd1173ff67b74a75684d3f6bb470)
+- fix: allow to set charging profile with TxProfile purpose [`65099c1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/65099c1e7297b252523172096a8d6ded22daa702)
+- fix: avoid to modify stored charging profiles [`a629e6f`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a629e6fcfeb952d77da280e69d645b17d94b2e4c)
+- test: add ConfigurationUtils test [`2a9305b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/2a9305b5ace7b5a49b5862c4282c1a88e3087da5)
+- perf: compute power limitation only once [`5b1bd2d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5b1bd2d2c3c606aeef58cb1098def9a20c50dc4e)
+- fix: refine default configuration [`a9babd5`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a9babd5006e9b70f281d4bd654923fc3d63cd733)
+- test: improve ConfigurationUtils coverage [`8598b56`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8598b5618e5acf6b9e2538faa5225ba51aa68d10)
+- test: add Utils insertAt() test [`055d4c4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/055d4c4c39c9c1fcce050019c61caf305ec1a83e)
+- test: trivial refinements [`0acbf5e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/0acbf5e6ab020dda7ddc6785347c05c144de3bd9)
+- fix: ensure ATG status is refreshed in the UI at stop [`c004d5e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c004d5e2e7d277ab99b3ee1b8ce363736529db9e)
+- test: improve ConfigurationUtils coverage [`329f14c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/329f14c004f74241c7cae1400e81740f3333eeee)
+- fix: add sanity check in ATG on connector id [`a4d9680`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a4d9680730c77debfb3b9455e4bd5b63e61ce664)
+- perf: add fastpath in array sorting helper [`8bfa4d2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8bfa4d2be3f3817654791f166f4aab1b02485005)
+- fix: fix start transaction response handling with authorize [`ae8fb16`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ae8fb16df7c98a9238e61b1b358f8fbe2aee7a74)
+- fix: fix condition at ATG configuration handling [`274f9b3`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/274f9b3662d8cf5e5fb0a361a1ae9fac86309e40)
+
+## [v1.3.4](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.3...v1.3.4) (2024-06-06)
+
+- build(deps): bump sonarsource/sonarcloud-github-action from 2.1.1 to 2.2.0 [`#1038`](https://github.com/sap/e-mobility-charging-stations-simulator/pull/1038)
+- build(deps): bump pnpm/action-setup from 3 to 4 [`#1037`](https://github.com/sap/e-mobility-charging-stations-simulator/pull/1037)
+- fix: ensure message sequence is fired at boot notification response [`#1039`](https://github.com/sap/e-mobility-charging-stations-simulator/issues/1039)
+- refactor: code formatting [`48847bc`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/48847bc0d5e594c3e4c0b81c580ac6df48052668)
+- build(deps-dev): apply updates [`7445d18`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7445d18b9b9ac750b9dc3dc3638d4fd0e8aff818)
+- build(deps-dev): apply updates [`268173c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/268173c99a4ff81e1416909244ec58a6eb56dae6)
+- build(deps-dev): apply updates [`4f146c7`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4f146c7c528d96cbe53ffeb9e578dc0c7e633af2)
+- build(deps): apply updates [`1dfc15d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1dfc15d22b7ac2363a32540d43540b7a93277a67)
+- build(deps-dev): apply updates [`c8d7098`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c8d709814d13d9e4ea88a6c3a6701b37bfa858a4)
+- build(deps-dev): apply updates [`5218eec`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5218eec27c72bade7112c6b029d7d1eb1f42f871)
+- build(deps-dev): apply updates [`18f25d9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/18f25d958f1a57c34ed9d6e1de32ba9160c49dc2)
+- perf: use mnemonist CirculerBuffer [`840ca85`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/840ca85d7c40a6ee6f3a85a50e68dbea2f90acb8)
+- build(deps-dev): apply updates [`4bbeb8a`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4bbeb8ad766752ba5da88513d9e77cba136ae85f)
+- build(deps-dev): apply updates [`4ed43d2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4ed43d280ab39b9beaadfa90875c71bf3b2a9507)
+- build(deps-dev): apply updates [`2f2e044`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/2f2e04446bb16844a71e8752ae29bff584267029)
+- build(deps): apply updates [`b1b7103`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b1b7103d2089ea75bff0a15125422adf69683fc1)
+- build(deps): apply updates [`78ffd68`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/78ffd6863ea25544c4933303281c4bc7a81496f0)
+- build(deps-dev): apply updates [`a112428`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a11242837ef77110c4d4b7a6ab0fa6f9a644a253)
+- build(deps): apply updates [`f26697b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/f26697b4c9dcdf791e48e8f15160e90f6855c995)
+- build(deps-dev): apply updates [`cd01b1d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/cd01b1d8f00898e27f78f4795650a78a179f0d14)
+- build(deps): apply updates [`576c4a4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/576c4a496a355c5d995325406ec2cc37416f8a8e)
+- build(deps-dev): apply updates [`8788b81`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8788b81a3dd4add12ca01b1fe989b5c7c8927d54)
+- build(deps): apply updates [`21d5c4c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/21d5c4cdd0ccc30526f290a0be994990d5feac3f)
+- fix: fix performance statistics storage [`1c818bd`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1c818bd3b021c8e660d64f9054e02d06424a3c59)
+- build(deps): apply updates [`24a0327`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/24a032720668044fc8439da3165715bab8474b26)
+- build(deps): apply updates [`47f846b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/47f846b2a74439a610321356604f2f4184cb5c0b)
+- build(deps): apply updates [`cc99095`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/cc99095fab6d038ffff7ef3a2a8d33e762368670)
+- build(deps): apply updates [`73a88b8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/73a88b832be6eedd83e7b277032c8d7ba7d06a97)
+- build(deps): apply updates [`0972694`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/0972694d006542648c971026f43e5f4c8498f459)
+- build(deps-dev): apply updates [`36158bb`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/36158bb7c539757a8b4a898dd6093d6805376921)
+- build(deps): apply updates [`1f851da`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1f851da6440e4e4a31e959fcb8802b6c7f30beef)
+- chore: version 1.3.4 [`13a6494`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/13a6494f3542b9ed8773311302fa85258a1edec7)
+- refactor: cleanup OCPP utils [`01b82de`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/01b82de5b532cd149eccab7b82fe86a741289581)
+- build(deps-dev): apply updates [`55e006e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/55e006e1af126c62f26f39cd4a1f91ebd44b865d)
+- fix: ensure only circular buffer is converted to array [`312d325`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/312d3254e6581f6bc939497d610048b6c6226d6d)
+- fix: fix date handling connectorsStatus configuration file section [`1fa9df8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1fa9df8ce0e186387ecaa80efb9f40180fc36a7d)
+- fix: start heartbeat once [`d627f8e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d627f8ef31d97da80f4de5ed0cb9386472f51bbe)
+- fix: ensure boot notification response is assigned before querying [`0320e2b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/0320e2bb72ca522c3932850cce0601ab0a895ad3)
+- build(deps-dev): apply updates [`aa345d0`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/aa345d0154ff9700d8c9467c04c215ef5d07bbbf)
+- build: cleanup pnpm lock file [`fccc8f6`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/fccc8f66dfabe8e91f67311f3182e26aece20293)
+- refactor: cleanup boot notification response assignation [`ab29e68`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ab29e6820d6a6d48d8ccc091ec8adae575398c3d)
+- build(deps): apply updates [`29fe6fd`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/29fe6fd834029f21b22a23a3342f86b43c277c56)
+- build(deps-dev): apply updates [`fc10596`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/fc105961dd56e041fc6de1df3fd51c74723ba419)
+- refactor: refine OCPP message sending error handling [`436569b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/436569b1470c8e6187c63d974304bd1b99f35ba3)
+- fix: fix clear charging profiles with no connector in payload [`ec6dd88`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ec6dd88b156eac9a14afd0d349ed58bb02fa920e)
+- fix: start web socket ping interval at successful connection [`99100f9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/99100f9c8709a7ead56c1e2745db80a75e8f6f79)
+- build(deps-dev): apply updates [`3ebab70`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3ebab7003594d1c243bcca4ef90007dc63680a52)
+- build(deps-dev): apply updates [`e4006e4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e4006e4283d9150be5bd2f1050ff78c979a203c1)
+- fix: ensure charging profiles not related to the current transaction are [`626d3ce`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/626d3ce5e6dfdc848cb2bb5833044fe6fbe68324)
+- fix: ensure inflight requests id cannot be duplicated [`3024d5b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/3024d5b2497e97bdd355243a5d236fa3f7a4d874)
+- build(deps-dev): apply updates [`69d995b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/69d995b2c8683703e7d9ce42fdd73ec02209482f)
+- fix: avoid endless loop at remote start transaction [`d0b7173`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d0b71736d6fced71a50c67e1f1e7ca842068e43e)
+- build(deps-dev): apply updates [`a6f03d2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a6f03d2ddc8e28752b94cb0a43687d70c16683a6)
+- build(deps-dev): apply updates [`fa394dc`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/fa394dc9dd5f30d5121c2ce6ed11ba5d7c30bcd3)
+- fix: reset authorize fields connector status after reservation [`239194e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/239194e9867eaea7d34fc3c8d3bff3360113d8dc)
+- build(deps-dev): apply updates [`df3e0f8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/df3e0f8da05b9680213ccd3e3beee6686f296cd1)
+- refactor: cleanup Infinity usage [`cffc32b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/cffc32b7bc5a6569525e92b562af8a93760bc339)
+- build(deps-dev): apply updates [`fa30db1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/fa30db101a2d11774bd9b29ca806597865ea06bf)
+- build: fix pnpm lockfile [`5e1bf42`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5e1bf4295e75408830ff46bb704a5139572a4120)
+- fix: properly handle undefined connector id at remote start transaction [`c0bbb3e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c0bbb3eaf0c5dc704ea92820a2666a68ffdc27ff)
+- fix: fix error handling default options definition [`30695dc`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/30695dcf67470f149e349d196b3d016482d11a17)
+- build(deps-dev): apply updates [`9e66896`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9e668960f040bf5da86a6d6e7c477d4ad39dfd04)
+- build: bump volta node version [`494983d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/494983d465621a426f5dc92fd7cccc62821616f9)
+- build(deps-dev): apply updates [`bb57ea0`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/bb57ea07805938bec42dbee3da6bfda569a1b9bb)
+- refactor: convert npx to pnpm exec [`e1486a4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e1486a4c8ce0142f2efc57c87fc8e8e05745a13f)
+- refactor: cleanup boot notification response handling [`52f1dd5`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/52f1dd569da1eac66de821796cdfbcef09b48c87)
+- refactor: cleanup connection retries logic [`aa5f2ea`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/aa5f2ea2958ef34e8d34e20edbe8486b8911d82b)
+- fix: pickup not reserved connector at remote start transaction [`8946ba9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8946ba9db13e225292a62b8f4bdcd1419792697a)
+- refactor: cleanup eslint usage [`c69ae13`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c69ae13bb71df8f2017e21d919979b73dc6184f9)
+- fix: fix firmware update in progress detection [`382b62c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/382b62c45d665e66d4a2f3ad5ac7ecc6396859c7)
+- fix: fix log files path resolution at GetDiagnostics [`e56bbec`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e56bbec564af27559aade33d375dc890e882858e)
+- docs: refine code comments [`1d85f41`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1d85f415a46d0d3355ee013e449ad99d3aee9418)
+- build(deps): bump sonarsource/sonarcloud-github-action [`e48376c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e48376cebb2f0e5d6c670b432e1b524e21702d3a)
+- build(ci): rely on packageManager field to setup pnpm [`7bba320`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7bba3209fa975827c841aeab8fa20b4837ca64b1)
+- refactor: cleanup boot notification handling internal handling [`d9c13bc`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d9c13bcac891b8686dbba36ae5c10f87948e3614)
+- fix: fix remote transaction start debug log [`7b08e7f`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/7b08e7f332d1146fa5990cf29e08e328343819f1)
+- fix: ensure registration status is deleted if invalid boot notification [`18c6df2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/18c6df2b1102c307cbe8eb0c04d85c82045abf15)
+- refactor: cleanup string literal variables handling [`4c6f356`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4c6f35659fb67d395adc035ef80c566eb6eef79e)
+- perf: resize circular array to sensible default [`9b5cf75`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9b5cf75581e0338885b8e2ea408ea5a3f391d0ec)
+- fix(ci): silence linter [`4293e51`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/4293e5179eabbc8f42a1c06064d15c0ec7d1ca3f)
+- refactor: helper cleanup [`f69ca7c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/f69ca7ca5f551a427e3181d38bc893cb68b2b542)
+
+## [v1.3.3](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.2...v1.3.3) (2024-04-30)
+
+- fix: avoid duplicated slash in connection url [`#1034`](https://github.com/sap/e-mobility-charging-stations-simulator/issues/1034)
+- chore: switch to pnpm 9.x.x [`6eddb71`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/6eddb71902ac0d0552f705190aaf62525f07c476)
+- build(dev): apply updates [`b856455`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b8564556b681ee79b22423474bbade2ca6dc14a4)
+- build(deps-dev): apply updates [`04b885f`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/04b885f030d6579dc06752d756b0072f764bcd4f)
+- build(deps-dev): apply updates [`0047945`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/004794574abd72037be56961476992550623a122)
+- build(deps): apply updates [`0b6d8d4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/0b6d8d4f2c60f959df7f5176fd8bac432100fea8)
+- build(deps-dev): apply updates [`b5e3eb1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b5e3eb123f7df39f228277338b2104979c42e801)
+- build(deps-dev): apply updates [`88dce0e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/88dce0e10e9f3b8f5d65ff990b584c34e6ddb3eb)
+- build(deps-dev): apply updates [`e9f9bb1`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e9f9bb186339de759bcf5d2eb1a82639268ff535)
+- build(deps-dev): apply updates [`19c53a2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/19c53a26cfc3b67623d1072c78b59bcf018029b6)
+- build(deps-dev): apply updates [`549ce8d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/549ce8d9ce3d857918384d73ea9ad91a24238524)
+- build: bump volta pnpm version [`44f66d8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/44f66d89f0ca20edefbd7b062d29ca94d359feb0)
+- build(deps-dev): apply updates [`d4554e8`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d4554e826fae9d186800e293e43954a0d190b357)
+- build: bump volta pnpm version [`c839fee`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c839feed8146255d2b8eb65e5a7064052f9f2b32)
+- build(deps-dev): apply updates [`a637f99`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a637f99f1d9a63bed1338809a5dbfab26925babe)
+- build(deps): apply updates [`de073a7`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/de073a748bcd60308615b81c3f6da817639461a1)
+- build(deps-dev): apply updates [`5b7bbdb`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/5b7bbdba3612e2f5748a4c21b46ba7bee89ddaba)
+- chore: version 1.3.3 [`6deeebd`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/6deeebd11133a5c4b47452d9d9ab8cf5759e7c8a)
+- build(deps-dev): apply updates [`98d6958`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/98d6958a6225cecc92e2f8b676c91be9fffd857b)
+- refactor: silence typing errors [`314793a`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/314793aaf25bf1a99deb3f8209c09421235942ba)
+- build: bump volta pnpm version [`8fb8f42`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8fb8f42ace8b9295865adebaeb7845e064c05e71)
+- build(deps-dev): remove unneeded @types/tar dep [`53d4c02`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/53d4c02ab3f09e4e622ac6b7558f26ec90816bdb)
+- build: bump volta pnpm version [`a5f7162`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a5f71620495481e50df343027417b04b60a98a6d)
+- build: bump volta pnpm release [`b3836cb`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/b3836cb9c6f79be13bfe851fc8854b5c9826b60a)
+- fix: restore connector status reserved only if needed [`e8d3abc`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e8d3abc6fccc7c52dd2a6f0abda325d497d50f97)
+- build: bump packageManager pnpm version [`76cc219`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/76cc21999076f5fa4e8a23af690fd71ca58e318f)
+- build(deps-dev): bump volta pnpm version [`e65b427`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/e65b42766e8dfa0c6f6532f269243342db7f5134)
+
+## [v1.3.2](https://github.com/sap/e-mobility-charging-stations-simulator/compare/v1.3.1...v1.3.2) (2024-04-11)
- build(deps-dev): bump typescript from 5.4.4 to 5.4.5 [`#1033`](https://github.com/sap/e-mobility-charging-stations-simulator/pull/1033)
- fix: send preparing connector status before `StartTransaction` [`#1032`](https://github.com/sap/e-mobility-charging-stations-simulator/pull/1032)
- build(deps-dev): apply updates [`eabecb4`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/eabecb42d4fd8e52401c9acfcc287a1c239a32b4)
- build(deps-dev): bump @types/node from 20.12.3 to 20.12.4 [`067a309`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/067a30983260e1058457de216c85b4de4dd87862)
- build(deps-dev): apply updates [`842932d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/842932d2cb2c55cbd7299bddb3ca326231afb432)
+- chore: version 1.3.2 [`8f46463`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8f46463be058ed68cc4cc962c51722f7e3b55c54)
- build(deps-dev): apply updates [`c1fd615`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/c1fd615b55df8e46c87d9c184987b29fa2905213)
- build(deps-dev): apply updates [`9312c9d`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9312c9d319ab997598eb1fe198f0615f12e766f4)
- feat: allow to provision number of stations by template [`8f8f87c`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/8f8f87c4fd9a0863d0aeb4a9a8671d1a2b4308e0)
- build(deps-dev): apply updates [`30cefe2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/30cefe25cc43288780cfa67b668c81f64ce866ee)
- build: refine vscode settings [`9b2b345`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9b2b345bde0992d51a8df02ba7d9a9b00826e512)
- build(deps-dev): apply updates [`d6470c2`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/d6470c29a7ce91cce0a81c2d02878a98bd9726bc)
+- build(deps-dev): apply updates [`312e936`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/312e936ce51be10590d5df610e6e8251fb15e256)
+- build(deps-dev): bump @types/tar from 6.1.11 to 6.1.12 [`23a7284`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/23a7284ed035efb1ead548e4d257d5d292b8aa11)
+- build(deps-dev): bump tsx from 4.7.1 to 4.7.2 [`ea7468e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ea7468e8b7c855a3fe06656945c0a26c162b0ffb)
- fix: reset 'Reserved' connector status if transaction is rejected [`a275c0b`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a275c0b6658b4b121643f4c15166b7f2bb409080)
- Merge dependabot/npm_and_yarn/types/node-20.12.4 into combined-prs-branch [`0a9edaa`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/0a9edaa5eb4759c6cd8db6f14692ecc8b247cfaf)
- Merge dependabot/npm_and_yarn/tsx-4.7.2 into combined-prs-branch [`9dd10cd`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/9dd10cd32944dbb11175fa55f71ab511cfaa111b)
- Merge dependabot/npm_and_yarn/types/tar-6.1.12 into combined-prs-branch [`16c4696`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/16c46962f43a692c996b1c89a94dc572fea52d63)
-- build(deps-dev): apply updates [`312e936`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/312e936ce51be10590d5df610e6e8251fb15e256)
- build(deps-dev): apply updates [`90157bd`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/90157bd234c27880f0c8595b11c5ffbb786e2c2f)
-- build(deps-dev): bump @types/tar from 6.1.11 to 6.1.12 [`23a7284`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/23a7284ed035efb1ead548e4d257d5d292b8aa11)
-- build(deps-dev): bump tsx from 4.7.1 to 4.7.2 [`ea7468e`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/ea7468e8b7c855a3fe06656945c0a26c162b0ffb)
- build: cleanup husky configuration [`90470d6`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/90470d61f685456645c09937d047c4e25bf60dd3)
- build: add packageManager field to package.json [`a52fbc9`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/a52fbc9a85918de4c9a6b4df0265abfe6ec698d3)
- build: bump volta node version [`1f479ed`](https://github.com/sap/e-mobility-charging-stations-simulator/commit/1f479edba7093c3aa17e5149bfb97c65b522a3a0)
+import { readFileSync } from 'node:fs'
+import { exit, version } from 'node:process'
+
import chalk from 'chalk'
+// eslint-disable-next-line n/no-unpublished-import
import { satisfies } from 'semver'
-import { version, exit } from 'node:process'
-import { readFileSync } from 'node:fs'
const packageJson = JSON.parse(readFileSync('./package.json', 'utf8'))
},
{
"path": "ui/web"
+ },
+ {
+ "path": "tests/ocpp-server"
}
],
"settings": {
{
"$schema": "https://json.schemastore.org/package",
"name": "e-mobility-charging-stations-simulator",
- "version": "1.3.2",
+ "version": "1.3.6",
"engines": {
"node": ">=18.18.0",
"pnpm": ">=9.0.0"
},
"volta": {
- "node": "22.0.0",
- "pnpm": "9.0.6"
+ "node": "22.3.0",
+ "pnpm": "9.3.0"
},
- "packageManager": "pnpm@9.0.6",
+ "packageManager": "pnpm@9.3.0",
"repository": {
"type": "git",
"url": "https://github.com/sap/e-mobility-charging-stations-simulator.git"
"esbuild": "pnpm build-requirements && node bundle.js",
"build": "pnpm esbuild",
"build:dev": "cross-env BUILD=development pnpm esbuild",
- "build:cf": "pnpm clean:node_modules && npx cross-env SKIP_PREINSTALL=1 npm install && pnpm build",
- "build:cf:dev": "pnpm clean:node_modules && npx cross-env SKIP_PREINSTALL=1 npm install && pnpm build:dev",
+ "build:cf": "pnpm clean:node_modules && pnpm exec cross-env SKIP_PREINSTALL=1 npm install && pnpm build",
+ "build:cf:dev": "pnpm clean:node_modules && pnpm exec cross-env SKIP_PREINSTALL=1 npm install && pnpm build:dev",
"build:entities": "tsc -p tsconfig-mikro-orm.json",
- "clean:dist": "npx rimraf dist",
- "clean:node_modules": "npx rimraf node_modules",
- "lint": "cross-env TIMING=1 eslint --cache src tests .eslintrc.cjs bundle.js mikro-orm.config-template.ts",
- "lint:fix": "cross-env TIMING=1 eslint --cache --fix src tests .eslintrc.cjs bundle.js mikro-orm.config-template.ts",
- "format": "prettier --cache --write .; eslint --cache --fix src .eslintrc.cjs tests bundle.js mikro-orm.config-template.ts",
+ "clean:dist": "pnpm exec rimraf dist",
+ "clean:node_modules": "pnpm exec rimraf node_modules",
+ "lint": "cross-env TIMING=1 eslint --cache src tests ./*.cjs ./*.js ./*.ts",
+ "lint:fix": "cross-env TIMING=1 eslint --cache --fix src tests ./*.cjs ./*.js ./*.ts",
+ "format": "prettier --cache --write .; eslint --cache --fix src tests ./*.cjs ./*.js ./*.ts",
"test": "glob -c \"c8 node --import tsx --test\" \"tests/**/*.test.ts\"",
"test:debug": "glob -c \"node --import tsx --test --inspect\" \"tests/**/*.test.ts\"",
"coverage": "c8 report --reporter=lcov",
}
},
"dependencies": {
- "@mikro-orm/core": "^6.2.3",
- "@mikro-orm/mariadb": "^6.2.3",
- "@mikro-orm/reflection": "^6.2.3",
- "@mikro-orm/sqlite": "^6.2.3",
- "ajv": "^8.12.0",
+ "@mikro-orm/core": "^6.2.9",
+ "@mikro-orm/mariadb": "^6.2.9",
+ "@mikro-orm/reflection": "^6.2.9",
+ "@mikro-orm/sqlite": "^6.2.9",
+ "ajv": "^8.16.0",
"ajv-formats": "^3.0.1",
"basic-ftp": "^5.0.5",
"chalk": "^5.3.0",
"http-status-codes": "^2.3.0",
"logform": "^2.6.0",
"mnemonist": "0.40.0-rc1",
- "mongodb": "^6.5.0",
- "poolifier": "^3.1.30",
+ "mongodb": "^6.7.0",
+ "poolifier": "^4.0.14",
"rambda": "^9.2.0",
- "tar": "^7.0.1",
+ "tar": "^7.2.0",
"winston": "^3.13.0",
"winston-daily-rotate-file": "^5.0.0",
"ws": "^8.17.0"
},
"optionalDependencies": {
"bufferutil": "^4.0.8",
- "utf-8-validate": "^6.0.3"
+ "utf-8-validate": "^6.0.4"
},
"devDependencies": {
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
- "@mikro-orm/cli": "^6.2.3",
+ "@mikro-orm/cli": "^6.2.9",
"@release-it/bumper": "^6.0.1",
- "@types/node": "^20.12.7",
+ "@types/node": "^20.14.2",
"@types/semver": "^7.5.8",
"@types/ws": "^8.5.10",
- "@typescript-eslint/eslint-plugin": "^7.7.1",
- "@typescript-eslint/parser": "^7.7.1",
+ "@typescript-eslint/eslint-plugin": "^7.13.0",
+ "@typescript-eslint/parser": "^7.13.0",
"auto-changelog": "^2.4.0",
- "c8": "^9.1.0",
+ "c8": "^10.1.2",
"clinic": "^13.0.0",
"cross-env": "^7.0.3",
- "esbuild": "^0.20.2",
+ "esbuild": "^0.21.5",
"esbuild-plugin-clean": "^1.0.1",
"esbuild-plugin-copy": "^2.1.1",
"eslint": "^8.57.0",
"eslint-define-config": "^2.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
- "eslint-plugin-jsdoc": "^48.2.3",
- "eslint-plugin-n": "^17.3.1",
+ "eslint-plugin-jsdoc": "^48.2.12",
+ "eslint-plugin-n": "^17.9.0",
"eslint-plugin-simple-import-sort": "^12.1.0",
- "eslint-plugin-tsdoc": "^0.2.17",
+ "eslint-plugin-tsdoc": "^0.3.0",
"expect": "^29.7.0",
- "glob": "^10.3.12",
+ "glob": "^10.4.1",
"husky": "^9.0.11",
- "lint-staged": "^15.2.2",
- "prettier": "^3.2.5",
- "release-it": "^17.2.1",
- "rimraf": "^5.0.5",
- "semver": "^7.6.0",
+ "lint-staged": "^15.2.7",
+ "prettier": "^3.3.2",
+ "release-it": "^17.3.0",
+ "rimraf": "^5.0.7",
+ "semver": "^7.6.2",
"ts-node": "^10.9.2",
- "tsx": "^4.7.3",
+ "tsx": "^4.15.4",
"typescript": "~5.4.5"
}
}
.:
dependencies:
'@mikro-orm/core':
- specifier: ^6.2.3
- version: 6.2.3
+ specifier: ^6.2.9
+ version: 6.2.9
'@mikro-orm/mariadb':
- specifier: ^6.2.3
- version: 6.2.3(@mikro-orm/core@6.2.3)
+ specifier: ^6.2.9
+ version: 6.2.9(@mikro-orm/core@6.2.9)
'@mikro-orm/reflection':
- specifier: ^6.2.3
- version: 6.2.3(@mikro-orm/core@6.2.3)
+ specifier: ^6.2.9
+ version: 6.2.9(@mikro-orm/core@6.2.9)
'@mikro-orm/sqlite':
- specifier: ^6.2.3
- version: 6.2.3(@mikro-orm/core@6.2.3)
+ specifier: ^6.2.9
+ version: 6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)
ajv:
- specifier: ^8.12.0
- version: 8.12.0
+ specifier: ^8.16.0
+ version: 8.16.0
ajv-formats:
specifier: ^3.0.1
- version: 3.0.1(ajv@8.12.0)
+ version: 3.0.1(ajv@8.16.0)
basic-ftp:
specifier: ^5.0.5
version: 5.0.5
specifier: 0.40.0-rc1
version: 0.40.0-rc1
mongodb:
- specifier: ^6.5.0
- version: 6.5.0(socks@2.8.3)
+ specifier: ^6.7.0
+ version: 6.7.0(socks@2.8.3)
poolifier:
- specifier: ^3.1.30
- version: 3.1.30
+ specifier: ^4.0.14
+ version: 4.0.14
rambda:
specifier: ^9.2.0
version: 9.2.0
tar:
- specifier: ^7.0.1
- version: 7.0.1
+ specifier: ^7.2.0
+ version: 7.2.0
winston:
specifier: ^3.13.0
version: 3.13.0
version: 5.0.0(winston@3.13.0)
ws:
specifier: ^8.17.0
- version: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ version: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
optionalDependencies:
bufferutil:
specifier: ^4.0.8
version: 4.0.8
utf-8-validate:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^6.0.4
+ version: 6.0.4
devDependencies:
'@commitlint/cli':
specifier: ^19.3.0
- version: 19.3.0(@types/node@20.12.7)(typescript@5.4.5)
+ version: 19.3.0(@types/node@20.14.2)(typescript@5.4.5)
'@commitlint/config-conventional':
specifier: ^19.2.2
version: 19.2.2
'@mikro-orm/cli':
- specifier: ^6.2.3
- version: 6.2.3
+ specifier: ^6.2.9
+ version: 6.2.9(mariadb@3.3.0)
'@release-it/bumper':
specifier: ^6.0.1
- version: 6.0.1(release-it@17.2.1(typescript@5.4.5))
+ version: 6.0.1(release-it@17.3.0(typescript@5.4.5))
'@types/node':
- specifier: ^20.12.7
- version: 20.12.7
+ specifier: ^20.14.2
+ version: 20.14.2
'@types/semver':
specifier: ^7.5.8
version: 7.5.8
specifier: ^8.5.10
version: 8.5.10
'@typescript-eslint/eslint-plugin':
- specifier: ^7.7.1
- version: 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ specifier: ^7.13.0
+ version: 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser':
- specifier: ^7.7.1
- version: 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ specifier: ^7.13.0
+ version: 7.13.0(eslint@8.57.0)(typescript@5.4.5)
auto-changelog:
specifier: ^2.4.0
version: 2.4.0(encoding@0.1.13)
c8:
- specifier: ^9.1.0
- version: 9.1.0
+ specifier: ^10.1.2
+ version: 10.1.2
clinic:
specifier: ^13.0.0
version: 13.0.0(encoding@0.1.13)
specifier: ^7.0.3
version: 7.0.3
esbuild:
- specifier: ^0.20.2
- version: 0.20.2
+ specifier: ^0.21.5
+ version: 0.21.5
esbuild-plugin-clean:
specifier: ^1.0.1
- version: 1.0.1(esbuild@0.20.2)
+ version: 1.0.1(esbuild@0.21.5)
esbuild-plugin-copy:
specifier: ^2.1.1
- version: 2.1.1(esbuild@0.20.2)
+ version: 2.1.1(esbuild@0.21.5)
eslint:
specifier: ^8.57.0
version: 8.57.0
eslint-config-love:
specifier: ^47.0.0
- version: 47.0.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.3.1(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)
+ version: 47.0.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.9.0(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)
eslint-config-standard:
specifier: ^17.1.0
- version: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.3.1(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0)
+ version: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.9.0(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0)
eslint-define-config:
specifier: ^2.1.0
version: 2.1.0
eslint-import-resolver-typescript:
specifier: ^3.6.1
- version: 3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ version: 3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import:
specifier: ^2.29.1
- version: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ version: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-jsdoc:
- specifier: ^48.2.3
- version: 48.2.3(eslint@8.57.0)
+ specifier: ^48.2.12
+ version: 48.2.12(eslint@8.57.0)
eslint-plugin-n:
- specifier: ^17.3.1
- version: 17.3.1(eslint@8.57.0)
+ specifier: ^17.9.0
+ version: 17.9.0(eslint@8.57.0)
eslint-plugin-simple-import-sort:
specifier: ^12.1.0
version: 12.1.0(eslint@8.57.0)
eslint-plugin-tsdoc:
- specifier: ^0.2.17
- version: 0.2.17
+ specifier: ^0.3.0
+ version: 0.3.0
expect:
specifier: ^29.7.0
version: 29.7.0
glob:
- specifier: ^10.3.12
- version: 10.3.12
+ specifier: ^10.4.1
+ version: 10.4.1
husky:
specifier: ^9.0.11
version: 9.0.11
lint-staged:
- specifier: ^15.2.2
- version: 15.2.2
+ specifier: ^15.2.7
+ version: 15.2.7
prettier:
- specifier: ^3.2.5
- version: 3.2.5
+ specifier: ^3.3.2
+ version: 3.3.2
release-it:
- specifier: ^17.2.1
- version: 17.2.1(typescript@5.4.5)
+ specifier: ^17.3.0
+ version: 17.3.0(typescript@5.4.5)
rimraf:
- specifier: ^5.0.5
- version: 5.0.5
+ specifier: ^5.0.7
+ version: 5.0.7
semver:
specifier: ^7.5.3
- version: 7.6.0
+ version: 7.6.2
ts-node:
specifier: ^10.9.2
- version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
+ version: 10.9.2(@types/node@20.14.2)(typescript@5.4.5)
tsx:
- specifier: ^4.7.3
- version: 4.7.3
+ specifier: ^4.15.4
+ version: 4.15.4
typescript:
specifier: ~5.4.5
version: 5.4.5
specifier: ^1.15.0
version: 1.15.0
vue:
- specifier: ^3.4.26
- version: 3.4.26(typescript@5.4.5)
+ specifier: ^3.4.29
+ version: 3.4.29(typescript@5.4.5)
vue-router:
- specifier: ^4.3.2
- version: 4.3.2(vue@3.4.26(typescript@5.4.5))
+ specifier: ^4.3.3
+ version: 4.3.3(vue@3.4.29(typescript@5.4.5))
vue-toast-notification:
specifier: ^3.1.2
- version: 3.1.2(vue@3.4.26(typescript@5.4.5))
+ version: 3.1.2(vue@3.4.29(typescript@5.4.5))
devDependencies:
'@rushstack/eslint-patch':
- specifier: ^1.10.2
- version: 1.10.2
+ specifier: ^1.10.3
+ version: 1.10.3
'@tsconfig/node20':
specifier: ^20.1.4
version: 20.1.4
'@types/jsdom':
- specifier: ^21.1.6
- version: 21.1.6
+ specifier: ^21.1.7
+ version: 21.1.7
'@types/node':
- specifier: ^20.12.7
- version: 20.12.7
+ specifier: ^20.14.2
+ version: 20.14.2
'@typescript-eslint/eslint-plugin':
- specifier: ^7.7.1
- version: 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ specifier: ^7.13.0
+ version: 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser':
- specifier: ^7.7.1
- version: 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ specifier: ^7.13.0
+ version: 7.13.0(eslint@8.57.0)(typescript@5.4.5)
'@vitejs/plugin-vue':
- specifier: ^5.0.4
- version: 5.0.4(vite@5.2.10(@types/node@20.12.7)(terser@4.8.1))(vue@3.4.26(typescript@5.4.5))
+ specifier: ^5.0.5
+ version: 5.0.5(vite@5.3.1(@types/node@20.14.2))(vue@3.4.29(typescript@5.4.5))
'@vitejs/plugin-vue-jsx':
- specifier: ^3.1.0
- version: 3.1.0(vite@5.2.10(@types/node@20.12.7)(terser@4.8.1))(vue@3.4.26(typescript@5.4.5))
+ specifier: ^4.0.0
+ version: 4.0.0(vite@5.3.1(@types/node@20.14.2))(vue@3.4.29(typescript@5.4.5))
'@vitest/coverage-v8':
- specifier: ^1.5.2
- version: 1.5.2(vitest@1.5.2(@types/node@20.12.7)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@4.8.1))
+ specifier: ^1.6.0
+ version: 1.6.0(vitest@1.6.0(@types/node@20.14.2)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)))
'@vue/eslint-config-prettier':
specifier: ^9.0.0
- version: 9.0.0(eslint@8.57.0)(prettier@3.2.5)
+ version: 9.0.0(@types/eslint@8.56.10)(eslint@8.57.0)(prettier@3.3.2)
'@vue/eslint-config-typescript':
specifier: ^13.0.0
- version: 13.0.0(eslint-plugin-vue@9.25.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)
+ version: 13.0.0(eslint-plugin-vue@9.26.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)
'@vue/test-utils':
- specifier: ^2.4.5
- version: 2.4.5
+ specifier: ^2.4.6
+ version: 2.4.6
'@vue/tsconfig':
specifier: ^0.5.1
version: 0.5.1
version: 2.1.0
eslint-import-resolver-typescript:
specifier: ^3.6.1
- version: 3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ version: 3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import:
specifier: ^2.29.1
- version: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ version: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-simple-import-sort:
specifier: ^12.1.0
version: 12.1.0(eslint@8.57.0)
eslint-plugin-vue:
- specifier: ^9.25.0
- version: 9.25.0(eslint@8.57.0)
+ specifier: ^9.26.0
+ version: 9.26.0(eslint@8.57.0)
jsdom:
- specifier: ^24.0.0
- version: 24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ specifier: ^24.1.0
+ version: 24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
prettier:
- specifier: ^3.2.5
- version: 3.2.5
+ specifier: ^3.3.2
+ version: 3.3.2
rimraf:
- specifier: ^5.0.5
- version: 5.0.5
+ specifier: ^5.0.7
+ version: 5.0.7
typescript:
specifier: ~5.4.5
version: 5.4.5
vite:
- specifier: ^5.2.10
- version: 5.2.10(@types/node@20.12.7)(terser@4.8.1)
+ specifier: ^5.3.1
+ version: 5.3.1(@types/node@20.14.2)
vitest:
- specifier: ^1.5.2
- version: 1.5.2(@types/node@20.12.7)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@4.8.1)
+ specifier: ^1.6.0
+ version: 1.6.0(@types/node@20.14.2)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))
packages:
'@assemblyscript/loader@0.19.23':
resolution: {integrity: sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw==}
- '@babel/code-frame@7.24.2':
- resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
+ '@babel/code-frame@7.24.7':
+ resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.24.4':
- resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==}
+ '@babel/compat-data@7.24.7':
+ resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.24.4':
- resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==}
+ '@babel/core@7.24.7':
+ resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.24.4':
- resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==}
+ '@babel/generator@7.24.7':
+ resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-annotate-as-pure@7.22.5':
- resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ '@babel/helper-annotate-as-pure@7.24.7':
+ resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.23.6':
- resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+ '@babel/helper-compilation-targets@7.24.7':
+ resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.24.4':
- resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==}
+ '@babel/helper-create-class-features-plugin@7.24.7':
+ resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-environment-visitor@7.22.20':
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ '@babel/helper-environment-visitor@7.24.7':
+ resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-function-name@7.23.0':
- resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ '@babel/helper-function-name@7.24.7':
+ resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-hoist-variables@7.22.5':
- resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ '@babel/helper-hoist-variables@7.24.7':
+ resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-member-expression-to-functions@7.23.0':
- resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+ '@babel/helper-member-expression-to-functions@7.24.7':
+ resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.22.15':
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.24.3':
- resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
+ '@babel/helper-module-imports@7.24.7':
+ resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.23.3':
- resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ '@babel/helper-module-transforms@7.24.7':
+ resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-optimise-call-expression@7.22.5':
- resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+ '@babel/helper-optimise-call-expression@7.24.7':
+ resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.24.0':
- resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==}
+ '@babel/helper-plugin-utils@7.24.7':
+ resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-replace-supers@7.24.1':
- resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==}
+ '@babel/helper-replace-supers@7.24.7':
+ resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-simple-access@7.22.5':
- resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ '@babel/helper-simple-access@7.24.7':
+ resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
- resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
+ resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-split-export-declaration@7.22.6':
- resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ '@babel/helper-split-export-declaration@7.24.7':
+ resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.24.1':
- resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
+ '@babel/helper-string-parser@7.24.7':
+ resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.22.20':
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ '@babel/helper-validator-identifier@7.24.7':
+ resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.23.5':
- resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ '@babel/helper-validator-option@7.24.7':
+ resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.24.4':
- resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==}
+ '@babel/helpers@7.24.7':
+ resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==}
engines: {node: '>=6.9.0'}
- '@babel/highlight@7.24.2':
- resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
+ '@babel/highlight@7.24.7':
+ resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.24.4':
- resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==}
+ '@babel/parser@7.24.7':
+ resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-syntax-jsx@7.24.1':
- resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==}
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-typescript@7.24.1':
- resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==}
+ '@babel/plugin-syntax-typescript@7.24.7':
+ resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-typescript@7.24.4':
- resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==}
+ '@babel/plugin-transform-typescript@7.24.7':
+ resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/template@7.24.0':
- resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
+ '@babel/template@7.24.7':
+ resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.24.1':
- resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==}
+ '@babel/traverse@7.24.7':
+ resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.24.0':
- resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
+ '@babel/types@7.24.7':
+ resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@0.2.3':
'@dabh/diagnostics@2.0.3':
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
- '@es-joy/jsdoccomment@0.42.0':
- resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==}
+ '@es-joy/jsdoccomment@0.43.1':
+ resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==}
engines: {node: '>=16'}
- '@esbuild/aix-ppc64@0.19.12':
- resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/aix-ppc64@0.20.2':
- resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.19.12':
- resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.20.2':
- resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.19.12':
- resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.20.2':
- resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.19.12':
- resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/android-x64@0.20.2':
- resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.19.12':
- resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.20.2':
- resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.19.12':
- resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.20.2':
- resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.19.12':
- resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.20.2':
- resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.19.12':
- resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.20.2':
- resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.19.12':
- resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm64@0.20.2':
- resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.19.12':
- resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-arm@0.20.2':
- resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.19.12':
- resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.20.2':
- resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.19.12':
- resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.20.2':
- resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.19.12':
- resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.20.2':
- resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.19.12':
- resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.20.2':
- resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.19.12':
- resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.20.2':
- resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.19.12':
- resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.20.2':
- resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.19.12':
- resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.20.2':
- resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-x64@0.19.12':
- resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.20.2':
- resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-x64@0.19.12':
- resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.20.2':
- resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.19.12':
- resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.20.2':
- resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.19.12':
- resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.20.2':
- resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.19.12':
- resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-ia32@0.20.2':
- resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.19.12':
- resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- '@esbuild/win32-x64@0.20.2':
- resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.10.0':
- resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ '@eslint-community/regexpp@4.10.1':
+ resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@2.1.4':
'@humanwhocodes/config-array@0.11.14':
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
'@humanwhocodes/object-schema@2.0.3':
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ deprecated: Use @eslint/object-schema instead
'@iarna/toml@2.2.5':
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
- '@inquirer/figures@1.0.1':
- resolution: {integrity: sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==}
+ '@inquirer/figures@1.0.3':
+ resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==}
engines: {node: '>=18'}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==}
engines: {node: '>= 0.4'}
- '@microsoft/tsdoc-config@0.16.2':
- resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
+ '@microsoft/tsdoc-config@0.17.0':
+ resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==}
- '@microsoft/tsdoc@0.14.2':
- resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
+ '@microsoft/tsdoc@0.15.0':
+ resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==}
- '@mikro-orm/cli@6.2.3':
- resolution: {integrity: sha512-CAvqBugClipxhAKW4DgW+qnT/iOmOBumdhI+EhL7mYuem+UZa96RLgq/N0u3LHrd0rsNPCmDUSefMHXaadPXeQ==}
+ '@mikro-orm/cli@6.2.9':
+ resolution: {integrity: sha512-9eW9ZSzdO03KBkUn5Q0OxWBv/2RrKDwOabW2FKzuWslOY3ZBX+k+e8eP6a/+T8GeGGD/uqj8xVZSgM2DuGGqrw==}
engines: {node: '>= 18.12.0'}
hasBin: true
- '@mikro-orm/core@6.2.3':
- resolution: {integrity: sha512-FtUZ7xlmEwC1Kk4fZ2Coy6e79WlKYF4cGrEeE1k+n9g1TJpuBSzaXzF3kmXsy6cv0yiR9W6unJVFyIOGIr4X5Q==}
+ '@mikro-orm/core@6.2.9':
+ resolution: {integrity: sha512-fzeg8qNwNr0f9embDhs0L75EBC8ivIOsK1GGPXe48Ab+P0Vmv1qCskSP7/vNDsz4s1xDu0h0l6fIsv1N7j4jKQ==}
engines: {node: '>= 18.12.0'}
- '@mikro-orm/knex@6.2.3':
- resolution: {integrity: sha512-9YZxEmS/32ivgWxDhY1gLrL0ovjVZoS/4wsA0gulIxC8ORkMnY9hzyvdJoMQ0hdVENXC8oAF4LMjtYvBghGQGA==}
+ '@mikro-orm/knex@6.2.9':
+ resolution: {integrity: sha512-eSHPiS5em+RGv/jx5lP7a1xDVVlnrG+l90/7N7WAgTGcPOzyILVw9EJOZl2KR8dh8EfPI6Wm35Lo4qkO2LoDUg==}
engines: {node: '>= 18.12.0'}
peerDependencies:
'@mikro-orm/core': ^6.0.0
+ better-sqlite3: '*'
+ libsql: '*'
+ mariadb: '*'
+ peerDependenciesMeta:
+ better-sqlite3:
+ optional: true
+ libsql:
+ optional: true
+ mariadb:
+ optional: true
- '@mikro-orm/mariadb@6.2.3':
- resolution: {integrity: sha512-laKkzMVy33MN9x/CU1xFQqoFGUQexNFDRu+aZtJmDnkjT9dKmXgzTjnCtOuCBdo7RQ4bxX8qwggG8jodacJQBw==}
+ '@mikro-orm/mariadb@6.2.9':
+ resolution: {integrity: sha512-V+wJ0bjX8clO64j0gRcvAZdl5FV2EJElHpn/x779/T5CuAratF68elEkKJNfqCPB6bbAPb6qrzvcI+szgjB23A==}
engines: {node: '>= 18.12.0'}
peerDependencies:
'@mikro-orm/core': ^6.0.0
- '@mikro-orm/reflection@6.2.3':
- resolution: {integrity: sha512-VtaBP2DOso6wiMorytGN5xseMzRqMfG85nXkDQLcHw97wu5wApxC1btOJvK/4KZREfkrNGfmUbye4zG1L6Xlbw==}
+ '@mikro-orm/reflection@6.2.9':
+ resolution: {integrity: sha512-JkdQnEohwngC1LiNNB+tt0ReDiCMlTAJA4/n5N4+tdSv8aspgrIX8ARgB2a6IjgWwes7xIkJJ1nb5tWdFwPSmA==}
engines: {node: '>= 18.12.0'}
peerDependencies:
'@mikro-orm/core': ^6.0.0
- '@mikro-orm/sqlite@6.2.3':
- resolution: {integrity: sha512-VLBOvtYwcdaq8LggGc1bFkJTprLPCBHtZe4ieMHiT9s01+yixQMexZZmst2dSmrWWkz9FggNbdYo4SSWS8h9hw==}
+ '@mikro-orm/sqlite@6.2.9':
+ resolution: {integrity: sha512-+ZdlKEtE8HmqbZWSm44MaZwfeS1AlrhMJrZfRr5tQfvdKi5VuRQ+I87Uxo03Ni5r0JXV1wEfFyWovK5c6h1iCQ==}
engines: {node: '>= 18.12.0'}
peerDependencies:
'@mikro-orm/core': ^6.0.0
- '@mongodb-js/saslprep@1.1.5':
- resolution: {integrity: sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==}
+ '@mongodb-js/saslprep@1.1.7':
+ resolution: {integrity: sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==}
'@nearform/heap-profiler@2.0.0':
resolution: {integrity: sha512-846CWyq3Ky5rzcl8Z3S+VT3z6GQSlYD1G/dqbtANu29NUHoCO+W7tOZRK6eA6FjLHnNX0DvP1Mrt2oFBPnkxLw==}
resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==}
engines: {node: '>= 18'}
- '@octokit/openapi-types@20.0.0':
- resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==}
-
- '@octokit/openapi-types@22.1.0':
- resolution: {integrity: sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==}
+ '@octokit/openapi-types@22.2.0':
+ resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==}
- '@octokit/plugin-paginate-rest@9.2.1':
- resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==}
+ '@octokit/plugin-paginate-rest@11.3.1':
+ resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==}
engines: {node: '>= 18'}
peerDependencies:
'@octokit/core': '5'
peerDependencies:
'@octokit/core': '5'
- '@octokit/plugin-rest-endpoint-methods@10.4.1':
- resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==}
+ '@octokit/plugin-rest-endpoint-methods@13.2.2':
+ resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==}
engines: {node: '>= 18'}
peerDependencies:
- '@octokit/core': '5'
+ '@octokit/core': ^5
'@octokit/request-error@5.1.0':
resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==}
resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==}
engines: {node: '>= 18'}
- '@octokit/rest@20.1.0':
- resolution: {integrity: sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==}
+ '@octokit/rest@20.1.1':
+ resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==}
engines: {node: '>= 18'}
- '@octokit/types@12.6.0':
- resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==}
-
- '@octokit/types@13.4.1':
- resolution: {integrity: sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==}
+ '@octokit/types@13.5.0':
+ resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==}
'@one-ini/wasm@0.1.1':
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
peerDependencies:
release-it: ^17.0.0
- '@rollup/rollup-android-arm-eabi@4.17.1':
- resolution: {integrity: sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==}
+ '@rollup/rollup-android-arm-eabi@4.18.0':
+ resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.17.1':
- resolution: {integrity: sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==}
+ '@rollup/rollup-android-arm64@4.18.0':
+ resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.17.1':
- resolution: {integrity: sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==}
+ '@rollup/rollup-darwin-arm64@4.18.0':
+ resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.17.1':
- resolution: {integrity: sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==}
+ '@rollup/rollup-darwin-x64@4.18.0':
+ resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-linux-arm-gnueabihf@4.17.1':
- resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
+ resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.17.1':
- resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==}
+ '@rollup/rollup-linux-arm-musleabihf@4.18.0':
+ resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.17.1':
- resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==}
+ '@rollup/rollup-linux-arm64-gnu@4.18.0':
+ resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.17.1':
- resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==}
+ '@rollup/rollup-linux-arm64-musl@4.18.0':
+ resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.17.1':
- resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
+ resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.17.1':
- resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.18.0':
+ resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.17.1':
- resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==}
+ '@rollup/rollup-linux-s390x-gnu@4.18.0':
+ resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.17.1':
- resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==}
+ '@rollup/rollup-linux-x64-gnu@4.18.0':
+ resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.17.1':
- resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==}
+ '@rollup/rollup-linux-x64-musl@4.18.0':
+ resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.17.1':
- resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==}
+ '@rollup/rollup-win32-arm64-msvc@4.18.0':
+ resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.17.1':
- resolution: {integrity: sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==}
+ '@rollup/rollup-win32-ia32-msvc@4.18.0':
+ resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.17.1':
- resolution: {integrity: sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==}
+ '@rollup/rollup-win32-x64-msvc@4.18.0':
+ resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==}
cpu: [x64]
os: [win32]
- '@rushstack/eslint-patch@1.10.2':
- resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==}
+ '@rushstack/eslint-patch@1.10.3':
+ resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
'@types/conventional-commits-parser@5.0.0':
resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
+ '@types/eslint@8.56.10':
+ resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
+
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
'@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- '@types/jsdom@21.1.6':
- resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==}
+ '@types/jsdom@21.1.7':
+ resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/long@4.0.2':
resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
- '@types/node@20.12.7':
- resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
+ '@types/node@20.14.2':
+ resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
'@types/offscreencanvas@2019.3.0':
resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==}
'@types/webidl-conversions@7.0.3':
resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
- '@types/whatwg-url@11.0.4':
- resolution: {integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==}
+ '@types/whatwg-url@11.0.5':
+ resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==}
'@types/ws@8.5.10':
resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
'@types/yargs@17.0.32':
resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
- '@typescript-eslint/eslint-plugin@7.7.1':
- resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==}
+ '@typescript-eslint/eslint-plugin@7.13.0':
+ resolution: {integrity: sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
typescript:
optional: true
- '@typescript-eslint/parser@7.7.1':
- resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==}
+ '@typescript-eslint/parser@7.13.0':
+ resolution: {integrity: sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
typescript:
optional: true
- '@typescript-eslint/scope-manager@7.7.1':
- resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==}
+ '@typescript-eslint/scope-manager@7.13.0':
+ resolution: {integrity: sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==}
engines: {node: ^18.18.0 || >=20.0.0}
- '@typescript-eslint/type-utils@7.7.1':
- resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==}
+ '@typescript-eslint/type-utils@7.13.0':
+ resolution: {integrity: sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
typescript:
optional: true
- '@typescript-eslint/types@7.7.1':
- resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==}
+ '@typescript-eslint/types@7.13.0':
+ resolution: {integrity: sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==}
engines: {node: ^18.18.0 || >=20.0.0}
- '@typescript-eslint/typescript-estree@7.7.1':
- resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==}
+ '@typescript-eslint/typescript-estree@7.13.0':
+ resolution: {integrity: sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
typescript:
optional: true
- '@typescript-eslint/utils@7.7.1':
- resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==}
+ '@typescript-eslint/utils@7.13.0':
+ resolution: {integrity: sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
- '@typescript-eslint/visitor-keys@7.7.1':
- resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==}
+ '@typescript-eslint/visitor-keys@7.13.0':
+ resolution: {integrity: sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==}
engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- '@vitejs/plugin-vue-jsx@3.1.0':
- resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
- engines: {node: ^14.18.0 || >=16.0.0}
+ '@vitejs/plugin-vue-jsx@4.0.0':
+ resolution: {integrity: sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
- vite: ^4.0.0 || ^5.0.0
+ vite: ^5.0.0
vue: ^3.0.0
- '@vitejs/plugin-vue@5.0.4':
- resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
+ '@vitejs/plugin-vue@5.0.5':
+ resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vue: ^3.2.25
- '@vitest/coverage-v8@1.5.2':
- resolution: {integrity: sha512-QJqxRnbCwNtbbegK9E93rBmhN3dbfG1bC/o52Bqr0zGCYhQzwgwvrJBG7Q8vw3zilX6Ryy6oa/mkZku2lLJx1Q==}
+ '@vitest/coverage-v8@1.6.0':
+ resolution: {integrity: sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==}
peerDependencies:
- vitest: 1.5.2
+ vitest: 1.6.0
- '@vitest/expect@1.5.2':
- resolution: {integrity: sha512-rf7MTD1WCoDlN3FfYJ9Llfp0PbdtOMZ3FIF0AVkDnKbp3oiMW1c8AmvRZBcqbAhDUAvF52e9zx4WQM1r3oraVA==}
+ '@vitest/expect@1.6.0':
+ resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==}
- '@vitest/runner@1.5.2':
- resolution: {integrity: sha512-7IJ7sJhMZrqx7HIEpv3WrMYcq8ZNz9L6alo81Y6f8hV5mIE6yVZsFoivLZmr0D777klm1ReqonE9LyChdcmw6g==}
+ '@vitest/runner@1.6.0':
+ resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==}
- '@vitest/snapshot@1.5.2':
- resolution: {integrity: sha512-CTEp/lTYos8fuCc9+Z55Ga5NVPKUgExritjF5VY7heRFUfheoAqBneUlvXSUJHUZPjnPmyZA96yLRJDP1QATFQ==}
+ '@vitest/snapshot@1.6.0':
+ resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
- '@vitest/spy@1.5.2':
- resolution: {integrity: sha512-xCcPvI8JpCtgikT9nLpHPL1/81AYqZy1GCy4+MCHBE7xi8jgsYkULpW5hrx5PGLgOQjUpb6fd15lqcriJ40tfQ==}
+ '@vitest/spy@1.6.0':
+ resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==}
- '@vitest/utils@1.5.2':
- resolution: {integrity: sha512-sWOmyofuXLJ85VvXNsroZur7mOJGiQeM0JN3/0D1uU8U9bGFM69X1iqHaRXl6R8BwaLY6yPCogP257zxTzkUdA==}
+ '@vitest/utils@1.6.0':
+ resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==}
'@vue/babel-helper-vue-transform-on@1.2.2':
resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@vue/compiler-core@3.4.26':
- resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==}
+ '@vue/compiler-core@3.4.29':
+ resolution: {integrity: sha512-TFKiRkKKsRCKvg/jTSSKK7mYLJEQdUiUfykbG49rubC9SfDyvT2JrzTReopWlz2MxqeLyxh9UZhvxEIBgAhtrg==}
- '@vue/compiler-dom@3.4.26':
- resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==}
+ '@vue/compiler-dom@3.4.29':
+ resolution: {integrity: sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==}
- '@vue/compiler-sfc@3.4.26':
- resolution: {integrity: sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==}
+ '@vue/compiler-sfc@3.4.29':
+ resolution: {integrity: sha512-zygDcEtn8ZimDlrEQyLUovoWgKQic6aEQqRXce2WXBvSeHbEbcAsXyCk9oG33ZkyWH4sl9D3tkYc1idoOkdqZQ==}
- '@vue/compiler-ssr@3.4.26':
- resolution: {integrity: sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==}
+ '@vue/compiler-ssr@3.4.29':
+ resolution: {integrity: sha512-rFbwCmxJ16tDp3N8XCx5xSQzjhidYjXllvEcqX/lopkoznlNPz3jyy0WGJCyhAaVQK677WWFt3YO/WUEkMMUFQ==}
- '@vue/devtools-api@6.6.1':
- resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
+ '@vue/devtools-api@6.6.3':
+ resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==}
'@vue/eslint-config-prettier@9.0.0':
resolution: {integrity: sha512-z1ZIAAUS9pKzo/ANEfd2sO+v2IUalz7cM/cTLOZ7vRFOPk5/xuRKQteOu1DErFLAh/lYGXMVZ0IfYKlyInuDVg==}
typescript:
optional: true
- '@vue/reactivity@3.4.26':
- resolution: {integrity: sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==}
+ '@vue/reactivity@3.4.29':
+ resolution: {integrity: sha512-w8+KV+mb1a8ornnGQitnMdLfE0kXmteaxLdccm2XwdFxXst4q/Z7SEboCV5SqJNpZbKFeaRBBJBhW24aJyGINg==}
- '@vue/runtime-core@3.4.26':
- resolution: {integrity: sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==}
+ '@vue/runtime-core@3.4.29':
+ resolution: {integrity: sha512-s8fmX3YVR/Rk5ig0ic0NuzTNjK2M7iLuVSZyMmCzN/+Mjuqqif1JasCtEtmtoJWF32pAtUjyuT2ljNKNLeOmnQ==}
- '@vue/runtime-dom@3.4.26':
- resolution: {integrity: sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==}
+ '@vue/runtime-dom@3.4.29':
+ resolution: {integrity: sha512-gI10atCrtOLf/2MPPMM+dpz3NGulo9ZZR9d1dWo4fYvm+xkfvRrw1ZmJ7mkWtiJVXSsdmPbcK1p5dZzOCKDN0g==}
- '@vue/server-renderer@3.4.26':
- resolution: {integrity: sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==}
+ '@vue/server-renderer@3.4.29':
+ resolution: {integrity: sha512-HMLCmPI2j/k8PVkSBysrA2RxcxC5DgBiCdj7n7H2QtR8bQQPqKAe8qoaxLcInzouBmzwJ+J0x20ygN/B5mYBng==}
peerDependencies:
- vue: 3.4.26
+ vue: 3.4.29
- '@vue/shared@3.4.26':
- resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==}
+ '@vue/shared@3.4.29':
+ resolution: {integrity: sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==}
- '@vue/test-utils@2.4.5':
- resolution: {integrity: sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==}
+ '@vue/test-utils@2.4.6':
+ resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
'@vue/tsconfig@0.5.1':
resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
engines: {node: '>=0.4.0'}
- acorn-walk@8.3.2:
- resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
+ acorn-walk@8.3.3:
+ resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
engines: {node: '>=0.4.0'}
acorn@7.4.1:
engines: {node: '>=0.4.0'}
hasBin: true
- acorn@8.11.3:
- resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ acorn@8.12.0:
+ resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==}
engines: {node: '>=0.4.0'}
hasBin: true
ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+ ajv@8.16.0:
+ resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==}
+
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
are-we-there-yet@3.0.1:
resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
aws-sign2@0.7.0:
resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
- aws4@1.12.0:
- resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
+ aws4@1.13.0:
+ resolution: {integrity: sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==}
b4a@1.6.6:
resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- braces@3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
brfs@2.0.2:
engines: {node: '>= 0.8'}
hasBin: true
- browserslist@4.23.0:
- resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
+ browserslist@4.23.1:
+ resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- bson@6.6.0:
- resolution: {integrity: sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==}
+ bson@6.7.0:
+ resolution: {integrity: sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==}
engines: {node: '>=16.20.1'}
buffer-equal@0.0.1:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
engines: {node: '>=6.14.2'}
- builtin-modules@3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
-
builtin-status-codes@3.0.0:
resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
engines: {node: '>=18'}
- c8@9.1.0:
- resolution: {integrity: sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==}
- engines: {node: '>=14.14.0'}
+ c8@10.1.2:
+ resolution: {integrity: sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==}
+ engines: {node: '>=18'}
hasBin: true
+ peerDependencies:
+ monocart-coverage-reports: ^2
+ peerDependenciesMeta:
+ monocart-coverage-reports:
+ optional: true
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
engines: {node: '>=14.16'}
- caniuse-lite@1.0.30001614:
- resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==}
+ caniuse-lite@1.0.30001634:
+ resolution: {integrity: sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==}
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
- cephes@1.2.0:
- resolution: {integrity: sha512-twuUuJRrIrsELHz6foJtZlqrz6FC36zoHZJvvThsrM1UWPKxyoilw1Rka6Hk0AmPFKHKUoGwGfAtvNZNtNZu0g==}
+ cephes@2.0.0:
+ resolution: {integrity: sha512-4GMUzkcXHZ0HMZ3gZdBrv8pQs1/zkJh2Q9rQOF8NJZHanM359y3XOSdeqmDBPfxQKYQpJt58R3dUpofrIXJ2mg==}
chai@4.4.1:
resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
- cli-table3@0.6.4:
- resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==}
+ cli-table3@0.6.5:
+ resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
cli-truncate@4.0.0:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
- commander@11.1.0:
- resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
- engines: {node: '>=16'}
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
supports-color:
optional: true
+ debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
- deep-eql@4.1.3:
- resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
engines: {node: '>=6'}
deep-extend@0.6.0:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
- distributions@2.1.0:
- resolution: {integrity: sha512-4eov7WXRip5Tu0K7Y51W1oVt+DcvkoE0EzsvbLzgedC/n4PUpYXHqk6vo/OH1HteBHp5Vm6cmfnInf9NAXM4qQ==}
+ distributions@2.2.0:
+ resolution: {integrity: sha512-n7ybud+CRAOZlpg+ETuA0PTiSBfyVNt8Okns5gSK4NvHwj7RamQoufptOucvVcTn9CV4DZ38p1k6TgwMexUNkQ==}
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.4.750:
- resolution: {integrity: sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==}
+ electron-to-chromium@1.4.802:
+ resolution: {integrity: sha512-TnTMUATbgNdPXVSHsxvNVSG0uEd6cSZsANjm8c9HbvflZVVn1yTRcmVXYT1Ma95/ssB/Dcd30AHweH2TE+dNpA==}
elliptic@6.5.5:
resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
endpoint@0.4.5:
resolution: {integrity: sha512-oA2ALUF+d4Y0I8/WMV/0BuAZGHxfIdAygr9ZXP4rfzmp5zpYZmYKHKAbqRQnrE1YGdPhVg4D24CQkyx2qYEoHg==}
- enhanced-resolve@5.16.0:
- resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
+ enhanced-resolve@5.17.0:
+ resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
peerDependencies:
esbuild: '>= 0.14.0'
- esbuild@0.19.12:
- resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
- engines: {node: '>=12'}
- hasBin: true
-
- esbuild@0.20.2:
- resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'}
hasBin: true
engines: {node: '>=6.0'}
hasBin: true
- eslint-compat-utils@0.5.0:
- resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==}
+ eslint-compat-utils@0.5.1:
+ resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
eslint-import-resolver-webpack:
optional: true
- eslint-plugin-es-x@7.6.0:
- resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==}
+ eslint-plugin-es-x@7.7.0:
+ resolution: {integrity: sha512-aP3qj8BwiEDPttxQkZdI221DLKq9sI/qHolE2YSQL1/9+xk7dTV+tB1Fz8/IaCA+lnLA1bDEnvaS2LKs0k2Uig==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '>=8'
'@typescript-eslint/parser':
optional: true
- eslint-plugin-jsdoc@48.2.3:
- resolution: {integrity: sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==}
+ eslint-plugin-jsdoc@48.2.12:
+ resolution: {integrity: sha512-sO9sKkJx5ovWoRk9hV0YiNzXQ4Z6j27CqE/po2E3wddZVuy9wvKPSTiIhpxMTrP/qURvKayJIDB2+o9kyCW1Fw==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-n@17.3.1:
- resolution: {integrity: sha512-25+HTtKe1F8U/M4ERmdzbz/xkm/gaY0OYC8Fcv1z/WvpLJ8Xfh9LzJ13JV5uj4QyCUD8kOPJrNjn/3y+tc57Vw==}
+ eslint-plugin-n@17.9.0:
+ resolution: {integrity: sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8.23.0'
eslint-config-prettier:
optional: true
- eslint-plugin-promise@6.1.1:
- resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==}
+ eslint-plugin-promise@6.2.0:
+ resolution: {integrity: sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
eslint-plugin-simple-import-sort@12.1.0:
resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==}
peerDependencies:
eslint: '>=5.0.0'
- eslint-plugin-tsdoc@0.2.17:
- resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==}
+ eslint-plugin-tsdoc@0.3.0:
+ resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==}
- eslint-plugin-vue@9.25.0:
- resolution: {integrity: sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==}
+ eslint-plugin-vue@9.26.0:
+ resolution: {integrity: sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
- fill-range@7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
finalhandler@1.2.0:
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
- foreground-child@3.1.1:
- resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
+ foreground-child@3.2.0:
+ resolution: {integrity: sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==}
engines: {node: '>=14'}
forever-agent@0.6.1:
gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
generate-function@2.3.1:
resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.7.3:
- resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==}
+ get-tsconfig@4.7.5:
+ resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
get-uri@6.0.3:
resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==}
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@10.3.12:
- resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==}
- engines: {node: '>=16 || 14 >=14.17'}
+ glob@10.4.1:
+ resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
+ engines: {node: '>=16 || 14 >=14.18'}
hasBin: true
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
- globals@15.1.0:
- resolution: {integrity: sha512-926gJqg+4mkxwYKiFvoomM4J0kWESfk3qfTvRL2/oc/tK/eTDBbrfcKnSa2KtfdxB5onoL7D3A3qIHQFpd4+UA==}
+ globals@15.4.0:
+ resolution: {integrity: sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==}
engines: {node: '>=18'}
- globalthis@1.0.3:
- resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
globby@11.1.0:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
engines: {node: '>=8'}
- import-meta-resolve@4.0.0:
- resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
+ import-meta-resolve@4.1.0:
+ resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- ini@4.1.2:
- resolution: {integrity: sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==}
+ ini@4.1.3:
+ resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
inline-source-map@0.6.3:
resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
engines: {node: '>=6.0.0'}
- inquirer@9.2.19:
- resolution: {integrity: sha512-WpxOT71HGsFya6/mj5PUue0sWwbpbiPfAR+332zLj/siB0QA1PZM8v3GepegFV1Op189UxHUCF6y8AySdtOMVA==}
+ inquirer@9.2.22:
+ resolution: {integrity: sha512-SqLLa/Oe5rZUagTR9z+Zd6izyatHglbmbvVofo1KzuVB54YHleWzeHNLoR7FOICGOeQSqeLh1cordb3MzhGcEw==}
engines: {node: '>=18'}
insert-module-globals@7.2.1:
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
engines: {node: '>=4'}
- is-builtin-module@3.2.1:
- resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
- engines: {node: '>=6'}
-
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
iterate-value@1.0.2:
resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==}
- jackspeak@2.3.6:
- resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
+ jackspeak@3.4.0:
+ resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==}
engines: {node: '>=14'}
jest-diff@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jiti@1.21.0:
- resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+ jiti@1.21.6:
+ resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
jju@1.4.0:
resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==}
engines: {node: '>=12.0.0'}
- jsdom@24.0.0:
- resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==}
+ jsdom@24.1.0:
+ resolution: {integrity: sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==}
engines: {node: '>=18'}
peerDependencies:
canvas: ^2.11.2
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- lilconfig@3.0.0:
- resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
+ lilconfig@3.1.2:
+ resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
engines: {node: '>=14'}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lint-staged@15.2.2:
- resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==}
+ lint-staged@15.2.7:
+ resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==}
engines: {node: '>=18.12.0'}
hasBin: true
- listr2@8.0.1:
- resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==}
+ listr2@8.2.1:
+ resolution: {integrity: sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==}
engines: {node: '>=18.0.0'}
local-pkg@0.5.0:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- micromatch@4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
engines: {node: '>=8.6'}
- mikro-orm@6.2.3:
- resolution: {integrity: sha512-oXVDLZWl9b4th2d28QaQt7CdX/eMeNjLkQfeIqNK1tJpXgJ45wICNutHe94ivhOqHPIQC5XMuwIEkSgWMCWSgg==}
+ mikro-orm@6.2.9:
+ resolution: {integrity: sha512-zpP8D7Lw8Q2WYwd43iFQI+5e0zPUM+vEAAyJaGE87RzSiQwchqZNPuV/H74STNJYqj8mLSvwZxFvRzrQXsCRRw==}
engines: {node: '>= 18.12.0'}
miller-rabin@4.0.1:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
- minipass@7.0.4:
- resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
minizlib@2.1.2:
ml-xsadd@2.0.0:
resolution: {integrity: sha512-VoAYUqmPRmzKbbqRejjqceGFp3VF81Qe8XXFGU0UXLxB7Mf4GGvyGq5Qn3k4AiQgDEV6WzobqlPOd+j0+m6IrA==}
- mlly@1.6.1:
- resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==}
+ mlly@1.7.1:
+ resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
mnemonist@0.40.0-rc1:
resolution: {integrity: sha512-38L0xGDezsPweee5i7duiaCRzlkkCJorozW6Rta60iel7ZkT4vF6jDIfr101NxE3rsAsumuOvc8yiTGZD5gG4w==}
moment@2.30.1:
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
- mongodb-connection-string-url@3.0.0:
- resolution: {integrity: sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==}
+ mongodb-connection-string-url@3.0.1:
+ resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==}
- mongodb@6.5.0:
- resolution: {integrity: sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==}
+ mongodb@6.7.0:
+ resolution: {integrity: sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==}
engines: {node: '>=16.20.1'}
peerDependencies:
'@aws-sdk/credential-providers': ^3.188.0
no-case@2.3.2:
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
- node-abi@3.62.0:
- resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==}
+ node-abi@3.65.0:
+ resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==}
engines: {node: '>=10'}
node-addon-api@7.1.0:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-gyp-build@4.8.0:
- resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==}
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
hasBin: true
node-gyp@8.4.1:
engines: {node: '>=6'}
hasBin: true
- nopt@7.2.0:
- resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==}
+ nopt@7.2.1:
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
npmlog@6.0.2:
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ deprecated: This package is no longer supported.
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
engines: {node: '>=0.10.0'}
- nwsapi@2.2.9:
- resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==}
+ nwsapi@2.2.10:
+ resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==}
oauth-sign@0.9.0:
resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==}
engines: {node: '>= 0.8.0'}
- path-scurry@1.10.2:
- resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==}
- engines: {node: '>=16 || 14 >=14.17'}
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
pg-connection-string@2.6.2:
resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==}
- picocolors@1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
- pkg-types@1.1.0:
- resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==}
+ pkg-types@1.1.1:
+ resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
pkg-up@3.1.0:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
engines: {node: '>=8'}
- poolifier@3.1.30:
- resolution: {integrity: sha512-LxjkhsmqifKGz8R4+vQlaLlP3Uiy8GQsyJokhE9VugqzllZkSULnYgL9SgsKPo8XSHtFVRyyqrG+A1Cw8u8Wfw==}
+ poolifier@4.0.14:
+ resolution: {integrity: sha512-dlFUzJyGfxZzzf4YaB9krMUETqWr9ac3Ad/dtFHAgYQ5mitoMOKzJ9yhwWoONwFs38ugLtEz5zyytYl2nVnDzQ==}
engines: {node: '>=18.0.0', pnpm: '>=9.0.0'}
possible-typed-array-names@1.0.0:
peerDependencies:
postcss: ^8.0.0
- postcss-selector-parser@6.0.16:
- resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
+ postcss-selector-parser@6.1.0:
+ resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
- prettier@3.2.5:
- resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
+ prettier@3.3.2:
+ resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==}
engines: {node: '>=14'}
hasBin: true
reinterval@1.1.0:
resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==}
- release-it@17.2.1:
- resolution: {integrity: sha512-zBOpaHyjrXC3g/9rHyQlvuDw9yCn9AGphrlL+t3gWNEhbZKEQ62WNY45JxllcJMNx9orQUxBZ3o7pVCqkeuTbg==}
- engines: {node: ^18.18.0 || ^20.8.0 || ^21.0.0}
+ release-it@17.3.0:
+ resolution: {integrity: sha512-7t9a2WEwqQKCdteshZUrO/3RX60plS5CzYAFr5+4Zj8qvRx1pFOFVglJSz4BeFAEd2yejpPxfI60+qRUzLEDZw==}
+ engines: {node: ^18.18.0 || ^20.8.0 || ^22.0.0}
hasBin: true
request@2.88.2:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve@1.19.0:
- resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
-
resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rfdc@1.3.1:
- resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- rimraf@5.0.5:
- resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==}
- engines: {node: '>=14'}
+ rimraf@5.0.7:
+ resolution: {integrity: sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==}
+ engines: {node: '>=14.18'}
hasBin: true
ripemd160@2.0.2:
resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
- rollup@4.17.1:
- resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==}
+ rollup@4.18.0:
+ resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
rrweb-cssom@0.6.0:
resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==}
+ rrweb-cssom@0.7.1:
+ resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+
run-applescript@7.0.0:
resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
engines: {node: '>=18'}
resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==}
engines: {node: '>=12'}
- semver@7.6.0:
- resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ semver@7.6.2:
+ resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
engines: {node: '>=10'}
hasBin: true
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.17:
- resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==}
+ spdx-license-ids@3.0.18:
+ resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==}
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
- tar@7.0.1:
- resolution: {integrity: sha512-IjMhdQMZFpKsHEQT3woZVxBtCQY+0wk3CVxdRkGXEgyGa0dNS/ehPvOMr2nmfC7x5Zj2N+l6yZUpmICjLGS35w==}
+ tar@7.2.0:
+ resolution: {integrity: sha512-hctwP0Nb4AB60bj8WQgRYaMOuJYRAPMGiQUAotms5igN8ppfQM+IvjQ5HcKu1MaZh2Wy2KWVTe563Yj8dfc14w==}
engines: {node: '>=18'}
tarn@3.0.2:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
text-extensions@2.4.0:
resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
engines: {node: '>=8'}
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
- tough-cookie@4.1.3:
- resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
+ tough-cookie@4.1.4:
+ resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
engines: {node: '>=6'}
tr46@0.0.3:
tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- tslib@2.6.2:
- resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ tslib@2.6.3:
+ resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
- tsx@4.7.3:
- resolution: {integrity: sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==}
+ tsx@4.15.4:
+ resolution: {integrity: sha512-d++FLCwJLrXaBFtRcqdPBzu6FiVOJ2j+UsvUZPtoTrnYtCGU5CEW7iHXtNZfA2fcRTvJFWPqA6SWBuB0GSva9w==}
engines: {node: '>=18.0.0'}
hasBin: true
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
- type@2.7.2:
- resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
+ type@2.7.3:
+ resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
typed-array-buffer@1.0.2:
resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
ufo@1.5.3:
resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
- uglify-js@3.17.4:
- resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
+ uglify-js@3.18.0:
+ resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==}
engines: {node: '>=0.8.0'}
hasBin: true
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
- update-browserslist-db@1.0.13:
- resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ update-browserslist-db@1.0.16:
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
url@0.11.3:
resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==}
- utf-8-validate@6.0.3:
- resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==}
+ utf-8-validate@6.0.4:
+ resolution: {integrity: sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==}
engines: {node: '>=6.14.2'}
util-deprecate@1.0.2:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
- vite-node@1.5.2:
- resolution: {integrity: sha512-Y8p91kz9zU+bWtF7HGt6DVw2JbhyuB2RlZix3FPYAYmUyZ3n7iTp8eSyLyY6sxtPegvxQtmlTMhfPhUfCUF93A==}
+ vite-node@1.6.0:
+ resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
- vite@5.2.10:
- resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==}
+ vite@5.3.1:
+ resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
terser:
optional: true
- vitest@1.5.2:
- resolution: {integrity: sha512-l9gwIkq16ug3xY7BxHwcBQovLZG75zZL0PlsiYQbf76Rz6QGs54416UWMtC0jXeihvHvcHrf2ROEjkQRVpoZYw==}
+ vitest@1.6.0:
+ resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 1.5.2
- '@vitest/ui': 1.5.2
+ '@vitest/browser': 1.6.0
+ '@vitest/ui': 1.6.0
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
vm-browserify@1.1.2:
resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
- vue-component-type-helpers@2.0.14:
- resolution: {integrity: sha512-DInfgOyXlMyliyqAAD9frK28tTfch0+tMi4qoWJcZlRxUf+NFAtraJBnAsKLep+FOyLMiajkhfyEb3xLK08i7w==}
+ vue-component-type-helpers@2.0.21:
+ resolution: {integrity: sha512-3NaicyZ7N4B6cft4bfb7dOnPbE9CjLcx+6wZWAg5zwszfO4qXRh+U52dN5r5ZZfc6iMaxKCEcoH9CmxxoFZHLg==}
- vue-eslint-parser@9.4.2:
- resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
+ vue-eslint-parser@9.4.3:
+ resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
- vue-router@4.3.2:
- resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==}
+ vue-router@4.3.3:
+ resolution: {integrity: sha512-8Q+u+WP4N2SXY38FDcF2H1dUEbYVHVPtPCPZj/GTZx8RCbiB8AtJP9+YIxn4Vs0svMTNQcLIzka4GH7Utkx9xQ==}
peerDependencies:
vue: ^3.2.0
peerDependencies:
vue: ^3.0
- vue@3.4.26:
- resolution: {integrity: sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==}
+ vue@3.4.29:
+ resolution: {integrity: sha512-8QUYfRcYzNlYuzKPfge1UWC6nF9ym0lx7mpGVPJYNhddxEf3DD0+kU07NTL0sXuiT2HuJuKr/iEO8WvXvT0RSQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
- yaml@2.3.4:
- resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
+ yaml@2.4.5:
+ resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
engines: {node: '>= 14'}
+ hasBin: true
yargs-parser@15.0.3:
resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==}
0x@5.7.0:
dependencies:
- ajv: 8.12.0
+ ajv: 8.16.0
browserify: 17.0.0
concat-stream: 2.0.0
d3-fg: 6.14.0
debounce: 1.2.1
- debug: 4.3.4
+ debug: 4.3.5
end-of-stream: 1.4.4
env-string: 1.0.1
escape-string-regexp: 4.0.0
opn: 5.5.0
pump: 3.0.0
pumpify: 2.0.1
- semver: 7.6.0
+ semver: 7.6.2
single-line-log: 1.1.2
split2: 4.2.0
tachyons: 4.12.0
'@assemblyscript/loader@0.19.23': {}
- '@babel/code-frame@7.24.2':
+ '@babel/code-frame@7.24.7':
dependencies:
- '@babel/highlight': 7.24.2
- picocolors: 1.0.0
+ '@babel/highlight': 7.24.7
+ picocolors: 1.0.1
- '@babel/compat-data@7.24.4': {}
+ '@babel/compat-data@7.24.7': {}
- '@babel/core@7.24.4':
+ '@babel/core@7.24.7':
dependencies:
'@ampproject/remapping': 2.3.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/core@7.24.4)
- '@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.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-compilation-targets': 7.24.7
+ '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7)
+ '@babel/helpers': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/template': 7.24.7
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
convert-source-map: 2.0.0
- debug: 4.3.4
+ debug: 4.3.5
gensync: 1.0.0-beta.2
json5: 2.2.3
- semver: 7.6.0
+ semver: 7.6.2
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.24.4':
+ '@babel/generator@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
- '@babel/helper-annotate-as-pure@7.22.5':
+ '@babel/helper-annotate-as-pure@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/helper-compilation-targets@7.23.6':
+ '@babel/helper-compilation-targets@7.24.7':
dependencies:
- '@babel/compat-data': 7.24.4
- '@babel/helper-validator-option': 7.23.5
- browserslist: 4.23.0
+ '@babel/compat-data': 7.24.7
+ '@babel/helper-validator-option': 7.24.7
+ browserslist: 4.23.1
lru-cache: 5.1.1
- semver: 7.6.0
+ semver: 7.6.2
+
+ '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)':
+ dependencies:
+ '@babel/core': 7.24.7
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-function-name': 7.24.7
+ '@babel/helper-member-expression-to-functions': 7.24.7
+ '@babel/helper-optimise-call-expression': 7.24.7
+ '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ semver: 7.6.2
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4)':
+ '@babel/helper-environment-visitor@7.24.7':
dependencies:
- '@babel/core': 7.24.4
- '@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/core@7.24.4)
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- semver: 7.6.0
-
- '@babel/helper-environment-visitor@7.22.20': {}
+ '@babel/types': 7.24.7
- '@babel/helper-function-name@7.23.0':
+ '@babel/helper-function-name@7.24.7':
dependencies:
- '@babel/template': 7.24.0
- '@babel/types': 7.24.0
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
- '@babel/helper-hoist-variables@7.22.5':
+ '@babel/helper-hoist-variables@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/helper-member-expression-to-functions@7.23.0':
+ '@babel/helper-member-expression-to-functions@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
'@babel/helper-module-imports@7.22.15':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/helper-module-imports@7.24.3':
+ '@babel/helper-module-imports@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)':
+ '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)':
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.24.3
- '@babel/helper-simple-access': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/core': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-simple-access': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-optimise-call-expression@7.22.5':
+ '@babel/helper-optimise-call-expression@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/helper-plugin-utils@7.24.0': {}
+ '@babel/helper-plugin-utils@7.24.7': {}
- '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4)':
+ '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)':
dependencies:
- '@babel/core': 7.24.4
- '@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/core': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-member-expression-to-functions': 7.24.7
+ '@babel/helper-optimise-call-expression': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-simple-access@7.22.5':
+ '@babel/helper-simple-access@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-skip-transparent-expression-wrappers@7.22.5':
+ '@babel/helper-skip-transparent-expression-wrappers@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-split-export-declaration@7.22.6':
+ '@babel/helper-split-export-declaration@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/helper-string-parser@7.24.1': {}
+ '@babel/helper-string-parser@7.24.7': {}
- '@babel/helper-validator-identifier@7.22.20': {}
+ '@babel/helper-validator-identifier@7.24.7': {}
- '@babel/helper-validator-option@7.23.5': {}
+ '@babel/helper-validator-option@7.24.7': {}
- '@babel/helpers@7.24.4':
+ '@babel/helpers@7.24.7':
dependencies:
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
- '@babel/types': 7.24.0
- transitivePeerDependencies:
- - supports-color
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
- '@babel/highlight@7.24.2':
+ '@babel/highlight@7.24.7':
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-validator-identifier': 7.24.7
chalk: 2.4.2
js-tokens: 4.0.0
- picocolors: 1.0.0
+ picocolors: 1.0.1
- '@babel/parser@7.24.4':
+ '@babel/parser@7.24.7':
dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
- '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)':
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)':
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-plugin-utils': 7.24.0
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.7
- '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)':
+ '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)':
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-plugin-utils': 7.24.0
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.7
- '@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4)':
+ '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)':
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4)
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4)
+ '@babel/core': 7.24.7
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7)
+ '@babel/helper-plugin-utils': 7.24.7
+ '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/template@7.24.0':
+ '@babel/template@7.24.7':
dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/code-frame': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
- '@babel/traverse@7.24.1':
+ '@babel/traverse@7.24.7':
dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.4
- '@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.4
- '@babel/types': 7.24.0
- debug: 4.3.4
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-function-name': 7.24.7
+ '@babel/helper-hoist-variables': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
+ debug: 4.3.5
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.24.0':
+ '@babel/types@7.24.7':
dependencies:
- '@babel/helper-string-parser': 7.24.1
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-string-parser': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
'@bcoe/v8-coverage@0.2.3': {}
d3-selection: 1.4.2
d3-shape: 1.3.7
d3-time-format: 2.3.0
- debug: 4.3.4
- distributions: 2.1.0
+ debug: 4.3.5
+ distributions: 2.2.0
endpoint: 0.4.5
hidden-markov-model-tf: 4.0.0(@tensorflow/tfjs-core@3.21.0(encoding@0.1.13))
minify-stream: 2.1.0
protocol-buffers: 4.2.0
pump: 3.0.0
pumpify: 2.0.1
- semver: 7.6.0
+ semver: 7.6.2
showdown: 1.9.1
stream-template: 0.0.10
streaming-json-stringify: 3.1.0
'@colors/colors@1.6.0': {}
- '@commitlint/cli@19.3.0(@types/node@20.12.7)(typescript@5.4.5)':
+ '@commitlint/cli@19.3.0(@types/node@20.14.2)(typescript@5.4.5)':
dependencies:
'@commitlint/format': 19.3.0
'@commitlint/lint': 19.2.2
- '@commitlint/load': 19.2.0(@types/node@20.12.7)(typescript@5.4.5)
+ '@commitlint/load': 19.2.0(@types/node@20.14.2)(typescript@5.4.5)
'@commitlint/read': 19.2.1
'@commitlint/types': 19.0.3
execa: 8.0.1
'@commitlint/config-validator@19.0.3':
dependencies:
'@commitlint/types': 19.0.3
- ajv: 8.12.0
+ ajv: 8.16.0
'@commitlint/ensure@19.0.3':
dependencies:
'@commitlint/is-ignored@19.2.2':
dependencies:
'@commitlint/types': 19.0.3
- semver: 7.6.0
+ semver: 7.6.2
'@commitlint/lint@19.2.2':
dependencies:
'@commitlint/rules': 19.0.3
'@commitlint/types': 19.0.3
- '@commitlint/load@19.2.0(@types/node@20.12.7)(typescript@5.4.5)':
+ '@commitlint/load@19.2.0(@types/node@20.14.2)(typescript@5.4.5)':
dependencies:
'@commitlint/config-validator': 19.0.3
'@commitlint/execute-rule': 19.0.0
'@commitlint/types': 19.0.3
chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@5.4.5)
- cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.7)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
+ cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.2)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
'@commitlint/config-validator': 19.0.3
'@commitlint/types': 19.0.3
global-directory: 4.0.1
- import-meta-resolve: 4.0.0
+ import-meta-resolve: 4.1.0
lodash.mergewith: 4.6.2
resolve-from: 5.0.0
enabled: 2.0.0
kuler: 2.0.0
- '@es-joy/jsdoccomment@0.42.0':
+ '@es-joy/jsdoccomment@0.43.1':
dependencies:
+ '@types/eslint': 8.56.10
+ '@types/estree': 1.0.5
+ '@typescript-eslint/types': 7.13.0
comment-parser: 1.4.1
esquery: 1.5.0
jsdoc-type-pratt-parser: 4.0.0
- '@esbuild/aix-ppc64@0.19.12':
- optional: true
-
- '@esbuild/aix-ppc64@0.20.2':
- optional: true
-
- '@esbuild/android-arm64@0.19.12':
- optional: true
-
- '@esbuild/android-arm64@0.20.2':
- optional: true
-
- '@esbuild/android-arm@0.19.12':
- optional: true
-
- '@esbuild/android-arm@0.20.2':
- optional: true
-
- '@esbuild/android-x64@0.19.12':
- optional: true
-
- '@esbuild/android-x64@0.20.2':
- optional: true
-
- '@esbuild/darwin-arm64@0.19.12':
- optional: true
-
- '@esbuild/darwin-arm64@0.20.2':
- optional: true
-
- '@esbuild/darwin-x64@0.19.12':
- optional: true
-
- '@esbuild/darwin-x64@0.20.2':
- optional: true
-
- '@esbuild/freebsd-arm64@0.19.12':
- optional: true
-
- '@esbuild/freebsd-arm64@0.20.2':
- optional: true
-
- '@esbuild/freebsd-x64@0.19.12':
- optional: true
-
- '@esbuild/freebsd-x64@0.20.2':
- optional: true
-
- '@esbuild/linux-arm64@0.19.12':
- optional: true
-
- '@esbuild/linux-arm64@0.20.2':
- optional: true
-
- '@esbuild/linux-arm@0.19.12':
- optional: true
-
- '@esbuild/linux-arm@0.20.2':
- optional: true
-
- '@esbuild/linux-ia32@0.19.12':
+ '@esbuild/aix-ppc64@0.21.5':
optional: true
- '@esbuild/linux-ia32@0.20.2':
+ '@esbuild/android-arm64@0.21.5':
optional: true
- '@esbuild/linux-loong64@0.19.12':
+ '@esbuild/android-arm@0.21.5':
optional: true
- '@esbuild/linux-loong64@0.20.2':
+ '@esbuild/android-x64@0.21.5':
optional: true
- '@esbuild/linux-mips64el@0.19.12':
+ '@esbuild/darwin-arm64@0.21.5':
optional: true
- '@esbuild/linux-mips64el@0.20.2':
+ '@esbuild/darwin-x64@0.21.5':
optional: true
- '@esbuild/linux-ppc64@0.19.12':
+ '@esbuild/freebsd-arm64@0.21.5':
optional: true
- '@esbuild/linux-ppc64@0.20.2':
+ '@esbuild/freebsd-x64@0.21.5':
optional: true
- '@esbuild/linux-riscv64@0.19.12':
+ '@esbuild/linux-arm64@0.21.5':
optional: true
- '@esbuild/linux-riscv64@0.20.2':
+ '@esbuild/linux-arm@0.21.5':
optional: true
- '@esbuild/linux-s390x@0.19.12':
+ '@esbuild/linux-ia32@0.21.5':
optional: true
- '@esbuild/linux-s390x@0.20.2':
+ '@esbuild/linux-loong64@0.21.5':
optional: true
- '@esbuild/linux-x64@0.19.12':
+ '@esbuild/linux-mips64el@0.21.5':
optional: true
- '@esbuild/linux-x64@0.20.2':
+ '@esbuild/linux-ppc64@0.21.5':
optional: true
- '@esbuild/netbsd-x64@0.19.12':
+ '@esbuild/linux-riscv64@0.21.5':
optional: true
- '@esbuild/netbsd-x64@0.20.2':
+ '@esbuild/linux-s390x@0.21.5':
optional: true
- '@esbuild/openbsd-x64@0.19.12':
+ '@esbuild/linux-x64@0.21.5':
optional: true
- '@esbuild/openbsd-x64@0.20.2':
+ '@esbuild/netbsd-x64@0.21.5':
optional: true
- '@esbuild/sunos-x64@0.19.12':
+ '@esbuild/openbsd-x64@0.21.5':
optional: true
- '@esbuild/sunos-x64@0.20.2':
+ '@esbuild/sunos-x64@0.21.5':
optional: true
- '@esbuild/win32-arm64@0.19.12':
+ '@esbuild/win32-arm64@0.21.5':
optional: true
- '@esbuild/win32-arm64@0.20.2':
+ '@esbuild/win32-ia32@0.21.5':
optional: true
- '@esbuild/win32-ia32@0.19.12':
- optional: true
-
- '@esbuild/win32-ia32@0.20.2':
- optional: true
-
- '@esbuild/win32-x64@0.19.12':
- optional: true
-
- '@esbuild/win32-x64@0.20.2':
+ '@esbuild/win32-x64@0.21.5':
optional: true
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
eslint: 8.57.0
eslint-visitor-keys: 3.4.3
- '@eslint-community/regexpp@4.10.0': {}
+ '@eslint-community/regexpp@4.10.1': {}
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.4
+ debug: 4.3.5
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.4
+ debug: 4.3.5
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@iarna/toml@2.2.5': {}
- '@inquirer/figures@1.0.1': {}
+ '@inquirer/figures@1.0.3': {}
'@isaacs/cliui@8.0.2':
dependencies:
'@isaacs/fs-minipass@4.0.1':
dependencies:
- minipass: 7.0.4
+ minipass: 7.1.2
'@istanbuljs/schema@0.1.3': {}
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
'@types/yargs': 17.0.32
chalk: 4.1.2
dependencies:
call-bind: 1.0.7
- '@microsoft/tsdoc-config@0.16.2':
+ '@microsoft/tsdoc-config@0.17.0':
dependencies:
- '@microsoft/tsdoc': 0.14.2
- ajv: 6.12.6
+ '@microsoft/tsdoc': 0.15.0
+ ajv: 8.12.0
jju: 1.4.0
- resolve: 1.19.0
+ resolve: 1.22.8
- '@microsoft/tsdoc@0.14.2': {}
+ '@microsoft/tsdoc@0.15.0': {}
- '@mikro-orm/cli@6.2.3':
+ '@mikro-orm/cli@6.2.9(mariadb@3.3.0)':
dependencies:
'@jercle/yargonaut': 1.1.5
- '@mikro-orm/core': 6.2.3
- '@mikro-orm/knex': 6.2.3(@mikro-orm/core@6.2.3)(sqlite3@5.1.7)
+ '@mikro-orm/core': 6.2.9
+ '@mikro-orm/knex': 6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)(sqlite3@5.1.7)
fs-extra: 11.2.0
tsconfig-paths: 4.2.0
yargs: 17.7.2
transitivePeerDependencies:
- better-sqlite3
+ - libsql
+ - mariadb
- mysql
- mysql2
- pg
- supports-color
- tedious
- '@mikro-orm/core@6.2.3':
+ '@mikro-orm/core@6.2.9':
dependencies:
dataloader: 2.2.2
dotenv: 16.4.5
esprima: 4.0.1
fs-extra: 11.2.0
globby: 11.1.0
- mikro-orm: 6.2.3
+ mikro-orm: 6.2.9
reflect-metadata: 0.2.2
- '@mikro-orm/knex@6.2.3(@mikro-orm/core@6.2.3)(sqlite3@5.1.7)':
+ '@mikro-orm/knex@6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)(sqlite3@5.1.7)':
dependencies:
- '@mikro-orm/core': 6.2.3
+ '@mikro-orm/core': 6.2.9
fs-extra: 11.2.0
knex: 3.1.0(sqlite3@5.1.7)
sqlstring: 2.3.3
+ optionalDependencies:
+ mariadb: 3.3.0
transitivePeerDependencies:
- - better-sqlite3
- mysql
- mysql2
- pg
- supports-color
- tedious
- '@mikro-orm/mariadb@6.2.3(@mikro-orm/core@6.2.3)':
+ '@mikro-orm/mariadb@6.2.9(@mikro-orm/core@6.2.9)':
dependencies:
- '@mikro-orm/core': 6.2.3
- '@mikro-orm/knex': 6.2.3(@mikro-orm/core@6.2.3)(sqlite3@5.1.7)
+ '@mikro-orm/core': 6.2.9
+ '@mikro-orm/knex': 6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)(sqlite3@5.1.7)
mariadb: 3.3.0
transitivePeerDependencies:
- better-sqlite3
+ - libsql
- mysql
- mysql2
- pg
- supports-color
- tedious
- '@mikro-orm/reflection@6.2.3(@mikro-orm/core@6.2.3)':
+ '@mikro-orm/reflection@6.2.9(@mikro-orm/core@6.2.9)':
dependencies:
- '@mikro-orm/core': 6.2.3
+ '@mikro-orm/core': 6.2.9
globby: 11.1.0
ts-morph: 22.0.0
- '@mikro-orm/sqlite@6.2.3(@mikro-orm/core@6.2.3)':
+ '@mikro-orm/sqlite@6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)':
dependencies:
- '@mikro-orm/core': 6.2.3
- '@mikro-orm/knex': 6.2.3(@mikro-orm/core@6.2.3)(sqlite3@5.1.7)
+ '@mikro-orm/core': 6.2.9
+ '@mikro-orm/knex': 6.2.9(@mikro-orm/core@6.2.9)(mariadb@3.3.0)(sqlite3@5.1.7)
fs-extra: 11.2.0
sqlite3: 5.1.7
sqlstring-sqlite: 0.1.1
transitivePeerDependencies:
- better-sqlite3
- bluebird
+ - libsql
+ - mariadb
- mysql
- mysql2
- pg
- supports-color
- tedious
- '@mongodb-js/saslprep@1.1.5':
+ '@mongodb-js/saslprep@1.1.7':
dependencies:
sparse-bitfield: 3.0.3
'@npmcli/fs@1.1.1':
dependencies:
'@gar/promisify': 1.1.3
- semver: 7.6.0
+ semver: 7.6.2
optional: true
'@npmcli/move-file@1.1.2':
'@octokit/graphql': 7.1.0
'@octokit/request': 8.4.0
'@octokit/request-error': 5.1.0
- '@octokit/types': 13.4.1
+ '@octokit/types': 13.5.0
before-after-hook: 2.2.3
universal-user-agent: 6.0.1
'@octokit/endpoint@9.0.5':
dependencies:
- '@octokit/types': 13.4.1
+ '@octokit/types': 13.5.0
universal-user-agent: 6.0.1
'@octokit/graphql@7.1.0':
dependencies:
'@octokit/request': 8.4.0
- '@octokit/types': 13.4.1
+ '@octokit/types': 13.5.0
universal-user-agent: 6.0.1
- '@octokit/openapi-types@20.0.0': {}
+ '@octokit/openapi-types@22.2.0': {}
- '@octokit/openapi-types@22.1.0': {}
-
- '@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0)':
+ '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)':
dependencies:
'@octokit/core': 5.2.0
- '@octokit/types': 12.6.0
+ '@octokit/types': 13.5.0
'@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)':
dependencies:
'@octokit/core': 5.2.0
- '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)':
+ '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)':
dependencies:
'@octokit/core': 5.2.0
- '@octokit/types': 12.6.0
+ '@octokit/types': 13.5.0
'@octokit/request-error@5.1.0':
dependencies:
- '@octokit/types': 13.4.1
+ '@octokit/types': 13.5.0
deprecation: 2.3.1
once: 1.4.0
dependencies:
'@octokit/endpoint': 9.0.5
'@octokit/request-error': 5.1.0
- '@octokit/types': 13.4.1
+ '@octokit/types': 13.5.0
universal-user-agent: 6.0.1
- '@octokit/rest@20.1.0':
+ '@octokit/rest@20.1.1':
dependencies:
'@octokit/core': 5.2.0
- '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0)
+ '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0)
'@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0)
- '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0)
-
- '@octokit/types@12.6.0':
- dependencies:
- '@octokit/openapi-types': 20.0.0
+ '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0)
- '@octokit/types@13.4.1':
+ '@octokit/types@13.5.0':
dependencies:
- '@octokit/openapi-types': 22.1.0
+ '@octokit/openapi-types': 22.2.0
'@one-ini/wasm@0.1.1': {}
'@pnpm/network.ca-file': 1.0.2
config-chain: 1.1.13
- '@release-it/bumper@6.0.1(release-it@17.2.1(typescript@5.4.5))':
+ '@release-it/bumper@6.0.1(release-it@17.3.0(typescript@5.4.5))':
dependencies:
'@iarna/toml': 2.2.5
detect-indent: 7.0.1
fast-glob: 3.3.2
- ini: 4.1.2
+ ini: 4.1.3
js-yaml: 4.1.0
lodash-es: 4.17.21
- release-it: 17.2.1(typescript@5.4.5)
- semver: 7.6.0
+ release-it: 17.3.0(typescript@5.4.5)
+ semver: 7.6.2
- '@rollup/rollup-android-arm-eabi@4.17.1':
+ '@rollup/rollup-android-arm-eabi@4.18.0':
optional: true
- '@rollup/rollup-android-arm64@4.17.1':
+ '@rollup/rollup-android-arm64@4.18.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.17.1':
+ '@rollup/rollup-darwin-arm64@4.18.0':
optional: true
- '@rollup/rollup-darwin-x64@4.17.1':
+ '@rollup/rollup-darwin-x64@4.18.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.17.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.17.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.18.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.17.1':
+ '@rollup/rollup-linux-arm64-gnu@4.18.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.17.1':
+ '@rollup/rollup-linux-arm64-musl@4.18.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.17.1':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.17.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.18.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.17.1':
+ '@rollup/rollup-linux-s390x-gnu@4.18.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.17.1':
+ '@rollup/rollup-linux-x64-gnu@4.18.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.17.1':
+ '@rollup/rollup-linux-x64-musl@4.18.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.17.1':
+ '@rollup/rollup-win32-arm64-msvc@4.18.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.17.1':
+ '@rollup/rollup-win32-ia32-msvc@4.18.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.17.1':
+ '@rollup/rollup-win32-x64-msvc@4.18.0':
optional: true
- '@rushstack/eslint-patch@1.10.2': {}
+ '@rushstack/eslint-patch@1.10.3': {}
'@sinclair/typebox@0.27.8': {}
'@types/conventional-commits-parser@5.0.0':
dependencies:
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
+
+ '@types/eslint@8.56.10':
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/json-schema': 7.0.15
'@types/estree@1.0.5': {}
dependencies:
'@types/istanbul-lib-report': 3.0.3
- '@types/jsdom@21.1.6':
+ '@types/jsdom@21.1.7':
dependencies:
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
'@types/tough-cookie': 4.0.5
parse5: 7.1.2
'@types/long@4.0.2': {}
- '@types/node@20.12.7':
+ '@types/node@20.14.2':
dependencies:
undici-types: 5.26.5
'@types/webidl-conversions@7.0.3': {}
- '@types/whatwg-url@11.0.4':
+ '@types/whatwg-url@11.0.5':
dependencies:
'@types/webidl-conversions': 7.0.3
'@types/ws@8.5.10':
dependencies:
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
'@types/yargs-parser@21.0.3': {}
dependencies:
'@types/yargs-parser': 21.0.3
- '@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
- '@eslint-community/regexpp': 4.10.0
- '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/scope-manager': 7.7.1
- '@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/visitor-keys': 7.7.1
- debug: 4.3.4
+ '@eslint-community/regexpp': 4.10.1
+ '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/scope-manager': 7.13.0
+ '@typescript-eslint/type-utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 7.13.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
- semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/scope-manager': 7.7.1
- '@typescript-eslint/types': 7.7.1
- '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
- '@typescript-eslint/visitor-keys': 7.7.1
- debug: 4.3.4
+ '@typescript-eslint/scope-manager': 7.13.0
+ '@typescript-eslint/types': 7.13.0
+ '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 7.13.0
+ debug: 4.3.5
eslint: 8.57.0
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@7.7.1':
+ '@typescript-eslint/scope-manager@7.13.0':
dependencies:
- '@typescript-eslint/types': 7.7.1
- '@typescript-eslint/visitor-keys': 7.7.1
+ '@typescript-eslint/types': 7.13.0
+ '@typescript-eslint/visitor-keys': 7.13.0
- '@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/type-utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
- '@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
- debug: 4.3.4
+ '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5)
+ '@typescript-eslint/utils': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
+ debug: 4.3.5
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@7.7.1': {}
+ '@typescript-eslint/types@7.13.0': {}
- '@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5)':
+ '@typescript-eslint/typescript-estree@7.13.0(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/types': 7.7.1
- '@typescript-eslint/visitor-keys': 7.7.1
- debug: 4.3.4
+ '@typescript-eslint/types': 7.13.0
+ '@typescript-eslint/visitor-keys': 7.13.0
+ debug: 4.3.5
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
- semver: 7.6.0
+ semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/utils@7.13.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 7.7.1
- '@typescript-eslint/types': 7.7.1
- '@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
+ '@typescript-eslint/scope-manager': 7.13.0
+ '@typescript-eslint/types': 7.13.0
+ '@typescript-eslint/typescript-estree': 7.13.0(typescript@5.4.5)
eslint: 8.57.0
- semver: 7.6.0
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/visitor-keys@7.7.1':
+ '@typescript-eslint/visitor-keys@7.13.0':
dependencies:
- '@typescript-eslint/types': 7.7.1
+ '@typescript-eslint/types': 7.13.0
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
- '@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.10(@types/node@20.12.7)(terser@4.8.1))(vue@3.4.26(typescript@5.4.5))':
+ '@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.1(@types/node@20.14.2))(vue@3.4.29(typescript@5.4.5))':
dependencies:
- '@babel/core': 7.24.4
- '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4)
- '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.4)
- vite: 5.2.10(@types/node@20.12.7)(terser@4.8.1)
- vue: 3.4.26(typescript@5.4.5)
+ '@babel/core': 7.24.7
+ '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7)
+ '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7)
+ vite: 5.3.1(@types/node@20.14.2)
+ vue: 3.4.29(typescript@5.4.5)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@5.0.4(vite@5.2.10(@types/node@20.12.7)(terser@4.8.1))(vue@3.4.26(typescript@5.4.5))':
+ '@vitejs/plugin-vue@5.0.5(vite@5.3.1(@types/node@20.14.2))(vue@3.4.29(typescript@5.4.5))':
dependencies:
- vite: 5.2.10(@types/node@20.12.7)(terser@4.8.1)
- vue: 3.4.26(typescript@5.4.5)
+ vite: 5.3.1(@types/node@20.14.2)
+ vue: 3.4.29(typescript@5.4.5)
- '@vitest/coverage-v8@1.5.2(vitest@1.5.2(@types/node@20.12.7)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@4.8.1))':
+ '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.2)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
- debug: 4.3.4
+ debug: 4.3.5
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.4
istanbul-reports: 3.1.7
magic-string: 0.30.10
magicast: 0.3.4
- picocolors: 1.0.0
+ picocolors: 1.0.1
std-env: 3.7.0
strip-literal: 2.1.0
test-exclude: 6.0.0
- vitest: 1.5.2(@types/node@20.12.7)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@4.8.1)
+ vitest: 1.6.0(@types/node@20.14.2)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))
transitivePeerDependencies:
- supports-color
- '@vitest/expect@1.5.2':
+ '@vitest/expect@1.6.0':
dependencies:
- '@vitest/spy': 1.5.2
- '@vitest/utils': 1.5.2
+ '@vitest/spy': 1.6.0
+ '@vitest/utils': 1.6.0
chai: 4.4.1
- '@vitest/runner@1.5.2':
+ '@vitest/runner@1.6.0':
dependencies:
- '@vitest/utils': 1.5.2
+ '@vitest/utils': 1.6.0
p-limit: 5.0.0
pathe: 1.1.2
- '@vitest/snapshot@1.5.2':
+ '@vitest/snapshot@1.6.0':
dependencies:
magic-string: 0.30.10
pathe: 1.1.2
pretty-format: 29.7.0
- '@vitest/spy@1.5.2':
+ '@vitest/spy@1.6.0':
dependencies:
tinyspy: 2.2.1
- '@vitest/utils@1.5.2':
+ '@vitest/utils@1.6.0':
dependencies:
diff-sequences: 29.6.3
estree-walker: 3.0.3
'@vue/babel-helper-vue-transform-on@1.2.2': {}
- '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.4)':
+ '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.7)':
dependencies:
'@babel/helper-module-imports': 7.22.15
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4)
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
- '@babel/types': 7.24.0
+ '@babel/helper-plugin-utils': 7.24.7
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7)
+ '@babel/template': 7.24.7
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
'@vue/babel-helper-vue-transform-on': 1.2.2
- '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.4)
+ '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.7)
camelcase: 6.3.0
html-tags: 3.3.1
svg-tags: 1.0.0
optionalDependencies:
- '@babel/core': 7.24.4
+ '@babel/core': 7.24.7
transitivePeerDependencies:
- supports-color
- '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.4)':
+ '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.7)':
dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/core': 7.24.4
+ '@babel/code-frame': 7.24.7
+ '@babel/core': 7.24.7
'@babel/helper-module-imports': 7.22.15
- '@babel/helper-plugin-utils': 7.24.0
- '@babel/parser': 7.24.4
- '@vue/compiler-sfc': 3.4.26
+ '@babel/helper-plugin-utils': 7.24.7
+ '@babel/parser': 7.24.7
+ '@vue/compiler-sfc': 3.4.29
- '@vue/compiler-core@3.4.26':
+ '@vue/compiler-core@3.4.29':
dependencies:
- '@babel/parser': 7.24.4
- '@vue/shared': 3.4.26
+ '@babel/parser': 7.24.7
+ '@vue/shared': 3.4.29
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.0
- '@vue/compiler-dom@3.4.26':
+ '@vue/compiler-dom@3.4.29':
dependencies:
- '@vue/compiler-core': 3.4.26
- '@vue/shared': 3.4.26
+ '@vue/compiler-core': 3.4.29
+ '@vue/shared': 3.4.29
- '@vue/compiler-sfc@3.4.26':
+ '@vue/compiler-sfc@3.4.29':
dependencies:
- '@babel/parser': 7.24.4
- '@vue/compiler-core': 3.4.26
- '@vue/compiler-dom': 3.4.26
- '@vue/compiler-ssr': 3.4.26
- '@vue/shared': 3.4.26
+ '@babel/parser': 7.24.7
+ '@vue/compiler-core': 3.4.29
+ '@vue/compiler-dom': 3.4.29
+ '@vue/compiler-ssr': 3.4.29
+ '@vue/shared': 3.4.29
estree-walker: 2.0.2
magic-string: 0.30.10
postcss: 8.4.38
source-map-js: 1.2.0
- '@vue/compiler-ssr@3.4.26':
+ '@vue/compiler-ssr@3.4.29':
dependencies:
- '@vue/compiler-dom': 3.4.26
- '@vue/shared': 3.4.26
+ '@vue/compiler-dom': 3.4.29
+ '@vue/shared': 3.4.29
- '@vue/devtools-api@6.6.1': {}
+ '@vue/devtools-api@6.6.3': {}
- '@vue/eslint-config-prettier@9.0.0(eslint@8.57.0)(prettier@3.2.5)':
+ '@vue/eslint-config-prettier@9.0.0(@types/eslint@8.56.10)(eslint@8.57.0)(prettier@3.3.2)':
dependencies:
eslint: 8.57.0
eslint-config-prettier: 9.1.0(eslint@8.57.0)
- eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5)
- prettier: 3.2.5
+ eslint-plugin-prettier: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2)
+ prettier: 3.3.2
transitivePeerDependencies:
- '@types/eslint'
- '@vue/eslint-config-typescript@13.0.0(eslint-plugin-vue@9.25.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)':
+ '@vue/eslint-config-typescript@13.0.0(eslint-plugin-vue@9.26.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
- eslint-plugin-vue: 9.25.0(eslint@8.57.0)
- vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ eslint-plugin-vue: 9.26.0(eslint@8.57.0)
+ vue-eslint-parser: 9.4.3(eslint@8.57.0)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@vue/reactivity@3.4.26':
+ '@vue/reactivity@3.4.29':
dependencies:
- '@vue/shared': 3.4.26
+ '@vue/shared': 3.4.29
- '@vue/runtime-core@3.4.26':
+ '@vue/runtime-core@3.4.29':
dependencies:
- '@vue/reactivity': 3.4.26
- '@vue/shared': 3.4.26
+ '@vue/reactivity': 3.4.29
+ '@vue/shared': 3.4.29
- '@vue/runtime-dom@3.4.26':
+ '@vue/runtime-dom@3.4.29':
dependencies:
- '@vue/runtime-core': 3.4.26
- '@vue/shared': 3.4.26
+ '@vue/reactivity': 3.4.29
+ '@vue/runtime-core': 3.4.29
+ '@vue/shared': 3.4.29
csstype: 3.1.3
- '@vue/server-renderer@3.4.26(vue@3.4.26(typescript@5.4.5))':
+ '@vue/server-renderer@3.4.29(vue@3.4.29(typescript@5.4.5))':
dependencies:
- '@vue/compiler-ssr': 3.4.26
- '@vue/shared': 3.4.26
- vue: 3.4.26(typescript@5.4.5)
+ '@vue/compiler-ssr': 3.4.29
+ '@vue/shared': 3.4.29
+ vue: 3.4.29(typescript@5.4.5)
- '@vue/shared@3.4.26': {}
+ '@vue/shared@3.4.29': {}
- '@vue/test-utils@2.4.5':
+ '@vue/test-utils@2.4.6':
dependencies:
js-beautify: 1.15.1
- vue-component-type-helpers: 2.0.14
+ vue-component-type-helpers: 2.0.21
'@vue/tsconfig@0.5.1': {}
dependencies:
event-target-shim: 5.0.1
- acorn-jsx@5.3.2(acorn@8.11.3):
+ acorn-jsx@5.3.2(acorn@8.12.0):
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.0
acorn-node@1.8.2:
dependencies:
acorn-walk@7.2.0: {}
- acorn-walk@8.3.2: {}
+ acorn-walk@8.3.3:
+ dependencies:
+ acorn: 8.12.0
acorn@7.4.1: {}
- acorn@8.11.3: {}
+ acorn@8.12.0: {}
agent-base@6.0.2:
dependencies:
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
optional: true
agent-base@7.1.1:
dependencies:
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
clean-stack: 2.2.0
indent-string: 4.0.0
- ajv-formats@2.1.1(ajv@8.12.0):
+ ajv-formats@2.1.1(ajv@8.16.0):
optionalDependencies:
- ajv: 8.12.0
+ ajv: 8.16.0
- ajv-formats@3.0.1(ajv@8.12.0):
+ ajv-formats@3.0.1(ajv@8.16.0):
optionalDependencies:
- ajv: 8.12.0
+ ajv: 8.16.0
ajv@6.12.6:
dependencies:
require-from-string: 2.0.2
uri-js: 4.4.1
+ ajv@8.16.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
ast-types@0.13.4:
dependencies:
- tslib: 2.6.2
+ tslib: 2.6.3
async-retry@1.3.3:
dependencies:
handlebars: 4.7.8
node-fetch: 2.7.0(encoding@0.1.13)
parse-github-url: 1.0.2
- semver: 7.6.0
+ semver: 7.6.2
transitivePeerDependencies:
- encoding
dependencies:
chalk: 4.1.2
char-spinner: 1.0.1
- cli-table3: 0.6.4
+ cli-table3: 0.6.5
color-support: 1.1.3
cross-argv: 2.0.0
form-data: 4.0.0
progress: 2.0.3
reinterval: 1.1.0
retimer: 3.0.0
- semver: 7.6.0
+ semver: 7.6.2
subarg: 1.0.0
timestring: 6.0.0
aws-sign2@0.7.0: {}
- aws4@1.12.0: {}
+ aws4@1.13.0: {}
b4a@1.6.6: {}
dependencies:
balanced-match: 1.0.2
- braces@3.0.2:
+ braces@3.0.3:
dependencies:
- fill-range: 7.0.1
+ fill-range: 7.1.1
brfs@2.0.2:
dependencies:
vm-browserify: 1.1.2
xtend: 4.0.2
- browserslist@4.23.0:
+ browserslist@4.23.1:
dependencies:
- caniuse-lite: 1.0.30001614
- electron-to-chromium: 1.4.750
+ caniuse-lite: 1.0.30001634
+ electron-to-chromium: 1.4.802
node-releases: 2.0.14
- update-browserslist-db: 1.0.13(browserslist@4.23.0)
+ update-browserslist-db: 1.0.16(browserslist@4.23.1)
- bson@6.6.0: {}
+ bson@6.7.0: {}
buffer-equal@0.0.1: {}
bufferutil@4.0.8:
dependencies:
- node-gyp-build: 4.8.0
+ node-gyp-build: 4.8.1
optional: true
- builtin-modules@3.3.0: {}
-
builtin-status-codes@3.0.0: {}
bundle-name@4.1.0:
dependencies:
run-applescript: 7.0.0
- c8@9.1.0:
+ c8@10.1.2:
dependencies:
'@bcoe/v8-coverage': 0.2.3
'@istanbuljs/schema': 0.1.3
find-up: 5.0.0
- foreground-child: 3.1.1
+ foreground-child: 3.2.0
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-reports: 3.1.7
- test-exclude: 6.0.0
+ test-exclude: 7.0.1
v8-to-istanbul: 9.2.0
yargs: 17.7.2
yargs-parser: 21.1.1
camelcase@7.0.1: {}
- caniuse-lite@1.0.30001614: {}
+ caniuse-lite@1.0.30001634: {}
caseless@0.12.0: {}
- cephes@1.2.0: {}
+ cephes@2.0.0: {}
chai@4.4.1:
dependencies:
assertion-error: 1.1.0
check-error: 1.0.3
- deep-eql: 4.1.3
+ deep-eql: 4.1.4
get-func-name: 2.0.2
loupe: 2.3.7
pathval: 1.1.1
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
- braces: 3.0.2
+ braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
cli-spinners@2.9.2: {}
- cli-table3@0.6.4:
+ cli-table3@0.6.5:
dependencies:
string-width: 4.2.3
optionalDependencies:
commander@10.0.1: {}
- commander@11.1.0: {}
+ commander@12.1.0: {}
commander@2.20.3: {}
conf@10.2.0:
dependencies:
- ajv: 8.12.0
- ajv-formats: 2.1.1(ajv@8.12.0)
+ ajv: 8.16.0
+ ajv-formats: 2.1.1(ajv@8.16.0)
atomically: 1.7.0
debounce-fn: 4.0.0
dot-prop: 6.0.1
json-schema-typed: 7.0.3
onetime: 5.1.2
pkg-up: 3.1.0
- semver: 7.6.0
+ semver: 7.6.2
confbox@0.1.7: {}
core-util-is@1.0.3: {}
- cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.7)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
+ cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.2)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
dependencies:
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
cosmiconfig: 9.0.0(typescript@5.4.5)
- jiti: 1.21.0
+ jiti: 1.21.6
typescript: 5.4.5
cosmiconfig@9.0.0(typescript@5.4.5):
d@1.0.2:
dependencies:
es5-ext: 0.10.64
- type: 2.7.2
+ type: 2.7.3
dargs@7.0.0: {}
dependencies:
ms: 2.1.2
+ debug@4.3.5:
+ dependencies:
+ ms: 2.1.2
+
decamelize@1.2.0: {}
decimal.js@10.4.3: {}
dependencies:
mimic-response: 3.1.0
- deep-eql@4.1.3:
+ deep-eql@4.1.4:
dependencies:
type-detect: 4.0.8
dependencies:
path-type: 4.0.0
- distributions@2.1.0:
+ distributions@2.2.0:
dependencies:
- cephes: 1.2.0
+ cephes: 2.0.0
doctrine@2.1.0:
dependencies:
'@one-ini/wasm': 0.1.1
commander: 10.0.1
minimatch: 9.0.1
- semver: 7.6.0
+ semver: 7.6.2
ee-first@1.1.1: {}
- electron-to-chromium@1.4.750: {}
+ electron-to-chromium@1.4.802: {}
elliptic@6.5.5:
dependencies:
dependencies:
inherits: 2.0.4
- enhanced-resolve@5.16.0:
+ enhanced-resolve@5.17.0:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
function.prototype.name: 1.1.6
get-intrinsic: 1.2.4
get-symbol-description: 1.0.2
- globalthis: 1.0.3
+ globalthis: 1.0.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
has-proto: 1.0.3
es6-iterator: 2.0.3
es6-symbol: 3.1.4
event-emitter: 0.3.5
- type: 2.7.2
+ type: 2.7.3
es6-symbol@3.1.4:
dependencies:
d: 1.0.2
ext: 1.7.0
- esbuild-plugin-clean@1.0.1(esbuild@0.20.2):
+ esbuild-plugin-clean@1.0.1(esbuild@0.21.5):
dependencies:
chalk: 4.1.2
del: 6.1.1
- esbuild: 0.20.2
+ esbuild: 0.21.5
- esbuild-plugin-copy@2.1.1(esbuild@0.20.2):
+ esbuild-plugin-copy@2.1.1(esbuild@0.21.5):
dependencies:
chalk: 4.1.2
chokidar: 3.6.0
- esbuild: 0.20.2
+ esbuild: 0.21.5
fs-extra: 10.1.0
globby: 11.1.0
- esbuild@0.19.12:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.19.12
- '@esbuild/android-arm': 0.19.12
- '@esbuild/android-arm64': 0.19.12
- '@esbuild/android-x64': 0.19.12
- '@esbuild/darwin-arm64': 0.19.12
- '@esbuild/darwin-x64': 0.19.12
- '@esbuild/freebsd-arm64': 0.19.12
- '@esbuild/freebsd-x64': 0.19.12
- '@esbuild/linux-arm': 0.19.12
- '@esbuild/linux-arm64': 0.19.12
- '@esbuild/linux-ia32': 0.19.12
- '@esbuild/linux-loong64': 0.19.12
- '@esbuild/linux-mips64el': 0.19.12
- '@esbuild/linux-ppc64': 0.19.12
- '@esbuild/linux-riscv64': 0.19.12
- '@esbuild/linux-s390x': 0.19.12
- '@esbuild/linux-x64': 0.19.12
- '@esbuild/netbsd-x64': 0.19.12
- '@esbuild/openbsd-x64': 0.19.12
- '@esbuild/sunos-x64': 0.19.12
- '@esbuild/win32-arm64': 0.19.12
- '@esbuild/win32-ia32': 0.19.12
- '@esbuild/win32-x64': 0.19.12
-
- esbuild@0.20.2:
+ esbuild@0.21.5:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.20.2
- '@esbuild/android-arm': 0.20.2
- '@esbuild/android-arm64': 0.20.2
- '@esbuild/android-x64': 0.20.2
- '@esbuild/darwin-arm64': 0.20.2
- '@esbuild/darwin-x64': 0.20.2
- '@esbuild/freebsd-arm64': 0.20.2
- '@esbuild/freebsd-x64': 0.20.2
- '@esbuild/linux-arm': 0.20.2
- '@esbuild/linux-arm64': 0.20.2
- '@esbuild/linux-ia32': 0.20.2
- '@esbuild/linux-loong64': 0.20.2
- '@esbuild/linux-mips64el': 0.20.2
- '@esbuild/linux-ppc64': 0.20.2
- '@esbuild/linux-riscv64': 0.20.2
- '@esbuild/linux-s390x': 0.20.2
- '@esbuild/linux-x64': 0.20.2
- '@esbuild/netbsd-x64': 0.20.2
- '@esbuild/openbsd-x64': 0.20.2
- '@esbuild/sunos-x64': 0.20.2
- '@esbuild/win32-arm64': 0.20.2
- '@esbuild/win32-ia32': 0.20.2
- '@esbuild/win32-x64': 0.20.2
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
escalade@3.1.2: {}
optionalDependencies:
source-map: 0.6.1
- eslint-compat-utils@0.5.0(eslint@8.57.0):
+ eslint-compat-utils@0.5.1(eslint@8.57.0):
dependencies:
eslint: 8.57.0
- semver: 7.6.0
+ semver: 7.6.2
- eslint-config-love@47.0.0(@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.3.1(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5):
+ eslint-config-love@47.0.0(@typescript-eslint/eslint-plugin@7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.9.0(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5):
dependencies:
- '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/eslint-plugin': 7.13.0(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- eslint-plugin-n: 17.3.1(eslint@8.57.0)
- eslint-plugin-promise: 6.1.1(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-plugin-n: 17.9.0(eslint@8.57.0)
+ eslint-plugin-promise: 6.2.0(eslint@8.57.0)
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
dependencies:
eslint: 8.57.0
- eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.3.1(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0):
+ eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-n@17.9.0(eslint@8.57.0))(eslint-plugin-promise@6.2.0(eslint@8.57.0))(eslint@8.57.0):
dependencies:
eslint: 8.57.0
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- eslint-plugin-n: 17.3.1(eslint@8.57.0)
- eslint-plugin-promise: 6.1.1(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-plugin-n: 17.9.0(eslint@8.57.0)
+ eslint-plugin-promise: 6.2.0(eslint@8.57.0)
eslint-define-config@2.1.0: {}
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0):
+ eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0):
dependencies:
- debug: 4.3.4
- enhanced-resolve: 5.16.0
+ debug: 4.3.5
+ enhanced-resolve: 5.17.0
eslint: 8.57.0
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
- get-tsconfig: 4.7.3
+ get-tsconfig: 4.7.5
is-core-module: 2.13.1
is-glob: 4.0.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
+ eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-es-x@7.6.0(eslint@8.57.0):
+ eslint-plugin-es-x@7.7.0(eslint@8.57.0):
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint-community/regexpp': 4.10.0
+ '@eslint-community/regexpp': 4.10.1
eslint: 8.57.0
- eslint-compat-utils: 0.5.0(eslint@8.57.0)
+ eslint-compat-utils: 0.5.1(eslint@8.57.0)
- eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.13.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
object.fromentries: 2.0.8
object.groupby: 1.0.3
object.values: 1.2.0
- semver: 7.6.0
+ semver: 7.6.2
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 7.13.0(eslint@8.57.0)(typescript@5.4.5)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsdoc@48.2.3(eslint@8.57.0):
+ eslint-plugin-jsdoc@48.2.12(eslint@8.57.0):
dependencies:
- '@es-joy/jsdoccomment': 0.42.0
+ '@es-joy/jsdoccomment': 0.43.1
are-docs-informative: 0.0.2
comment-parser: 1.4.1
- debug: 4.3.4
+ debug: 4.3.5
escape-string-regexp: 4.0.0
eslint: 8.57.0
esquery: 1.5.0
- is-builtin-module: 3.2.1
- semver: 7.6.0
+ semver: 7.6.2
spdx-expression-parse: 4.0.0
transitivePeerDependencies:
- supports-color
- eslint-plugin-n@17.3.1(eslint@8.57.0):
+ eslint-plugin-n@17.9.0(eslint@8.57.0):
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- enhanced-resolve: 5.16.0
+ enhanced-resolve: 5.17.0
eslint: 8.57.0
- eslint-plugin-es-x: 7.6.0(eslint@8.57.0)
- get-tsconfig: 4.7.3
- globals: 15.1.0
+ eslint-plugin-es-x: 7.7.0(eslint@8.57.0)
+ get-tsconfig: 4.7.5
+ globals: 15.4.0
ignore: 5.3.1
minimatch: 9.0.4
- semver: 7.6.0
+ semver: 7.6.2
- eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5):
+ eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2):
dependencies:
eslint: 8.57.0
- prettier: 3.2.5
+ prettier: 3.3.2
prettier-linter-helpers: 1.0.0
synckit: 0.8.8
optionalDependencies:
+ '@types/eslint': 8.56.10
eslint-config-prettier: 9.1.0(eslint@8.57.0)
- eslint-plugin-promise@6.1.1(eslint@8.57.0):
+ eslint-plugin-promise@6.2.0(eslint@8.57.0):
dependencies:
eslint: 8.57.0
dependencies:
eslint: 8.57.0
- eslint-plugin-tsdoc@0.2.17:
+ eslint-plugin-tsdoc@0.3.0:
dependencies:
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
+ '@microsoft/tsdoc': 0.15.0
+ '@microsoft/tsdoc-config': 0.17.0
- eslint-plugin-vue@9.25.0(eslint@8.57.0):
+ eslint-plugin-vue@9.26.0(eslint@8.57.0):
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
eslint: 8.57.0
globals: 13.24.0
natural-compare: 1.4.0
nth-check: 2.1.1
- postcss-selector-parser: 6.0.16
- semver: 7.6.0
- vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ postcss-selector-parser: 6.1.0
+ semver: 7.6.2
+ vue-eslint-parser: 9.4.3(eslint@8.57.0)
xml-name-validator: 4.0.0
transitivePeerDependencies:
- supports-color
eslint@8.57.0:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint-community/regexpp': 4.10.0
+ '@eslint-community/regexpp': 4.10.1
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.57.0
'@humanwhocodes/config-array': 0.11.14
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.4
+ debug: 4.3.5
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
d: 1.0.2
es5-ext: 0.10.64
event-emitter: 0.3.5
- type: 2.7.2
+ type: 2.7.3
espree@9.6.1:
dependencies:
- acorn: 8.11.3
- acorn-jsx: 5.3.2(acorn@8.11.3)
+ acorn: 8.12.0
+ acorn-jsx: 5.3.2(acorn@8.12.0)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
ext@1.7.0:
dependencies:
- type: 2.7.2
+ type: 2.7.3
extend@3.0.2: {}
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.5
+ micromatch: 4.0.7
fast-json-stable-stringify@2.1.0: {}
file-uri-to-path@1.0.0: {}
- fill-range@7.0.1:
+ fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
dependencies:
is-callable: 1.2.7
- foreground-child@3.1.1:
+ foreground-child@3.2.0:
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.1.0
es-errors: 1.3.0
get-intrinsic: 1.2.4
- get-tsconfig@4.7.3:
+ get-tsconfig@4.7.5:
dependencies:
resolve-pkg-maps: 1.0.0
dependencies:
basic-ftp: 5.0.5
data-uri-to-buffer: 6.0.2
- debug: 4.3.4
+ debug: 4.3.5
fs-extra: 11.2.0
transitivePeerDependencies:
- supports-color
dependencies:
is-glob: 4.0.3
- glob@10.3.12:
+ glob@10.4.1:
dependencies:
- foreground-child: 3.1.1
- jackspeak: 2.3.6
+ foreground-child: 3.2.0
+ jackspeak: 3.4.0
minimatch: 9.0.4
- minipass: 7.0.4
- path-scurry: 1.10.2
+ minipass: 7.1.2
+ path-scurry: 1.11.1
glob@7.2.3:
dependencies:
dependencies:
type-fest: 0.20.2
- globals@15.1.0: {}
+ globals@15.4.0: {}
- globalthis@1.0.3:
+ globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
+ gopd: 1.0.1
globby@11.1.0:
dependencies:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
- uglify-js: 3.17.4
+ uglify-js: 3.18.0
har-schema@2.0.0: {}
ndarray-determinant: 1.0.0
ndarray-inv: 0.2.0
seedrandom: 3.0.5
- semver: 7.6.0
+ semver: 7.6.2
hmac-drbg@1.0.1:
dependencies:
dependencies:
'@tootallnate/once': 1.1.2
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
optional: true
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
optional: true
https-proxy-agent@7.0.4:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.5
transitivePeerDependencies:
- supports-color
import-lazy@4.0.0: {}
- import-meta-resolve@4.0.0: {}
+ import-meta-resolve@4.1.0: {}
imurmurhash@0.1.4: {}
ini@4.1.1: {}
- ini@4.1.2: {}
+ ini@4.1.3: {}
inline-source-map@0.6.3:
dependencies:
strip-ansi: 5.2.0
through: 2.3.8
- inquirer@9.2.19:
+ inquirer@9.2.22:
dependencies:
- '@inquirer/figures': 1.0.1
+ '@inquirer/figures': 1.0.3
'@ljharb/through': 2.3.13
ansi-escapes: 4.3.2
chalk: 5.3.0
lodash.debounce: 4.0.8
os-name: 4.0.1
request: 2.88.2
- tough-cookie: 4.1.3
+ tough-cookie: 4.1.4
uuid: 9.0.1
internal-slot@1.0.7:
is-buffer@2.0.5: {}
- is-builtin-module@3.2.1:
- dependencies:
- builtin-modules: 3.3.0
-
is-callable@1.2.7: {}
is-ci@2.0.0:
istanbul-lib-source-maps@5.0.4:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- debug: 4.3.4
+ debug: 4.3.5
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
es-get-iterator: 1.1.3
iterate-iterator: 1.0.2
- jackspeak@2.3.6:
+ jackspeak@3.4.0:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
jest-message-util@29.7.0:
dependencies:
- '@babel/code-frame': 7.24.2
+ '@babel/code-frame': 7.24.7
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.3
chalk: 4.1.2
graceful-fs: 4.2.11
- micromatch: 4.0.5
+ micromatch: 4.0.7
pretty-format: 29.7.0
slash: 3.0.0
stack-utils: 2.0.6
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
picomatch: 2.3.1
- jiti@1.21.0: {}
+ jiti@1.21.6: {}
jju@1.4.0: {}
dependencies:
config-chain: 1.1.13
editorconfig: 1.0.4
- glob: 10.3.12
+ glob: 10.4.1
js-cookie: 3.0.5
- nopt: 7.2.0
+ nopt: 7.2.1
js-cookie@3.0.5: {}
jsdoc-type-pratt-parser@4.0.0: {}
- jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4):
dependencies:
cssstyle: 4.0.1
data-urls: 5.0.0
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.9
+ nwsapi: 2.2.10
parse5: 7.1.2
- rrweb-cssom: 0.6.0
+ rrweb-cssom: 0.7.1
saxes: 6.0.0
symbol-tree: 3.2.4
- tough-cookie: 4.1.3
+ tough-cookie: 4.1.4
w3c-xmlserializer: 5.0.0
webidl-conversions: 7.0.0
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
whatwg-url: 14.0.0
- ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
prelude-ls: 1.2.1
type-check: 0.4.0
- lilconfig@3.0.0: {}
+ lilconfig@3.1.2: {}
lines-and-columns@1.2.4: {}
- lint-staged@15.2.2:
+ lint-staged@15.2.7:
dependencies:
chalk: 5.3.0
- commander: 11.1.0
- debug: 4.3.4
+ commander: 12.1.0
+ debug: 4.3.5
execa: 8.0.1
- lilconfig: 3.0.0
- listr2: 8.0.1
- micromatch: 4.0.5
+ lilconfig: 3.1.2
+ listr2: 8.2.1
+ micromatch: 4.0.7
pidtree: 0.6.0
string-argv: 0.3.2
- yaml: 2.3.4
+ yaml: 2.4.5
transitivePeerDependencies:
- supports-color
- listr2@8.0.1:
+ listr2@8.2.1:
dependencies:
cli-truncate: 4.0.0
colorette: 2.0.20
eventemitter3: 5.0.1
log-update: 6.0.0
- rfdc: 1.3.1
+ rfdc: 1.4.1
wrap-ansi: 9.0.0
local-pkg@0.5.0:
dependencies:
- mlly: 1.6.1
- pkg-types: 1.1.0
+ mlly: 1.7.1
+ pkg-types: 1.1.1
locate-path@3.0.0:
dependencies:
lru-cache@6.0.0:
dependencies:
yallist: 4.0.0
+ optional: true
lru-cache@7.18.3: {}
magicast@0.3.4:
dependencies:
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
source-map-js: 1.2.0
make-dir@3.1.0:
dependencies:
- semver: 7.6.0
+ semver: 7.6.2
make-dir@4.0.0:
dependencies:
- semver: 7.6.0
+ semver: 7.6.2
make-error@1.3.6: {}
mariadb@3.3.0:
dependencies:
'@types/geojson': 7946.0.14
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
denque: 2.1.0
iconv-lite: 0.6.3
lru-cache: 10.2.2
merge2@1.4.1: {}
- micromatch@4.0.5:
+ micromatch@4.0.7:
dependencies:
- braces: 3.0.2
+ braces: 3.0.3
picomatch: 2.3.1
- mikro-orm@6.2.3: {}
+ mikro-orm@6.2.9: {}
miller-rabin@4.0.1:
dependencies:
minipass@5.0.0: {}
- minipass@7.0.4: {}
+ minipass@7.1.2: {}
minizlib@2.1.2:
dependencies:
minizlib@3.0.1:
dependencies:
- minipass: 7.0.4
- rimraf: 5.0.5
+ minipass: 7.1.2
+ rimraf: 5.0.7
mkdirp-classic@0.5.3: {}
ml-xsadd@2.0.0: {}
- mlly@1.6.1:
+ mlly@1.7.1:
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.0
pathe: 1.1.2
- pkg-types: 1.1.0
+ pkg-types: 1.1.1
ufo: 1.5.3
mnemonist@0.40.0-rc1:
moment@2.30.1: {}
- mongodb-connection-string-url@3.0.0:
+ mongodb-connection-string-url@3.0.1:
dependencies:
- '@types/whatwg-url': 11.0.4
+ '@types/whatwg-url': 11.0.5
whatwg-url: 13.0.0
- mongodb@6.5.0(socks@2.8.3):
+ mongodb@6.7.0(socks@2.8.3):
dependencies:
- '@mongodb-js/saslprep': 1.1.5
- bson: 6.6.0
- mongodb-connection-string-url: 3.0.0
+ '@mongodb-js/saslprep': 1.1.7
+ bson: 6.7.0
+ mongodb-connection-string-url: 3.0.1
optionalDependencies:
socks: 2.8.3
dependencies:
lower-case: 1.1.4
- node-abi@3.62.0:
+ node-abi@3.65.0:
dependencies:
- semver: 7.6.0
+ semver: 7.6.2
node-addon-api@7.1.0: {}
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
- node-gyp-build@4.8.0:
+ node-gyp-build@4.8.1:
optional: true
node-gyp@8.4.1:
nopt: 5.0.0
npmlog: 6.0.2
rimraf: 3.0.2
- semver: 7.6.0
+ semver: 7.6.2
tar: 6.2.1
which: 2.0.2
transitivePeerDependencies:
abbrev: 1.1.1
optional: true
- nopt@7.2.0:
+ nopt@7.2.1:
dependencies:
abbrev: 2.0.0
number-is-nan@1.0.1: {}
- nwsapi@2.2.9: {}
+ nwsapi@2.2.10: {}
oauth-sign@0.9.0: {}
dependencies:
'@tootallnate/quickjs-emscripten': 0.23.0
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.5
get-uri: 6.0.3
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
got: 12.6.1
registry-auth-token: 4.2.2
registry-url: 5.1.0
- semver: 7.6.0
+ semver: 7.6.2
package-json@8.1.1:
dependencies:
got: 12.6.1
registry-auth-token: 5.0.2
registry-url: 6.0.1
- semver: 7.6.0
+ semver: 7.6.2
pako@1.0.11: {}
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.24.2
+ '@babel/code-frame': 7.24.7
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
path-platform@0.11.15: {}
- path-scurry@1.10.2:
+ path-scurry@1.11.1:
dependencies:
lru-cache: 10.2.2
- minipass: 7.0.4
+ minipass: 7.1.2
path-type@4.0.0: {}
pg-connection-string@2.6.2: {}
- picocolors@1.0.0: {}
+ picocolors@1.0.1: {}
picomatch@2.3.1: {}
pify@2.3.0: {}
- pkg-types@1.1.0:
+ pkg-types@1.1.1:
dependencies:
confbox: 0.1.7
- mlly: 1.6.1
+ mlly: 1.7.1
pathe: 1.1.2
pkg-up@3.1.0:
dependencies:
find-up: 3.0.0
- poolifier@3.1.30: {}
+ poolifier@4.0.14: {}
possible-typed-array-names@1.0.0: {}
read-cache: 1.0.0
resolve: 1.22.8
- postcss-selector-parser@6.0.16:
+ postcss-selector-parser@6.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss@8.4.38:
dependencies:
nanoid: 3.3.7
- picocolors: 1.0.0
+ picocolors: 1.0.1
source-map-js: 1.2.0
prebuild-install@7.1.2:
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 1.0.2
- node-abi: 3.62.0
+ node-abi: 3.65.0
pump: 3.0.0
rc: 1.2.8
simple-get: 4.0.1
dependencies:
fast-diff: 1.3.0
- prettier@3.2.5: {}
+ prettier@3.3.2: {}
pretty-bytes@5.6.0: {}
proxy-agent@6.4.0:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.5
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.4
lru-cache: 7.18.3
reinterval@1.1.0: {}
- release-it@17.2.1(typescript@5.4.5):
+ release-it@17.3.0(typescript@5.4.5):
dependencies:
'@iarna/toml': 2.2.5
- '@octokit/rest': 20.1.0
+ '@octokit/rest': 20.1.1
async-retry: 1.3.3
chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@5.4.5)
git-url-parse: 14.0.0
globby: 14.0.1
got: 12.6.1
- inquirer: 9.2.19
+ inquirer: 9.2.22
is-ci: 3.0.1
issue-parser: 7.0.0
lodash: 4.17.21
os-name: 5.1.0
promise.allsettled: 1.0.7
proxy-agent: 6.4.0
- semver: 7.6.0
+ semver: 7.6.2
shelljs: 0.8.5
update-notifier: 7.0.0
url-join: 5.0.0
request@2.88.2:
dependencies:
aws-sign2: 0.7.0
- aws4: 1.12.0
+ aws4: 1.13.0
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
performance-now: 2.1.0
qs: 6.5.3
safe-buffer: 5.2.1
- tough-cookie: 4.1.3
+ tough-cookie: 4.1.4
tunnel-agent: 0.6.0
uuid: 9.0.1
resolve-pkg-maps@1.0.0: {}
- resolve@1.19.0:
- dependencies:
- is-core-module: 2.13.1
- path-parse: 1.0.7
-
resolve@1.22.8:
dependencies:
is-core-module: 2.13.1
reusify@1.0.4: {}
- rfdc@1.3.1: {}
+ rfdc@1.4.1: {}
rimraf@3.0.2:
dependencies:
glob: 7.2.3
- rimraf@5.0.5:
+ rimraf@5.0.7:
dependencies:
- glob: 10.3.12
+ glob: 10.4.1
ripemd160@2.0.2:
dependencies:
hash-base: 3.1.0
inherits: 2.0.4
- rollup@4.17.1:
+ rollup@4.18.0:
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.17.1
- '@rollup/rollup-android-arm64': 4.17.1
- '@rollup/rollup-darwin-arm64': 4.17.1
- '@rollup/rollup-darwin-x64': 4.17.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.17.1
- '@rollup/rollup-linux-arm-musleabihf': 4.17.1
- '@rollup/rollup-linux-arm64-gnu': 4.17.1
- '@rollup/rollup-linux-arm64-musl': 4.17.1
- '@rollup/rollup-linux-powerpc64le-gnu': 4.17.1
- '@rollup/rollup-linux-riscv64-gnu': 4.17.1
- '@rollup/rollup-linux-s390x-gnu': 4.17.1
- '@rollup/rollup-linux-x64-gnu': 4.17.1
- '@rollup/rollup-linux-x64-musl': 4.17.1
- '@rollup/rollup-win32-arm64-msvc': 4.17.1
- '@rollup/rollup-win32-ia32-msvc': 4.17.1
- '@rollup/rollup-win32-x64-msvc': 4.17.1
+ '@rollup/rollup-android-arm-eabi': 4.18.0
+ '@rollup/rollup-android-arm64': 4.18.0
+ '@rollup/rollup-darwin-arm64': 4.18.0
+ '@rollup/rollup-darwin-x64': 4.18.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.18.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.18.0
+ '@rollup/rollup-linux-arm64-gnu': 4.18.0
+ '@rollup/rollup-linux-arm64-musl': 4.18.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.18.0
+ '@rollup/rollup-linux-s390x-gnu': 4.18.0
+ '@rollup/rollup-linux-x64-gnu': 4.18.0
+ '@rollup/rollup-linux-x64-musl': 4.18.0
+ '@rollup/rollup-win32-arm64-msvc': 4.18.0
+ '@rollup/rollup-win32-ia32-msvc': 4.18.0
+ '@rollup/rollup-win32-x64-msvc': 4.18.0
fsevents: 2.3.3
rrweb-cssom@0.6.0: {}
+ rrweb-cssom@0.7.1: {}
+
run-applescript@7.0.0: {}
run-async@2.4.1: {}
rxjs@7.8.1:
dependencies:
- tslib: 2.6.2
+ tslib: 2.6.3
safe-array-concat@1.1.2:
dependencies:
semver-diff@3.1.1:
dependencies:
- semver: 7.6.0
+ semver: 7.6.2
semver-diff@4.0.0:
dependencies:
- semver: 7.6.0
+ semver: 7.6.2
- semver@7.6.0:
- dependencies:
- lru-cache: 6.0.0
+ semver@7.6.2: {}
send@0.18.0:
dependencies:
socks-proxy-agent@6.2.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.4
+ debug: 4.3.5
socks: 2.8.3
transitivePeerDependencies:
- supports-color
socks-proxy-agent@8.0.3:
dependencies:
agent-base: 7.1.1
- debug: 4.3.4
+ debug: 4.3.5
socks: 2.8.3
transitivePeerDependencies:
- supports-color
spdx-expression-parse@4.0.0:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.17
+ spdx-license-ids: 3.0.18
- spdx-license-ids@3.0.17: {}
+ spdx-license-ids@3.0.18: {}
split2@4.2.0: {}
synckit@0.8.8:
dependencies:
'@pkgr/core': 0.1.1
- tslib: 2.6.2
+ tslib: 2.6.3
syntax-error@1.4.0:
dependencies:
mkdirp: 1.0.4
yallist: 4.0.0
- tar@7.0.1:
+ tar@7.2.0:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
- minipass: 5.0.0
+ minipass: 7.1.2
minizlib: 3.0.1
mkdirp: 3.0.1
yallist: 5.0.0
terser@4.8.1:
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.0
commander: 2.20.3
source-map: 0.6.1
source-map-support: 0.5.21
glob: 7.2.3
minimatch: 3.1.2
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.1
+ minimatch: 9.0.4
+
text-extensions@2.4.0: {}
text-hex@1.0.0: {}
toidentifier@1.0.1: {}
- tough-cookie@4.1.3:
+ tough-cookie@4.1.4:
dependencies:
psl: 1.9.0
punycode: 2.3.1
'@ts-morph/common': 0.23.0
code-block-writer: 13.0.1
- ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5):
+ ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 20.12.7
- acorn: 8.11.3
- acorn-walk: 8.3.2
+ '@types/node': 20.14.2
+ acorn: 8.12.0
+ acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
tslib@1.14.1: {}
- tslib@2.6.2: {}
+ tslib@2.6.3: {}
- tsx@4.7.3:
+ tsx@4.15.4:
dependencies:
- esbuild: 0.19.12
- get-tsconfig: 4.7.3
+ esbuild: 0.21.5
+ get-tsconfig: 4.7.5
optionalDependencies:
fsevents: 2.3.3
ttest@3.0.0:
dependencies:
- distributions: 2.1.0
+ distributions: 2.2.0
summary: 2.1.0
tty-browserify@0.0.1: {}
type-fest@2.19.0: {}
- type@2.7.2: {}
+ type@2.7.3: {}
typed-array-buffer@1.0.2:
dependencies:
ufo@1.5.3: {}
- uglify-js@3.17.4:
+ uglify-js@3.18.0:
optional: true
umd@3.0.3: {}
unpipe@1.0.0: {}
- update-browserslist-db@1.0.13(browserslist@4.23.0):
+ update-browserslist-db@1.0.16(browserslist@4.23.1):
dependencies:
- browserslist: 4.23.0
+ browserslist: 4.23.1
escalade: 3.1.2
- picocolors: 1.0.0
+ picocolors: 1.0.1
update-notifier@5.1.0:
dependencies:
is-yarn-global: 0.3.0
latest-version: 5.1.0
pupa: 2.1.1
- semver: 7.6.0
+ semver: 7.6.2
semver-diff: 3.1.1
xdg-basedir: 4.0.0
is-npm: 6.0.0
latest-version: 7.0.0
pupa: 3.1.0
- semver: 7.6.0
+ semver: 7.6.2
semver-diff: 4.0.0
xdg-basedir: 5.1.0
punycode: 1.4.1
qs: 6.12.1
- utf-8-validate@6.0.3:
+ utf-8-validate@6.0.4:
dependencies:
- node-gyp-build: 4.8.0
+ node-gyp-build: 4.8.1
optional: true
util-deprecate@1.0.2: {}
core-util-is: 1.0.2
extsprintf: 1.3.0
- vite-node@1.5.2(@types/node@20.12.7)(terser@4.8.1):
+ vite-node@1.6.0(@types/node@20.14.2):
dependencies:
cac: 6.7.14
- debug: 4.3.4
+ debug: 4.3.5
pathe: 1.1.2
- picocolors: 1.0.0
- vite: 5.2.10(@types/node@20.12.7)(terser@4.8.1)
+ picocolors: 1.0.1
+ vite: 5.3.1(@types/node@20.14.2)
transitivePeerDependencies:
- '@types/node'
- less
- supports-color
- terser
- vite@5.2.10(@types/node@20.12.7)(terser@4.8.1):
+ vite@5.3.1(@types/node@20.14.2):
dependencies:
- esbuild: 0.20.2
+ esbuild: 0.21.5
postcss: 8.4.38
- rollup: 4.17.1
+ rollup: 4.18.0
optionalDependencies:
- '@types/node': 20.12.7
+ '@types/node': 20.14.2
fsevents: 2.3.3
- terser: 4.8.1
- vitest@1.5.2(@types/node@20.12.7)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@4.8.1):
+ vitest@1.6.0(@types/node@20.14.2)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)):
dependencies:
- '@vitest/expect': 1.5.2
- '@vitest/runner': 1.5.2
- '@vitest/snapshot': 1.5.2
- '@vitest/spy': 1.5.2
- '@vitest/utils': 1.5.2
- acorn-walk: 8.3.2
+ '@vitest/expect': 1.6.0
+ '@vitest/runner': 1.6.0
+ '@vitest/snapshot': 1.6.0
+ '@vitest/spy': 1.6.0
+ '@vitest/utils': 1.6.0
+ acorn-walk: 8.3.3
chai: 4.4.1
- debug: 4.3.4
+ debug: 4.3.5
execa: 8.0.1
local-pkg: 0.5.0
magic-string: 0.30.10
pathe: 1.1.2
- picocolors: 1.0.0
+ picocolors: 1.0.1
std-env: 3.7.0
strip-literal: 2.1.0
tinybench: 2.8.0
tinypool: 0.8.4
- vite: 5.2.10(@types/node@20.12.7)(terser@4.8.1)
- vite-node: 1.5.2(@types/node@20.12.7)(terser@4.8.1)
+ vite: 5.3.1(@types/node@20.14.2)
+ vite-node: 1.6.0(@types/node@20.14.2)
why-is-node-running: 2.2.2
optionalDependencies:
- '@types/node': 20.12.7
- jsdom: 24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ '@types/node': 20.14.2
+ jsdom: 24.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
transitivePeerDependencies:
- less
- lightningcss
vm-browserify@1.1.2: {}
- vue-component-type-helpers@2.0.14: {}
+ vue-component-type-helpers@2.0.21: {}
- vue-eslint-parser@9.4.2(eslint@8.57.0):
+ vue-eslint-parser@9.4.3(eslint@8.57.0):
dependencies:
- debug: 4.3.4
+ debug: 4.3.5
eslint: 8.57.0
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
esquery: 1.5.0
lodash: 4.17.21
- semver: 7.6.0
+ semver: 7.6.2
transitivePeerDependencies:
- supports-color
- vue-router@4.3.2(vue@3.4.26(typescript@5.4.5)):
+ vue-router@4.3.3(vue@3.4.29(typescript@5.4.5)):
dependencies:
- '@vue/devtools-api': 6.6.1
- vue: 3.4.26(typescript@5.4.5)
+ '@vue/devtools-api': 6.6.3
+ vue: 3.4.29(typescript@5.4.5)
- vue-toast-notification@3.1.2(vue@3.4.26(typescript@5.4.5)):
+ vue-toast-notification@3.1.2(vue@3.4.29(typescript@5.4.5)):
dependencies:
- vue: 3.4.26(typescript@5.4.5)
+ vue: 3.4.29(typescript@5.4.5)
- vue@3.4.26(typescript@5.4.5):
+ vue@3.4.29(typescript@5.4.5):
dependencies:
- '@vue/compiler-dom': 3.4.26
- '@vue/compiler-sfc': 3.4.26
- '@vue/runtime-dom': 3.4.26
- '@vue/server-renderer': 3.4.26(vue@3.4.26(typescript@5.4.5))
- '@vue/shared': 3.4.26
+ '@vue/compiler-dom': 3.4.29
+ '@vue/compiler-sfc': 3.4.29
+ '@vue/runtime-dom': 3.4.29
+ '@vue/server-renderer': 3.4.29(vue@3.4.29(typescript@5.4.5))
+ '@vue/shared': 3.4.29
optionalDependencies:
typescript: 5.4.5
signal-exit: 3.0.7
typedarray-to-buffer: 3.1.5
- ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.4):
optionalDependencies:
bufferutil: 4.0.8
- utf-8-validate: 6.0.3
+ utf-8-validate: 6.0.4
xdg-basedir@4.0.0: {}
yallist@5.0.0: {}
- yaml@2.3.4: {}
+ yaml@2.4.5: {}
yargs-parser@15.0.3:
dependencies:
import { env, exit } from 'node:process'
-const skipPreinstall = parseInt(env.SKIP_PREINSTALL) || env.VCAP_APPLICATION != null
+const skipPreinstall = Number.parseInt(env.SKIP_PREINSTALL) || env.VCAP_APPLICATION != null
if (skipPreinstall) {
// eslint-disable-next-line n/no-process-exit
exit()
# This is the name and version displayed in the SonarCloud UI.
sonar.projectName=e-mobility-charging-stations-simulator
-sonar.projectVersion=1.3.2
+sonar.projectVersion=1.3.6
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
sonar.sources=src
"username": "admin",
"password": "admin"
},
- "dataPropertyOrder": { "&": ["baseUrl", "protocol", "version", "username", "password"] },
+ "dataPropertyOrder": {
+ "&": ["baseUrl", "protocol", "version", "username", "password"]
+ },
"color": null,
"isPrivate": false,
"metaSortKey": 1661789025528,
"protocol": "ui",
"version": "0.0.1"
},
- "dataPropertyOrder": { "&": ["baseUrl", "username", "password", "protocol", "version"] },
+ "dataPropertyOrder": {
+ "&": ["baseUrl", "username", "password", "protocol", "version"]
+ },
"color": null,
"isPrivate": false,
"metaSortKey": 1671183662529,
import { PerformanceStatistics } from '../performance/index.js'
import {
AuthorizationStatus,
+ ChargingStationEvents,
RequestCommand,
type StartTransactionRequest,
type StartTransactionResponse,
)}`
)
logger.debug(
- `${this.logPrefix(connectorId)} connector status: %j`,
+ `${this.logPrefix(connectorId)} stopped with connector status: %j`,
this.connectorsStatus.get(connectorId)
)
+ this.chargingStation.emit(ChargingStationEvents.updated)
}
private setStartConnectorStatus (
this.connectorsStatus.get(connectorId)!.skippedConsecutiveTransactions = 0
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.connectorsStatus.get(connectorId)!.start = true
+ this.chargingStation.emit(ChargingStationEvents.updated)
}
private canStartConnector (connectorId: number): boolean {
const connectorStatus = this.chargingStation.getConnectorStatus(connectorId)
if (connectorStatus?.transactionStarted === true) {
logger.info(
- `${this.logPrefix(
- connectorId
- )} entered in transaction loop while a transaction ${connectorStatus.transactionId} is already started on connector ${connectorId}`
+ `${this.logPrefix(connectorId)} entered in transaction loop while a transaction ${
+ connectorStatus.transactionId
+ } is already started on connector ${connectorId}`
)
return false
}
while (connectorStatus?.transactionStarted === true) {
if (!logged) {
logger.info(
- `${this.logPrefix(
- connectorId
- )} transaction loop waiting for started transaction ${connectorStatus.transactionId} on connector ${connectorId} to be stopped`
+ `${this.logPrefix(connectorId)} transaction loop waiting for started transaction ${
+ connectorStatus.transactionId
+ } on connector ${connectorId} to be stopped`
)
logged = true
}
private getConnectorStatus (connectorId: number): Status {
const statusIndex = connectorId - 1
+ if (statusIndex < 0) {
+ logger.error(`${this.logPrefix(connectorId)} invalid connector id`)
+ throw new BaseError(`Invalid connector id ${connectorId}`)
+ }
let connectorStatus: Status | undefined
if (this.chargingStation.getAutomaticTransactionGeneratorStatuses()?.[statusIndex] != null) {
connectorStatus = clone<Status>(
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.chargingStation.getAutomaticTransactionGeneratorStatuses()![statusIndex]
)
- } else if (this.chargingStation.getAutomaticTransactionGeneratorStatuses() != null) {
+ } else {
logger.warn(
- `${this.logPrefix(connectorId)} no status found for connector #${connectorId} in charging station configuration file. New status will be created`
+ `${this.logPrefix(
+ connectorId
+ )} no status found for connector #${connectorId} in charging station configuration file. New status will be created`
)
}
if (connectorStatus != null) {
startResponse = await this.chargingStation.ocppRequestService.requestHandler<
Partial<StartTransactionRequest>,
StartTransactionResponse
- >(this.chargingStation, RequestCommand.START_TRANSACTION, { connectorId })
+ >(this.chargingStation, RequestCommand.START_TRANSACTION, {
+ connectorId
+ })
this.handleStartTransactionResponse(connectorId, startResponse)
PerformanceStatistics.endMeasure(measureId, beginId)
return startResponse
)
console.info(
chalk.green(
- `Charging stations simulator ${
- this.version
- } started with ${this.numberOfConfiguredChargingStations} configured and ${this.numberOfProvisionedChargingStations} provisioned charging station(s) from ${this.numberOfChargingStationTemplates} charging station template(s) and ${
+ `Charging stations simulator ${this.version} started with ${
+ this.numberOfConfiguredChargingStations
+ } configured and ${
+ this.numberOfProvisionedChargingStations
+ } provisioned charging station(s) from ${
+ this.numberOfChargingStationTemplates
+ } charging station template(s) and ${
Configuration.workerDynamicPoolInUse() ? `${workerConfiguration.poolMinSize}/` : ''
}${this.workerImplementation?.size}${
Configuration.workerPoolInUse() ? `/${workerConfiguration.poolMaxSize}` : ''
poolOptions: {
messageHandler: this.messageHandler.bind(this) as MessageHandler<Worker>,
...(workerConfiguration.resourceLimits != null && {
- workerOptions: { resourceLimits: workerConfiguration.resourceLimits }
+ workerOptions: {
+ resourceLimits: workerConfiguration.resourceLimits
+ }
})
}
}
break
default:
throw new BaseError(
- `Unknown charging station worker message event: '${event}' received with data: ${JSON.stringify(data, undefined, 2)}`
+ `Unknown charging station worker message event: '${event}' received with data: ${JSON.stringify(
+ data,
+ undefined,
+ 2
+ )}`
)
}
} catch (error) {
data.stationInfo.chargingStationId
} (hashId: ${data.stationInfo.hashId}) added (${
this.numberOfAddedChargingStations
- } added from ${this.numberOfConfiguredChargingStations} configured and ${this.numberOfProvisionedChargingStations} provisioned charging station(s))`
+ } added from ${this.numberOfConfiguredChargingStations} configured and ${
+ this.numberOfProvisionedChargingStations
+ } provisioned charging station(s))`
)
}
data.stationInfo.chargingStationId
} (hashId: ${data.stationInfo.hashId}) deleted (${
this.numberOfAddedChargingStations
- } added from ${this.numberOfConfiguredChargingStations} configured and ${this.numberOfProvisionedChargingStations} provisioned charging station(s))`
+ } added from ${this.numberOfConfiguredChargingStations} configured and ${
+ this.numberOfProvisionedChargingStations
+ } provisioned charging station(s))`
)
}
createSerialNumber,
getAmperageLimitationUnitDivider,
getBootConnectorStatus,
- getChargingStationConnectorChargingProfilesPowerLimit,
+ getChargingStationChargingProfilesLimit,
getChargingStationId,
+ getConnectorChargingProfilesLimit,
getDefaultVoltageOut,
getHashId,
getIdTagsFile,
hasFeatureProfile,
hasReservationExpired,
initializeConnectorsMapStatus,
+ prepareConnectorStatus,
propagateSerialNumber,
setChargingStationOptions,
stationTemplateToStationInfo,
private ocppIncomingRequestService!: OCPPIncomingRequestService
private readonly messageBuffer: Set<string>
private configuredSupervisionUrl!: URL
- private wsConnectionRetried: boolean
private wsConnectionRetryCount: number
private templateFileWatcher?: FSWatcher
private templateFileHash!: string
this.starting = false
this.stopping = false
this.wsConnection = null
- this.wsConnectionRetried = false
this.wsConnectionRetryCount = 0
this.index = index
this.templateFile = templateFile
})
this.on(ChargingStationEvents.accepted, () => {
this.startMessageSequence(
- this.wsConnectionRetried
+ this.wsConnectionRetryCount > 0
? true
: this.getAutomaticTransactionGeneratorConfiguration()?.stopAbsoluteDuration
).catch((error: unknown) => {
logger.error(`${this.logPrefix()} Error while starting the message sequence:`, error)
})
- this.wsConnectionRetried = false
+ this.wsConnectionRetryCount = 0
})
this.on(ChargingStationEvents.rejected, () => {
- this.wsConnectionRetried = false
+ this.wsConnectionRetryCount = 0
+ })
+ this.on(ChargingStationEvents.connected, () => {
+ if (this.wsPingSetInterval == null) {
+ this.startWebSocketPing()
+ }
})
this.on(ChargingStationEvents.disconnected, () => {
try {
: this.configuredSupervisionUrl.href
}`
return new URL(
- `${wsConnectionBaseUrlStr}${!wsConnectionBaseUrlStr.endsWith('/') ? '/' : ''}${this.stationInfo?.chargingStationId}`
+ `${wsConnectionBaseUrlStr}${
+ !wsConnectionBaseUrlStr.endsWith('/') ? '/' : ''
+ }${this.stationInfo?.chargingStationId}`
)
}
}
public getConnectorMaximumAvailablePower (connectorId: number): number {
- let connectorAmperageLimitationPowerLimit: number | undefined
+ let connectorAmperageLimitationLimit: number | undefined
const amperageLimitation = this.getAmperageLimitation()
if (
amperageLimitation != null &&
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
amperageLimitation < this.stationInfo!.maximumAmperage!
) {
- connectorAmperageLimitationPowerLimit =
+ connectorAmperageLimitationLimit =
(this.stationInfo?.currentOutType === CurrentType.AC
? ACElectricUtils.powerTotal(
this.getNumberOfPhases(),
}
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const connectorMaximumPower = this.stationInfo!.maximumPower! / this.powerDivider!
- const connectorChargingProfilesPowerLimit =
- getChargingStationConnectorChargingProfilesPowerLimit(this, connectorId)
+ const chargingStationChargingProfilesLimit =
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ getChargingStationChargingProfilesLimit(this)! / this.powerDivider!
+ const connectorChargingProfilesLimit = getConnectorChargingProfilesLimit(this, connectorId)
return min(
- isNaN(connectorMaximumPower) ? Infinity : connectorMaximumPower,
+ isNaN(connectorMaximumPower) ? Number.POSITIVE_INFINITY : connectorMaximumPower,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- isNaN(connectorAmperageLimitationPowerLimit!)
- ? Infinity
+ isNaN(connectorAmperageLimitationLimit!)
+ ? Number.POSITIVE_INFINITY
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- connectorAmperageLimitationPowerLimit!,
+ connectorAmperageLimitationLimit!,
+ isNaN(chargingStationChargingProfilesLimit)
+ ? Number.POSITIVE_INFINITY
+ : chargingStationChargingProfilesLimit,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- isNaN(connectorChargingProfilesPowerLimit!) ? Infinity : connectorChargingProfilesPowerLimit!
+ isNaN(connectorChargingProfilesLimit!)
+ ? Number.POSITIVE_INFINITY
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ connectorChargingProfilesLimit!
)
}
}
public startHeartbeat (): void {
- if (this.getHeartbeatInterval() > 0 && this.heartbeatSetInterval == null) {
+ const heartbeatInterval = this.getHeartbeatInterval()
+ if (heartbeatInterval > 0 && this.heartbeatSetInterval == null) {
this.heartbeatSetInterval = setInterval(() => {
this.ocppRequestService
.requestHandler<HeartbeatRequest, HeartbeatResponse>(this, RequestCommand.HEARTBEAT)
error
)
})
- }, this.getHeartbeatInterval())
+ }, heartbeatInterval)
logger.info(
`${this.logPrefix()} Heartbeat started every ${formatDurationMilliSeconds(
- this.getHeartbeatInterval()
+ heartbeatInterval
)}`
)
} else if (this.heartbeatSetInterval != null) {
logger.info(
`${this.logPrefix()} Heartbeat already started every ${formatDurationMilliSeconds(
- this.getHeartbeatInterval()
+ heartbeatInterval
)}`
)
} else {
logger.error(
- `${this.logPrefix()} Heartbeat interval set to ${this.getHeartbeatInterval()}, not starting the heartbeat`
+ `${this.logPrefix()} Heartbeat interval set to ${heartbeatInterval}, not starting the heartbeat`
)
}
}
}
}
+ public restartMeterValues (connectorId: number, interval: number): void {
+ this.stopMeterValues(connectorId)
+ this.startMeterValues(connectorId, interval)
+ }
+
private add (): void {
this.emit(ChargingStationEvents.added)
}
addConfigurationKey(this, StandardParametersKey.HeartbeatInterval, '0')
}
if (getConfigurationKey(this, StandardParametersKey.HeartBeatInterval) == null) {
- addConfigurationKey(this, StandardParametersKey.HeartBeatInterval, '0', { visible: false })
+ addConfigurationKey(this, StandardParametersKey.HeartBeatInterval, '0', {
+ visible: false
+ })
}
if (
this.stationInfo?.supervisionUrlOcppConfiguration === true &&
isNotEmptyString(this.stationInfo.supervisionUrlOcppKey) &&
getConfigurationKey(this, this.stationInfo.supervisionUrlOcppKey) != null
) {
- deleteConfigurationKey(this, this.stationInfo.supervisionUrlOcppKey, { save: false })
+ deleteConfigurationKey(this, this.stationInfo.supervisionUrlOcppKey, {
+ save: false
+ })
}
if (
isNotEmptyString(this.stationInfo?.amperageLimitationOcppKey) &&
private initializeConnectorsOrEvsesFromFile (configuration: ChargingStationConfiguration): void {
if (configuration.connectorsStatus != null && configuration.evsesStatus == null) {
for (const [connectorId, connectorStatus] of configuration.connectorsStatus.entries()) {
- this.connectors.set(connectorId, clone<ConnectorStatus>(connectorStatus))
+ this.connectors.set(
+ connectorId,
+ prepareConnectorStatus(clone<ConnectorStatus>(connectorStatus))
+ )
}
} else if (configuration.evsesStatus != null && configuration.connectorsStatus == null) {
for (const [evseId, evseStatusConfiguration] of configuration.evsesStatus.entries()) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
evseStatusConfiguration.connectorsStatus!.map((connectorStatus, connectorId) => [
connectorId,
- connectorStatus
+ prepareConnectorStatus(connectorStatus)
])
)
})
...(this.connectors.size > 0 && {
connectorsStatus: configurationData.connectorsStatus
}),
- ...(this.evses.size > 0 && { evsesStatus: configurationData.evsesStatus })
+ ...(this.evses.size > 0 && {
+ evsesStatus: configurationData.evsesStatus
+ })
} satisfies ChargingStationConfiguration)
)
.digest('hex')
private async onOpen (): Promise<void> {
if (this.isWebSocketConnectionOpened()) {
+ this.emit(ChargingStationEvents.connected)
this.emit(ChargingStationEvents.updated)
logger.info(
- `${this.logPrefix()} Connection to OCPP server through ${this.wsConnectionUrl.href} succeeded`
+ `${this.logPrefix()} Connection to OCPP server through ${
+ this.wsConnectionUrl.href
+ } succeeded`
)
let registrationRetryCount = 0
if (!this.isRegistered()) {
// Send BootNotification
do {
- this.bootNotificationResponse = await this.ocppRequestService.requestHandler<
+ await this.ocppRequestService.requestHandler<
BootNotificationRequest,
BootNotificationResponse
>(this, RequestCommand.BOOT_NOTIFICATION, this.bootNotificationRequest, {
skipBufferingOnError: true
})
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
- if (this.bootNotificationResponse?.currentTime != null) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.bootNotificationResponse.currentTime = convertToDate(
- this.bootNotificationResponse.currentTime
- )!
- }
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.bootNotificationResponse!.currentTime = convertToDate(
+ this.bootNotificationResponse?.currentTime
+ )!
if (!this.isRegistered()) {
this.stationInfo?.registrationMaxRetries !== -1 && ++registrationRetryCount
await sleep(
this.stationInfo?.registrationMaxRetries === -1)
)
}
- if (this.isRegistered()) {
- this.emit(ChargingStationEvents.registered)
- if (this.inAcceptedState()) {
- this.emit(ChargingStationEvents.accepted)
- }
- } else {
- if (this.inRejectedState()) {
- this.emit(ChargingStationEvents.rejected)
- }
+ if (!this.isRegistered()) {
logger.error(
`${this.logPrefix()} Registration failure: maximum retries reached (${registrationRetryCount}) or retry disabled (${
this.stationInfo?.registrationMaxRetries
})`
)
}
- this.wsConnectionRetryCount = 0
this.emit(ChargingStationEvents.updated)
} else {
logger.warn(
}
throw new OCPPError(
ErrorType.PROTOCOL_ERROR,
- `Cached request for message id ${messageId} ${getMessageTypeString(
+ `Cached request for message id '${messageId}' ${getMessageTypeString(
messageType
)} is not an array`,
undefined,
private async handleIncomingMessage (request: IncomingRequest): Promise<void> {
const [messageType, messageId, commandName, commandPayload] = request
+ if (this.requests.has(messageId)) {
+ throw new OCPPError(
+ ErrorType.SECURITY_ERROR,
+ `Received message with duplicate message id '${messageId}'`,
+ commandName,
+ commandPayload
+ )
+ }
if (this.stationInfo?.enableStatistics === true) {
this.performanceStatistics?.addRequestStatistic(commandName, messageType)
}
// Error
throw new OCPPError(
ErrorType.INTERNAL_ERROR,
- `Response for unknown message id ${messageId}`,
+ `Response for unknown message id '${messageId}'`,
undefined,
commandPayload
)
// Error
throw new OCPPError(
ErrorType.INTERNAL_ERROR,
- `Error response for unknown message id ${messageId}`,
+ `Error response for unknown message id '${messageId}'`,
undefined,
{ errorType, errorMessage, errorDetails }
)
}
if (!(error instanceof OCPPError)) {
logger.warn(
- `${this.logPrefix()} Error thrown at incoming OCPP command '${
+ `${this.logPrefix()} Error thrown at incoming OCPP command ${
commandName ?? requestCommandName ?? Constants.UNKNOWN_OCPP_COMMAND
// eslint-disable-next-line @typescript-eslint/no-base-to-string
- }' message '${data.toString()}' handling is not an OCPPError:`,
+ } message '${data.toString()}' handling is not an OCPPError:`,
error
)
}
// eslint-disable-next-line @typescript-eslint/no-base-to-string
}' message '${data.toString()}'${
this.requests.has(messageId)
- ? ` matching cached request '${JSON.stringify(this.getCachedRequest(messageType, messageId))}'`
+ ? ` matching cached request '${JSON.stringify(
+ this.getCachedRequest(messageType, messageId)
+ )}'`
: ''
} processing error:`,
error
})
}
// Start WebSocket ping
- this.startWebSocketPing()
+ if (this.wsPingSetInterval == null) {
+ this.startWebSocketPing()
+ }
// Start heartbeat
- this.startHeartbeat()
+ if (this.heartbeatSetInterval == null) {
+ this.startHeartbeat()
+ }
// Initialize connectors status
if (this.hasEvses) {
for (const [evseId, evseStatus] of this.evses) {
}
}
+ private getWebSocketPingInterval (): number {
+ return getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval) != null
+ ? convertToInt(getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval)?.value)
+ : 0
+ }
+
private startWebSocketPing (): void {
- const webSocketPingInterval =
- getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval) != null
- ? convertToInt(
- getConfigurationKey(this, StandardParametersKey.WebSocketPingInterval)?.value
- )
- : 0
+ const webSocketPingInterval = this.getWebSocketPingInterval()
if (webSocketPingInterval > 0 && this.wsPingSetInterval == null) {
this.wsPingSetInterval = setInterval(() => {
if (this.isWebSocketConnectionOpened()) {
this.wsConnectionRetryCount < this.stationInfo!.autoReconnectMaxRetries! ||
this.stationInfo?.autoReconnectMaxRetries === -1
) {
- this.wsConnectionRetried = true
++this.wsConnectionRetryCount
const reconnectDelay =
this.stationInfo?.reconnectExponentialDelay === true
)
} else if (this.stationInfo?.autoReconnectMaxRetries !== -1) {
logger.error(
- `${this.logPrefix()} WebSocket connection retries failure: maximum retries reached (${
- this.wsConnectionRetryCount
- }) or retries disabled (${this.stationInfo?.autoReconnectMaxRetries})`
+ `${this.logPrefix()} WebSocket connection retries failure: maximum retries reached (${this.wsConnectionRetryCount.toString()}) or retries disabled (${this.stationInfo?.autoReconnectMaxRetries?.toString()})`
)
}
}
BootReasonEnumType,
type ChargingProfile,
ChargingProfileKindType,
+ ChargingProfilePurposeType,
ChargingRateUnitType,
type ChargingSchedulePeriod,
type ChargingStationConfiguration,
)
stationTemplate.randomConnectors = true
}
- return { configuredMaxConnectors, templateMaxConnectors, templateMaxAvailableConnectors }
+ return {
+ configuredMaxConnectors,
+ templateMaxConnectors,
+ templateMaxAvailableConnectors
+ }
}
export const checkStationInfoConnectorStatus = (
}
}
-export const buildConnectorsMap = (
- connectors: Record<string, ConnectorStatus>,
- logPrefix: string,
- templateFile: string
-): Map<number, ConnectorStatus> => {
- const connectorsMap = new Map<number, ConnectorStatus>()
- if (getMaxNumberOfConnectors(connectors) > 0) {
- for (const connector in connectors) {
- const connectorStatus = connectors[connector]
- const connectorId = convertToInt(connector)
- checkStationInfoConnectorStatus(connectorId, connectorStatus, logPrefix, templateFile)
- connectorsMap.set(connectorId, clone<ConnectorStatus>(connectorStatus))
- }
- } else {
- logger.warn(
- `${logPrefix} Charging station information from template ${templateFile} with no connectors, cannot build connectors map`
- )
- }
- return connectorsMap
-}
-
export const setChargingStationOptions = (
stationInfo: ChargingStationInfo,
options?: ChargingStationOptions
return stationInfo
}
+export const buildConnectorsMap = (
+ connectors: Record<string, ConnectorStatus>,
+ logPrefix: string,
+ templateFile: string
+): Map<number, ConnectorStatus> => {
+ const connectorsMap = new Map<number, ConnectorStatus>()
+ if (getMaxNumberOfConnectors(connectors) > 0) {
+ for (const connector in connectors) {
+ const connectorStatus = connectors[connector]
+ const connectorId = convertToInt(connector)
+ checkStationInfoConnectorStatus(connectorId, connectorStatus, logPrefix, templateFile)
+ connectorsMap.set(connectorId, clone<ConnectorStatus>(connectorStatus))
+ }
+ } else {
+ logger.warn(
+ `${logPrefix} Charging station information from template ${templateFile} with no connectors, cannot build connectors map`
+ )
+ }
+ return connectorsMap
+}
+
export const initializeConnectorsMapStatus = (
connectors: Map<number, ConnectorStatus>,
logPrefix: string
}
}
+export const resetAuthorizeConnectorStatus = (connectorStatus: ConnectorStatus): void => {
+ connectorStatus.idTagLocalAuthorized = false
+ connectorStatus.idTagAuthorized = false
+ delete connectorStatus.localAuthorizeIdTag
+ delete connectorStatus.authorizeIdTag
+}
+
export const resetConnectorStatus = (connectorStatus: ConnectorStatus | undefined): void => {
if (connectorStatus == null) {
return
}
- connectorStatus.chargingProfiles =
- connectorStatus.transactionId != null && isNotEmptyArray(connectorStatus.chargingProfiles)
- ? connectorStatus.chargingProfiles.filter(
- chargingProfile => chargingProfile.transactionId !== connectorStatus.transactionId
- )
- : []
- connectorStatus.idTagLocalAuthorized = false
- connectorStatus.idTagAuthorized = false
+ if (isNotEmptyArray(connectorStatus.chargingProfiles)) {
+ connectorStatus.chargingProfiles = connectorStatus.chargingProfiles.filter(
+ chargingProfile =>
+ (chargingProfile.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE &&
+ chargingProfile.transactionId != null &&
+ connectorStatus.transactionId != null &&
+ chargingProfile.transactionId !== connectorStatus.transactionId) ||
+ chargingProfile.chargingProfilePurpose !== ChargingProfilePurposeType.TX_PROFILE
+ )
+ }
+ resetAuthorizeConnectorStatus(connectorStatus)
connectorStatus.transactionRemoteStarted = false
connectorStatus.transactionStarted = false
delete connectorStatus.transactionStart
delete connectorStatus.transactionId
- delete connectorStatus.localAuthorizeIdTag
- delete connectorStatus.authorizeIdTag
delete connectorStatus.transactionIdTag
connectorStatus.transactionEnergyActiveImportRegisterValue = 0
delete connectorStatus.transactionBeginMeterValue
}
+export const prepareConnectorStatus = (connectorStatus: ConnectorStatus): ConnectorStatus => {
+ if (connectorStatus.reservation != null) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ connectorStatus.reservation.expiryDate = convertToDate(connectorStatus.reservation.expiryDate)!
+ }
+ if (isNotEmptyArray(connectorStatus.chargingProfiles)) {
+ connectorStatus.chargingProfiles = connectorStatus.chargingProfiles
+ .filter(
+ chargingProfile =>
+ chargingProfile.chargingProfilePurpose !== ChargingProfilePurposeType.TX_PROFILE
+ )
+ .map(chargingProfile => {
+ chargingProfile.chargingSchedule.startSchedule = convertToDate(
+ chargingProfile.chargingSchedule.startSchedule
+ )
+ chargingProfile.validFrom = convertToDate(chargingProfile.validFrom)
+ chargingProfile.validTo = convertToDate(chargingProfile.validTo)
+ return chargingProfile
+ })
+ }
+ return connectorStatus
+}
+
export const createBootNotificationRequest = (
stationInfo: ChargingStationInfo,
bootReason: BootReasonEnumType = BootReasonEnumType.PowerUp
randomSerialNumber?: boolean
}
): void => {
- params = { ...{ randomSerialNumberUpperCase: true, randomSerialNumber: true }, ...params }
+ params = {
+ ...{ randomSerialNumberUpperCase: true, randomSerialNumber: true },
+ ...params
+ }
const serialNumberSuffix =
params.randomSerialNumber === true
? getRandomSerialNumberSuffix({
return unitDivider
}
+const getChargingStationChargingProfiles = (
+ chargingStation: ChargingStation
+): ChargingProfile[] => {
+ return (chargingStation.getConnectorStatus(0)?.chargingProfiles ?? [])
+ .filter(
+ chargingProfile =>
+ chargingProfile.chargingProfilePurpose ===
+ ChargingProfilePurposeType.CHARGE_POINT_MAX_PROFILE
+ )
+ .sort((a, b) => b.stackLevel - a.stackLevel)
+}
+
+export const getChargingStationChargingProfilesLimit = (
+ chargingStation: ChargingStation
+): number | undefined => {
+ const chargingProfiles = getChargingStationChargingProfiles(chargingStation)
+ if (isNotEmptyArray(chargingProfiles)) {
+ const chargingProfilesLimit = getChargingProfilesLimit(chargingStation, 0, chargingProfiles)
+ if (chargingProfilesLimit != null) {
+ const limit = buildChargingProfilesLimit(chargingStation, chargingProfilesLimit)
+ const chargingStationMaximumPower =
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ chargingStation.stationInfo!.maximumPower!
+ if (limit > chargingStationMaximumPower) {
+ logger.error(
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingStationChargingProfilesLimit: Charging profile id ${
+ chargingProfilesLimit.chargingProfile.chargingProfileId
+ } limit ${limit} is greater than charging station maximum ${chargingStationMaximumPower}: %j`,
+ chargingProfilesLimit
+ )
+ return chargingStationMaximumPower
+ }
+ return limit
+ }
+ }
+}
+
/**
- * Gets the connector cloned charging profiles applying a power limitation
- * and sorted by connector id descending then stack level descending
+ * Gets the connector charging profiles relevant for power limitation shallow cloned
+ * and sorted by priorities
*
- * @param chargingStation -
- * @param connectorId -
+ * @param chargingStation - Charging station
+ * @param connectorId - Connector id
* @returns connector charging profiles array
*/
export const getConnectorChargingProfiles = (
chargingStation: ChargingStation,
connectorId: number
): ChargingProfile[] => {
- return clone<ChargingProfile[]>(
- (chargingStation.getConnectorStatus(connectorId)?.chargingProfiles ?? [])
- .sort((a, b) => b.stackLevel - a.stackLevel)
- .concat(
- (chargingStation.getConnectorStatus(0)?.chargingProfiles ?? []).sort(
- (a, b) => b.stackLevel - a.stackLevel
+ return (chargingStation.getConnectorStatus(connectorId)?.chargingProfiles ?? [])
+ .slice()
+ .sort((a, b) => {
+ if (
+ a.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE &&
+ b.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE
+ ) {
+ return -1
+ } else if (
+ a.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE &&
+ b.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE
+ ) {
+ return 1
+ }
+ return b.stackLevel - a.stackLevel
+ })
+ .concat(
+ (chargingStation.getConnectorStatus(0)?.chargingProfiles ?? [])
+ .filter(
+ chargingProfile =>
+ chargingProfile.chargingProfilePurpose === ChargingProfilePurposeType.TX_DEFAULT_PROFILE
)
- )
- )
+ .sort((a, b) => b.stackLevel - a.stackLevel)
+ )
}
-export const getChargingStationConnectorChargingProfilesPowerLimit = (
+export const getConnectorChargingProfilesLimit = (
chargingStation: ChargingStation,
connectorId: number
): number | undefined => {
- let limit: number | undefined, chargingProfile: ChargingProfile | undefined
- // Get charging profiles sorted by connector id then stack level
const chargingProfiles = getConnectorChargingProfiles(chargingStation, connectorId)
if (isNotEmptyArray(chargingProfiles)) {
- const result = getLimitFromChargingProfiles(
+ const chargingProfilesLimit = getChargingProfilesLimit(
chargingStation,
connectorId,
- chargingProfiles,
- chargingStation.logPrefix()
+ chargingProfiles
)
- if (result != null) {
- limit = result.limit
- chargingProfile = result.chargingProfile
- switch (chargingStation.stationInfo?.currentOutType) {
- case CurrentType.AC:
- limit =
- chargingProfile.chargingSchedule.chargingRateUnit === ChargingRateUnitType.WATT
- ? limit
- : ACElectricUtils.powerTotal(
- chargingStation.getNumberOfPhases(),
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo.voltageOut!,
- limit
- )
- break
- case CurrentType.DC:
- limit =
- chargingProfile.chargingSchedule.chargingRateUnit === ChargingRateUnitType.WATT
- ? limit
- : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- DCElectricUtils.power(chargingStation.stationInfo.voltageOut!, limit)
- }
+ if (chargingProfilesLimit != null) {
+ const limit = buildChargingProfilesLimit(chargingStation, chargingProfilesLimit)
const connectorMaximumPower =
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.stationInfo!.maximumPower! / chargingStation.powerDivider!
if (limit > connectorMaximumPower) {
logger.error(
- `${chargingStation.logPrefix()} ${moduleName}.getChargingStationConnectorChargingProfilesPowerLimit: Charging profile id ${
- chargingProfile.chargingProfileId
- } limit ${limit} is greater than connector id ${connectorId} maximum ${connectorMaximumPower}: %j`,
- result
+ `${chargingStation.logPrefix()} ${moduleName}.getConnectorChargingProfilesLimit: Charging profile id ${
+ chargingProfilesLimit.chargingProfile.chargingProfileId
+ } limit ${limit} is greater than connector ${connectorId} maximum ${connectorMaximumPower}: %j`,
+ chargingProfilesLimit
)
- limit = connectorMaximumPower
+ return connectorMaximumPower
}
+ return limit
}
}
- return limit
+}
+
+const buildChargingProfilesLimit = (
+ chargingStation: ChargingStation,
+ chargingProfilesLimit: ChargingProfilesLimit
+): number => {
+ const errorMsg = `Unknown ${chargingStation.stationInfo?.currentOutType} currentOutType in charging station information, cannot build charging profiles limit`
+ const { limit, chargingProfile } = chargingProfilesLimit
+ switch (chargingStation.stationInfo?.currentOutType) {
+ case CurrentType.AC:
+ return chargingProfile.chargingSchedule.chargingRateUnit === ChargingRateUnitType.WATT
+ ? limit
+ : ACElectricUtils.powerTotal(
+ chargingStation.getNumberOfPhases(),
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ chargingStation.stationInfo.voltageOut!,
+ limit
+ )
+ case CurrentType.DC:
+ return chargingProfile.chargingSchedule.chargingRateUnit === ChargingRateUnitType.WATT
+ ? limit
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ DCElectricUtils.power(chargingStation.stationInfo.voltageOut!, limit)
+ default:
+ logger.error(
+ `${chargingStation.logPrefix()} ${moduleName}.buildChargingProfilesLimit: ${errorMsg}`
+ )
+ throw new BaseError(errorMsg)
+ }
}
export const getDefaultVoltageOut = (
}
/**
- * Charging profiles shall already be sorted by connector id descending then stack level descending
+ * Get the charging profiles limit for a connector
+ * Charging profiles shall already be sorted by priorities
*
* @param chargingStation -
* @param connectorId -
* @param chargingProfiles -
- * @param logPrefix -
* @returns ChargingProfilesLimit
*/
-const getLimitFromChargingProfiles = (
+const getChargingProfilesLimit = (
chargingStation: ChargingStation,
connectorId: number,
- chargingProfiles: ChargingProfile[],
- logPrefix: string
+ chargingProfiles: ChargingProfile[]
): ChargingProfilesLimit | undefined => {
- const debugLogMsg = `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Matching charging profile found for power limitation: %j`
+ const debugLogMsg = `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profiles limit found: %j`
const currentDate = new Date()
const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ let previousActiveChargingProfile: ChargingProfile | undefined
for (const chargingProfile of chargingProfiles) {
const chargingSchedule = chargingProfile.chargingSchedule
if (chargingSchedule.startSchedule == null) {
logger.debug(
- `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} has no startSchedule defined. Trying to set it to the connector current transaction start date`
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profile id ${chargingProfile.chargingProfileId} has no startSchedule defined. Trying to set it to the connector current transaction start date`
)
// OCPP specifies that if startSchedule is not defined, it should be relative to start of the connector transaction
chargingSchedule.startSchedule = connectorStatus?.transactionStart
}
if (!isDate(chargingSchedule.startSchedule)) {
logger.warn(
- `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} startSchedule property is not a Date instance. Trying to convert it to a Date instance`
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profile id ${chargingProfile.chargingProfileId} startSchedule property is not a Date instance. Trying to convert it to a Date instance`
)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingSchedule.startSchedule = convertToDate(chargingSchedule.startSchedule)!
}
if (chargingSchedule.duration == null) {
logger.debug(
- `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} has no duration defined and will be set to the maximum time allowed`
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profile id ${chargingProfile.chargingProfileId} has no duration defined and will be set to the maximum time allowed`
)
// OCPP specifies that if duration is not defined, it should be infinite
chargingSchedule.duration = differenceInSeconds(maxTime, chargingSchedule.startSchedule)
}
- if (!prepareChargingProfileKind(connectorStatus, chargingProfile, currentDate, logPrefix)) {
+ if (
+ !prepareChargingProfileKind(
+ connectorStatus,
+ chargingProfile,
+ currentDate,
+ chargingStation.logPrefix()
+ )
+ ) {
continue
}
- if (!canProceedChargingProfile(chargingProfile, currentDate, logPrefix)) {
+ if (!canProceedChargingProfile(chargingProfile, currentDate, chargingStation.logPrefix())) {
continue
}
// Check if the charging profile is active
)
) {
logger.warn(
- `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} schedule periods are not sorted by start period`
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profile id ${chargingProfile.chargingProfileId} schedule periods are not sorted by start period`
)
chargingSchedule.chargingSchedulePeriod.sort(chargingSchedulePeriodCompareFn)
}
// Check if the first schedule period startPeriod property is equal to 0
if (chargingSchedule.chargingSchedulePeriod[0].startPeriod !== 0) {
logger.error(
- `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} first schedule period start period ${chargingSchedule.chargingSchedulePeriod[0].startPeriod} is not equal to 0`
+ `${chargingStation.logPrefix()} ${moduleName}.getChargingProfilesLimit: Charging profile id ${chargingProfile.chargingProfileId} first schedule period start period ${chargingSchedule.chargingSchedulePeriod[0].startPeriod} is not equal to 0`
)
continue
}
// Handle only one schedule period
if (chargingSchedule.chargingSchedulePeriod.length === 1) {
- const result: ChargingProfilesLimit = {
+ const chargingProfilesLimit: ChargingProfilesLimit = {
limit: chargingSchedule.chargingSchedulePeriod[0].limit,
chargingProfile
}
- logger.debug(debugLogMsg, result)
- return result
+ logger.debug(debugLogMsg, chargingProfilesLimit)
+ return chargingProfilesLimit
}
let previousChargingSchedulePeriod: ChargingSchedulePeriod | undefined
// Search for the right schedule period
)
) {
// Found the schedule period: previous is the correct one
- const result: ChargingProfilesLimit = {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- limit: previousChargingSchedulePeriod!.limit,
- chargingProfile
+ const chargingProfilesLimit: ChargingProfilesLimit = {
+ limit: previousChargingSchedulePeriod?.limit ?? chargingSchedulePeriod.limit,
+ chargingProfile: previousActiveChargingProfile ?? chargingProfile
}
- logger.debug(debugLogMsg, result)
- return result
+ logger.debug(debugLogMsg, chargingProfilesLimit)
+ return chargingProfilesLimit
}
- // Keep a reference to previous one
- previousChargingSchedulePeriod = chargingSchedulePeriod
// Handle the last schedule period within the charging profile duration
if (
index === chargingSchedule.chargingSchedulePeriod.length - 1 ||
chargingSchedule.startSchedule
) > chargingSchedule.duration)
) {
- const result: ChargingProfilesLimit = {
- limit: previousChargingSchedulePeriod.limit,
+ const chargingProfilesLimit: ChargingProfilesLimit = {
+ limit: chargingSchedulePeriod.limit,
chargingProfile
}
- logger.debug(debugLogMsg, result)
- return result
+ logger.debug(debugLogMsg, chargingProfilesLimit)
+ return chargingProfilesLimit
}
+ // Keep a reference to previous charging schedule period
+ previousChargingSchedulePeriod = chargingSchedulePeriod
}
}
+ // Keep a reference to previous active charging profile
+ previousActiveChargingProfile = chargingProfile
}
}
}
[
BroadcastChannelProcedureName.BOOT_NOTIFICATION,
async (requestPayload?: BroadcastChannelRequestPayload) => {
- this.chargingStation.bootNotificationResponse =
- await this.chargingStation.ocppRequestService.requestHandler<
- BootNotificationRequest,
- BootNotificationResponse
- >(
- this.chargingStation,
- RequestCommand.BOOT_NOTIFICATION,
- {
- ...this.chargingStation.bootNotificationRequest,
- ...requestPayload
- },
- {
- skipBufferingOnError: true,
- throwError: true
- }
- )
- return this.chargingStation.bootNotificationResponse
+ return await this.chargingStation.ocppRequestService.requestHandler<
+ BootNotificationRequest,
+ BootNotificationResponse
+ >(
+ this.chargingStation,
+ RequestCommand.BOOT_NOTIFICATION,
+ {
+ ...this.chargingStation.bootNotificationRequest,
+ ...requestPayload
+ },
+ {
+ skipBufferingOnError: true,
+ throwError: true
+ }
+ )
}
],
[
hasReservationExpired,
prepareChargingProfileKind,
removeExpiredReservations,
+ resetAuthorizeConnectorStatus,
resetConnectorStatus
} from './Helpers.js'
> = Object.freeze([
{ to: OCPP16ChargePointStatus.Available },
// { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Faulted
+ },
{ to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Available },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Available
+ },
// { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Faulted
+ },
{ to: OCPP16ChargePointStatus.Faulted },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Unavailable }
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Available
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Unavailable
+ }
// { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Faulted }
])
Object.freeze([
{ to: OCPP16ChargePointStatus.Available },
// { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.SuspendedEVSE },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Preparing
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Charging
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
// { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Finishing },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Available, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Reserved
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.Available,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Available },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.Available
+ },
// { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Finishing },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.Charging
+ },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.Finishing
+ },
// { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Reserved },
// { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Preparing, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Preparing,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Available },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.Available
+ },
// { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Preparing },
// { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Finishing },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.Finishing
+ },
// { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Charging, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.Charging,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Available },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.Available
+ },
// { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Charging },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.Charging
+ },
// { from: OCPP16ChargePointStatus.SuspendedEV, OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Finishing },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.Finishing
+ },
// { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.SuspendedEV, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEV,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Available },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.Available
+ },
// { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.SuspendedEV },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.Charging
+ },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
// { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Finishing },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.Finishing
+ },
// { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.SuspendedEVSE, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.SuspendedEVSE,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.Finishing},
- { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Preparing },
+ {
+ from: OCPP16ChargePointStatus.Finishing,
+ to: OCPP16ChargePointStatus.Available
+ },
+ {
+ from: OCPP16ChargePointStatus.Finishing,
+ to: OCPP16ChargePointStatus.Preparing
+ },
// { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Charging },
// { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.SuspendedEV },
// { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.SuspendedEVSE },
// { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Finishing },
// { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Finishing, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Finishing,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.Finishing,
+ to: OCPP16ChargePointStatus.Faulted
+ },
// { to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Preparing },
+ {
+ from: OCPP16ChargePointStatus.Reserved,
+ to: OCPP16ChargePointStatus.Available
+ },
+ {
+ from: OCPP16ChargePointStatus.Reserved,
+ to: OCPP16ChargePointStatus.Preparing
+ },
// { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Charging },
// { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.SuspendedEV },
// { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.SuspendedEVSE },
// { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Finishing },
// { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Reserved, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Reserved,
+ to: OCPP16ChargePointStatus.Unavailable
+ },
+ {
+ from: OCPP16ChargePointStatus.Reserved,
+ to: OCPP16ChargePointStatus.Faulted
+ },
{ to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.SuspendedEVSE },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Available
+ },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Preparing
+ },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Charging
+ },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
// { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Finishing },
// { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Reserved },
// { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Unavailable },
- { from: OCPP16ChargePointStatus.Unavailable, to: OCPP16ChargePointStatus.Faulted },
+ {
+ from: OCPP16ChargePointStatus.Unavailable,
+ to: OCPP16ChargePointStatus.Faulted
+ },
{ to: OCPP16ChargePointStatus.Faulted },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Available },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Preparing },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Charging },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.SuspendedEV },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.SuspendedEVSE },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Finishing },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Reserved },
- { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Unavailable }
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Available
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Preparing
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Charging
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.SuspendedEV
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.SuspendedEVSE
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Finishing
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Reserved
+ },
+ {
+ from: OCPP16ChargePointStatus.Faulted,
+ to: OCPP16ChargePointStatus.Unavailable
+ }
// { from: OCPP16ChargePointStatus.Faulted, to: OCPP16ChargePointStatus.Faulted }
])
}
getConnectorChargingProfiles,
prepareChargingProfileKind,
removeExpiredReservations,
+ resetAuthorizeConnectorStatus,
setConfigurationKeyValue
} from '../../../charging-station/index.js'
import { OCPPError } from '../../../exception/index.js'
convertToDate,
convertToInt,
formatDurationMilliSeconds,
+ handleIncomingRequestError,
isAsyncFunction,
isNotEmptyArray,
isNotEmptyString,
if (response.status === GenericStatus.Accepted) {
const { connectorId, idTag } = request
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.getConnectorStatus(connectorId)!.transactionRemoteStarted = true
+ chargingStation.getConnectorStatus(connectorId!)!.transactionRemoteStarted = true
chargingStation.ocppRequestService
.requestHandler<Partial<OCPP16StartTransactionRequest>, OCPP16StartTransactionResponse>(
chargingStation,
}
)
.then(response => {
- if (response.status === OCPP16AuthorizationStatus.ACCEPTED) {
+ if (response.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) {
logger.debug(
- `${chargingStation.logPrefix()} Remote start transaction ACCEPTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for idTag '${idTag}'`
+ `${chargingStation.logPrefix()} Remote start transaction ACCEPTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId} for idTag '${idTag}'`
)
} else {
logger.debug(
- `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for idTag '${idTag}'`
+ `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId} for idTag '${idTag}'`
)
}
})
.then(response => {
if (response.status === GenericStatus.Accepted) {
logger.debug(
- `${chargingStation.logPrefix()} Remote stop transaction ACCEPTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for transaction '${transactionId}'`
+ `${chargingStation.logPrefix()} Remote stop transaction ACCEPTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId} for transaction '${transactionId}'`
)
} else {
logger.debug(
- `${chargingStation.logPrefix()} Remote stop transaction REJECTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for transaction '${transactionId}'`
+ `${chargingStation.logPrefix()} Remote stop transaction REJECTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId} for transaction '${transactionId}'`
)
}
})
switch (requestedMessage) {
case OCPP16MessageTrigger.BootNotification:
chargingStation.ocppRequestService
- .requestHandler<OCPP16BootNotificationRequest, OCPP16BootNotificationResponse>(
- chargingStation,
- OCPP16RequestCommand.BOOT_NOTIFICATION,
- chargingStation.bootNotificationRequest as OCPP16BootNotificationRequest,
- { skipBufferingOnError: true, triggerMessage: true }
- )
- .then(response => {
- chargingStation.bootNotificationResponse = response
- })
+ .requestHandler<
+ OCPP16BootNotificationRequest,
+ OCPP16BootNotificationResponse
+ >(chargingStation, OCPP16RequestCommand.BOOT_NOTIFICATION, chargingStation.bootNotificationRequest as OCPP16BootNotificationRequest, { skipBufferingOnError: true, triggerMessage: true })
.catch(errorHandler)
break
case OCPP16MessageTrigger.Heartbeat:
// Throw exception
throw new OCPPError(
ErrorType.NOT_IMPLEMENTED,
- `'${commandName}' is not implemented to handle request PDU ${JSON.stringify(
+ `${commandName} is not implemented to handle request PDU ${JSON.stringify(
commandPayload,
undefined,
2
) {
chargingStation.restartWebSocketPing()
}
+ if (
+ (keyToChange.key as OCPP16StandardParametersKey) ===
+ OCPP16StandardParametersKey.MeterValueSampleInterval &&
+ chargingStation.getNumberOfRunningTransactions() > 0 &&
+ valueChanged
+ ) {
+ for (
+ let connectorId = 1;
+ connectorId <= chargingStation.getNumberOfConnectors();
+ connectorId++
+ ) {
+ if (chargingStation.getConnectorStatus(connectorId)?.transactionStarted === true) {
+ chargingStation.restartMeterValues(
+ connectorId,
+ secondsToMilliseconds(convertToInt(value))
+ )
+ }
+ }
+ }
if (keyToChange.reboot === true) {
return OCPP16Constants.OCPP_CONFIGURATION_RESPONSE_REBOOT_REQUIRED
}
csChargingProfiles.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE &&
connectorId > 0 &&
connectorStatus?.transactionStarted === true &&
+ csChargingProfiles.transactionId != null &&
csChargingProfiles.transactionId !== connectorStatus.transactionId
) {
logger.error(
start: currentDate,
end: addSeconds(currentDate, duration)
}
- // Get charging profiles sorted by connector id then stack level
+ // FIXME: add and handle charging station charging profiles
const chargingProfiles: OCPP16ChargingProfile[] = getConnectorChargingProfiles(
chargingStation,
connectorId
return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN
}
const { connectorId } = commandPayload
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- if (!chargingStation.hasConnector(connectorId!)) {
- logger.error(
- `${chargingStation.logPrefix()} Trying to clear a charging profile(s) to a non existing connector id ${connectorId}`
- )
- return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN
- }
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const connectorStatus = chargingStation.getConnectorStatus(connectorId!)
- if (connectorId != null && isNotEmptyArray(connectorStatus?.chargingProfiles)) {
- connectorStatus.chargingProfiles = []
- logger.debug(
- `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${connectorId}`
- )
- return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED
- }
- if (connectorId == null) {
+ if (connectorId != null) {
+ if (!chargingStation.hasConnector(connectorId)) {
+ logger.error(
+ `${chargingStation.logPrefix()} Trying to clear a charging profile(s) to a non existing connector id ${connectorId}`
+ )
+ return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN
+ }
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (isNotEmptyArray(connectorStatus?.chargingProfiles)) {
+ connectorStatus.chargingProfiles = []
+ logger.debug(
+ `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${connectorId}`
+ )
+ return OCPP16Constants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED
+ }
+ } else {
let clearedCP = false
if (chargingStation.hasEvses) {
for (const evseStatus of chargingStation.evses.values()) {
for (const status of evseStatus.connectors.values()) {
- clearedCP = OCPP16ServiceUtils.clearChargingProfiles(
+ const clearedConnectorCP = OCPP16ServiceUtils.clearChargingProfiles(
chargingStation,
commandPayload,
status.chargingProfiles
)
+ if (clearedConnectorCP && !clearedCP) {
+ clearedCP = true
+ }
}
}
} else {
for (const id of chargingStation.connectors.keys()) {
- clearedCP = OCPP16ServiceUtils.clearChargingProfiles(
+ const clearedConnectorCP = OCPP16ServiceUtils.clearChargingProfiles(
chargingStation,
commandPayload,
chargingStation.getConnectorStatus(id)?.chargingProfiles
)
+ if (clearedConnectorCP && !clearedCP) {
+ clearedCP = true
+ }
}
}
if (clearedCP) {
chargingStation: ChargingStation,
commandPayload: RemoteStartTransactionRequest
): Promise<GenericResponse> {
+ if (commandPayload.connectorId == null) {
+ for (
+ let connectorId = 1;
+ connectorId <= chargingStation.getNumberOfConnectors();
+ connectorId++
+ ) {
+ if (
+ chargingStation.getConnectorStatus(connectorId)?.transactionStarted === false &&
+ !OCPP16ServiceUtils.hasReservation(chargingStation, connectorId, commandPayload.idTag)
+ ) {
+ commandPayload.connectorId = connectorId
+ break
+ }
+ }
+ if (commandPayload.connectorId == null) {
+ logger.debug(
+ `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }, idTag '${commandPayload.idTag}': no available connector found`
+ )
+ return OCPP16Constants.OCPP_RESPONSE_REJECTED
+ }
+ }
const { connectorId: transactionConnectorId, idTag, chargingProfile } = commandPayload
if (!chargingStation.hasConnector(transactionConnectorId)) {
return this.notifyRemoteStartTransactionRejected(
)
}
logger.debug(
- `${chargingStation.logPrefix()} Remote start transaction ACCEPTED on ${chargingStation.stationInfo?.chargingStationId}#${transactionConnectorId}}, idTag '${idTag}'`
+ `${chargingStation.logPrefix()} Remote start transaction ACCEPTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${transactionConnectorId}}, idTag '${idTag}'`
)
return OCPP16Constants.OCPP_RESPONSE_ACCEPTED
}
): GenericResponse {
const connectorStatus = chargingStation.getConnectorStatus(connectorId)
logger.debug(
- `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId}, idTag '${idTag}', availability '${connectorStatus?.availability}', status '${connectorStatus?.status}'`
+ `${chargingStation.logPrefix()} Remote start transaction REJECTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId}, idTag '${idTag}', availability '${
+ connectorStatus?.availability
+ }', status '${connectorStatus?.status}'`
)
return OCPP16Constants.OCPP_RESPONSE_REJECTED
}
connectorId: number,
chargingProfile: OCPP16ChargingProfile
): boolean {
- if (chargingProfile.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE) {
+ if (
+ chargingProfile.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE &&
+ chargingProfile.transactionId == null
+ ) {
OCPP16ServiceUtils.setChargingProfile(chargingStation, connectorId, chargingProfile)
logger.debug(
- `${chargingStation.logPrefix()} Charging profile(s) set at remote start transaction on ${chargingStation.stationInfo?.chargingStationId}#${connectorId}`,
+ `${chargingStation.logPrefix()} Charging profile(s) set at remote start transaction on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId}`,
chargingProfile
)
return true
logger.debug(
`${chargingStation.logPrefix()} Not allowed to set ${
chargingProfile.chargingProfilePurpose
- } charging profile(s) at remote start transaction`
+ } charging profile(s)${chargingProfile.transactionId != null ? ' with transactionId set' : ''} at remote start transaction`
)
return false
}
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
commandPayload.retrieveDate = convertToDate(commandPayload.retrieveDate)!
const { retrieveDate } = commandPayload
- if (chargingStation.stationInfo?.firmwareStatus !== OCPP16FirmwareStatus.Installed) {
+ if (
+ chargingStation.stationInfo?.firmwareStatus != null &&
+ chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed
+ ) {
logger.warn(
`${chargingStation.logPrefix()} ${moduleName}.handleRequestUpdateFirmware: Cannot simulate firmware update: firmware update is already in progress`
)
const logConfiguration = Configuration.getConfigurationSection<LogConfiguration>(
ConfigurationSection.log
)
- const logFiles = readdirSync(resolve(dirname(fileURLToPath(import.meta.url)), '../'))
+ const logFiles = readdirSync(
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ resolve((fileURLToPath(import.meta.url), '../', dirname(logConfiguration.file!)))
+ )
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
.filter(file => file.endsWith(extname(logConfiguration.file!)))
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
})
ftpClient?.close()
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GetDiagnosticsResponse>(
+ return handleIncomingRequestError<GetDiagnosticsResponse>(
chargingStation,
OCPP16IncomingRequestCommand.GET_DIAGNOSTICS,
error as Error,
return OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_UNKNOWN_VENDOR_ID
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16DataTransferResponse>(
+ return handleIncomingRequestError<OCPP16DataTransferResponse>(
chargingStation,
OCPP16IncomingRequestCommand.DATA_TRANSFER,
error as Error,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
commandPayload.expiryDate = convertToDate(commandPayload.expiryDate)!
const { reservationId, idTag, connectorId } = commandPayload
+ if (!chargingStation.hasConnector(connectorId)) {
+ logger.error(
+ `${chargingStation.logPrefix()} Trying to reserve a non existing connector id ${connectorId}`
+ )
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ if (connectorId > 0 && !chargingStation.isConnectorAvailable(connectorId)) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ if (connectorId === 0 && !chargingStation.getReserveConnectorZeroSupported()) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ if (!(await OCPP16ServiceUtils.isIdTagAuthorized(chargingStation, connectorId, idTag))) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)!
+ resetAuthorizeConnectorStatus(connectorStatus)
let response: OCPP16ReserveNowResponse
try {
- if (connectorId > 0 && !chargingStation.isConnectorAvailable(connectorId)) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
- if (connectorId === 0 && !chargingStation.getReserveConnectorZeroSupported()) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
- if (!(await OCPP16ServiceUtils.isIdTagAuthorized(chargingStation, connectorId, idTag))) {
- return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
- }
await removeExpiredReservations(chargingStation)
- switch (chargingStation.getConnectorStatus(connectorId)?.status) {
+ switch (connectorStatus.status) {
case OCPP16ChargePointStatus.Faulted:
response = OCPP16Constants.OCPP_RESERVATION_RESPONSE_FAULTED
break
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.getConnectorStatus(connectorId)!.status = OCPP16ChargePointStatus.Available
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16ReserveNowResponse>(
+ return handleIncomingRequestError<OCPP16ReserveNowResponse>(
chargingStation,
OCPP16IncomingRequestCommand.RESERVE_NOW,
error as Error,
return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_ACCEPTED
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GenericResponse>(
+ return handleIncomingRequestError<GenericResponse>(
chargingStation,
OCPP16IncomingRequestCommand.CANCEL_RESERVATION,
error as Error,
- { errorResponse: OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED }
+ {
+ errorResponse: OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED
+ }
)!
}
}
): Promise<ResponseType> {
// FIXME?: add sanity checks on charging station availability, connector availability, connector status, etc.
if (OCPP16ServiceUtils.isRequestCommandSupported(chargingStation, commandName)) {
- // Post request actions hook
+ // Pre request actions hook
switch (commandName) {
case OCPP16RequestCommand.START_TRANSACTION:
await OCPP16ServiceUtils.sendAndSetConnectorStatus(
// OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
throw new OCPPError(
ErrorType.NOT_SUPPORTED,
- `Unsupported OCPP command '${commandName}'`,
+ `Unsupported OCPP command ${commandName}`,
commandName,
commandParams
)
throw new OCPPError(
ErrorType.NOT_SUPPORTED,
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Unsupported OCPP command '${commandName}'`,
+ `Unsupported OCPP command ${commandName}`,
commandName,
commandParams
)
import { OCPPError } from '../../../exception/index.js'
import {
type ChangeConfigurationResponse,
+ ChargingStationEvents,
ErrorType,
type GenericResponse,
type GetConfigurationResponse,
// Throw exception
throw new OCPPError(
ErrorType.NOT_IMPLEMENTED,
- `'${commandName}' is not implemented to handle response PDU ${JSON.stringify(
+ `${commandName} is not implemented to handle response PDU ${JSON.stringify(
payload,
undefined,
2
chargingStation: ChargingStation,
payload: OCPP16BootNotificationResponse
): void {
- if (payload.status === RegistrationStatusEnumType.ACCEPTED) {
- addConfigurationKey(
- chargingStation,
- OCPP16StandardParametersKey.HeartbeatInterval,
- payload.interval.toString(),
- {},
- { overwrite: true, save: true }
- )
- addConfigurationKey(
- chargingStation,
- OCPP16StandardParametersKey.HeartBeatInterval,
- payload.interval.toString(),
- { visible: false },
- { overwrite: true, save: true }
- )
- OCPP16ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval)
- }
if (Object.values(RegistrationStatusEnumType).includes(payload.status)) {
+ chargingStation.bootNotificationResponse = payload
+ if (chargingStation.isRegistered()) {
+ chargingStation.emit(ChargingStationEvents.registered)
+ if (chargingStation.inAcceptedState()) {
+ addConfigurationKey(
+ chargingStation,
+ OCPP16StandardParametersKey.HeartbeatInterval,
+ payload.interval.toString(),
+ {},
+ { overwrite: true, save: true }
+ )
+ addConfigurationKey(
+ chargingStation,
+ OCPP16StandardParametersKey.HeartBeatInterval,
+ payload.interval.toString(),
+ { visible: false },
+ { overwrite: true, save: true }
+ )
+ chargingStation.emit(ChargingStationEvents.accepted)
+ }
+ } else if (chargingStation.inRejectedState()) {
+ chargingStation.emit(ChargingStationEvents.rejected)
+ }
const logMsg = `${chargingStation.logPrefix()} Charging station in '${
payload.status
}' state on the central server`
? logger.warn(logMsg)
: logger.info(logMsg)
} else {
+ delete chargingStation.bootNotificationResponse
logger.error(
`${chargingStation.logPrefix()} Charging station boot notification response received: %j with undefined registration status`,
payload
authorizeConnectorStatus.idTagAuthorized = false
delete authorizeConnectorStatus.authorizeIdTag
logger.debug(
- `${chargingStation.logPrefix()} idTag '${requestPayload.idTag}' rejected with status '${
- payload.idTagInfo.status
- }'`
+ `${chargingStation.logPrefix()} idTag '${
+ requestPayload.idTag
+ }' rejected with status '${payload.idTagInfo.status}'`
)
}
} else {
}
if (
connectorStatus?.idTagAuthorized === true &&
+ connectorStatus.authorizeIdTag != null &&
connectorStatus.authorizeIdTag !== requestPayload.idTag
) {
logger.error(
}
if (
connectorStatus?.idTagLocalAuthorized === true &&
+ connectorStatus.localAuthorizeIdTag != null &&
connectorStatus.localAuthorizeIdTag !== requestPayload.idTag
) {
logger.error(
connectorStatus?.status !== OCPP16ChargePointStatus.Preparing
) {
logger.error(
- `${chargingStation.logPrefix()} Trying to start a transaction on connector id ${connectorId} with status ${connectorStatus?.status}`
+ `${chargingStation.logPrefix()} Trying to start a transaction on connector id ${connectorId} with status ${
+ connectorStatus?.status
+ }`
)
return
}
logger.warn(
`${chargingStation.logPrefix()} Reserved transaction ${
payload.transactionId
- } started with a different idTag ${requestPayload.idTag} than the reservation one ${
- reservation.idTag
- }`
+ } started with a different idTag ${
+ requestPayload.idTag
+ } than the reservation one ${reservation.idTag}`
)
}
if (hasReservationExpired(reservation)) {
OCPP16ChargePointStatus.Charging
)
logger.info(
- `${chargingStation.logPrefix()} Transaction with id ${
- payload.transactionId
- } STARTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for idTag '${
- requestPayload.idTag
- }'`
+ `${chargingStation.logPrefix()} Transaction with id ${payload.transactionId} STARTED on ${
+ chargingStation.stationInfo?.chargingStationId
+ }#${connectorId} for idTag '${requestPayload.idTag}'`
)
if (chargingStation.stationInfo?.powerSharedByConnectors === true) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
from: OCPP20ConnectorStatusEnumType.Available,
to: OCPP20ConnectorStatusEnumType.Unavailable
},
- { from: OCPP20ConnectorStatusEnumType.Available, to: OCPP20ConnectorStatusEnumType.Faulted },
+ {
+ from: OCPP20ConnectorStatusEnumType.Available,
+ to: OCPP20ConnectorStatusEnumType.Faulted
+ },
{ to: OCPP20ConnectorStatusEnumType.Unavailable },
{
from: OCPP20ConnectorStatusEnumType.Unavailable,
to: OCPP20ConnectorStatusEnumType.Faulted
},
{ to: OCPP20ConnectorStatusEnumType.Faulted },
- { from: OCPP20ConnectorStatusEnumType.Faulted, to: OCPP20ConnectorStatusEnumType.Available },
+ {
+ from: OCPP20ConnectorStatusEnumType.Faulted,
+ to: OCPP20ConnectorStatusEnumType.Available
+ },
{
from: OCPP20ConnectorStatusEnumType.Faulted,
to: OCPP20ConnectorStatusEnumType.Unavailable
[
{ to: OCPP20ConnectorStatusEnumType.Available },
// { from: OCPP20ConnectorStatusEnumType.Available, to: OCPP20ConnectorStatusEnumType.Available },
- { from: OCPP20ConnectorStatusEnumType.Available, to: OCPP20ConnectorStatusEnumType.Occupied },
- { from: OCPP20ConnectorStatusEnumType.Available, to: OCPP20ConnectorStatusEnumType.Reserved },
+ {
+ from: OCPP20ConnectorStatusEnumType.Available,
+ to: OCPP20ConnectorStatusEnumType.Occupied
+ },
+ {
+ from: OCPP20ConnectorStatusEnumType.Available,
+ to: OCPP20ConnectorStatusEnumType.Reserved
+ },
{
from: OCPP20ConnectorStatusEnumType.Available,
to: OCPP20ConnectorStatusEnumType.Unavailable
},
- { from: OCPP20ConnectorStatusEnumType.Available, to: OCPP20ConnectorStatusEnumType.Faulted },
+ {
+ from: OCPP20ConnectorStatusEnumType.Available,
+ to: OCPP20ConnectorStatusEnumType.Faulted
+ },
// { to: OCPP20ConnectorStatusEnumType.Occupied },
- { from: OCPP20ConnectorStatusEnumType.Occupied, to: OCPP20ConnectorStatusEnumType.Available },
+ {
+ from: OCPP20ConnectorStatusEnumType.Occupied,
+ to: OCPP20ConnectorStatusEnumType.Available
+ },
// { from: OCPP20ConnectorStatusEnumType.Occupied, to: OCPP20ConnectorStatusEnumType.Occupied },
// { from: OCPP20ConnectorStatusEnumType.Occupied, to: OCPP20ConnectorStatusEnumType.Reserved },
{
from: OCPP20ConnectorStatusEnumType.Occupied,
to: OCPP20ConnectorStatusEnumType.Unavailable
},
- { from: OCPP20ConnectorStatusEnumType.Occupied, to: OCPP20ConnectorStatusEnumType.Faulted },
+ {
+ from: OCPP20ConnectorStatusEnumType.Occupied,
+ to: OCPP20ConnectorStatusEnumType.Faulted
+ },
// { to: OCPP20ConnectorStatusEnumType.Reserved },
- { from: OCPP20ConnectorStatusEnumType.Reserved, to: OCPP20ConnectorStatusEnumType.Available },
- { from: OCPP20ConnectorStatusEnumType.Reserved, to: OCPP20ConnectorStatusEnumType.Occupied },
+ {
+ from: OCPP20ConnectorStatusEnumType.Reserved,
+ to: OCPP20ConnectorStatusEnumType.Available
+ },
+ {
+ from: OCPP20ConnectorStatusEnumType.Reserved,
+ to: OCPP20ConnectorStatusEnumType.Occupied
+ },
// { from: OCPP20ConnectorStatusEnumType.Reserved, to: OCPP20ConnectorStatusEnumType.Reserved },
{
from: OCPP20ConnectorStatusEnumType.Reserved,
to: OCPP20ConnectorStatusEnumType.Unavailable
},
- { from: OCPP20ConnectorStatusEnumType.Reserved, to: OCPP20ConnectorStatusEnumType.Faulted },
+ {
+ from: OCPP20ConnectorStatusEnumType.Reserved,
+ to: OCPP20ConnectorStatusEnumType.Faulted
+ },
{ to: OCPP20ConnectorStatusEnumType.Unavailable },
{
from: OCPP20ConnectorStatusEnumType.Unavailable,
to: OCPP20ConnectorStatusEnumType.Faulted
},
{ to: OCPP20ConnectorStatusEnumType.Faulted },
- { from: OCPP20ConnectorStatusEnumType.Faulted, to: OCPP20ConnectorStatusEnumType.Available },
- { from: OCPP20ConnectorStatusEnumType.Faulted, to: OCPP20ConnectorStatusEnumType.Occupied },
- { from: OCPP20ConnectorStatusEnumType.Faulted, to: OCPP20ConnectorStatusEnumType.Reserved },
+ {
+ from: OCPP20ConnectorStatusEnumType.Faulted,
+ to: OCPP20ConnectorStatusEnumType.Available
+ },
+ {
+ from: OCPP20ConnectorStatusEnumType.Faulted,
+ to: OCPP20ConnectorStatusEnumType.Occupied
+ },
+ {
+ from: OCPP20ConnectorStatusEnumType.Faulted,
+ to: OCPP20ConnectorStatusEnumType.Reserved
+ },
{
from: OCPP20ConnectorStatusEnumType.Faulted,
to: OCPP20ConnectorStatusEnumType.Unavailable
// Throw exception
throw new OCPPError(
ErrorType.NOT_IMPLEMENTED,
- `'${commandName}' is not implemented to handle request PDU ${JSON.stringify(
+ `${commandName} is not implemented to handle request PDU ${JSON.stringify(
commandPayload,
undefined,
2
): Promise<ResponseType> {
// FIXME?: add sanity checks on charging station availability, connector availability, connector status, etc.
if (OCPP20ServiceUtils.isRequestCommandSupported(chargingStation, commandName)) {
- // TODO: post request actions hook
+ // TODO: pre request actions hook
return (await this.sendMessage(
chargingStation,
generateUUID(),
// OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
throw new OCPPError(
ErrorType.NOT_SUPPORTED,
- `Unsupported OCPP command '${commandName}'`,
+ `Unsupported OCPP command ${commandName}`,
commandName,
commandParams
)
throw new OCPPError(
ErrorType.NOT_SUPPORTED,
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Unsupported OCPP command '${commandName}'`,
+ `Unsupported OCPP command ${commandName}`,
commandName,
commandParams
)
import { addConfigurationKey, type ChargingStation } from '../../../charging-station/index.js'
import { OCPPError } from '../../../exception/index.js'
import {
+ ChargingStationEvents,
ErrorType,
type JsonType,
type OCPP20BootNotificationResponse,
// Throw exception
throw new OCPPError(
ErrorType.NOT_IMPLEMENTED,
- `'${commandName}' is not implemented to handle response PDU ${JSON.stringify(
+ `${commandName} is not implemented to handle response PDU ${JSON.stringify(
payload,
undefined,
2
chargingStation: ChargingStation,
payload: OCPP20BootNotificationResponse
): void {
- if (payload.status === RegistrationStatusEnumType.ACCEPTED) {
- addConfigurationKey(
- chargingStation,
- OCPP20OptionalVariableName.HeartbeatInterval,
- payload.interval.toString(),
- {},
- { overwrite: true, save: true }
- )
- OCPP20ServiceUtils.startHeartbeatInterval(chargingStation, payload.interval)
- }
if (Object.values(RegistrationStatusEnumType).includes(payload.status)) {
+ chargingStation.bootNotificationResponse = payload
+ if (chargingStation.isRegistered()) {
+ chargingStation.emit(ChargingStationEvents.registered)
+ if (chargingStation.inAcceptedState()) {
+ addConfigurationKey(
+ chargingStation,
+ OCPP20OptionalVariableName.HeartbeatInterval,
+ payload.interval.toString(),
+ {},
+ { overwrite: true, save: true }
+ )
+ chargingStation.emit(ChargingStationEvents.accepted)
+ }
+ } else if (chargingStation.inRejectedState()) {
+ chargingStation.emit(ChargingStationEvents.rejected)
+ }
const logMsg = `${chargingStation.logPrefix()} Charging station in '${
payload.status
}' state on the central server`
? logger.warn(logMsg)
: logger.info(logMsg)
} else {
+ delete chargingStation.bootNotificationResponse
logger.error(
`${chargingStation.logPrefix()} Charging station boot notification response received: %j with undefined registration status`,
payload
static readonly OCPP_REQUEST_EMPTY = Constants.EMPTY_FROZEN_OBJECT
static readonly OCPP_RESPONSE_EMPTY = Constants.EMPTY_FROZEN_OBJECT
- static readonly OCPP_RESPONSE_ACCEPTED = Object.freeze({ status: GenericStatus.Accepted })
- static readonly OCPP_RESPONSE_REJECTED = Object.freeze({ status: GenericStatus.Rejected })
+ static readonly OCPP_RESPONSE_ACCEPTED = Object.freeze({
+ status: GenericStatus.Accepted
+ })
+
+ static readonly OCPP_RESPONSE_REJECTED = Object.freeze({
+ status: GenericStatus.Rejected
+ })
static readonly OCPP_CONFIGURATION_RESPONSE_ACCEPTED = Object.freeze({
status: ConfigurationStatus.ACCEPTED
status: ClearChargingProfileStatus.UNKNOWN
})
- static readonly OCPP_RESPONSE_UNLOCKED = Object.freeze({ status: UnlockStatus.UNLOCKED })
+ static readonly OCPP_RESPONSE_UNLOCKED = Object.freeze({
+ status: UnlockStatus.UNLOCKED
+ })
+
static readonly OCPP_RESPONSE_UNLOCK_FAILED = Object.freeze({
status: UnlockStatus.UNLOCK_FAILED
})
import { OCPPError } from '../../exception/index.js'
import type {
ClearCacheResponse,
- HandleErrorParams,
IncomingRequestCommand,
JsonType,
OCPPVersion
} from '../../types/index.js'
-import { logger, setDefaultErrorParams } from '../../utils/index.js'
+import { logger } from '../../utils/index.js'
import { OCPPConstants } from './OCPPConstants.js'
-import { OCPPServiceUtils } from './OCPPServiceUtils.js'
+import { ajvErrorsToErrorType } from './OCPPServiceUtils.js'
type Ajv = _Ajv.default
// eslint-disable-next-line @typescript-eslint/no-redeclare
const Ajv = _Ajv.default
return OCPPIncomingRequestService.instance as T
}
- protected handleIncomingRequestError<T extends JsonType>(
- chargingStation: ChargingStation,
- commandName: IncomingRequestCommand,
- error: Error,
- params: HandleErrorParams<T> = { throwError: true, consoleOut: false }
- ): T | undefined {
- setDefaultErrorParams(params)
- logger.error(
- `${chargingStation.logPrefix()} ${moduleName}.handleIncomingRequestError: Incoming request command '${commandName}' error:`,
- error
- )
- if (params.throwError === false && params.errorResponse != null) {
- return params.errorResponse
- }
- if (params.throwError === true && params.errorResponse == null) {
- throw error
- }
- if (params.throwError === true && params.errorResponse != null) {
- return params.errorResponse
- }
- }
-
protected validateIncomingRequestPayload<T extends JsonType>(
chargingStation: ChargingStation,
commandName: IncomingRequestCommand,
validate?.errors
)
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate?.errors),
+ ajvErrorsToErrorType(validate?.errors),
'Incoming request PDU is invalid',
commandName,
JSON.stringify(validate?.errors, undefined, 2)
} from '../../utils/index.js'
import { OCPPConstants } from './OCPPConstants.js'
import type { OCPPResponseService } from './OCPPResponseService.js'
-import { OCPPServiceUtils } from './OCPPServiceUtils.js'
+import {
+ ajvErrorsToErrorType,
+ convertDateToISOString,
+ getMessageTypeString
+} from './OCPPServiceUtils.js'
type Ajv = _Ajv.default
// eslint-disable-next-line @typescript-eslint/no-redeclare
const Ajv = _Ajv.default
commandName
)
} catch (error) {
- handleSendMessageError(chargingStation, commandName, error as Error, {
- throwError: true
- })
+ handleSendMessageError(
+ chargingStation,
+ commandName,
+ MessageType.CALL_RESULT_MESSAGE,
+ error as Error,
+ {
+ throwError: true
+ }
+ )
return null
}
}
commandName
)
} catch (error) {
- handleSendMessageError(chargingStation, commandName, error as Error)
+ handleSendMessageError(
+ chargingStation,
+ commandName,
+ MessageType.CALL_ERROR_MESSAGE,
+ error as Error
+ )
return null
}
}
params
)
} catch (error) {
- handleSendMessageError(chargingStation, commandName, error as Error, {
- throwError: params.throwError
- })
+ handleSendMessageError(
+ chargingStation,
+ commandName,
+ MessageType.CALL_MESSAGE,
+ error as Error,
+ {
+ throwError: params.throwError
+ }
+ )
return null
}
}
}
const validate = this.payloadValidateFunctions.get(commandName as RequestCommand)
payload = clone<T>(payload)
- OCPPServiceUtils.convertDateToISOString<T>(payload)
+ convertDateToISOString<T>(payload)
if (validate?.(payload) === true) {
return true
}
)
// OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate?.errors),
+ ajvErrorsToErrorType(validate?.errors),
'Request PDU is invalid',
commandName,
JSON.stringify(validate?.errors, undefined, 2)
commandName as IncomingRequestCommand
)
payload = clone<T>(payload)
- OCPPServiceUtils.convertDateToISOString<T>(payload)
+ convertDateToISOString<T>(payload)
if (validate?.(payload) === true) {
return true
}
)
// OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate?.errors),
+ ajvErrorsToErrorType(validate?.errors),
'Response PDU is invalid',
commandName,
JSON.stringify(validate?.errors, undefined, 2)
)
}
logger.error(
- `${chargingStation.logPrefix()} Error occurred at ${OCPPServiceUtils.getMessageTypeString(
+ `${chargingStation.logPrefix()} Error occurred at ${getMessageTypeString(
messageType
)} command ${commandName} with PDU %j:`,
messagePayload,
clearTimeout(sendTimeout)
if (error == null) {
logger.debug(
- `${chargingStation.logPrefix()} >> Command '${commandName}' sent ${OCPPServiceUtils.getMessageTypeString(
+ `${chargingStation.logPrefix()} >> Command '${commandName}' sent ${getMessageTypeString(
messageType
)} payload: ${messageToSend}`
)
params.skipBufferingOnError === false ? '' : 'non '
}buffered message id '${messageId}' with content '${messageToSend}'`,
commandName,
- { name: error.name, message: error.message, stack: error.stack }
+ {
+ name: error.name,
+ message: error.message,
+ stack: error.stack
+ }
)
)
}
RequestCommand
} from '../../types/index.js'
import { Constants, logger } from '../../utils/index.js'
-import { OCPPServiceUtils } from './OCPPServiceUtils.js'
+import { ajvErrorsToErrorType } from './OCPPServiceUtils.js'
type Ajv = _Ajv.default
// eslint-disable-next-line @typescript-eslint/no-redeclare
const Ajv = _Ajv.default
validate?.errors
)
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate?.errors),
+ ajvErrorsToErrorType(validate?.errors),
'Response PDU is invalid',
commandName,
JSON.stringify(validate?.errors, undefined, 2)
return transitionAllowed
}
+export const ajvErrorsToErrorType = (errors: ErrorObject[] | undefined | null): ErrorType => {
+ if (isNotEmptyArray(errors)) {
+ for (const error of errors as DefinedError[]) {
+ switch (error.keyword) {
+ case 'type':
+ return ErrorType.TYPE_CONSTRAINT_VIOLATION
+ case 'dependencies':
+ case 'required':
+ return ErrorType.OCCURRENCE_CONSTRAINT_VIOLATION
+ case 'pattern':
+ case 'format':
+ return ErrorType.PROPERTY_CONSTRAINT_VIOLATION
+ }
+ }
+ }
+ return ErrorType.FORMAT_VIOLATION
+}
+
+export const convertDateToISOString = <T extends JsonType>(object: T): void => {
+ for (const key in object) {
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
+ if (isDate(object![key])) {
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
+ (object![key] as string) = (object![key] as Date).toISOString()
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-condition
+ } else if (typeof object![key] === 'object' && object![key] !== null) {
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
+ convertDateToISOString<T>(object![key] as T)
+ }
+ }
+}
+
export const buildMeterValue = (
chargingStation: ChargingStation,
connectorId: number,
): MeterValue => {
const connector = chargingStation.getConnectorStatus(connectorId)
let meterValue: MeterValue
+ let connectorMaximumAvailablePower: number | undefined
let socSampledValueTemplate: SampledValueTemplate | undefined
let voltageSampledValueTemplate: SampledValueTemplate | undefined
let powerSampledValueTemplate: SampledValueTemplate | undefined
const socMinimumValue = socSampledValueTemplate.minimumValue ?? 0
const socSampledValueTemplateValue = isNotEmptyString(socSampledValueTemplate.value)
? getRandomFloatFluctuatedRounded(
- parseInt(socSampledValueTemplate.value),
+ Number.parseInt(socSampledValueTemplate.value),
socSampledValueTemplate.fluctuationPercent ?? Constants.DEFAULT_FLUCTUATION_PERCENT
)
: randomInt(socMinimumValue, socMaximumValue)
`${chargingStation.logPrefix()} MeterValues measurand ${
meterValue.sampledValue[sampledValuesIndex].measurand ??
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
- }: connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${socMinimumValue}/${
+ }: connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${socMinimumValue}/${
meterValue.sampledValue[sampledValuesIndex].value
}/${socMaximumValue}`
)
)
if (voltageSampledValueTemplate != null) {
const voltageSampledValueTemplateValue = isNotEmptyString(voltageSampledValueTemplate.value)
- ? parseInt(voltageSampledValueTemplate.value)
+ ? Number.parseInt(voltageSampledValueTemplate.value)
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.stationInfo.voltageOut!
const fluctuationPercent =
const voltagePhaseLineToNeutralSampledValueTemplateValue = isNotEmptyString(
voltagePhaseLineToNeutralSampledValueTemplate.value
)
- ? parseInt(voltagePhaseLineToNeutralSampledValueTemplate.value)
+ ? Number.parseInt(voltagePhaseLineToNeutralSampledValueTemplate.value)
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.stationInfo.voltageOut!
const fluctuationPhaseToNeutralPercent =
const voltagePhaseLineToLineSampledValueTemplateValue = isNotEmptyString(
voltagePhaseLineToLineSampledValueTemplate.value
)
- ? parseInt(voltagePhaseLineToLineSampledValueTemplate.value)
+ ? Number.parseInt(voltagePhaseLineToLineSampledValueTemplate.value)
: voltagePhaseLineToLineValueRounded
const fluctuationPhaseLineToLinePercent =
voltagePhaseLineToLineSampledValueTemplate.fluctuationPercent ??
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const powerMeasurandValues: MeasurandValues = {} as MeasurandValues
const unitDivider = powerSampledValueTemplate.unit === MeterValueUnit.KILO_WATT ? 1000 : 1
- const connectorMaximumAvailablePower =
+ connectorMaximumAvailablePower =
chargingStation.getConnectorMaximumAvailablePower(connectorId)
const connectorMaximumPower = Math.round(connectorMaximumAvailablePower)
const connectorMaximumPowerPerPhase = Math.round(
`${chargingStation.logPrefix()} MeterValues measurand ${
meterValue.sampledValue[sampledValuesIndex].measurand ??
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
- }: connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${connectorMinimumPowerRounded}/${
+ }: connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${connectorMinimumPowerRounded}/${
meterValue.sampledValue[sampledValuesIndex].value
}/${connectorMaximumPowerRounded}`
)
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
}: phase ${
meterValue.sampledValue[sampledValuesPerPhaseIndex].phase
- }, connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${connectorMinimumPowerPerPhaseRounded}/${
+ }, connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${connectorMinimumPowerPerPhaseRounded}/${
meterValue.sampledValue[sampledValuesPerPhaseIndex].value
}/${connectorMaximumPowerPerPhaseRounded}`
)
} measurand value`
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const currentMeasurandValues: MeasurandValues = {} as MeasurandValues
- const connectorMaximumAvailablePower =
- chargingStation.getConnectorMaximumAvailablePower(connectorId)
+ connectorMaximumAvailablePower == null &&
+ (connectorMaximumAvailablePower =
+ chargingStation.getConnectorMaximumAvailablePower(connectorId))
const connectorMinimumAmperage = currentSampledValueTemplate.minimumValue ?? 0
let connectorMaximumAmperage: number
switch (chargingStation.stationInfo.currentOutType) {
`${chargingStation.logPrefix()} MeterValues measurand ${
meterValue.sampledValue[sampledValuesIndex].measurand ??
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
- }: connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${connectorMinimumAmperage}/${
+ }: connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${connectorMinimumAmperage}/${
meterValue.sampledValue[sampledValuesIndex].value
}/${connectorMaximumAmperage}`
)
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
}: phase ${
meterValue.sampledValue[sampledValuesPerPhaseIndex].phase
- }, connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${connectorMinimumAmperage}/${
+ }, connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${connectorMinimumAmperage}/${
meterValue.sampledValue[sampledValuesPerPhaseIndex].value
}/${connectorMaximumAmperage}`
)
checkMeasurandPowerDivider(chargingStation, energySampledValueTemplate.measurand)
const unitDivider =
energySampledValueTemplate.unit === MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1
- const connectorMaximumAvailablePower =
- chargingStation.getConnectorMaximumAvailablePower(connectorId)
+ connectorMaximumAvailablePower == null &&
+ (connectorMaximumAvailablePower =
+ chargingStation.getConnectorMaximumAvailablePower(connectorId))
const connectorMaximumEnergyRounded = roundTo(
(connectorMaximumAvailablePower * interval) / (3600 * 1000),
2
`${chargingStation.logPrefix()} MeterValues measurand ${
meterValue.sampledValue[sampledValuesIndex].measurand ??
MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER
- }: connector id ${connectorId}, transaction id ${connector?.transactionId}, value: ${connectorMinimumEnergyRounded}/${energyValueRounded}/${connectorMaximumEnergyRounded}, duration: ${interval}ms`
+ }: connector id ${connectorId}, transaction id ${
+ connector?.transactionId
+ }, value: ${connectorMinimumEnergyRounded}/${energyValueRounded}/${connectorMaximumEnergyRounded}, duration: ${interval}ms`
)
}
}
value: string | undefined,
maxLimit: number,
minLimit: number,
- options?: { limitationEnabled?: boolean, fallbackValue?: number, unitMultiplier?: number }
+ options?: {
+ limitationEnabled?: boolean
+ fallbackValue?: number
+ unitMultiplier?: number
+ }
): number => {
options = {
...{
},
...options
}
- const parsedValue = parseInt(value ?? '')
+ const parsedValue = Number.parseInt(value ?? '')
if (options.limitationEnabled === true) {
return max(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- min((!isNaN(parsedValue) ? parsedValue : Infinity) * options.unitMultiplier!, maxLimit),
+ min(
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ (!isNaN(parsedValue) ? parsedValue : Number.POSITIVE_INFINITY) * options.unitMultiplier!,
+ maxLimit
+ ),
minLimit
)
}
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class OCPPServiceUtils {
- public static readonly getMessageTypeString = getMessageTypeString
public static readonly sendAndSetConnectorStatus = sendAndSetConnectorStatus
public static readonly restoreConnectorStatus = restoreConnectorStatus
public static readonly isIdTagAuthorized = isIdTagAuthorized
// This is intentional
}
- public static ajvErrorsToErrorType (errors: ErrorObject[] | undefined | null): ErrorType {
- if (isNotEmptyArray(errors)) {
- for (const error of errors as DefinedError[]) {
- switch (error.keyword) {
- case 'type':
- return ErrorType.TYPE_CONSTRAINT_VIOLATION
- case 'dependencies':
- case 'required':
- return ErrorType.OCCURRENCE_CONSTRAINT_VIOLATION
- case 'pattern':
- case 'format':
- return ErrorType.PROPERTY_CONSTRAINT_VIOLATION
- }
- }
- }
- return ErrorType.FORMAT_VIOLATION
- }
-
public static isRequestCommandSupported (
chargingStation: ChargingStation,
command: RequestCommand
return true
}
- public static convertDateToISOString<T extends JsonType>(object: T): void {
- for (const key in object) {
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
- if (isDate(object![key])) {
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
- (object![key] as string) = (object![key] as Date).toISOString()
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-condition
- } else if (typeof object![key] === 'object' && object![key] !== null) {
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion
- OCPPServiceUtils.convertDateToISOString<T>(object![key] as T)
- }
- }
- }
-
- public static startHeartbeatInterval (chargingStation: ChargingStation, interval: number): void {
- if (chargingStation.heartbeatSetInterval == null) {
- chargingStation.startHeartbeat()
- } else if (chargingStation.getHeartbeatInterval() !== interval) {
- chargingStation.restartHeartbeat()
- }
- }
-
protected static parseJsonSchemaFile<T extends JsonType>(
relativePath: string,
ocppVersion: OCPPVersion,
const authorizationProtocol = req.headers['sec-websocket-protocol']?.split(/,\s+/).pop()
const [username, password] = getUsernameAndPasswordFromAuthorizationToken(
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- `${authorizationProtocol}${Array(((4 - (authorizationProtocol!.length % 4)) % 4) + 1).join('=')}`
+ `${authorizationProtocol}${Array(((4 - (authorizationProtocol!.length % 4)) % 4) + 1).join(
+ '='
+ )}`
.split('.')
.pop() ?? '',
next
uiServerConfiguration.type as ApplicationProtocol
)
) {
- // eslint-disable-next-line @typescript-eslint/no-base-to-string
- const logMsg = `Unknown application protocol type '${uiServerConfiguration.type}' in '${ConfigurationSection.uiServer}' configuration section from values '${ApplicationProtocol.toString()}', defaulting to '${
+ const logMsg = `Unknown application protocol type '${uiServerConfiguration.type}' in '${
+ ConfigurationSection.uiServer
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
+ }' configuration section from values '${ApplicationProtocol.toString()}', defaulting to '${
ApplicationProtocol.WS
}'`
logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`)
import { parentPort } from 'node:worker_threads'
import { secondsToMilliseconds } from 'date-fns'
+import { CircularBuffer } from 'mnemonist'
import { is, mean, median } from 'rambda'
import { BaseError } from '../exception/index.js'
} from '../types/index.js'
import {
buildPerformanceStatisticsMessage,
- CircularArray,
Configuration,
Constants,
extractTimeSeriesValues,
)
if (performanceStorageConfiguration.enabled === true) {
logger.info(
- `${this.logPrefix()} storage enabled: type ${performanceStorageConfiguration.type}, uri: ${
- performanceStorageConfiguration.uri
- }`
+ `${this.logPrefix()} storage enabled: type ${
+ performanceStorageConfiguration.type
+ }, uri: ${performanceStorageConfiguration.uri}`
)
}
}
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.minTimeMeasurement = min(
entry.duration,
- this.statistics.statisticsData.get(entry.name)?.minTimeMeasurement ?? Infinity
+ this.statistics.statisticsData.get(entry.name)?.minTimeMeasurement ?? Number.POSITIVE_INFINITY
)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.maxTimeMeasurement = max(
entry.duration,
- this.statistics.statisticsData.get(entry.name)?.maxTimeMeasurement ?? -Infinity
+ this.statistics.statisticsData.get(entry.name)?.maxTimeMeasurement ?? Number.NEGATIVE_INFINITY
)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.totalTimeMeasurement =
(this.statistics.statisticsData.get(entry.name)?.totalTimeMeasurement ?? 0) + entry.duration
- this.statistics.statisticsData.get(entry.name)?.measurementTimeSeries instanceof CircularArray
- ? this.statistics.statisticsData
- .get(entry.name)
- ?.measurementTimeSeries?.push({ timestamp: entry.startTime, value: entry.duration })
- : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- (this.statistics.statisticsData.get(entry.name)!.measurementTimeSeries =
- new CircularArray<TimestampedData>(Constants.DEFAULT_CIRCULAR_BUFFER_CAPACITY, {
- timestamp: entry.startTime,
- value: entry.duration
- }))
+ if (
+ !(
+ this.statistics.statisticsData.get(entry.name)?.measurementTimeSeries instanceof
+ CircularBuffer
+ )
+ ) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.statistics.statisticsData.get(entry.name)!.measurementTimeSeries =
+ new CircularBuffer<TimestampedData>(
+ Array<TimestampedData>,
+ Constants.DEFAULT_CIRCULAR_BUFFER_CAPACITY
+ )
+ }
+ this.statistics.statisticsData.get(entry.name)?.measurementTimeSeries?.push({
+ timestamp: entry.startTime,
+ value: entry.duration
+ })
const timeMeasurementValues = extractTimeSeriesValues(
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.statistics.statisticsData.get(entry.name)!.measurementTimeSeries!
+ this.statistics.statisticsData.get(entry.name)!
+ .measurementTimeSeries as CircularBuffer<TimestampedData>
)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.avgTimeMeasurement = mean(timeMeasurementValues)
}))
} satisfies PerformanceRecord)
} catch (error) {
- this.handleDBError(this.storageType, error as Error, Constants.PERFORMANCE_RECORDS_TABLE)
+ this.handleDBStorageError(
+ this.storageType,
+ error as Error,
+ Constants.PERFORMANCE_RECORDS_TABLE
+ )
}
}
}
}
} catch (error) {
- this.handleDBError(this.storageType, error as Error)
+ this.handleDBStorageError(this.storageType, error as Error)
}
}
delete this.orm
}
} catch (error) {
- this.handleDBError(this.storageType, error as Error)
+ this.handleDBStorageError(this.storageType, error as Error)
}
}
await this.client
?.db(this.dbName)
.collection<Statistics>(Constants.PERFORMANCE_RECORDS_TABLE)
- .replaceOne({ id: performanceStatistics.id }, performanceStatistics, { upsert: true })
+ .replaceOne({ id: performanceStatistics.id }, performanceStatistics, {
+ upsert: true
+ })
} catch (error) {
- this.handleDBError(StorageType.MONGO_DB, error as Error, Constants.PERFORMANCE_RECORDS_TABLE)
+ this.handleDBStorageError(
+ StorageType.MONGO_DB,
+ error as Error,
+ Constants.PERFORMANCE_RECORDS_TABLE
+ )
}
}
this.connected = true
}
} catch (error) {
- this.handleDBError(StorageType.MONGO_DB, error as Error)
+ this.handleDBStorageError(StorageType.MONGO_DB, error as Error)
}
}
this.connected = false
}
} catch (error) {
- this.handleDBError(StorageType.MONGO_DB, error as Error)
+ this.handleDBStorageError(StorageType.MONGO_DB, error as Error)
}
}
this.logPrefix = logPrefix
}
- protected handleDBError (
+ protected handleDBStorageError (
type: StorageType,
error: Error,
table?: string,
- params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
+ params: HandleErrorParams<EmptyObject> = {
+ throwError: false,
+ consoleOut: false
+ }
): void {
- setDefaultErrorParams(params, { throwError: false, consoleOut: false })
+ params = setDefaultErrorParams(params, { throwError: false, consoleOut: false })
const inTableOrCollectionStr = table != null && ` in table or collection '${table}'`
logger.error(
`${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${
// Mongo Connection and Query
if (config?.mongoConnectionString) {
// eslint-disable-next-line n/handle-callback-err
- MongoClient.connect(config.mongoConnectionString, async function (_err, client) {
+ MongoClient.connect(config.mongoConnectionString, async (_err, client) => {
const db = client.db()
for await (const tenantID of config.tenantIDs) {
// Mongo Connection and Query
if (config?.mongoConnectionString) {
// eslint-disable-next-line n/handle-callback-err
- MongoClient.connect(config.mongoConnectionString, async function (_err, client) {
+ MongoClient.connect(config.mongoConnectionString, async (_err, client) => {
const db = client.db()
for await (const tenantID of config.tenantIDs) {
registered = 'registered',
accepted = 'accepted',
rejected = 'rejected',
+ connected = 'connected',
disconnected = 'disconnected',
connectorStatusChanged = 'connectorStatusChanged'
}
-import type { CircularArray } from '../utils/index.js'
+import type { CircularBuffer } from 'mnemonist'
+
import type { WorkerData } from '../worker/index.js'
import type { IncomingRequestCommand, RequestCommand } from './ocpp/Requests.js'
responseCount: number
errorCount: number
timeMeasurementCount: number
- measurementTimeSeries: CircularArray<TimestampedData>
+ measurementTimeSeries: CircularBuffer<TimestampedData> | TimestampedData[]
currentTimeMeasurement: number
minTimeMeasurement: number
maxTimeMeasurement: number
export {
type ChargingProfile,
ChargingProfileKindType,
+ ChargingProfilePurposeType,
ChargingRateUnitType,
type ChargingSchedulePeriod,
RecurrencyKindType
}
export interface RemoteStartTransactionRequest extends JsonObject {
- connectorId: number
+ connectorId?: number
idTag: string
chargingProfile?: OCPP16ChargingProfile
}
import {
type OCPP16ChargingProfile,
OCPP16ChargingProfileKindType,
+ OCPP16ChargingProfilePurposeType,
OCPP16ChargingRateUnitType,
type OCPP16ChargingSchedulePeriod,
OCPP16RecurrencyKindType
export type ChargingSchedulePeriod = OCPP16ChargingSchedulePeriod
+export const ChargingProfilePurposeType = {
+ ...OCPP16ChargingProfilePurposeType
+} as const
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export type ChargingProfilePurposeType = OCPP16ChargingProfilePurposeType
+
export const ChargingProfileKindType = {
...OCPP16ChargingProfileKindType
} as const
)
}
-export const enum OutputFormat {
+export enum OutputFormat {
configuration = 'configuration',
worker = 'worker'
}
+++ /dev/null
-// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
-
-export const DEFAULT_CIRCULAR_ARRAY_SIZE = 1024
-
-/**
- * Array with a maximum length and shifting items when full.
- */
-export class CircularArray<T> extends Array<T> {
- public size: number
-
- constructor (size: number = DEFAULT_CIRCULAR_ARRAY_SIZE, ...items: T[]) {
- super()
- this.checkSize(size)
- this.size = size
- if (arguments.length > 1) {
- this.push(...items)
- }
- }
-
- public push (...items: T[]): number {
- const length = super.push(...items)
- if (length > this.size) {
- super.splice(0, length - this.size)
- }
- return this.length
- }
-
- public unshift (...items: T[]): number {
- const length = super.unshift(...items)
- if (length > this.size) {
- super.splice(this.size, items.length)
- }
- return this.length
- }
-
- public concat (...items: Array<T | ConcatArray<T>>): CircularArray<T> {
- const concatenatedCircularArray = super.concat(items as T[]) as CircularArray<T>
- concatenatedCircularArray.size = this.size
- if (concatenatedCircularArray.length > concatenatedCircularArray.size) {
- concatenatedCircularArray.splice(
- 0,
- concatenatedCircularArray.length - concatenatedCircularArray.size
- )
- }
- return concatenatedCircularArray
- }
-
- public splice (start: number, deleteCount?: number, ...items: T[]): CircularArray<T> {
- let itemsRemoved: T[] = []
- if (arguments.length >= 3 && deleteCount != null) {
- itemsRemoved = super.splice(start, deleteCount, ...items)
- if (this.length > this.size) {
- const itemsOverflowing = super.splice(0, this.length - this.size)
- itemsRemoved = new CircularArray<T>(
- itemsRemoved.length + itemsOverflowing.length,
- ...itemsRemoved,
- ...itemsOverflowing
- )
- }
- } else if (arguments.length === 2) {
- itemsRemoved = super.splice(start, deleteCount)
- } else {
- itemsRemoved = super.splice(start)
- }
- return itemsRemoved as CircularArray<T>
- }
-
- public resize (size: number): void {
- this.checkSize(size)
- if (size === 0) {
- this.length = 0
- } else if (size < this.size) {
- for (let i = size; i < this.size; i++) {
- super.pop()
- }
- }
- this.size = size
- }
-
- public empty (): boolean {
- return this.length === 0
- }
-
- public full (): boolean {
- return this.length === this.size
- }
-
- private checkSize (size: number): void {
- if (!Number.isSafeInteger(size)) {
- throw new TypeError(`Invalid circular array size: ${size} is not a safe integer`)
- }
- if (size < 0) {
- throw new RangeError(`Invalid circular array size: ${size} < 0`)
- }
- }
-}
-import { type FSWatcher, readFileSync, watch } from 'node:fs'
+import { existsSync, type FSWatcher, readFileSync, watch } from 'node:fs'
import { dirname, join } from 'node:path'
import { env } from 'node:process'
import { fileURLToPath } from 'node:url'
| WorkerConfiguration
| UIServerConfiguration
+const defaultUIServerConfiguration: UIServerConfiguration = {
+ enabled: false,
+ type: ApplicationProtocol.WS,
+ version: ApplicationProtocolVersion.VERSION_11,
+ options: {
+ host: Constants.DEFAULT_UI_SERVER_HOST,
+ port: Constants.DEFAULT_UI_SERVER_PORT
+ }
+}
+
+const defaultStorageConfiguration: StorageConfiguration = {
+ enabled: true,
+ type: StorageType.NONE
+}
+
+const defaultLogConfiguration: LogConfiguration = {
+ enabled: true,
+ file: 'logs/combined.log',
+ errorFile: 'logs/error.log',
+ statisticsInterval: Constants.DEFAULT_LOG_STATISTICS_INTERVAL,
+ level: 'info',
+ format: 'simple',
+ rotate: true
+}
+
+const defaultWorkerConfiguration: WorkerConfiguration = {
+ processType: WorkerProcessType.workerSet,
+ startDelay: DEFAULT_WORKER_START_DELAY,
+ elementsPerWorker: 'auto',
+ elementAddDelay: DEFAULT_ELEMENT_ADD_DELAY,
+ poolMinSize: DEFAULT_POOL_MIN_SIZE,
+ poolMaxSize: DEFAULT_POOL_MAX_SIZE
+}
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class Configuration {
public static configurationChangeCallback?: () => Promise<void>
- private static readonly configurationFile = join(
- dirname(fileURLToPath(import.meta.url)),
- 'assets',
- 'config.json'
- )
-
+ private static configurationFile: string | undefined
private static configurationFileReloading = false
private static configurationData?: ConfigurationData
private static configurationFileWatcher?: FSWatcher
- private static readonly configurationSectionCache = new Map<
- ConfigurationSection,
- ConfigurationSectionType
- >([
- [ConfigurationSection.log, Configuration.buildLogSection()],
- [ConfigurationSection.performanceStorage, Configuration.buildPerformanceStorageSection()],
- [ConfigurationSection.worker, Configuration.buildWorkerSection()],
- [ConfigurationSection.uiServer, Configuration.buildUIServerSection()]
- ])
+ private static configurationSectionCache: Map<ConfigurationSection, ConfigurationSectionType>
+
+ static {
+ const configurationFile = join(dirname(fileURLToPath(import.meta.url)), 'assets', 'config.json')
+ if (existsSync(configurationFile)) {
+ Configuration.configurationFile = configurationFile
+ } else {
+ console.error(
+ `${chalk.green(logPrefix())} ${chalk.red(
+ "Configuration file './src/assets/config.json' not found, using default configuration"
+ )}`
+ )
+ Configuration.configurationData = {
+ stationTemplateUrls: [
+ {
+ file: 'siemens.station-template.json',
+ numberOfStations: 1
+ }
+ ],
+ supervisionUrls: 'ws://localhost:8180/steve/websocket/CentralSystemService',
+ supervisionUrlDistribution: SupervisionUrlDistribution.ROUND_ROBIN,
+ uiServer: defaultUIServerConfiguration,
+ performanceStorage: defaultStorageConfiguration,
+ log: defaultLogConfiguration,
+ worker: defaultWorkerConfiguration
+ }
+ }
+ Configuration.configurationSectionCache = new Map<
+ ConfigurationSection,
+ ConfigurationSectionType
+ >([
+ [ConfigurationSection.log, Configuration.buildLogSection()],
+ [ConfigurationSection.performanceStorage, Configuration.buildPerformanceStorageSection()],
+ [ConfigurationSection.worker, Configuration.buildWorkerSection()],
+ [ConfigurationSection.uiServer, Configuration.buildUIServerSection()]
+ ])
+ }
private constructor () {
// This is intentional
}
private static buildUIServerSection (): UIServerConfiguration {
- let uiServerConfiguration: UIServerConfiguration = {
- enabled: false,
- type: ApplicationProtocol.WS,
- version: ApplicationProtocolVersion.VERSION_11,
- options: {
- host: Constants.DEFAULT_UI_SERVER_HOST,
- port: Constants.DEFAULT_UI_SERVER_PORT
- }
- }
+ let uiServerConfiguration: UIServerConfiguration = defaultUIServerConfiguration
if (hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.uiServer)) {
uiServerConfiguration = mergeDeepRight(
uiServerConfiguration,
if (isCFEnvironment()) {
delete uiServerConfiguration.options?.host
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- uiServerConfiguration.options!.port = parseInt(env.PORT!)
+ uiServerConfiguration.options!.port = Number.parseInt(env.PORT!)
}
return uiServerConfiguration
}
break
case StorageType.NONE:
default:
- storageConfiguration = {
- enabled: true,
- type: StorageType.NONE
- }
+ storageConfiguration = defaultStorageConfiguration
break
}
if (hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.performanceStorage)) {
}
private static buildLogSection (): LogConfiguration {
- const defaultLogConfiguration: LogConfiguration = {
- enabled: true,
- file: 'logs/combined.log',
- errorFile: 'logs/error.log',
- statisticsInterval: Constants.DEFAULT_LOG_STATISTICS_INTERVAL,
- level: 'info',
- format: 'simple',
- rotate: true
- }
const deprecatedLogConfiguration: LogConfiguration = {
...(hasOwnProp(Configuration.getConfigurationData(), 'logEnabled') && {
enabled: Configuration.getConfigurationData()?.logEnabled
}
private static buildWorkerSection (): WorkerConfiguration {
- const defaultWorkerConfiguration: WorkerConfiguration = {
- processType: WorkerProcessType.workerSet,
- startDelay: DEFAULT_WORKER_START_DELAY,
- elementsPerWorker: 'auto',
- elementAddDelay: DEFAULT_ELEMENT_ADD_DELAY,
- poolMinSize: DEFAULT_POOL_MIN_SIZE,
- poolMaxSize: DEFAULT_POOL_MAX_SIZE
- }
-
const deprecatedWorkerConfiguration: WorkerConfiguration = {
...(hasOwnProp(Configuration.getConfigurationData(), 'workerProcess') && {
processType: Configuration.getConfigurationData()?.workerProcess
}
public static getConfigurationData (): ConfigurationData | undefined {
- if (Configuration.configurationData == null) {
+ if (
+ Configuration.configurationData == null &&
+ Configuration.configurationFile != null &&
+ Configuration.configurationFile.length > 0
+ ) {
try {
Configuration.configurationData = JSON.parse(
readFileSync(Configuration.configurationFile, 'utf8')
}
private static getConfigurationFileWatcher (): FSWatcher | undefined {
+ if (Configuration.configurationFile == null || Configuration.configurationFile.length === 0) {
+ return
+ }
try {
return watch(Configuration.configurationFile, (event, filename): void => {
if (
stopAbsoluteDuration: false
})
- static readonly DEFAULT_CIRCULAR_BUFFER_CAPACITY = 4096
+ static readonly DEFAULT_CIRCULAR_BUFFER_CAPACITY = 386
static readonly DEFAULT_HASH_ALGORITHM = 'sha384'
import chalk from 'chalk'
import type { ChargingStation } from '../charging-station/index.js'
+import { getMessageTypeString } from '../charging-station/ocpp/OCPPServiceUtils.js'
import type {
EmptyObject,
FileType,
HandleErrorParams,
IncomingRequestCommand,
JsonType,
+ MessageType,
RequestCommand
} from '../types/index.js'
import { logger } from './Logger.js'
import { isNotEmptyString } from './Utils.js'
+const moduleName = 'ErrorUtils'
+
const defaultErrorParams = {
throwError: true,
consoleOut: false
logPrefix: string,
params: HandleErrorParams<EmptyObject> = defaultErrorParams
): void => {
- setDefaultErrorParams(params)
+ params = setDefaultErrorParams(params)
const prefix = isNotEmptyString(logPrefix) ? `${logPrefix} ` : ''
let logMsg: string
switch (error.code) {
export const handleSendMessageError = (
chargingStation: ChargingStation,
commandName: RequestCommand | IncomingRequestCommand,
+ messageType: MessageType,
error: Error,
- params: HandleErrorParams<EmptyObject> = { throwError: false, consoleOut: false }
+ params: HandleErrorParams<EmptyObject> = {
+ throwError: false,
+ consoleOut: false
+ }
): void => {
- setDefaultErrorParams(params, { throwError: false, consoleOut: false })
- logger.error(`${chargingStation.logPrefix()} Request command '${commandName}' error:`, error)
+ params = setDefaultErrorParams(params, { throwError: false, consoleOut: false })
+ logger.error(
+ `${chargingStation.logPrefix()} ${moduleName}.handleSendMessageError: Send ${getMessageTypeString(messageType)} command '${commandName}' error:`,
+ error
+ )
if (params.throwError === true) {
throw error
}
}
+export const handleIncomingRequestError = <T extends JsonType>(
+ chargingStation: ChargingStation,
+ commandName: IncomingRequestCommand,
+ error: Error,
+ params: HandleErrorParams<T> = { throwError: true, consoleOut: false }
+): T | undefined => {
+ params = setDefaultErrorParams(params)
+ logger.error(
+ `${chargingStation.logPrefix()} ${moduleName}.handleIncomingRequestError: Incoming request command '${commandName}' error:`,
+ error
+ )
+ if (params.throwError === false && params.errorResponse != null) {
+ return params.errorResponse
+ }
+ if (params.throwError === true && params.errorResponse == null) {
+ throw error
+ }
+ if (params.throwError === true && params.errorResponse != null) {
+ return params.errorResponse
+ }
+}
+
export const setDefaultErrorParams = <T extends JsonType>(
params: HandleErrorParams<T>,
defaultParams: HandleErrorParams<T> = defaultErrorParams
): HandleErrorParams<T> => {
- params = { ...defaultParams, ...params }
- return params
+ return { ...defaultParams, ...params }
}
+import { CircularBuffer } from 'mnemonist'
+
import type { ChargingStation } from '../charging-station/index.js'
import {
type ChargingStationData,
type ChargingStationWorkerMessage,
ChargingStationWorkerMessageEvents,
- type Statistics
+ type Statistics,
+ type TimestampedData
} from '../types/index.js'
import {
buildChargingStationAutomaticTransactionGeneratorConfiguration,
export const buildPerformanceStatisticsMessage = (
statistics: Statistics
): ChargingStationWorkerMessage<Statistics> => {
+ const statisticsData = [...statistics.statisticsData].map(([key, value]) => {
+ if (value.measurementTimeSeries instanceof CircularBuffer) {
+ value.measurementTimeSeries = value.measurementTimeSeries.toArray() as TimestampedData[]
+ }
+ return [key, value]
+ })
return {
event: ChargingStationWorkerMessageEvents.performanceStatistics,
- data: statistics
+ data: {
+ id: statistics.id,
+ name: statistics.name,
+ uri: statistics.uri,
+ createdAt: statistics.createdAt,
+ updatedAt: statistics.updatedAt,
+ statisticsData
+ }
}
}
import { mean } from 'rambda'
export const min = (...args: number[]): number =>
- args.reduce((minimum, num) => (minimum < num ? minimum : num), Infinity)
+ args.reduce((minimum, num) => (minimum < num ? minimum : num), Number.POSITIVE_INFINITY)
export const max = (...args: number[]): number =>
- args.reduce((maximum, num) => (maximum > num ? maximum : num), -Infinity)
+ args.reduce((maximum, num) => (maximum > num ? maximum : num), Number.NEGATIVE_INFINITY)
// TODO: use order statistics tree https://en.wikipedia.org/wiki/Order_statistic_tree
export const nthPercentile = (dataSet: number[], percentile: number): number => {
minutesToSeconds,
secondsToMilliseconds
} from 'date-fns'
+import type { CircularBuffer } from 'mnemonist'
import { is } from 'rambda'
import {
}
let changedValue: number = value as number
if (typeof value === 'string') {
- changedValue = parseInt(value)
+ changedValue = Number.parseInt(value)
}
if (isNaN(changedValue)) {
throw new Error(`Cannot convert to integer: '${String(value)}'`)
}
let changedValue: number = value as number
if (typeof value === 'string') {
- changedValue = parseFloat(value)
+ changedValue = Number.parseFloat(value)
}
if (isNaN(changedValue)) {
throw new Error(`Cannot convert to float: '${String(value)}'`)
if (max < min) {
throw new RangeError('Invalid interval')
}
- if (max - min === Infinity) {
+ if (max - min === Number.POSITIVE_INFINITY) {
throw new RangeError('Invalid interval')
}
return (randomBytes(4).readUInt32LE() / 0xffffffff) * (max - min) + min
)
}
-export const extractTimeSeriesValues = (timeSeries: TimestampedData[]): number[] => {
- return timeSeries.map(timeSeriesItem => timeSeriesItem.value)
+export const extractTimeSeriesValues = (timeSeries: CircularBuffer<TimestampedData>): number[] => {
+ return (timeSeries.toArray() as TimestampedData[]).map(timeSeriesItem => timeSeriesItem.value)
}
export const clone = <T>(object: T): T => {
if (is(Map, value)) {
switch (mapFormat) {
case MapStringifyFormat.object:
- return { ...Object.fromEntries<Map<string, Record<string, unknown>>>(value.entries()) }
+ return {
+ ...Object.fromEntries<Map<string, Record<string, unknown>>>(value.entries())
+ }
case MapStringifyFormat.array:
default:
return [...value]
}
export const isArraySorted = <T>(array: T[], compareFn: (a: T, b: T) => number): boolean => {
+ if (array.length <= 1) {
+ return true
+ }
for (let index = 0; index < array.length - 1; ++index) {
if (compareFn(array[index], array[index + 1]) > 0) {
return false
buildEvsesStatus,
OutputFormat
} from './ChargingStationConfigurationUtils.js'
-export { CircularArray } from './CircularArray.js'
export { Configuration } from './Configuration.js'
export { Constants } from './Constants.js'
export { ACElectricUtils, DCElectricUtils } from './ElectricUtils.js'
export {
handleFileException,
+ handleIncomingRequestError,
handleSendMessageError,
handleUncaughtException,
handleUnhandledRejection,
data: elementData
} satisfies WorkerMessage<D>
workerSetElement.worker.postMessage(message)
- this.promiseResponseMap.set(message.uuid, { resolve, reject, workerSetElement })
+ this.promiseResponseMap.set(message.uuid, {
+ resolve,
+ reject,
+ workerSetElement
+ })
})
const response = await sendMessageToWorker
// Add element sequentially to optimize memory at startup
worker.once('exit', () => {
this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker))
})
- const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 }
+ const workerSetElement: WorkerSetElement = {
+ worker,
+ numberOfWorkerElements: 0
+ }
this.workerSet.add(workerSetElement)
this.workerStartup = false
return workerSetElement
--- /dev/null
+import { describe, it } from 'node:test'
+
+import { expect } from 'expect'
+
+import { OCPPError } from '../../src/exception/OCPPError.js'
+import { ErrorType } from '../../src/types/index.js'
+import { Constants } from '../../src/utils/Constants.js'
+
+await describe('OCPPError test suite', async () => {
+ await it('Verify that OCPPError can be instantiated', () => {
+ const ocppError = new OCPPError(ErrorType.GENERIC_ERROR, '')
+ expect(ocppError).toBeInstanceOf(OCPPError)
+ expect(ocppError.name).toBe('OCPPError')
+ expect(ocppError.message).toBe('')
+ expect(ocppError.code).toBe(ErrorType.GENERIC_ERROR)
+ expect(ocppError.command).toBe(Constants.UNKNOWN_OCPP_COMMAND)
+ expect(ocppError.details).toBeUndefined()
+ expect(typeof ocppError.stack === 'string').toBe(true)
+ expect(ocppError.stack).not.toBe('')
+ expect(ocppError.cause).toBeUndefined()
+ expect(ocppError.date).toBeInstanceOf(Date)
+ })
+})
--- /dev/null
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+end_of_line = lf
+max_line_length = 100
+
+[*.py]
+indent_size = 4
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
+
+[{Makefile,**.mk}]
+# Use tabs for indentation (Makefiles require tabs)
+indent_style = tab
--- /dev/null
+[flake8]
+max-line-length = 100
--- /dev/null
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
+poetry.toml
--- /dev/null
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=827846
+ // for the documentation about the extensions.json format
+ "recommendations": [
+ "EditorConfig.EditorConfig",
+ "streetsidesoftware.code-spell-checker",
+ "ms-python.python"
+ ]
+}
--- /dev/null
+{
+ "cSpell.words": ["evse", "ocpp", "websockets"]
+}
--- /dev/null
+# OCPP2 Mock Server
+
+This project includes an Open Charge Point Protocol (OCPP) version 2.0.1 mock server implemented in Python.
+
+## Prerequisites
+
+This project requires Python 3.7+ and [poetry](https://python-poetry.org/) to install the required packages:
+
+```shell
+poetry install
+```
+
+## Running the Server
+
+To start the server, run the `server.py` script:
+
+```shell
+poetry run task server
+```
+
+The server will start listening for connections on port 9000.
+
+## Overview of the Server Scripts
+
+### Server.py
+
+The server script waits for connections from clients. When a client connects, the server creates a new instance of the `ChargePoint` class. This class includes methods for handling various OCPP messages, most of which return a dummy response.
+
+The server script uses the `websockets` and `ocpp` libraries to facilitate the implementation.
+
+## Development
+
+### Code formatting
+
+```shell
+poetry run task format
+```
+
+### Code linting
+
+```shell
+poetry run task lint
+```
+
+## Note
+
+Primarily, this software is intended for testing applications. The server script don't adhere to the full OCPP specifications and it is advised not to use them in a production environment without additional development.
+
+For reference:
+https://github.com/mobilityhouse/ocpp
--- /dev/null
+# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+
+[[package]]
+name = "attrs"
+version = "23.2.0"
+description = "Classes Without Boilerplate"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
+ {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
+]
+
+[package.extras]
+cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
+dev = ["attrs[tests]", "pre-commit"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
+tests = ["attrs[tests-no-zope]", "zope-interface"]
+tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
+tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
+
+[[package]]
+name = "black"
+version = "24.4.2"
+description = "The uncompromising code formatter."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"},
+ {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"},
+ {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"},
+ {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"},
+ {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"},
+ {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"},
+ {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"},
+ {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"},
+ {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"},
+ {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"},
+ {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"},
+ {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"},
+ {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"},
+ {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"},
+ {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"},
+ {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"},
+ {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"},
+ {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"},
+ {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"},
+ {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"},
+ {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"},
+ {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+packaging = ">=22.0"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "flake8"
+version = "7.0.0"
+description = "the modular source code checker: pep8 pyflakes and co"
+optional = false
+python-versions = ">=3.8.1"
+files = [
+ {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"},
+ {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"},
+]
+
+[package.dependencies]
+mccabe = ">=0.7.0,<0.8.0"
+pycodestyle = ">=2.11.0,<2.12.0"
+pyflakes = ">=3.2.0,<3.3.0"
+
+[[package]]
+name = "isort"
+version = "5.13.2"
+description = "A Python utility / library to sort Python imports."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
+ {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
+]
+
+[package.extras]
+colors = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "jsonschema"
+version = "4.22.0"
+description = "An implementation of JSON Schema validation for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"},
+ {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
+rpds-py = ">=0.7.1"
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2023.12.1"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"},
+ {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
+
+[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
+ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
+]
+
+[[package]]
+name = "mslex"
+version = "1.2.0"
+description = "shlex for windows"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "mslex-1.2.0-py3-none-any.whl", hash = "sha256:c68ec637485ee3544c5847c1b4e78b02940b32708568fb1d8715491815aa2341"},
+ {file = "mslex-1.2.0.tar.gz", hash = "sha256:79e2abc5a129dd71cdde58a22a2039abb7fa8afcbac498b723ba6e9b9fbacc14"},
+]
+
+[[package]]
+name = "mypy-extensions"
+version = "1.0.0"
+description = "Type system extensions for programs checked with the mypy type checker."
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
+ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
+]
+
+[[package]]
+name = "ocpp"
+version = "2.0.0rc1"
+description = "Python package implementing the JSON version of the Open Charge Point Protocol (OCPP)."
+optional = false
+python-versions = "<4.0,>=3.8"
+files = [
+ {file = "ocpp-2.0.0rc1-py3-none-any.whl", hash = "sha256:c3c99483eb3985c069e230fe9f230fbe448cadc2d56f8dbf4c7ca10c8ddfd755"},
+ {file = "ocpp-2.0.0rc1.tar.gz", hash = "sha256:67a4b1f662dbd17bac248a31211999b89b52575abca277baa243b62e16b0ec4d"},
+]
+
+[package.dependencies]
+jsonschema = ">=4.4.0,<5.0.0"
+
+[[package]]
+name = "packaging"
+version = "24.1"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
+]
+
+[[package]]
+name = "pathspec"
+version = "0.12.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.2.2"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
+ {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+type = ["mypy (>=1.8)"]
+
+[[package]]
+name = "psutil"
+version = "5.9.8"
+description = "Cross-platform lib for process and system monitoring in Python."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"},
+ {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"},
+ {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"},
+ {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"},
+ {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"},
+ {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"},
+ {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"},
+ {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"},
+ {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"},
+ {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"},
+]
+
+[package.extras]
+test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
+
+[[package]]
+name = "pycodestyle"
+version = "2.11.1"
+description = "Python style guide checker"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"},
+ {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"},
+]
+
+[[package]]
+name = "pyflakes"
+version = "3.2.0"
+description = "passive checker of Python programs"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"},
+ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"},
+]
+
+[[package]]
+name = "referencing"
+version = "0.35.1"
+description = "JSON Referencing + Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
+ {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
+[[package]]
+name = "rpds-py"
+version = "0.18.1"
+description = "Python bindings to Rust's persistent data structures (rpds)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"},
+ {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"},
+ {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"},
+ {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"},
+ {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"},
+ {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"},
+ {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"},
+ {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"},
+ {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"},
+ {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"},
+ {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"},
+ {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"},
+ {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"},
+ {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"},
+ {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"},
+ {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"},
+ {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"},
+ {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"},
+ {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"},
+ {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"},
+ {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"},
+ {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"},
+ {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"},
+ {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"},
+ {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"},
+ {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"},
+ {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"},
+ {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"},
+ {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"},
+ {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"},
+ {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"},
+ {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"},
+ {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"},
+ {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"},
+]
+
+[[package]]
+name = "taskipy"
+version = "1.12.2"
+description = "tasks runner for python projects"
+optional = false
+python-versions = ">=3.6,<4.0"
+files = [
+ {file = "taskipy-1.12.2-py3-none-any.whl", hash = "sha256:ffdbb0bb0db54c0ec5c424610a3a087eea22706d4d1f6e3e8b4f12ebba05f98f"},
+ {file = "taskipy-1.12.2.tar.gz", hash = "sha256:eadfdc20d6bb94d8018eda32f1dbf584cf4aa6cffb71ba5cc2de20d344f8c4fb"},
+]
+
+[package.dependencies]
+colorama = ">=0.4.4,<0.5.0"
+mslex = {version = ">=1.1.0,<2.0.0", markers = "sys_platform == \"win32\""}
+psutil = ">=5.7.2,<6.0.0"
+tomli = {version = ">=2.0.1,<3.0.0", markers = "python_version >= \"3.7\" and python_version < \"4.0\""}
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+
+[[package]]
+name = "websockets"
+version = "12.0"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"},
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"},
+ {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"},
+ {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"},
+ {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"},
+ {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"},
+ {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"},
+ {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"},
+ {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"},
+ {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"},
+ {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"},
+ {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"},
+ {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"},
+ {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"},
+ {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"},
+ {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"},
+ {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"},
+ {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"},
+ {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"},
+]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.12"
+content-hash = "a5e4f3f79d6837130dce01c7689d462a7008be093ec9c2cbcd3298b9c1c57539"
--- /dev/null
+[tool.poetry]
+name = "ocpp-server"
+version = "0.1.0"
+description = "OCPP2 mock server"
+authors = ["Jérôme Benoit <jerome.benoit@sap.com>"]
+readme = "README.md"
+
+[tool.poetry.dependencies]
+python = "^3.12"
+websockets = "^12.0"
+ocpp = "^2.0.0rc1"
+
+[tool.poetry.group.dev.dependencies]
+taskipy = "^1"
+isort = "^5"
+black = "^24"
+flake8 = "^7"
+
+[tool.taskipy.tasks]
+server = "python server.py"
+format = "black . && isort ."
+lint = "black --check --diff . && isort --check --diff . && flake8 ."
+
+[tool.isort]
+profile = 'black'
+
+[build-system]
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"
--- /dev/null
+import asyncio
+import logging
+from datetime import datetime, timezone
+from threading import Timer
+
+import ocpp.v201
+import websockets
+from ocpp.routing import on
+from ocpp.v201.enums import (
+ Action,
+ AuthorizationStatusType,
+ ClearCacheStatusType,
+ RegistrationStatusType,
+ TransactionEventType,
+)
+
+# Setting up the logging configuration to display debug level messages.
+logging.basicConfig(level=logging.DEBUG)
+
+
+class RepeatTimer(Timer):
+ """Class that inherits from the Timer class. It will run a
+ function at regular intervals."""
+
+ def run(self):
+ while not self.finished.wait(self.interval):
+ self.function(*self.args, **self.kwargs)
+
+
+# Define a ChargePoint class inheriting from the OCPP 2.0.1 ChargePoint class.
+class ChargePoint(ocpp.v201.ChargePoint):
+ # Message handlers to receive OCPP messages.
+ @on(Action.BootNotification)
+ async def on_boot_notification(self, charging_station, reason, **kwargs):
+ logging.info("Received BootNotification")
+ # Create and return a BootNotification response with the current time,
+ # an interval of 60 seconds, and an accepted status.
+ return ocpp.v201.call_result.BootNotification(
+ current_time=datetime.now(timezone.utc).isoformat(),
+ interval=60,
+ status=RegistrationStatusType.accepted,
+ )
+
+ @on(Action.Heartbeat)
+ async def on_heartbeat(self, **kwargs):
+ logging.info("Received Heartbeat")
+ return ocpp.v201.call_result.Heartbeat(
+ current_time=datetime.now(timezone.utc).isoformat()
+ )
+
+ @on(Action.StatusNotification)
+ async def on_status_notification(
+ self, timestamp, evse_id: int, connector_id: int, connector_status, **kwargs
+ ):
+ logging.info("Received StatusNotification")
+ return ocpp.v201.call_result.StatusNotification()
+
+ @on(Action.Authorize)
+ async def on_authorize(self, id_token, **kwargs):
+ logging.info("Received Authorize")
+ return ocpp.v201.call_result.Authorize(
+ id_token_info={"status": AuthorizationStatusType.accepted}
+ )
+
+ @on(Action.TransactionEvent)
+ async def on_transaction_event(
+ self,
+ event_type: TransactionEventType,
+ timestamp,
+ trigger_reason,
+ seq_no: int,
+ transaction_info,
+ **kwargs,
+ ):
+ match event_type:
+ case TransactionEventType.started:
+ logging.info("Received TransactionEvent Started")
+ return ocpp.v201.call_result.TransactionEvent(
+ id_token_info={"status": AuthorizationStatusType.accepted}
+ )
+ case TransactionEventType.updated:
+ logging.info("Received TransactionEvent Updated")
+ return ocpp.v201.call_result.TransactionEvent(total_cost=10)
+ case TransactionEventType.ended:
+ logging.info("Received TransactionEvent Ended")
+ return ocpp.v201.call_result.TransactionEvent()
+
+ @on(Action.MeterValues)
+ async def on_meter_values(self, evse_id: int, meter_value, **kwargs):
+ logging.info("Received MeterValues")
+ return ocpp.v201.call_result.MeterValues()
+
+ # Request handlers to emit OCPP messages.
+ async def send_clear_cache(self):
+ request = ocpp.v201.call.ClearCache()
+ response = await self.call(request)
+
+ if response.status == ClearCacheStatusType.accepted:
+ logging.info("Cache clearing successful")
+ else:
+ logging.info("Cache clearing failed")
+
+
+# Function to handle new WebSocket connections.
+async def on_connect(websocket, path):
+ """For every new charge point that connects, create a ChargePoint instance and start
+ listening for messages."""
+ try:
+ requested_protocols = websocket.request_headers["Sec-WebSocket-Protocol"]
+ except KeyError:
+ logging.info("Client hasn't requested any Subprotocol. Closing Connection")
+ return await websocket.close()
+
+ if websocket.subprotocol:
+ logging.info("Protocols Matched: %s", websocket.subprotocol)
+ else:
+ logging.warning(
+ "Protocols Mismatched | Expected Subprotocols: %s,"
+ " but client supports %s | Closing connection",
+ websocket.available_subprotocols,
+ requested_protocols,
+ )
+ return await websocket.close()
+
+ charge_point_id = path.strip("/")
+ cp = ChargePoint(charge_point_id, websocket)
+
+ # Start the ChargePoint instance to listen for incoming messages.
+ await cp.start()
+
+
+# Main function to start the WebSocket server.
+async def main():
+ # Create the WebSocket server and specify the handler for new connections.
+ server = await websockets.serve(
+ on_connect,
+ "127.0.0.1", # Listen on loopback.
+ 9000, # Port number.
+ subprotocols=["ocpp2.0", "ocpp2.0.1"], # Specify OCPP 2.0.1 subprotocols.
+ )
+ logging.info("WebSocket Server Started")
+ # Wait for the server to close (runs indefinitely).
+ await server.wait_closed()
+
+
+# Entry point of the script.
+if __name__ == "__main__":
+ # Run the main function to start the server.
+ asyncio.run(main())
+++ /dev/null
-import { describe, it } from 'node:test'
-
-import { expect } from 'expect'
-
-import { CircularArray, DEFAULT_CIRCULAR_ARRAY_SIZE } from '../../src/utils/CircularArray.js'
-
-await describe('CircularArray test suite', async () => {
- await it('Verify that circular array can be instantiated', () => {
- const circularArray = new CircularArray()
- expect(circularArray).toBeInstanceOf(CircularArray)
- })
-
- await it('Verify circular array default size at instance creation', () => {
- const circularArray = new CircularArray()
- expect(circularArray.size).toBe(DEFAULT_CIRCULAR_ARRAY_SIZE)
- })
-
- await it('Verify that circular array size can be set at instance creation', () => {
- const circularArray = new CircularArray(1000)
- expect(circularArray.size).toBe(1000)
- })
-
- await it('Verify that circular array size and items can be set at instance creation', () => {
- let circularArray = new CircularArray(1000, 1, 2, 3, 4, 5)
- expect(circularArray.size).toBe(1000)
- expect(circularArray.length).toBe(5)
- circularArray = new CircularArray(4, 1, 2, 3, 4, 5)
- expect(circularArray.size).toBe(4)
- expect(circularArray.length).toBe(4)
- })
-
- await it('Verify that circular array size is valid at instance creation', () => {
- expect(() => new CircularArray(0.25)).toThrow(
- new TypeError('Invalid circular array size: 0.25 is not a safe integer')
- )
- expect(() => new CircularArray(-1)).toThrow(
- new RangeError('Invalid circular array size: -1 < 0')
- )
- expect(() => new CircularArray(Number.MAX_SAFE_INTEGER + 1)).toThrow(
- new TypeError(
- `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
- )
- )
- })
-
- await it('Verify that circular array empty works as intended', () => {
- const circularArray = new CircularArray()
- expect(circularArray.empty()).toBe(true)
- })
-
- await it('Verify that circular array full works as intended', () => {
- const circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- expect(circularArray.full()).toBe(true)
- })
-
- await it('Verify that circular array push works as intended', () => {
- let circularArray = new CircularArray(4)
- let arrayLength = circularArray.push(1, 2, 3, 4, 5)
- expect(arrayLength).toBe(circularArray.size)
- expect(circularArray.length).toBe(circularArray.size)
- expect(circularArray).toStrictEqual(new CircularArray(4, 2, 3, 4, 5))
- arrayLength = circularArray.push(6, 7)
- expect(arrayLength).toBe(circularArray.size)
- expect(circularArray.length).toBe(circularArray.size)
- expect(circularArray).toStrictEqual(new CircularArray(4, 4, 5, 6, 7))
- circularArray = new CircularArray(100)
- arrayLength = circularArray.push(1, 2, 3, 4, 5)
- expect(arrayLength).toBe(5)
- expect(circularArray.size).toBe(100)
- expect(circularArray.length).toBe(5)
- expect(circularArray).toStrictEqual(new CircularArray(100, 1, 2, 3, 4, 5))
- })
-
- await it('Verify that circular array splice works as intended', () => {
- let circularArray = new CircularArray(1000, 1, 2, 3, 4, 5)
- let deletedItems = circularArray.splice(2)
- expect(deletedItems).toStrictEqual(new CircularArray(3, 3, 4, 5))
- expect(circularArray.length).toBe(2)
- expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2))
- circularArray = new CircularArray(1000, 1, 2, 3, 4, 5)
- deletedItems = circularArray.splice(2, 1)
- expect(deletedItems).toStrictEqual(new CircularArray(1, 3))
- expect(circularArray.length).toBe(4)
- expect(circularArray).toStrictEqual(new CircularArray(1000, 1, 2, 4, 5))
- circularArray = new CircularArray(4, 1, 2, 3, 4)
- deletedItems = circularArray.splice(2, 1, 5, 6)
- expect(deletedItems).toStrictEqual(new CircularArray(2, 3, 1))
- expect(circularArray.length).toBe(4)
- expect(circularArray).toStrictEqual(new CircularArray(4, 2, 5, 6, 4))
- })
-
- await it('Verify that circular array concat works as intended', () => {
- let circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- circularArray = circularArray.concat(6, 7)
- expect(circularArray.length).toBe(5)
- expect(circularArray).toStrictEqual(new CircularArray(5, 3, 4, 5, 6, 7))
- circularArray = new CircularArray(1)
- circularArray = circularArray.concat(6, 7)
- expect(circularArray.length).toBe(1)
- expect(circularArray).toStrictEqual(new CircularArray(1, 7))
- })
-
- await it('Verify that circular array unshift works as intended', () => {
- let circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- let arrayLength = circularArray.unshift(6, 7)
- expect(arrayLength).toBe(5)
- expect(circularArray.length).toBe(5)
- expect(circularArray).toStrictEqual(new CircularArray(5, 6, 7, 1, 2, 3))
- circularArray = new CircularArray(1)
- arrayLength = circularArray.unshift(6, 7)
- expect(arrayLength).toBe(1)
- expect(circularArray.length).toBe(1)
- expect(circularArray).toStrictEqual(new CircularArray(1, 6))
- })
-
- await it('Verify that circular array resize works as intended', () => {
- expect(() => {
- new CircularArray().resize(0.25)
- }).toThrow(new TypeError('Invalid circular array size: 0.25 is not a safe integer'))
- expect(() => {
- new CircularArray().resize(-1)
- }).toThrow(new RangeError('Invalid circular array size: -1 < 0'))
- expect(() => {
- new CircularArray().resize(Number.MAX_SAFE_INTEGER + 1)
- }).toThrow(
- new TypeError(
- `Invalid circular array size: ${Number.MAX_SAFE_INTEGER + 1} is not a safe integer`
- )
- )
- let circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- circularArray.resize(0)
- expect(circularArray.size).toBe(0)
- expect(circularArray).toStrictEqual(new CircularArray(0))
- circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- circularArray.resize(1)
- expect(circularArray.size).toBe(1)
- expect(circularArray).toStrictEqual(new CircularArray(1, 1))
- circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- circularArray.resize(3)
- expect(circularArray.size).toBe(3)
- expect(circularArray).toStrictEqual(new CircularArray(3, 1, 2, 3))
- circularArray = new CircularArray(5, 1, 2, 3, 4, 5)
- circularArray.resize(8)
- expect(circularArray.size).toBe(8)
- expect(circularArray).toStrictEqual(new CircularArray(8, 1, 2, 3, 4, 5))
- })
-})
--- /dev/null
+/* eslint-disable @typescript-eslint/no-unsafe-member-access */
+import { describe, it } from 'node:test'
+
+import { expect } from 'expect'
+
+import { FileType } from '../../src/types/index.js'
+import { handleFileException, logPrefix } from '../../src/utils/ConfigurationUtils.js'
+
+await describe('ConfigurationUtils test suite', async () => {
+ await it('Verify logPrefix()', () => {
+ expect(logPrefix()).toContain(' Simulator configuration |')
+ })
+
+ await it('Verify handleFileException()', t => {
+ t.mock.method(console, 'error')
+ const error = new Error()
+ error.code = 'ENOENT'
+ expect(() => {
+ handleFileException('path/to/module.js', FileType.Authorization, error, 'log prefix |')
+ }).toThrow(error)
+ expect(console.error.mock.calls.length).toBe(1)
+ })
+})
--- /dev/null
+/* eslint-disable @typescript-eslint/no-unsafe-member-access */
+import { describe, it } from 'node:test'
+
+import { expect } from 'expect'
+
+import type { ChargingStation } from '../../src/charging-station/index.js'
+import {
+ FileType,
+ GenericStatus,
+ IncomingRequestCommand,
+ MessageType,
+ RequestCommand
+} from '../../src/types/index.js'
+import {
+ handleFileException,
+ handleIncomingRequestError,
+ handleSendMessageError,
+ setDefaultErrorParams
+} from '../../src/utils/ErrorUtils.js'
+import { logger } from '../../src/utils/Logger.js'
+
+await describe('ErrorUtils test suite', async () => {
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
+ const chargingStation = {
+ logPrefix: () => 'CS-TEST |'
+ } as ChargingStation
+
+ await it('Verify handleFileException()', t => {
+ t.mock.method(console, 'warn')
+ t.mock.method(console, 'error')
+ t.mock.method(logger, 'warn')
+ t.mock.method(logger, 'error')
+ const error = new Error()
+ error.code = 'ENOENT'
+ expect(() => {
+ handleFileException('path/to/module.js', FileType.Authorization, error, 'log prefix |', {})
+ }).toThrow(error)
+ expect(() => {
+ handleFileException('path/to/module.js', FileType.Authorization, error, 'log prefix |', {
+ throwError: false
+ })
+ }).not.toThrow()
+ expect(logger.warn.mock.calls.length).toBe(1)
+ expect(logger.error.mock.calls.length).toBe(1)
+ expect(() => {
+ handleFileException('path/to/module.js', FileType.Authorization, error, 'log prefix |', {
+ consoleOut: true
+ })
+ }).toThrow(error)
+ expect(() => {
+ handleFileException('path/to/module.js', FileType.Authorization, error, 'log prefix |', {
+ throwError: false,
+ consoleOut: true
+ })
+ }).not.toThrow()
+ expect(console.warn.mock.calls.length).toBe(1)
+ expect(console.error.mock.calls.length).toBe(1)
+ })
+
+ await it('Verify handleSendMessageError()', t => {
+ t.mock.method(logger, 'error')
+ t.mock.method(chargingStation, 'logPrefix')
+ const error = new Error()
+ expect(() => {
+ handleSendMessageError(
+ chargingStation,
+ RequestCommand.BOOT_NOTIFICATION,
+ MessageType.CALL_MESSAGE,
+ error
+ )
+ }).not.toThrow()
+ expect(() => {
+ handleSendMessageError(
+ chargingStation,
+ RequestCommand.BOOT_NOTIFICATION,
+ MessageType.CALL_MESSAGE,
+ error,
+ { throwError: true }
+ )
+ }).toThrow(error)
+ expect(chargingStation.logPrefix.mock.calls.length).toBe(2)
+ expect(logger.error.mock.calls.length).toBe(2)
+ })
+
+ await it('Verify handleIncomingRequestError()', t => {
+ t.mock.method(logger, 'error')
+ t.mock.method(chargingStation, 'logPrefix')
+ const error = new Error()
+ expect(() => {
+ handleIncomingRequestError(chargingStation, IncomingRequestCommand.CLEAR_CACHE, error)
+ }).toThrow(error)
+ expect(() => {
+ handleIncomingRequestError(chargingStation, IncomingRequestCommand.CLEAR_CACHE, error, {
+ throwError: false
+ })
+ }).not.toThrow()
+ const errorResponse = {
+ status: GenericStatus.Rejected
+ }
+ expect(
+ handleIncomingRequestError(chargingStation, IncomingRequestCommand.CLEAR_CACHE, error, {
+ throwError: false,
+ errorResponse
+ })
+ ).toStrictEqual(errorResponse)
+ expect(chargingStation.logPrefix.mock.calls.length).toBe(3)
+ expect(logger.error.mock.calls.length).toBe(3)
+ })
+
+ await it('Verify setDefaultErrorParams()', () => {
+ expect(setDefaultErrorParams({})).toStrictEqual({ throwError: true, consoleOut: false })
+ expect(setDefaultErrorParams({ throwError: false })).toStrictEqual({
+ throwError: false,
+ consoleOut: false
+ })
+ expect(setDefaultErrorParams({ throwError: false, consoleOut: true })).toStrictEqual({
+ throwError: false,
+ consoleOut: true
+ })
+ expect(setDefaultErrorParams({ throwError: true, consoleOut: true })).toStrictEqual({
+ throwError: true,
+ consoleOut: true
+ })
+ expect(setDefaultErrorParams({}, { throwError: false, consoleOut: false })).toStrictEqual({
+ throwError: false,
+ consoleOut: false
+ })
+ })
+})
await describe('StatisticUtils test suite', async () => {
await it('Verify min()', () => {
- expect(min()).toBe(Infinity)
+ expect(min()).toBe(Number.POSITIVE_INFINITY)
expect(min(0, 1)).toBe(0)
expect(min(1, 0)).toBe(0)
expect(min(0, -1)).toBe(-1)
})
await it('Verify max()', () => {
- expect(max()).toBe(-Infinity)
+ expect(max()).toBe(Number.NEGATIVE_INFINITY)
expect(max(0, 1)).toBe(1)
expect(max(1, 0)).toBe(1)
expect(max(0, -1)).toBe(0)
import { hoursToMilliseconds, hoursToSeconds } from 'date-fns'
import { expect } from 'expect'
+import { CircularBuffer } from 'mnemonist'
import { satisfies } from 'semver'
+import type { TimestampedData } from '../../src/types/index.js'
import { Constants } from '../../src/utils/Constants.js'
import {
clone,
generateUUID,
getRandomFloat,
hasOwnProp,
+ insertAt,
isArraySorted,
isAsyncFunction,
isNotEmptyArray,
})
await it('Verify extractTimeSeriesValues()', () => {
- expect(extractTimeSeriesValues([])).toEqual([])
- expect(extractTimeSeriesValues([{ timestamp: Date.now(), value: 1.1 }])).toEqual([1.1])
expect(
- extractTimeSeriesValues([
- { timestamp: Date.now(), value: 1.1 },
- { timestamp: Date.now(), value: 2.2 }
- ])
- ).toEqual([1.1, 2.2])
+ extractTimeSeriesValues(
+ new CircularBuffer<TimestampedData>(Array, Constants.DEFAULT_CIRCULAR_BUFFER_CAPACITY)
+ )
+ ).toEqual([])
+ const circularBuffer = new CircularBuffer<TimestampedData>(
+ Array,
+ Constants.DEFAULT_CIRCULAR_BUFFER_CAPACITY
+ )
+ circularBuffer.push({ timestamp: Date.now(), value: 1.1 })
+ circularBuffer.push({ timestamp: Date.now(), value: 2.2 })
+ circularBuffer.push({ timestamp: Date.now(), value: 3.3 })
+ expect(extractTimeSeriesValues(circularBuffer)).toEqual([1.1, 2.2, 3.3])
})
await it('Verify isObject()', () => {
expect(isAsyncFunction([])).toBe(false)
expect(isAsyncFunction(new Date())).toBe(false)
// eslint-disable-next-line prefer-regex-literals
- expect(isAsyncFunction(new RegExp('[a-z]', 'i'))).toBe(false)
+ expect(isAsyncFunction(/[a-z]/i)).toBe(false)
expect(isAsyncFunction(new Error())).toBe(false)
expect(isAsyncFunction(new Map())).toBe(false)
expect(isAsyncFunction(new Set())).toBe(false)
expect(isNotEmptyArray(new WeakSet())).toBe(false)
})
+ await it('Verify insertAt()', () => {
+ expect(insertAt('test', 'ing', 'test'.length)).toBe('testing')
+ expect(insertAt('test', 'ing', 2)).toBe('teingst')
+ })
+
await it('Verify isArraySorted()', () => {
expect(
isArraySorted([], (a, b) => {
"pnpm": ">=9.0.0"
},
"volta": {
- "node": "22.0.0",
- "pnpm": "9.0.6"
+ "node": "22.3.0",
+ "pnpm": "9.3.0"
},
- "packageManager": "pnpm@9.0.6",
+ "packageManager": "pnpm@9.3.0",
"type": "module",
"scripts": {
"build": "vite build",
"preview": "pnpm build && vite preview",
"start": "pnpm build && node start.js",
"dev": "vite",
- "clean:dist": "npx rimraf dist",
- "clean:node_modules": "npx rimraf node_modules",
+ "clean:dist": "pnpm exec rimraf dist",
+ "clean:node_modules": "pnpm exec rimraf node_modules",
"lint": "cross-env TIMING=1 eslint . --cache --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --ignore-path .gitignore",
"lint:fix": "cross-env TIMING=1 eslint . --cache --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
"format": "prettier --cache --write .",
"dependencies": {
"finalhandler": "^1.2.0",
"serve-static": "^1.15.0",
- "vue": "^3.4.26",
- "vue-router": "^4.3.2",
+ "vue": "^3.4.29",
+ "vue-router": "^4.3.3",
"vue-toast-notification": "^3.1.2"
},
"devDependencies": {
- "@rushstack/eslint-patch": "^1.10.2",
+ "@rushstack/eslint-patch": "^1.10.3",
"@tsconfig/node20": "^20.1.4",
- "@types/jsdom": "^21.1.6",
- "@types/node": "^20.12.7",
- "@typescript-eslint/eslint-plugin": "^7.7.1",
- "@typescript-eslint/parser": "^7.7.1",
- "@vitejs/plugin-vue": "^5.0.4",
- "@vitejs/plugin-vue-jsx": "^3.1.0",
- "@vitest/coverage-v8": "^1.5.2",
+ "@types/jsdom": "^21.1.7",
+ "@types/node": "^20.14.2",
+ "@typescript-eslint/eslint-plugin": "^7.13.0",
+ "@typescript-eslint/parser": "^7.13.0",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "@vitejs/plugin-vue-jsx": "^4.0.0",
+ "@vitest/coverage-v8": "^1.6.0",
"@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0",
- "@vue/test-utils": "^2.4.5",
+ "@vue/test-utils": "^2.4.6",
"@vue/tsconfig": "^0.5.1",
"cross-env": "^7.0.3",
"eslint": "^8.57.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-simple-import-sort": "^12.1.0",
- "eslint-plugin-vue": "^9.25.0",
- "jsdom": "^24.0.0",
- "prettier": "^3.2.5",
- "rimraf": "^5.0.5",
+ "eslint-plugin-vue": "^9.26.0",
+ "jsdom": "^24.1.0",
+ "prettier": "^3.3.2",
+ "rimraf": "^5.0.7",
"typescript": "~5.4.5",
- "vite": "^5.2.10",
- "vitest": "^1.5.2"
+ "vite": "^5.3.1",
+ "vitest": "^1.6.0"
},
"_id": "webui@0.3.0"
}
}
public async deleteChargingStation(hashId: string): Promise<ResponsePayload> {
- return this.sendRequest(ProcedureName.DELETE_CHARGING_STATIONS, { hashIds: [hashId] })
+ return this.sendRequest(ProcedureName.DELETE_CHARGING_STATIONS, {
+ hashIds: [hashId]
+ })
}
public async setSupervisionUrl(hashId: string, supervisionUrl: string): Promise<ResponsePayload> {
}
public async startChargingStation(hashId: string): Promise<ResponsePayload> {
- return this.sendRequest(ProcedureName.START_CHARGING_STATION, { hashIds: [hashId] })
+ return this.sendRequest(ProcedureName.START_CHARGING_STATION, {
+ hashIds: [hashId]
+ })
}
public async stopChargingStation(hashId: string): Promise<ResponsePayload> {
- return this.sendRequest(ProcedureName.STOP_CHARGING_STATION, { hashIds: [hashId] })
+ return this.sendRequest(ProcedureName.STOP_CHARGING_STATION, {
+ hashIds: [hashId]
+ })
}
public async openConnection(hashId: string): Promise<ResponsePayload> {
this.uiServerConfiguration.authentication?.type === AuthenticationType.PROTOCOL_BASIC_AUTH
? [
`${this.uiServerConfiguration.protocol}${this.uiServerConfiguration.version}`,
- `authorization.basic.${btoa(`${this.uiServerConfiguration.authentication.username}:${this.uiServerConfiguration.authentication.password}`).replace(/={1,2}$/, '')}`
+ `authorization.basic.${btoa(
+ `${this.uiServerConfiguration.authentication.username}:${this.uiServerConfiguration.authentication.password}`
+ ).replace(/={1,2}$/, '')}`
]
: `${this.uiServerConfiguration.protocol}${this.uiServerConfiguration.version}`
this.ws = new WebSocket(
- `${this.uiServerConfiguration.secure === true ? ApplicationProtocol.WSS : ApplicationProtocol.WS}://${this.uiServerConfiguration.host}:${this.uiServerConfiguration.port}`,
+ `${
+ this.uiServerConfiguration.secure === true
+ ? ApplicationProtocol.WSS
+ : ApplicationProtocol.WS
+ }://${this.uiServerConfiguration.host}:${this.uiServerConfiguration.port}`,
protocols
)
this.ws.onopen = () => {
}
let changedValue: number = value as number
if (typeof value === 'string') {
- changedValue = parseInt(value)
+ changedValue = Number.parseInt(value)
}
if (isNaN(changedValue)) {
throw new Error(`Cannot convert to integer: '${String(value)}'`)
-export {}
+export type {}
declare module 'vue' {
export interface GlobalComponents {
)
const simulatorButtonMessage = computed<string>(
() =>
- `${simulatorState.value?.started === true ? 'Stop' : 'Start'} Simulator${simulatorState.value?.version != null ? ` (${simulatorState.value.version})` : ''}`
+ `${simulatorState.value?.started === true ? 'Stop' : 'Start'} Simulator${
+ simulatorState.value?.version != null ? ` (${simulatorState.value.version})` : ''
+ }`
)
const state = ref<{
unregisterWSEventListeners()
})
-const uiServerConfigurations: { index: number; configuration: UIServerConfigurationSection }[] = (
+const uiServerConfigurations: {
+ index: number
+ configuration: UIServerConfigurationSection
+}[] = (
app?.appContext.config.globalProperties.$configuration.value
.uiServer as UIServerConfigurationSection[]
).map((configuration: UIServerConfigurationSection, index: number) => ({
import serveStatic from 'serve-static'
const isCFEnvironment = env.VCAP_APPLICATION != null
-const PORT = isCFEnvironment ? parseInt(env.PORT) : 3030
+const PORT = isCFEnvironment ? Number.parseInt(env.PORT) : 3030
const uiPath = join(dirname(fileURLToPath(import.meta.url)), './dist')
const serve = serveStatic(uiPath)