diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 8ad739048..000000000 --- a/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -.github -.nyc_output -dist -docs -node_modules -test diff --git a/.github/workflows/build.sh b/.github/workflows/build.sh index ae9c080fc..fc62cc78c 100755 --- a/.github/workflows/build.sh +++ b/.github/workflows/build.sh @@ -20,6 +20,9 @@ fi; mkdir -p ./docs/ rm -rf ./docs/coverage/ ./docs/reference/ ./docs/tests/ +# Remove Dark Mode Logo +git checkout -- ./README.md +awk 'NR < 8 || NR > 10' ./README.md > temp && mv -f temp ./README.md # TypeDoc in ./docs/referece npx typedoc diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 26fb9bbab..617b64c12 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,22 @@ /dist /docs /node_modules + + +### WebStorm ### +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf +.idea/**/contentModel.xml +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml +.idea/httpRequests +*.iws +mochawesome-report diff --git a/.idea/.name b/.idea/.name new file mode 100755 index 000000000..6b79a051d --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +ical-generator \ No newline at end of file diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml new file mode 100755 index 000000000..180f489d3 --- /dev/null +++ b/.idea/codeStyleSettings.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 000000000..bf04bb809 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..52c95f3ae --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100755 index 000000000..f75895965 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/ical-generator.iml b/.idea/ical-generator.iml new file mode 100755 index 000000000..3cfc6d1b7 --- /dev/null +++ b/.idea/ical-generator.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100755 index 000000000..ca394c914 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,73 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100755 index 000000000..3b312839b --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100755 index 000000000..2b2f10aed --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jsLinters/eslint.xml b/.idea/jsLinters/eslint.xml new file mode 100644 index 000000000..541945bb0 --- /dev/null +++ b/.idea/jsLinters/eslint.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/jsLinters/jshint.xml b/.idea/jsLinters/jshint.xml new file mode 100755 index 000000000..7adae0879 --- /dev/null +++ b/.idea/jsLinters/jshint.xml @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/.idea/jsLinters/jslint.xml b/.idea/jsLinters/jslint.xml new file mode 100755 index 000000000..e8ba532a7 --- /dev/null +++ b/.idea/jsLinters/jslint.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/.idea/jsonSchemas.xml b/.idea/jsonSchemas.xml new file mode 100644 index 000000000..4b06e6123 --- /dev/null +++ b/.idea/jsonSchemas.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..28a804d89 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100755 index 000000000..81709d0bc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100755 index 000000000..922003b84 --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml.2 b/.idea/vcs.xml.2 new file mode 100755 index 000000000..c80f2198b --- /dev/null +++ b/.idea/vcs.xml.2 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 000000000..9338ba685 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/webResources.xml b/.idea/webResources.xml new file mode 100755 index 000000000..c8f67ffc5 --- /dev/null +++ b/.idea/webResources.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.nycrc b/.nycrc index 649f38dda..a30d12f2d 100644 --- a/.nycrc +++ b/.nycrc @@ -5,7 +5,7 @@ ".ts" ], "include": [ - "src/lib/*.ts" + "src/**/*.ts" ], "exclude": [ "coverage/**", @@ -24,7 +24,7 @@ "instrument": true, "branches": 95, "lines": 95, - "functions": 95, - "statements": 95, + "functions": 100, + "statements": 98, "per-file": true } diff --git a/CHANGELOG.md b/CHANGELOG.md index e69de29bb..206230405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -0,0 +1,594 @@ +# [7.1.0](https://github.com/sebbo2002/ical-generator/compare/v7.0.0...v7.1.0) (2024-04-15) + + +### Bug Fixes + +* Use event timezone for allDay events ([1bfeaf6](https://github.com/sebbo2002/ical-generator/commit/1bfeaf64284694e4510f3e1588c683c19da03ed0)) + + +### Features + +* Apply timezone for supported allday-events ([176352c](https://github.com/sebbo2002/ical-generator/commit/176352c9dfd3d4ac0fa21c458c174ef3c4f74535)), closes [#592](https://github.com/sebbo2002/ical-generator/issues/592) + +# [7.0.0](https://github.com/sebbo2002/ical-generator/compare/v6.0.1...v7.0.0) (2024-03-17) + + +### Bug Fixes + +* **Event:** Run start/end validation only when getting data ([9174a32](https://github.com/sebbo2002/ical-generator/commit/9174a32bfe209f17f8c8460bc38187bb84dfecb0)), closes [#581](https://github.com/sebbo2002/ical-generator/issues/581) +* fixed GEO missing when supplied (closes [#569](https://github.com/sebbo2002/ical-generator/issues/569)) ([2eeceb8](https://github.com/sebbo2002/ical-generator/commit/2eeceb84feb0cb5b9cc07a93e2b8b47fc3d313a7)) +* fixed typo `&&&` to `&&` ([7707b59](https://github.com/sebbo2002/ical-generator/commit/7707b595de0791c0d93f414a3340696d9e52d2ec)) + + +### Features + +* **Alarm:** Add support for `email` alarm type ([5398f09](https://github.com/sebbo2002/ical-generator/commit/5398f09809544c7529e8cabec2ee997b2a4781ae)), closes [#576](https://github.com/sebbo2002/ical-generator/issues/576) +* **Event:** Made `ICalEvent.location.title` optional to allow setting `GEO` without title ([42be230](https://github.com/sebbo2002/ical-generator/commit/42be23018544dbf75ad9ce6cfe25231d1d434cc0)), closes [#578](https://github.com/sebbo2002/ical-generator/issues/578) + + +### BREAKING CHANGES + +* **Event:** [ICalEvent.location()](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalEvent.html#location)'s `title` field can now be undefined + +## [6.0.1](https://github.com/sebbo2002/ical-generator/compare/v6.0.0...v6.0.1) (2024-01-07) + + +### Bug Fixes + +* **Calendar:** Remove `prodId()` string validation ([a5caeaa](https://github.com/sebbo2002/ical-generator/commit/a5caeaac5187557044af652fed109fb45e5f14a5)), closes [/www.rfc-editor.org/rfc/rfc5545#section-3](https://github.com//www.rfc-editor.org/rfc/rfc5545/issues/section-3) [#555](https://github.com/sebbo2002/ical-generator/issues/555) + +# [6.0.0](https://github.com/sebbo2002/ical-generator/compare/v5.0.1...v6.0.0) (2023-10-25) + + +### Bug Fixes + +* add `browser` field to `package.json` ([7db4e32](https://github.com/sebbo2002/ical-generator/commit/7db4e32ad03b25b5cbe2cc4ce459541ee5639f15)) + + +### Features + +* Enable npm provenance ([87d173a](https://github.com/sebbo2002/ical-generator/commit/87d173a17133207492bd5c5ad2eeb70d8ecbe082)) +* Enable npm provenance ([ccba971](https://github.com/sebbo2002/ical-generator/commit/ccba971b065542500d0f3fa1475eea9f849b03f0)) +* Ensure Calendar is renderable all the time ([f1328a3](https://github.com/sebbo2002/ical-generator/commit/f1328a3b790507037efeb39431044c0970117cac)), closes [#344](https://github.com/sebbo2002/ical-generator/issues/344) +* Remove `save()`, `saveSync()`, `serve()`, `toBlob()`, `toURL()` ([b6bea66](https://github.com/sebbo2002/ical-generator/commit/b6bea665837c85e066ad7a32234336b01e6244f1)), closes [#478](https://github.com/sebbo2002/ical-generator/issues/478) + + +### Reverts + +* Revert "ci: Downgrade is-semantic-release till it's fixed" ([91c2ab5](https://github.com/sebbo2002/ical-generator/commit/91c2ab59d0559a060c11d07973382c465dd3345d)) + + +### BREAKING CHANGES + +* `Alarm.trigger` now defaults to 10min before event, `Alarm.type` now defaults to `display`, `Alarm.interval()` got removed, use `Alarm.repeat()` instead, `Alarm.repeat()` now gives/takes an object instead of a number, `Attendee.email` can’t be `null | undefined`, `Category.name` can’t be `null | undefined`, `Event.start` now defaults to now (`new Date()`). For details and examples checkout the migration guide at https://github.com/sebbo2002/ical-generator/wiki/Migration-Guide:-v5-%E2%86%92-v6 +* The `save()`, `saveSync()`, `serve()`, `toBlob()` and `toURL()` methods of the ICalCalendar class have been removed. Please use the `toString()` method to generate the ical string and proceed from there. + +## [5.0.1](https://github.com/sebbo2002/ical-generator/compare/v5.0.0...v5.0.1) (2023-08-17) + + +### Bug Fixes + +* double-quotes and missing filename variable ([30fcccd](https://github.com/sebbo2002/ical-generator/commit/30fcccdfb1253c37f9211833a6d74ecbf953b892)) +* indentation, semicolons and quoting ([2dd4d24](https://github.com/sebbo2002/ical-generator/commit/2dd4d2494d18af843a22005a61627a3461ec29e2)) + +# [5.0.0](https://github.com/sebbo2002/ical-generator/compare/v4.1.0...v5.0.0) (2023-06-14) + + +### Build System + +* Deprecate node.js v14 / v17 ([7a2de45](https://github.com/sebbo2002/ical-generator/commit/7a2de45c12f19a1ec441b3a004f4aa935efc197c)) + + +### BREAKING CHANGES + +* The node.js versions v14 and v17 are no longer maintained and are therefore no longer supported. See https://nodejs.dev/en/about/releases/ for more details on node.js release cycles. + +# [4.1.0](https://github.com/sebbo2002/ical-generator/compare/v4.0.0...v4.1.0) (2023-05-04) + + +### Bug Fixes + +* Allow `null` return value for Luxon 3.3's DateTime.toJSON() ([bee19a8](https://github.com/sebbo2002/ical-generator/commit/bee19a8e70bc690b93175c2da2a35240c55032bd)), closes [#482](https://github.com/sebbo2002/ical-generator/issues/482) [#485](https://github.com/sebbo2002/ical-generator/issues/485) +* revent changes to package.json version ([916e460](https://github.com/sebbo2002/ical-generator/commit/916e460af591ff1ebb1c757dfc9762667331f598)) +* revert package-lock.json ([a8d8f2d](https://github.com/sebbo2002/ical-generator/commit/a8d8f2d45b039e80689e3cf9ac774645d6b3ccc9)) + + +### Features + +* Support trigger related behavior ([54743df](https://github.com/sebbo2002/ical-generator/commit/54743df1cce615f3df2c155c51928674afc2e3d7)) + +# [4.0.0](https://github.com/sebbo2002/ical-generator/compare/v3.6.1...v4.0.0) (2023-03-30) + + +### Bug Fixes + +* **Event:** Add `RRULE:` prefix in event.repeating() if it's not already there ([92c2034](https://github.com/sebbo2002/ical-generator/commit/92c2034cae51c0e8199b6cf1746adfe7bdc85a60)), closes [#459](https://github.com/sebbo2002/ical-generator/issues/459) +* Update escaping for quoted values ([faf5c70](https://github.com/sebbo2002/ical-generator/commit/faf5c70771fb62284cd9db936b0f5812e8353730)), closes [#463](https://github.com/sebbo2002/ical-generator/issues/463) + + +### Build System + +* Deprecate node.js 12 ([426588b](https://github.com/sebbo2002/ical-generator/commit/426588b4bb7bde2924bbc92006ca839e960872e1)) +* Native ESM support ([7b86a4f](https://github.com/sebbo2002/ical-generator/commit/7b86a4f1187c387a3a5792e1fb72d822b04e3631)) + + +### Features + +* ESM Module ([7e1f07a](https://github.com/sebbo2002/ical-generator/commit/7e1f07afe6ff60100df61887e6a063b382f75340)) + + +### BREAKING CHANGES + +* Importing the generator with `const ical = require('ical-generator');` (introduced with 2.1.0 / #253) will not work anymore, please use `const { default: ical } = require('ical-generator');` or move to fancy ESM imports (`import ical from 'ical-generator' ;`). +* From now on, only node.js ^14.8.0 || >=16.0.0 are supported +* Only Support for node.js ^12.20.0 || >=14.13.1 + +## [3.6.1](https://github.com/sebbo2002/ical-generator/compare/v3.6.0...v3.6.1) (2022-12-27) + + +### Bug Fixes + +* **Event:** Return floating repeating until/excluded dates if floating ([011123e](https://github.com/sebbo2002/ical-generator/commit/011123ee284f8355203f2a2f2f2dc06b22e478af)), closes [#442](https://github.com/sebbo2002/ical-generator/issues/442) + +# [3.6.0](https://github.com/sebbo2002/ical-generator/compare/v3.5.2...v3.6.0) (2022-10-11) + + +### Features + +* **Event:** Update `bySetPos` and `byMonthDay` ([b19e94b](https://github.com/sebbo2002/ical-generator/commit/b19e94bdc9408acfb6e64d93de614ad25edb4ad0)), closes [#430](https://github.com/sebbo2002/ical-generator/issues/430) + +## [3.5.2](https://github.com/sebbo2002/ical-generator/compare/v3.5.1...v3.5.2) (2022-09-24) + + +### Bug Fixes + +* Include source files in npm module to allow sourcemap resolving ([2760b75](https://github.com/sebbo2002/ical-generator/commit/2760b75e67c2eb224ae1c38e8de94b4056cda7c2)), closes [#426](https://github.com/sebbo2002/ical-generator/issues/426) + +## [3.5.1](https://github.com/sebbo2002/ical-generator/compare/v3.5.0...v3.5.1) (2022-07-28) + + +### Bug Fixes + +* Remove private property from moment stub ([792adb6](https://github.com/sebbo2002/ical-generator/commit/792adb6985b88b69756916343d4c5c7929f5a82d)), closes [#411](https://github.com/sebbo2002/ical-generator/issues/411) + +# [3.5.0](https://github.com/sebbo2002/ical-generator/compare/v3.4.3...v3.5.0) (2022-07-27) + + +### Features + +* Replace external types with stub types ([56cffc7](https://github.com/sebbo2002/ical-generator/commit/56cffc7a4e9f741e779d445bfaf749b6885a4504)), closes [#405](https://github.com/sebbo2002/ical-generator/issues/405) + +## [3.4.3](https://github.com/sebbo2002/ical-generator/compare/v3.4.2...v3.4.3) (2022-05-14) + +## [3.4.2](https://github.com/sebbo2002/ical-generator/compare/v3.4.1...v3.4.2) (2022-04-28) + + +### Bug Fixes + +* Do not escape quotes when not required ([08a4d62](https://github.com/sebbo2002/ical-generator/commit/08a4d626045c586302792b112c35496dd676af1d)), closes [#377](https://github.com/sebbo2002/ical-generator/issues/377) + +## [3.4.1](https://github.com/sebbo2002/ical-generator/compare/v3.4.0...v3.4.1) (2022-03-31) + +# [3.4.0](https://github.com/sebbo2002/ical-generator/compare/v3.3.0...v3.4.0) (2022-03-21) + + +### Features + +* Add Support for Sent By ([9aac3e0](https://github.com/sebbo2002/ical-generator/commit/9aac3e0e5e0bb54b1400da8ef42e1544f033a72a)), closes [#358](https://github.com/sebbo2002/ical-generator/issues/358) + +# [3.3.0](https://github.com/sebbo2002/ical-generator/compare/v3.2.1...v3.3.0) (2022-03-21) + + +### Features + +* added `types` property to declaration file ([01518e0](https://github.com/sebbo2002/ical-generator/commit/01518e048d785724f01be69a77bce6b58e2843d8)) + +## [3.2.1](https://github.com/sebbo2002/ical-generator/compare/v3.2.0...v3.2.1) (2022-01-28) + + +### Bug Fixes + +* Update error URLs ([2628464](https://github.com/sebbo2002/ical-generator/commit/262846466808a043b4b241a17b38503c7949e78f)), closes [#343](https://github.com/sebbo2002/ical-generator/issues/343) + +# [3.2.0](https://github.com/sebbo2002/ical-generator/compare/v3.1.1...v3.2.0) (2022-01-12) + + +### Bug Fixes + +* **Attendee:** Print RSVP also if rsvp is set to false ([27e5166](https://github.com/sebbo2002/ical-generator/commit/27e51668710c3f6eff4c3ad4c5e64028444aca05)), closes [#340](https://github.com/sebbo2002/ical-generator/issues/340) + + +### Features + +* **Events:** Add `createAttachment` / `attachments` ([12a382f](https://github.com/sebbo2002/ical-generator/commit/12a382fedb798460891d327bd9c112b1c97c38ee)), closes [#335](https://github.com/sebbo2002/ical-generator/issues/335) + +## [3.1.1](https://github.com/sebbo2002/ical-generator/compare/v3.1.0...v3.1.1) (2021-12-13) + + +### Bug Fixes + +* **CI:** Fix DockerHub container release ([01b7534](https://github.com/sebbo2002/ical-generator/commit/01b753406d1f1ef24a949c7d7b946d99b779d013)) + +# [3.1.0](https://github.com/sebbo2002/ical-generator/compare/v3.0.1...v3.1.0) (2021-11-17) + + +### Bug Fixes + +* Remove Blob usage to support modern browsers ([c4e33d3](https://github.com/sebbo2002/ical-generator/commit/c4e33d3405338f42cc299cc927b851a67a88b3ad)), closes [#325](https://github.com/sebbo2002/ical-generator/issues/325) + + +### Features + +* **Calendar:** Handle `timezone('UTC')` correctly ([c0745e5](https://github.com/sebbo2002/ical-generator/commit/c0745e50101d3f29e51ddecce7da4a4e445ccc81)), closes [#328](https://github.com/sebbo2002/ical-generator/issues/328) +* **event:** Add support for event class ([a227aa2](https://github.com/sebbo2002/ical-generator/commit/a227aa27d293305e307861149aad3888caf5eafe)) +* **Event:** Handle `timezone('UTC')` correctly ([781dc3d](https://github.com/sebbo2002/ical-generator/commit/781dc3d67296cef67652e8a97600f7678d6ac191)), closes [#328](https://github.com/sebbo2002/ical-generator/issues/328) + +## [3.0.1](https://github.com/sebbo2002/ical-generator/compare/v3.0.0...v3.0.1) (2021-10-01) + + +### Bug Fixes + +* **Event:** Append address to `LOCATION` even without `radius` / `geo` ([09ea62e](https://github.com/sebbo2002/ical-generator/commit/09ea62eb073bd79e66c8905841a93810fcea0634)), closes [#314](https://github.com/sebbo2002/ical-generator/issues/314) + +# [3.0.0](https://github.com/sebbo2002/ical-generator/compare/v2.2.0...v3.0.0) (2021-07-31) + +# [3.0.0-develop.8](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.7...v3.0.0-develop.8) (2021-08-26) + + +### Bug Fixes + +* Make peerDependencies less strict ([1c3a8f2](https://github.com/sebbo2002/ical-generator/commit/1c3a8f2f1d8880c6f94d7e06df8b5498a7418f01)), closes [#303](https://github.com/sebbo2002/ical-generator/issues/303) + + +### chore + +* Remove node.js 10 Support ([2b910c0](https://github.com/sebbo2002/ical-generator/commit/2b910c09bc8a41085fc4472159494d8738d5521e)) + + +### BREAKING CHANGES + +* Removed support for node.js v10 + +# [3.0.0-develop.7](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.6...v3.0.0-develop.7) (2021-07-28) + +# [3.0.0-develop.6](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.5...v3.0.0-develop.6) (2021-07-28) + +# [3.0.0-develop.5](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.4...v3.0.0-develop.5) (2021-07-28) + +# [3.0.0-develop.4](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.3...v3.0.0-develop.4) (2021-07-22) + + +### Bug Fixes + +* Make peerDependencies less strict ([1c3a8f2](https://github.com/sebbo2002/ical-generator/commit/1c3a8f2f1d8880c6f94d7e06df8b5498a7418f01)), closes [#303](https://github.com/sebbo2002/ical-generator/issues/303) + +# [3.0.0-develop.3](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.2...v3.0.0-develop.3) (2021-06-18) + +# [3.0.0-develop.2](https://github.com/sebbo2002/ical-generator/compare/v3.0.0-develop.1...v3.0.0-develop.2) (2021-06-08) + +# [3.0.0-develop.1](https://github.com/sebbo2002/ical-generator/compare/v2.2.0...v3.0.0-develop.1) (2021-06-08) + + +### chore + +* Remove node.js 10 Support ([2b910c0](https://github.com/sebbo2002/ical-generator/commit/2b910c09bc8a41085fc4472159494d8738d5521e)) + + +### BREAKING CHANGES + +* Removed support for node.js v10 + +# [2.2.0](https://github.com/sebbo2002/ical-generator/compare/v2.1.0...v2.2.0) (2021-05-24) + + +### Features + +* **Calendar:** Add `source()`, thanks [@irfaan](https://github.com/irfaan) ([91a764f](https://github.com/sebbo2002/ical-generator/commit/91a764fa135fe325b58f391b6a198f8807796350)), closes [#260](https://github.com/sebbo2002/ical-generator/issues/260) + +# [2.2.0-develop.1](https://github.com/sebbo2002/ical-generator/compare/v2.1.1-develop.1...v2.2.0-develop.1) (2021-05-24) + + +### Features + +* **Calendar:** Add `source()`, thanks [@irfaan](https://github.com/irfaan) ([91a764f](https://github.com/sebbo2002/ical-generator/commit/91a764fa135fe325b58f391b6a198f8807796350)), closes [#260](https://github.com/sebbo2002/ical-generator/issues/260) + +## [2.1.1-develop.1](https://github.com/sebbo2002/ical-generator/compare/v2.1.0...v2.1.1-develop.1) (2021-05-17) + +# [2.1.0](https://github.com/sebbo2002/ical-generator/compare/v2.0.0...v2.1.0) (2021-05-13) + + +### Features + +* Allow use of `require('ical-generator')` without `.default` ([31833a6](https://github.com/sebbo2002/ical-generator/commit/31833a60d3123f9b4ac10677dcad3871a892f32c)), closes [#253](https://github.com/sebbo2002/ical-generator/issues/253) +* Export `formatDate` and some other tool functions ([6142e11](https://github.com/sebbo2002/ical-generator/commit/6142e11f631011aff9be8df129980dfac411d4f2)), closes [#248](https://github.com/sebbo2002/ical-generator/issues/248) +* first commit ([dc8fa4a](https://github.com/sebbo2002/ical-generator/commit/dc8fa4a2ce97c6f0ab55e3371b83f5388b5da0c9)) + +# [2.1.0-develop.6](https://github.com/sebbo2002/ical-generator/compare/v2.1.0-develop.5...v2.1.0-develop.6) (2021-05-13) + +# [2.1.0-develop.5](https://github.com/sebbo2002/ical-generator/compare/v2.1.0-develop.4...v2.1.0-develop.5) (2021-05-12) + +# [2.1.0-develop.4](https://github.com/sebbo2002/ical-generator/compare/v2.1.0-develop.3...v2.1.0-develop.4) (2021-05-12) + + +### Features + +* Allow use of `require('ical-generator')` without `.default` ([31833a6](https://github.com/sebbo2002/ical-generator/commit/31833a60d3123f9b4ac10677dcad3871a892f32c)), closes [#253](https://github.com/sebbo2002/ical-generator/issues/253) + +# [2.1.0-develop.3](https://github.com/sebbo2002/ical-generator/compare/v2.1.0-develop.2...v2.1.0-develop.3) (2021-05-10) + + +### Features + +* first commit ([dc8fa4a](https://github.com/sebbo2002/ical-generator/commit/dc8fa4a2ce97c6f0ab55e3371b83f5388b5da0c9)) + +# [2.1.0-develop.2](https://github.com/sebbo2002/ical-generator/compare/v2.1.0-develop.1...v2.1.0-develop.2) (2021-05-01) + +# [2.1.0-develop.1](https://github.com/sebbo2002/ical-generator/compare/v2.0.1-develop.3...v2.1.0-develop.1) (2021-04-30) + + +### Features + +* Export `formatDate` and some other tool functions ([6142e11](https://github.com/sebbo2002/ical-generator/commit/6142e11f631011aff9be8df129980dfac411d4f2)), closes [#248](https://github.com/sebbo2002/ical-generator/issues/248) + +## [2.0.1-develop.3](https://github.com/sebbo2002/ical-generator/compare/v2.0.1-develop.2...v2.0.1-develop.3) (2021-04-30) + +## [2.0.1-develop.2](https://github.com/sebbo2002/ical-generator/compare/v2.0.1-develop.1...v2.0.1-develop.2) (2021-04-29) + +## [2.0.1-develop.1](https://github.com/sebbo2002/ical-generator/compare/v2.0.0...v2.0.1-develop.1) (2021-04-29) + +# [2.0.0](https://github.com/sebbo2002/ical-generator/compare/v1.15.4...v2.0.0) (2021-04-28) + + +### Bug Fixes + +* **package.json:** add temporary version ([0bc117e](https://github.com/sebbo2002/ical-generator/commit/0bc117e557d3fb4680345287c4dbb2549b2ecd32)) +* Allow to set null values within object constructors ([8b87183](https://github.com/sebbo2002/ical-generator/commit/8b8718305096466669b5d2cdcf318825cb8145ae)) +* **deps:** Also define libs as devDependency for tests ([c04ae32](https://github.com/sebbo2002/ical-generator/commit/c04ae321c59739f86df89b71ff0db11b63ef762f)) +* **deps:** Define supported libs as peerDependencies ([84e2784](https://github.com/sebbo2002/ical-generator/commit/84e278460a33ec4dbb08fdeeed55f6fd1a9be15b)) +* Make peer dependencies optional ([b384ac7](https://github.com/sebbo2002/ical-generator/commit/b384ac7838f1694f698f1fd921ddbd401ad66424)), closes [#244](https://github.com/sebbo2002/ical-generator/issues/244) +* **Tools:** Prevent formatDate() from using global timezones prefixed with a slash ([85ab7b2](https://github.com/sebbo2002/ical-generator/commit/85ab7b221b0ab7cee858d82374c52405cf610c94)) +* **deps:** Put necessary typings in peerDependencies as well :/ ([14f0f43](https://github.com/sebbo2002/ical-generator/commit/14f0f43dc23facea9f7aec16144a8546d0b7af3f)) +* **Event:** Remove `moment` dependency in constructor ([8331d4c](https://github.com/sebbo2002/ical-generator/commit/8331d4ce09949d68f678211ff1f1906d1cd5d98d)), closes [#234](https://github.com/sebbo2002/ical-generator/issues/234) + + +### Code Refactoring + +* **Calendar:** Remove moment.Duration from `ttl()` method ([c6ccd12](https://github.com/sebbo2002/ical-generator/commit/c6ccd12ed9e4f63e1876e3e06e7f13c38f1400ae)) +* Update error URLs ([2aedf55](https://github.com/sebbo2002/ical-generator/commit/2aedf552f4d79da49c6a3b0d990fb1f4b82c5a64)) + + +### Features + +* **Event:** Add `priority()` method ([247039f](https://github.com/sebbo2002/ical-generator/commit/247039fe2959dd5c5dbcb7772d4d2afa3406b987)), closes [#163](https://github.com/sebbo2002/ical-generator/issues/163) +* **Attendee:** Add `x()` method for custom attributes ([5d9d686](https://github.com/sebbo2002/ical-generator/commit/5d9d6863dbc07c1054d858e83c3890588e8a6840)), closes [#183](https://github.com/sebbo2002/ical-generator/issues/183) +* **Calendar:** add new clear method ([1ebefcb](https://github.com/sebbo2002/ical-generator/commit/1ebefcb3057db88870474bbb8da6c70ed9cb7336)), closes [#188](https://github.com/sebbo2002/ical-generator/issues/188) +* Add ReleaseBot ([2fba164](https://github.com/sebbo2002/ical-generator/commit/2fba16478db12c0dd50b7c537cc3806395e64818)) +* **Calendar:** Add support for external VTimezone generator ([f4bc8e0](https://github.com/sebbo2002/ical-generator/commit/f4bc8e0535caecd1651b765f513722929d6b72b8)), closes [#122](https://github.com/sebbo2002/ical-generator/issues/122) +* **Event:** Allow `X-APPLE-STRUCTURED-LOCATION` without address ([4e63e29](https://github.com/sebbo2002/ical-generator/commit/4e63e2914a4ac7956047b9011cfca177bcdb926a)), closes [#236](https://github.com/sebbo2002/ical-generator/issues/236) +* **Event:** Make organizer.email optional ([8450492](https://github.com/sebbo2002/ical-generator/commit/8450492525d43d0de9d01a8f756cb76c43a77ff3)), closes [#137](https://github.com/sebbo2002/ical-generator/issues/137) +* **Event:** Merge `location()`, `appleLocation()` and `geo()` ([62c1516](https://github.com/sebbo2002/ical-generator/commit/62c1516ce8c1ffee566dfb8cc70f2431a6325fe9)), closes [#187](https://github.com/sebbo2002/ical-generator/issues/187) +* Merge event's `description()` and `htmlDescription()` ([ce537f8](https://github.com/sebbo2002/ical-generator/commit/ce537f8f56c1f3651938b75e884ae76814187daf)) +* Support moment.js, Day.js and Luxon ([#91](https://github.com/sebbo2002/ical-generator/issues/91), BREAKING CHANGE) ([6db24ee](https://github.com/sebbo2002/ical-generator/commit/6db24ee4887fca212a3a730e84fda9dd9c84ea01)) +* **Event:** Support RRule objects and raw strings in `repeating()` ([4436785](https://github.com/sebbo2002/ical-generator/commit/4436785894dfda4d0186283f89848d9a9a00ce6a)), closes [#190](https://github.com/sebbo2002/ical-generator/issues/190) +* Updated the entire codebase to Typescript ([d013dc0](https://github.com/sebbo2002/ical-generator/commit/d013dc0199c9a9dce5181b9c89adf144bde17cea)) +* **Events:** Use uuid-random for random UUIDs (close [#215](https://github.com/sebbo2002/ical-generator/issues/215)) ([a4c19cc](https://github.com/sebbo2002/ical-generator/commit/a4c19ccdba037e7196b47bb571c26f2e6068f538)) + + +### BREAKING CHANGES + +* Some error messages changed, so if you check for error , please double check them now. +* `htmlDescription()` was removed, use `description()` instead. +* **Calendar:** `ttl()` will now return a number, not a `moment.Duration`. You can still use `moment.Duration` to set the `ttl` value. +* **Event:** `geo()` and `appleLocation()` are not available anymore, use `location()` instead and pass an location object (with title, radius, etc.) +* **Calendar:** Calendar's `clear()` method is a completely new implementation and, unlike previous versions, will not reset metadata such as `name` or `prodId`. Only the events will be removed + +# [2.0.0-develop.22](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.21...v2.0.0-develop.22) (2021-04-28) + +# [2.0.0-develop.21](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.20...v2.0.0-develop.21) (2021-04-17) + + +### Bug Fixes + +* Make peer dependencies optional ([b384ac7](https://github.com/sebbo2002/ical-generator/commit/b384ac7838f1694f698f1fd921ddbd401ad66424)), closes [#244](https://github.com/sebbo2002/ical-generator/issues/244) + +# [2.0.0-develop.20](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.19...v2.0.0-develop.20) (2021-04-14) + + +### Bug Fixes + +* **Tools:** Prevent formatDate() from using global timezones prefixed with a slash ([85ab7b2](https://github.com/sebbo2002/ical-generator/commit/85ab7b221b0ab7cee858d82374c52405cf610c94)) + + +### Features + +* **Calendar:** Add support for external VTimezone generator ([f4bc8e0](https://github.com/sebbo2002/ical-generator/commit/f4bc8e0535caecd1651b765f513722929d6b72b8)), closes [#122](https://github.com/sebbo2002/ical-generator/issues/122) + +# [2.0.0-develop.19](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.18...v2.0.0-develop.19) (2021-04-10) + + +### Features + +* Add ReleaseBot ([2fba164](https://github.com/sebbo2002/ical-generator/commit/2fba16478db12c0dd50b7c537cc3806395e64818)) + +# [2.0.0-develop.18](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.17...v2.0.0-develop.18) (2021-04-09) + + +### Features + +* **Event:** Allow `X-APPLE-STRUCTURED-LOCATION` without address ([4e63e29](https://github.com/sebbo2002/ical-generator/commit/4e63e2914a4ac7956047b9011cfca177bcdb926a)), closes [#236](https://github.com/sebbo2002/ical-generator/issues/236) + +# [2.0.0-develop.17](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.16...v2.0.0-develop.17) (2021-04-02) + +# [2.0.0-develop.16](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.15...v2.0.0-develop.16) (2021-04-02) + + +### Bug Fixes + +* **deps:** Put necessary typings in peerDependencies as well :/ ([14f0f43](https://github.com/sebbo2002/ical-generator/commit/14f0f43dc23facea9f7aec16144a8546d0b7af3f)) + +# [2.0.0-develop.15](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.14...v2.0.0-develop.15) (2021-04-02) + + +### Bug Fixes + +* **deps:** Also define libs as devDependency for tests ([c04ae32](https://github.com/sebbo2002/ical-generator/commit/c04ae321c59739f86df89b71ff0db11b63ef762f)) +* **deps:** Define supported libs as peerDependencies ([84e2784](https://github.com/sebbo2002/ical-generator/commit/84e278460a33ec4dbb08fdeeed55f6fd1a9be15b)) + +# [2.0.0-develop.14](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.13...v2.0.0-develop.14) (2021-03-28) + + +### Bug Fixes + +* Allow to set null values within object constructors ([8b87183](https://github.com/sebbo2002/ical-generator/commit/8b8718305096466669b5d2cdcf318825cb8145ae)) + +# [2.0.0-develop.13](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.12...v2.0.0-develop.13) (2021-03-26) + + +### Code Refactoring + +* Update error URLs ([2aedf55](https://github.com/sebbo2002/ical-generator/commit/2aedf552f4d79da49c6a3b0d990fb1f4b82c5a64)) + + +### BREAKING CHANGES + +* Some error messages changed, so if you check for error , please double check them now. + +# [2.0.0-develop.12](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.11...v2.0.0-develop.12) (2021-03-26) + + +### Reverts + +* Revert "chore: Update package.json" ([2ad5716](https://github.com/sebbo2002/ical-generator/commit/2ad57163882b7171f45269b3742da9ead23510f4)) + +# [2.0.0-develop.11](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.10...v2.0.0-develop.11) (2021-03-26) + + +### chore + +* Update package.json ([a3c7037](https://github.com/sebbo2002/ical-generator/commit/a3c7037404c6c12fec7a892d39bfd4cfd8c6a00a)) + + +### BREAKING CHANGES + +* Set minimum node.js version to 12.0.0 + +# [2.0.0-develop.10](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.9...v2.0.0-develop.10) (2021-03-25) + +# [2.0.0-develop.9](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.8...v2.0.0-develop.9) (2021-03-24) + +# [2.0.0-develop.8](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.7...v2.0.0-develop.8) (2021-03-23) + + +### Features + +* **Attendee:** Add `x()` method for custom attributes ([5d9d686](https://github.com/sebbo2002/ical-generator/commit/5d9d6863dbc07c1054d858e83c3890588e8a6840)), closes [#183](https://github.com/sebbo2002/ical-generator/issues/183) + +# [2.0.0-develop.7](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.6...v2.0.0-develop.7) (2021-03-23) + + +### Features + +* **Event:** Add `priority()` method ([247039f](https://github.com/sebbo2002/ical-generator/commit/247039fe2959dd5c5dbcb7772d4d2afa3406b987)), closes [#163](https://github.com/sebbo2002/ical-generator/issues/163) + +# [2.0.0-develop.6](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.5...v2.0.0-develop.6) (2021-03-23) + + +### Features + +* **Event:** Make organizer.email optional ([8450492](https://github.com/sebbo2002/ical-generator/commit/8450492525d43d0de9d01a8f756cb76c43a77ff3)), closes [#137](https://github.com/sebbo2002/ical-generator/issues/137) + +# [2.0.0-develop.5](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.4...v2.0.0-develop.5) (2021-03-23) + + +### Features + +* **Event:** Support RRule objects and raw strings in `repeating()` ([4436785](https://github.com/sebbo2002/ical-generator/commit/4436785894dfda4d0186283f89848d9a9a00ce6a)), closes [#190](https://github.com/sebbo2002/ical-generator/issues/190) + +# [2.0.0-develop.4](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.3...v2.0.0-develop.4) (2021-03-23) + + +### Bug Fixes + +* **Event:** Remove `moment` dependency in constructor ([8331d4c](https://github.com/sebbo2002/ical-generator/commit/8331d4ce09949d68f678211ff1f1906d1cd5d98d)), closes [#234](https://github.com/sebbo2002/ical-generator/issues/234) + +# [2.0.0-develop.3](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.2...v2.0.0-develop.3) (2021-03-23) + + +### Code Refactoring + +* **Calendar:** Remove moment.Duration from `ttl()` method ([c6ccd12](https://github.com/sebbo2002/ical-generator/commit/c6ccd12ed9e4f63e1876e3e06e7f13c38f1400ae)) + + +### Features + +* Merge event's `description()` and `htmlDescription()` ([ce537f8](https://github.com/sebbo2002/ical-generator/commit/ce537f8f56c1f3651938b75e884ae76814187daf)) + + +### BREAKING CHANGES + +* `htmlDescription()` was removed, use `description()` instead. +* **Calendar:** `ttl()` will now return a number, not a `moment.Duration`. You can still use `moment.Duration` to set the `ttl` value. + +# [2.0.0-develop.2](https://github.com/sebbo2002/ical-generator/compare/v2.0.0-develop.1...v2.0.0-develop.2) (2021-03-22) + + +### Features + +* **Event:** Merge `location()`, `appleLocation()` and `geo()` ([62c1516](https://github.com/sebbo2002/ical-generator/commit/62c1516ce8c1ffee566dfb8cc70f2431a6325fe9)), closes [#187](https://github.com/sebbo2002/ical-generator/issues/187) + + +### BREAKING CHANGES + +* **Event:** `geo()` and `appleLocation()` are not available anymore, use `location()` instead and pass an location object (with title, radius, etc.) + +# [2.0.0-develop.1](https://github.com/sebbo2002/ical-generator/compare/v1.3.0-develop.4...v2.0.0-develop.1) (2021-03-21) + + +### Features + +* **Calendar:** add new clear method ([1ebefcb](https://github.com/sebbo2002/ical-generator/commit/1ebefcb3057db88870474bbb8da6c70ed9cb7336)), closes [#188](https://github.com/sebbo2002/ical-generator/issues/188) + + +### BREAKING CHANGES + +* **Calendar:** Calendar's `clear()` method is a completely new implementation and, unlike previous versions, will not reset metadata such as `name` or `prodId`. Only the events will be removed + +# [1.3.0-develop.4](https://github.com/sebbo2002/ical-generator/compare/v1.3.0-develop.3...v1.3.0-develop.4) (2021-03-21) + + +### Features + +* Support moment.js, Day.js and Luxon ([#91](https://github.com/sebbo2002/ical-generator/issues/91), BREAKING CHANGE) ([6db24ee](https://github.com/sebbo2002/ical-generator/commit/6db24ee4887fca212a3a730e84fda9dd9c84ea01)) + +# [1.3.0-develop.3](https://github.com/sebbo2002/ical-generator/compare/v1.3.0-develop.2...v1.3.0-develop.3) (2021-03-13) + +# [1.3.0-develop.2](https://github.com/sebbo2002/ical-generator/compare/v1.3.0-develop.1...v1.3.0-develop.2) (2021-03-05) + + +### Features + +* **Events:** Use uuid-random for random UUIDs (close [#215](https://github.com/sebbo2002/ical-generator/issues/215)) ([a4c19cc](https://github.com/sebbo2002/ical-generator/commit/a4c19ccdba037e7196b47bb571c26f2e6068f538)) + +# [1.3.0-develop.1](https://github.com/sebbo2002/ical-generator/compare/v1.2.1...v1.3.0-develop.1) (2021-02-27) + + +### Bug Fixes + +* **package.json:** add temporary version ([0bc117e](https://github.com/sebbo2002/ical-generator/commit/0bc117e557d3fb4680345287c4dbb2549b2ecd32)) +* allow X-attrs to be specified in constructor ([#185](https://github.com/sebbo2002/ical-generator/issues/185)) ([58c1ae5](https://github.com/sebbo2002/ical-generator/commit/58c1ae5d30ede4842f2cdcb4eb9458d1d27c63ff)) +* capitalize byDay even when bySetPos is used ([#205](https://github.com/sebbo2002/ical-generator/issues/205)) ([5440fbc](https://github.com/sebbo2002/ical-generator/commit/5440fbc90baa93e5313ef1e328ef4ff81273eb79)) +* **Typings:** Fix OPT-PARTICIPANT ([b777f9e](https://github.com/sebbo2002/ical-generator/commit/b777f9e14c1ae256d809b0f1777ac773b64e1308)), closes [#192](https://github.com/sebbo2002/ical-generator/issues/192) +* Fix scale type for CalendarData ([#191](https://github.com/sebbo2002/ical-generator/issues/191)) ([d5421e8](https://github.com/sebbo2002/ical-generator/commit/d5421e8782327a985fa4c08bd4609779a67512cf)) +* Make x key optional in types ([#211](https://github.com/sebbo2002/ical-generator/issues/211)) ([e3c21e2](https://github.com/sebbo2002/ical-generator/commit/e3c21e27a69317e0e8a2a81eca32ae358d57b00c)) +* Type fixes and updates ([#217](https://github.com/sebbo2002/ical-generator/issues/217)) ([d8abe4d](https://github.com/sebbo2002/ical-generator/commit/d8abe4d43bb0eb1edb49f84b966ea6094cb0d562)) + + +### Features + +* **Events:** Add appleLocation method ([#170](https://github.com/sebbo2002/ical-generator/issues/170)) ([0956ba2](https://github.com/sebbo2002/ical-generator/commit/0956ba2c687ac46dc3faa9e02565682fda0c50a9)) +* Add missing string input options to interface ([#199](https://github.com/sebbo2002/ical-generator/issues/199)) ([a963178](https://github.com/sebbo2002/ical-generator/commit/a963178099b64caa5c4d6e99cee75b3882b823cb)) +* Add Transparency Method ([bd2901d](https://github.com/sebbo2002/ical-generator/commit/bd2901d248ec679a960f598025867aa08b0ee73a)) +* Increase id entropy - Fixes [#200](https://github.com/sebbo2002/ical-generator/issues/200) ([#202](https://github.com/sebbo2002/ical-generator/issues/202)) ([6711b0a](https://github.com/sebbo2002/ical-generator/commit/6711b0aab745b4c20201b6cec91fb00818cf6d0d)) +* make domain optional ([#209](https://github.com/sebbo2002/ical-generator/issues/209)) ([e3362c9](https://github.com/sebbo2002/ical-generator/commit/e3362c94e2b055043d3db74c51563d6107a5a097)) +* Updated the entire codebase to Typescript ([d013dc0](https://github.com/sebbo2002/ical-generator/commit/d013dc0199c9a9dce5181b9c89adf144bde17cea)) +* **Events:** use provided timezone when constructing repeating.exclude ([#210](https://github.com/sebbo2002/ical-generator/issues/210)) ([bd84230](https://github.com/sebbo2002/ical-generator/commit/bd84230db85c68e343507007b84830d2b39b4a1d)) diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 index 76a05507c..30731051e --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Sebastian Pekarek +Copyright (c) 2024 Sebastian Pekarek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the diff --git a/README.md b/README.md index bb09c7305..0a0e206fe 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,132 @@ -# template +
+
-[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE) +

+ + ical-generator logo + + + ical-generator logo + +

+

+ MIT License + Module Size + Dependency Status + CI Status + Code Coverage Badge +

-Here would be a very short description of the project. So in this example it would be a short information that this is -a template that I use to start new projects and services. +
-## 🚨 Template Usage Checklist -- [ ] Update project name in `package.json` -- [ ] Create `main` and `develop` branches -- [ ] Set `develop` as default branch -- [ ] Create Docker Repository - - [ ] Add Repository Description - - [ ] Add secret: `DOCKERHUB_TOKEN` -- [ ] Create npm Repository with `npm publish --access public` - - [ ] Add secret: `NPM_TOKEN` -- [ ] Go through repo settings +`ical-generator` is a small but fine library with which you can very easily create a valid iCal calendars, for example +to generate subscriptionable calendar feeds. -## 📦 Installation - git clone https://github.com/sebbo2002/template.git - cd ./template +## 📦 Installation - npm install + npm install ical-generator ## ⚡️ Quick Start -This is where it would normally say how to use the project. -This could be a code example for a library or instructions on how to use a CLI tool. - +```javascript +import ical, {ICalCalendarMethod} from 'ical-generator'; +import http from 'node:http'; + +const calendar = ical({name: 'my first iCal'}); + +// A method is required for outlook to display event as an invitation +calendar.method(ICalCalendarMethod.REQUEST); + +const startTime = new Date(); +const endTime = new Date(); +endTime.setHours(startTime.getHours()+1); +calendar.createEvent({ + start: startTime, + end: endTime, + summary: 'Example Event', + description: 'It works ;)', + location: 'my room', + url: 'http://sebbo.net/' +}); + +http.createServer((req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': 'attachment; filename="calendar.ics"' + }); + + res.end(calendar.toString()); +}).listen(3000, '127.0.0.1', () => { + console.log('Server running at http://127.0.0.1:3000/'); +}); +``` +See the [examples](./examples) folder for more examples. ## 📑 API-Reference -Is there an API that needs to be documented? Then here would be a nice place for it. If there is external documentation, -you can link it here ([example](https://github.com/sebbo2002/ical-generator/#-api-reference)). +- [Index](https://sebbo2002.github.io/ical-generator/develop/reference/) + - [ICalCalendar](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalCalendar.html) + - [ICalEvent](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalEvent.html) + - [ICalAlarm](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalAlarm.html) + - [ICalAttendee](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalAttendee.html) + - [ICalCategory](https://sebbo2002.github.io/ical-generator/develop/reference/classes/ICalCategory.html) + +## 🕒 Date, Time & Timezones + +ical-generator supports [native Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), +[Day.js](https://day.js.org/en/), [Luxon's](https://moment.github.io/luxon/) [DateTime](https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html) +and the older [moment.js](https://momentjs.com/) and [moment-timezone](https://momentjs.com/timezone/) +objects. You can also pass a string which is then passed to javascript's `Date` internally. + +It is recommended to use UTC time as far as possible. `ical-generator` will output all time information as UTC time as +long as no time zone is defined. For day.js, a plugin is necessary for this, which is a prerequisite. If a time zone is +set, `ical-generator` assumes that the given time matches the time zone. If a time zone is used, it is also recommended +to use a VTimezone generator. Such a function generates a VTimezone entry and returns it. For example, ical-timezones can +be used for this: + +```typescript +import {ICalCalendar} from 'ical-generator'; +import {getVtimezoneComponent} from '@touch4it/ical-timezones'; + +const cal = new ICalCalendar(); +cal.timezone({ + name: 'FOO', + generator: getVtimezoneComponent +}); +cal.createEvent({ + start: new Date(), + timezone: 'Europe/London' +}); +``` + +If a `moment-timezone` object or Luxon's `setZone` method works, `ical-generator` sets it according to the time zone set +in the calendar/event. + + + + +## 🚦 Tests + +``` +npm test +npm run coverage +``` ## 🙋 FAQ -### What's `1` + `2` -It's `3` 🎉 +### Where's the changelog? +It's [here](https://github.com/sebbo2002/ical-generator/blob/develop/CHANGELOG.md). If you need the changelog for +`ical-generator` 1.x.x and older, you'll find it [here](https://github.com/sebbo2002/ical-generator/blob/25338b8bf98f9afd3c88849e735fa33fa45fb766/CHANGELOG.md). + +### I get a `ReferenceError: TextEncoder is not defined` error (in some browsers) +This library uses [`TextEncoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder), which +is available in node.js ≥ 11.0.0 and [all modern browsers](https://caniuse.com/?search=textencoder). +Outdated browsers may not have the necessary API and generate this error when generating the calendar. ## 🙆🏼‍♂️ Copyright and license diff --git a/examples/example-deno.ts b/examples/example-deno.ts new file mode 100644 index 000000000..d9d3af684 --- /dev/null +++ b/examples/example-deno.ts @@ -0,0 +1,18 @@ +'use strict'; + +import ical from 'npm:ical-generator'; + +const cal = ical(); +const event = cal.createEvent({ + start: new Date(), + end: new Date(), + summary: 'Example Event', + description: 'It works ;)', + organizer: 'Organizer\'s Name ', + url: 'https://example.com' +}); + +// update event's description +event.description('It still works ;)'); + +console.log(cal.toString()); diff --git a/examples/example-express.js b/examples/example-express.js new file mode 100755 index 000000000..55f17cd28 --- /dev/null +++ b/examples/example-express.js @@ -0,0 +1,31 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; +import express from 'express'; + +const cal = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [ + { + start: moment(), + end: moment().add(1, 'hour'), + summary: 'Example Event', + description: 'It works ;)', + url: 'https://example.com' + } + ] +}); + +const app = express(); + +app.get('/calendar', (req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': 'attachment; filename="calendar.ics"' + }); + + res.end(cal.toString()); +}); + +app.listen(3000); diff --git a/examples/example-http.js b/examples/example-http.js new file mode 100755 index 000000000..e2944a714 --- /dev/null +++ b/examples/example-http.js @@ -0,0 +1,29 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; +import http from 'node:http'; + +const cal = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [ + { + start: moment(), + end: moment().add(1, 'hour'), + summary: 'Example Event', + description: 'It works ;)', + url: 'https://example.com' + } + ] +}); + +http.createServer(function (req, res) { + res.writeHead(200, { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': 'attachment; filename="calendar.ics"' + }); + + res.end(cal.toString()); +}).listen(3000, '127.0.0.1', function () { + console.log('Server running at http://127.0.0.1:3000/'); +}); diff --git a/examples/example-koa.js b/examples/example-koa.js new file mode 100755 index 000000000..255c70fbd --- /dev/null +++ b/examples/example-koa.js @@ -0,0 +1,32 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; +import Koa from 'koa'; + +const cal = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [ + { + start: moment(), + end: moment().add(1, 'hour'), + summary: 'Example Event', + description: 'It works ;)', + url: 'https://example.com' + } + ] +}); + +const app = new Koa(); + +app.use(ctx => { + ctx.status = 200; + ctx.respond = false; + + ctx.set('Content-Type', 'text/calendar; charset=utf-8'); + ctx.set('Content-Disposition', 'attachment; filename="calendar.ics"'); + + ctx.body = cal.toString(); +}); + +app.listen(3000); diff --git a/examples/example-micro.js b/examples/example-micro.js new file mode 100644 index 000000000..0e1c4ac57 --- /dev/null +++ b/examples/example-micro.js @@ -0,0 +1,29 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; + +const cal = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [ + { + start: moment(), + end: moment().add(1, 'hour'), + summary: 'Example Event', + description: 'It works ;)', + url: 'https://example.com' + } + ] +}); + +// start with $ micro example/example-micro.js +module.exports = (req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': 'attachment; filename="calendar.ics"' + }); + + res.end(cal.toString()); +}; + + diff --git a/examples/example-nextjs13.js b/examples/example-nextjs13.js new file mode 100644 index 000000000..d7b1543c7 --- /dev/null +++ b/examples/example-nextjs13.js @@ -0,0 +1,41 @@ +// app/api/calendar/route.ts + +import icalendar from 'ical-generator'; +import moment from 'moment'; + +export async function GET(req) { + if (req.method !== 'GET') { + return new Response('Method Not Allowed', { + headers: { Allow: 'GET' }, + status: 405, + }); + } + + const filename = 'calendar.ics'; + + try { + const calendar = icalendar({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [ + { + start: moment(), + end: moment().add(1, 'hour'), + summary: 'Example Event', + description: 'It works ;)', + url: 'https://example.com' + } + ] + }); + + return new Response(calendar.toString(), { + headers: { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': `attachment; filename='${filename}'`, + }, + status: 200, + }); + } catch (err) { + console.error(err); + return new Response(JSON.stringify(err), { status: 500 }); + } +} diff --git a/examples/example-quickstart.js b/examples/example-quickstart.js new file mode 100644 index 000000000..cc2eb9018 --- /dev/null +++ b/examples/example-quickstart.js @@ -0,0 +1,27 @@ +import ical from 'ical-generator'; +import http from 'node:http'; + +const calendar = ical({name: 'my first iCal'}); +const startTime = new Date(); +const endTime = new Date(); +endTime.setHours(startTime.getHours()+1); +calendar.createEvent({ + start: startTime, + end: endTime, + summary: 'Example Event', + description: 'It works ;)', + location: 'my room', + url: 'http://sebbo.net/' +}); + +http.createServer((req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/calendar; charset=utf-8', + 'Content-Disposition': 'attachment; filename="calendar.ics"' + }); + + res.end(calendar.toString()); +}) + .listen(3000, '127.0.0.1', () => { + console.log('Server running at http://127.0.0.1:3000/'); + }); diff --git a/examples/example-recurrence.js b/examples/example-recurrence.js new file mode 100644 index 000000000..9e72e972f --- /dev/null +++ b/examples/example-recurrence.js @@ -0,0 +1,14 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; +const cal = ical(); + +cal.createEvent({ + start: moment().add(1, 'hour'), + end: moment().add(2, 'hours'), + summary: 'Example Recurrence-Id', + recurrenceId: moment().add(4, 'hour') +}); + +console.log(cal.toString()); diff --git a/examples/example-repeating.js b/examples/example-repeating.js new file mode 100644 index 000000000..0b4162ae9 --- /dev/null +++ b/examples/example-repeating.js @@ -0,0 +1,16 @@ +'use strict'; + +import ical from 'ical-generator'; +const cal = ical(); + +cal.createEvent({ + start: new Date(1969, 6, 20, 20), + allDay: true, + summary: 'Apollo 11 - First Man to walk on the Moon (1969)', + url: 'http://www.nasa.gov/mission_pages/apollo/index.html', + repeating: { + freq: 'YEARLY' + } +}); + +console.log(cal.toString()); diff --git a/examples/example-runkit.js b/examples/example-runkit.js new file mode 100644 index 000000000..b178237a6 --- /dev/null +++ b/examples/example-runkit.js @@ -0,0 +1,16 @@ +import ical from 'ical-generator'; +const cal = ical(); + +const event = cal.createEvent({ + start: new Date(), + end: new Date(), + summary: 'Example Event', + description: 'It works ;)', + organizer: 'Organizer\'s Name ', + url: 'https://example.com' +}); + +// update event's description +event.description('It still works ;)'); + +cal.toString(); diff --git a/examples/example-string.js b/examples/example-string.js new file mode 100755 index 000000000..1bf139a3e --- /dev/null +++ b/examples/example-string.js @@ -0,0 +1,19 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; +const cal = ical(); + +const event = cal.createEvent({ + start: moment().add(1, 'hour'), + end: moment().add(2, 'hours'), + summary: 'Example Event', + description: 'It works ;)', + organizer: 'Organizer\'s Name ', + url: 'https://example.com' +}); + +// update event's description +event.description('It still works ;)'); + +console.log(cal.toString()); diff --git a/examples/example-string.ts b/examples/example-string.ts new file mode 100644 index 000000000..f3c566445 --- /dev/null +++ b/examples/example-string.ts @@ -0,0 +1,20 @@ +'use strict'; + +import ical from 'ical-generator'; +import moment from 'moment'; + +const cal = ical(); + +const event = cal.createEvent({ + start: moment().add(1, 'hour'), + end: moment().add(2, 'hours'), + summary: 'Example Event', + description: 'It works ;)', + organizer: 'Organizer\'s Name ', + url: 'https://example.com' +}); + +// update event's description +event.description('It still works ;)'); + +console.log(cal.toString()); diff --git a/jsr.json b/jsr.json new file mode 100644 index 000000000..02d2e6199 --- /dev/null +++ b/jsr.json @@ -0,0 +1,13 @@ +{ + "exports": "./src/index.ts", + "name": "@sebbo2002/ical-generator", + "publish": { + "include": [ + "LICENSE", + "README.md", + "src/*.ts", + "jsr.json" + ] + }, + "version": "7.1.0" +} diff --git a/package-lock.json b/package-lock.json index af977f7e4..b32f589f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,38 +1,46 @@ { - "name": "@sebbo2002/js-template-test", - "version": "1.0.0", + "name": "ical-generator", + "version": "7.2.0-develop.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "@sebbo2002/js-template-test", - "version": "1.0.0", + "name": "ical-generator", + "version": "7.2.0-develop.3", "license": "MIT", "dependencies": { - "express": "^4.19.2" - }, - "bin": { - "test-cli": "dist/bin/cli.js" + "uuid-random": "^1.3.2" }, "devDependencies": { "@eslint/js": "^9.6.0", "@qiwi/semantic-release-gh-pages-plugin": "^5.2.12", + "@sebbo2002/semantic-release-jsr": "^1.0.0-develop.6", "@semantic-release/changelog": "^6.0.3", "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^12.0.1", + "@touch4it/ical-timezones": "^1.9.0", "@types/eslint__js": "^8.42.3", "@types/express": "^4.17.21", + "@types/luxon": "^3.4.2", "@types/mocha": "^10.0.7", "@types/node": "^20.14.10", + "@typescript-eslint/eslint-plugin": "^7.3.1", "c8": "^10.1.2", + "dayjs": "^1.11.10", "eslint": "^9.6.0", "eslint-plugin-jsonc": "^2.16.0", "esm": "^3.2.25", "license-checker": "^25.0.1", + "luxon": "^3.4.4", "mocha": "^10.6.0", "mochawesome": "^7.1.3", - "semantic-release-license": "^1.0.3", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "nyc": "^15.1.0", + "rrule": "^2.8.1", + "semantic-release": "^23.0.5", + "semantic-release-license": "^1.0.2", "source-map-support": "^0.5.21", "ts-node": "^10.9.2", "tsup": "^8.1.0", @@ -42,40 +50,395 @@ }, "engines": { "node": ">=18.0.0" + }, + "peerDependencies": { + "@touch4it/ical-timezones": ">=1.6.0", + "@types/luxon": ">= 1.26.0", + "@types/mocha": ">= 8.2.1", + "dayjs": ">= 1.10.0", + "luxon": ">= 1.26.0", + "moment": ">= 2.29.0", + "moment-timezone": ">= 0.5.33", + "rrule": ">= 2.6.8" + }, + "peerDependenciesMeta": { + "@touch4it/ical-timezones": { + "optional": true + }, + "@types/luxon": { + "optional": true + }, + "@types/mocha": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-timezone": { + "optional": true + }, + "rrule": { + "optional": true + } + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.22.13", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.5", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.14.6", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.5", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/types": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.22.20", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.6", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.22.20", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" @@ -85,7 +448,6 @@ "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -97,7 +459,6 @@ "version": "2.4.2", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -111,7 +472,6 @@ "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -119,14 +479,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -135,7 +493,6 @@ "version": "3.0.0", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -144,7 +501,6 @@ "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -152,6 +508,71 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", @@ -161,9 +582,7 @@ "version": "1.5.0", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">=0.1.90" } @@ -180,8 +599,8 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.23.0", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "cpu": [ "ppc64" ], @@ -192,12 +611,12 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.23.0", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "cpu": [ "arm" ], @@ -208,12 +627,12 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.23.0", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "cpu": [ "arm64" ], @@ -224,12 +643,12 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.23.0", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "cpu": [ "x64" ], @@ -240,12 +659,12 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.23.0", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], @@ -256,12 +675,12 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.23.0", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "cpu": [ "x64" ], @@ -272,12 +691,12 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.23.0", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "cpu": [ "arm64" ], @@ -288,12 +707,12 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.23.0", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "cpu": [ "x64" ], @@ -304,12 +723,12 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.23.0", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "cpu": [ "arm" ], @@ -320,12 +739,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.23.0", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "cpu": [ "arm64" ], @@ -336,12 +755,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.23.0", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "cpu": [ "ia32" ], @@ -352,12 +771,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.23.0", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "cpu": [ "loong64" ], @@ -368,12 +787,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.23.0", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "cpu": [ "mips64el" ], @@ -384,12 +803,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.23.0", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "cpu": [ "ppc64" ], @@ -400,12 +819,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.23.0", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "cpu": [ "riscv64" ], @@ -416,12 +835,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.23.0", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "cpu": [ "s390x" ], @@ -432,12 +851,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.23.0", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "cpu": [ "x64" ], @@ -448,12 +867,12 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.23.0", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", "cpu": [ "x64" ], @@ -464,12 +883,28 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.23.0", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "cpu": [ "x64" ], @@ -480,12 +915,12 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.23.0", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "cpu": [ "x64" ], @@ -496,12 +931,12 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.23.0", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "cpu": [ "arm64" ], @@ -512,12 +947,12 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.23.0", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "cpu": [ "ia32" ], @@ -528,12 +963,12 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.23.0", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "cpu": [ "x64" ], @@ -544,14 +979,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -562,18 +996,6 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@eslint-community/regexpp": { "version": "4.11.0", "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", @@ -584,8 +1006,8 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.17.0", - "integrity": "sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==", + "version": "0.17.1", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -620,6 +1042,12 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { "version": "4.0.0", "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", @@ -649,9 +1077,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@eslint/js": { - "version": "9.6.0", - "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==", + "version": "9.7.0", + "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==", "dev": true, "license": "MIT", "engines": { @@ -671,7 +1111,6 @@ "version": "1.0.1", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -789,26 +1228,117 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -853,27 +1383,23 @@ } }, "node_modules/@octokit/auth-token": { - "version": "5.1.1", - "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "version": "5.0.1", + "integrity": "sha512-RTmWsLfig8SBoiSdgvCht4BXl1CHU89Co5xiQ5JF19my/sIRDFCQ1RPrmK0exgqUZuNm39C/bV8+/83+MJEjGg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "6.1.2", - "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "version": "6.0.1", + "integrity": "sha512-MIpPQXu8Y8GjHwXM81JLveiV+DHJZtLMcB5nKekBGOl3iAtk0HT3i12Xl8Biybu+bCS1+k4qbuKEq5d0RxNRnQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.0.0", "@octokit/request": "^9.0.0", "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" }, @@ -882,13 +1408,11 @@ } }, "node_modules/@octokit/endpoint": { - "version": "10.1.1", - "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "version": "10.0.0", + "integrity": "sha512-emBcNDxBdC1y3+knJonS5zhUB/CG6TihubxM2U1/pG/Z1y3a4oV0Gzz3lmkCvWWQI6h3tqBAX9MgCBFp+M68Jw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.2" }, "engines": { @@ -896,14 +1420,12 @@ } }, "node_modules/@octokit/graphql": { - "version": "8.1.1", - "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "version": "8.0.1", + "integrity": "sha512-lLDb6LhC1gBj2CxEDa5Xk10+H/boonhs+3Mi6jpRyetskDKNHe6crMeKmUE2efoLofMP8ruannLlCUgpTFmVzQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@octokit/request": "^9.0.0", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.0" }, "engines": { @@ -911,20 +1433,16 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "22.2.0", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true, - "license": "MIT", - "peer": true + "version": "20.0.0", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.3", - "integrity": "sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA==", + "version": "10.0.0", + "integrity": "sha512-G1Z67qOiFneKDJyMafHQkWnKm1kU3FfbRZLzxgsFg4dOa3pRNdABbdk+xo/oev6P88lnbt7GKdBNB6dJZuPphA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@octokit/types": "^13.5.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" @@ -934,14 +1452,12 @@ } }, "node_modules/@octokit/plugin-retry": { - "version": "7.1.1", - "integrity": "sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==", + "version": "7.0.3", + "integrity": "sha512-T9l5Z7XnDZ7dkyNmhJPSUq0YjbqUT/xn4yQbhcSuv4WGC/LqM73/mKwkl68VDPoLw20e8oz4L7qQopWt9v6sow==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@octokit/request-error": "^6.0.0", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "bottleneck": "^2.15.3" }, "engines": { @@ -952,13 +1468,11 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "9.3.0", - "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==", + "version": "9.0.3", + "integrity": "sha512-DReKamrLBJOzld73dmmxV2H137QKJfsxszAczEZXeAJQ/Po6bzQacKajPdodA6T1jfmP9+waImus+d/R2j+R7Q==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.6.0", "bottleneck": "^2.15.3" }, "engines": { @@ -969,15 +1483,13 @@ } }, "node_modules/@octokit/request": { - "version": "9.1.1", - "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==", + "version": "9.0.1", + "integrity": "sha512-kL+cAcbSl3dctYLuJmLfx6Iku2MXXy0jszhaEIjQNaCp4zjHXrhVAHeuaRdNvJjW9qjl3u1MJ72+OuBP0YW/pg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@octokit/endpoint": "^10.0.0", "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.1.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.2" }, "engines": { @@ -985,26 +1497,22 @@ } }, "node_modules/@octokit/request-error": { - "version": "6.1.1", - "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==", + "version": "6.0.2", + "integrity": "sha512-WtRVpoHcNXs84+s9s/wqfHaxM68NGMg8Av7h59B50OVO0PwwMx+2GgQ/OliUd0iQBSNWgR6N8afi/KjSHbXHWw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@octokit/types": "^13.0.0" + "@octokit/types": "^12.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/types": { - "version": "13.5.0", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", + "version": "12.6.0", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@octokit/openapi-types": "^22.2.0" + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1044,7 +1552,6 @@ "version": "5.2.12", "integrity": "sha512-noXI64+4MFwXy32g2qO+x8v5pXgVeqaIC9RU23zs5hl3qh0dB+8hVXC1vhxPREvhxQHvx6ha8Qy0XhKOKHnwpQ==", "dev": true, - "license": "MIT", "dependencies": { "@qiwi/substrate": "^2.0.4", "@types/debug": "^4.1.10", @@ -1065,45 +1572,41 @@ } }, "node_modules/@qiwi/substrate": { - "version": "2.1.0", - "integrity": "sha512-F19fckn9+ztlPD0yogxoqWRRlGiLaSJcI+mqYWc8mzSwr4LFRJhwPkitmCPXluKxHeOT1IYQJacRMEWt5yA1AA==", + "version": "2.0.4", + "integrity": "sha512-MCJfVyqnc5gasdeAYWQnFo/P3eysvrQzrS5NB9g5WKMWBvAmBz6BkzOgMOGaHRgW0dkGsGT/iDu5c5sFhdISPQ==", "dev": true, - "license": "MIT", "dependencies": { - "@qiwi/substrate-abstract": "2.1.0", - "@qiwi/substrate-std": "2.1.0", - "@qiwi/substrate-types": "2.1.0", - "tslib": "^2.6.2" + "@qiwi/substrate-abstract": "2.0.4", + "@qiwi/substrate-std": "2.0.4", + "@qiwi/substrate-types": "2.0.4", + "tslib": "^2.5.2" } }, "node_modules/@qiwi/substrate-abstract": { - "version": "2.1.0", - "integrity": "sha512-ZzvNT1kWLGLMBtnsTRNs+1WXl1m+z9RNDvhjFcX0whpCtYxYQW1iIfpTJ/UbxiZ4TAQW72ROtIXkob3MuXF31g==", + "version": "2.0.4", + "integrity": "sha512-QSVLvJnBWLMcfS5uSZhEv/027xGu9tCoMVKyAFo2OEoVXtKfs57JR8Ig92uYEhzzLPwVRhaF3wrbrISXgHuFTw==", "dev": true, - "license": "MIT", "dependencies": { - "@qiwi/substrate-types": "2.1.0" + "@qiwi/substrate-types": "2.0.4" } }, "node_modules/@qiwi/substrate-std": { - "version": "2.1.0", - "integrity": "sha512-wqQF0g2ISnww4eggCfL4FJUemx7r07i1y8MVHo5qd7gG35LMjeWP0X05Ez/pyGsOxO+aaRxmm3iFSQMSrNCnyw==", + "version": "2.0.4", + "integrity": "sha512-0VQZ0kO3KjOBWaGsK1eSbBfdBFw7FIF76ZTelMOuyJr8o0beJGZvuGt382SpLrrf28HoxKc3ML/ZAHmcx7a1Zg==", "dev": true, - "license": "MIT", "dependencies": { - "@qiwi/substrate-types": "2.1.0", - "tslib": "^2.6.2" + "@qiwi/substrate-types": "2.0.4", + "tslib": "^2.5.2" } }, "node_modules/@qiwi/substrate-types": { - "version": "2.1.0", - "integrity": "sha512-WLPKeX61SNFTUDLpywY91MNKwR/+JN+KEqyYnCncjqEtlmDkuUn+FVWhzmbd4BUmF5PQ3icyQkppSCgrxcEBlg==", - "dev": true, - "license": "MIT" + "version": "2.0.4", + "integrity": "sha512-XXVPfaBoN27Lim/jClxy9ofCXAPkHMAb/PX/a/kqS3ijhOv0TbDqN34Ko4D9OCqLdEvhu1prYOhA58zlXtr8/g==", + "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.19.0", + "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==", "cpu": [ "arm" ], @@ -1115,8 +1618,8 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.19.0", + "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==", "cpu": [ "arm64" ], @@ -1128,8 +1631,8 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.19.0", + "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==", "cpu": [ "arm64" ], @@ -1141,8 +1644,8 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.19.0", + "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==", "cpu": [ "x64" ], @@ -1154,8 +1657,8 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.19.0", + "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==", "cpu": [ "arm" ], @@ -1167,8 +1670,8 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.19.0", + "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==", "cpu": [ "arm" ], @@ -1180,8 +1683,8 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.19.0", + "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==", "cpu": [ "arm64" ], @@ -1193,8 +1696,8 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.19.0", + "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==", "cpu": [ "arm64" ], @@ -1206,8 +1709,8 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.19.0", + "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==", "cpu": [ "ppc64" ], @@ -1219,8 +1722,8 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.19.0", + "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==", "cpu": [ "riscv64" ], @@ -1232,8 +1735,8 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.19.0", + "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==", "cpu": [ "s390x" ], @@ -1245,8 +1748,8 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.19.0", + "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==", "cpu": [ "x64" ], @@ -1258,8 +1761,8 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.19.0", + "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==", "cpu": [ "x64" ], @@ -1271,8 +1774,8 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.19.0", + "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==", "cpu": [ "arm64" ], @@ -1284,8 +1787,8 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.19.0", + "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", "cpu": [ "ia32" ], @@ -1297,8 +1800,8 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.19.0", + "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", "cpu": [ "x64" ], @@ -1309,6 +1812,17 @@ "win32" ] }, + "node_modules/@sebbo2002/semantic-release-jsr": { + "version": "1.0.0-develop.6", + "integrity": "sha512-SkSjF/NpTx9Fp0RYUu2XksEsGosu62Gbw6UpOVbSNWinUh+LY6202GU9uzS2WuxeGYEH1307y8SZZS4+QbAkag==", + "dev": true, + "dependencies": { + "jsr": "^0.12.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", @@ -1319,7 +1833,6 @@ "version": "6.0.3", "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", "dev": true, - "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", @@ -1342,16 +1855,13 @@ } }, "node_modules/@semantic-release/commit-analyzer": { - "version": "13.0.0", - "integrity": "sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==", + "version": "12.0.0", + "integrity": "sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-filter": "^4.0.0", + "conventional-commits-parser": "^5.0.0", "debug": "^4.0.0", "import-from-esm": "^1.0.3", "lodash-es": "^4.17.21", @@ -1368,7 +1878,6 @@ "version": "4.0.0", "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } @@ -1430,14 +1939,12 @@ } }, "node_modules/@semantic-release/github": { - "version": "10.0.7", - "integrity": "sha512-J7JiFvOu/8QKqFF5FDTk/k19Z/Jku4LdDof/+LsjaGgLOISJR7TL66q89c2YXV6Dh5Jw5VmiT4uK4q6SSfbQGA==", + "version": "10.0.2", + "integrity": "sha512-SP5ihhv/uQa8vPuWKmbJrrzfv8lRUkDFC6qwgaWoorrflN1DEW0IGCa9w/PxUp8Ad3dbvXZPmpXdGiP3eyTzhg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@octokit/core": "^6.0.0", - "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-paginate-rest": "^10.0.0", "@octokit/plugin-retry": "^7.0.0", "@octokit/plugin-throttling": "^9.0.0", "@semantic-release/error": "^4.0.0", @@ -1464,8 +1971,6 @@ "version": "5.0.0", "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -1481,8 +1986,6 @@ "version": "5.2.0", "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -1497,8 +2000,6 @@ "version": "5.0.0", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1507,11 +2008,9 @@ } }, "node_modules/@semantic-release/github/node_modules/globby": { - "version": "14.0.2", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "version": "14.0.1", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -1531,8 +2030,6 @@ "version": "5.0.0", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1544,8 +2041,6 @@ "version": "5.0.0", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1557,8 +2052,6 @@ "version": "5.1.0", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=14.16" }, @@ -1609,7 +2102,6 @@ "version": "5.0.0", "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -1625,7 +2117,6 @@ "version": "5.2.0", "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -1640,7 +2131,6 @@ "version": "5.0.0", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -1703,7 +2193,6 @@ "version": "5.0.0", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -1723,6 +2212,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@semantic-release/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/normalize-url": { + "version": "8.0.0", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { "version": "5.3.0", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", @@ -1739,13 +2247,13 @@ } }, "node_modules/@semantic-release/npm/node_modules/parse-json": { - "version": "8.1.0", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "version": "8.0.1", + "integrity": "sha512-soKUg/q/8bcfuF3+plsbYldE74cVEVEPSC1BUPIGTaX1byXdz6Fo+CVYBdH0jj/5xWsFrNRksl11QkBgHqPQeQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", + "index-to-position": "^0.1.1", + "json-parse-even-better-errors": "^3.0.0", "type-fest": "^4.7.1" }, "engines": { @@ -1768,16 +2276,14 @@ } }, "node_modules/@semantic-release/npm/node_modules/read-pkg": { - "version": "9.0.1", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "version": "9.0.0", + "integrity": "sha512-SBoBio4xhJmlF4xs9IBliWZGSbDAnrOfQkLGL7xB+RYEUZNAN2LlNkzO45B7gc7c2dLMX987bhHAaJ/LG3efeQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "type-fest": "^4.6.0" }, "engines": { "node": ">=18" @@ -1810,26 +2316,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@semantic-release/npm/node_modules/type-fest": { + "version": "4.7.1", + "integrity": "sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/release-notes-generator": { - "version": "14.0.1", - "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==", + "version": "12.0.0", + "integrity": "sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-changelog-writer": "^7.0.0", + "conventional-commits-filter": "^4.0.0", + "conventional-commits-parser": "^5.0.0", "debug": "^4.0.0", "get-stream": "^7.0.0", - "import-from-esm": "^1.0.3", + "import-from": "^4.0.0", "into-stream": "^7.0.0", "lodash-es": "^4.17.21", - "read-package-up": "^11.0.0" + "read-pkg-up": "^10.0.0" }, "engines": { - "node": ">=20.8.1" + "node": "^18.17 || >=20.6.1" }, "peerDependencies": { "semantic-release": ">=20.1.0" @@ -1839,8 +2354,6 @@ "version": "7.0.1", "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=16" }, @@ -1849,8 +2362,8 @@ } }, "node_modules/@shikijs/core": { - "version": "1.10.3", - "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", + "version": "1.11.0", + "integrity": "sha512-VbEhDAhT/2ozO0TPr5/ZQBO/NWLqtk4ZiBf6NplYpF38mKjNfMMied5fNEfIfYfN+cdKvhDB4VMcKvG/g9c3zg==", "dev": true, "license": "MIT", "dependencies": { @@ -1861,8 +2374,6 @@ "version": "4.6.0", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -1874,8 +2385,6 @@ "version": "2.3.0", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -1883,6 +2392,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@touch4it/ical-timezones": { + "version": "1.9.0", + "integrity": "sha512-UAiZMrFlgMdOIaJDPsKu5S7OecyMLr3GGALJTYkRgHmsHAA/8Ixm1qD09ELP2X7U1lqgrctEgvKj9GzMbczC+g==", + "dev": true, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", @@ -1904,9 +2421,10 @@ "dev": true }, "node_modules/@types/body-parser": { - "version": "1.19.0", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "version": "1.19.5", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -1921,25 +2439,25 @@ } }, "node_modules/@types/connect": { - "version": "3.4.34", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "version": "3.4.38", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/debug": { - "version": "4.1.12", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "version": "4.1.10", + "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", "dev": true, - "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/eslint": { - "version": "8.56.10", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.0", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1997,14 +2515,12 @@ "node_modules/@types/gh-pages": { "version": "6.1.0", "integrity": "sha512-Ma9bmKkE+WUtywENLC1rSLXTW66cJHJMWX2RQrJTMKhYM8o+73bRJ1ebfo3RWXUcG+HW3khky2nhVaN7nCsa3Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/git-url-parse": { - "version": "9.0.3", - "integrity": "sha512-Wrb8zeghhpKbYuqAOg203g+9YSNlrZWNZYvwxJuDF4dTmerijqpnGbI79yCuPtHSXHPEwv1pAFUB4zsSqn82Og==", - "dev": true, - "license": "MIT" + "version": "9.0.2", + "integrity": "sha512-WLeklQNHJVFaChgqO0GdlSxvTPIofIPz/rK2UJdDXkkCYZjy8nonkl4RwssvD/BbKYoFHcvJ7qlAE1RvYNaHOQ==", + "dev": true }, "node_modules/@types/hast": { "version": "3.0.4", @@ -2015,6 +2531,12 @@ "@types/unist": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", @@ -2027,16 +2549,21 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.6", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", - "dev": true, - "license": "MIT" + "version": "4.14.200", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", + "dev": true }, - "node_modules/@types/mime": { - "version": "1.3.2", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "node_modules/@types/luxon": { + "version": "3.4.2", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", "dev": true }, + "node_modules/@types/mime": { + "version": "1.3.5", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mocha": { "version": "10.0.7", "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", @@ -2044,14 +2571,13 @@ "license": "MIT" }, "node_modules/@types/ms": { - "version": "0.7.34", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true, - "license": "MIT" + "version": "0.7.33", + "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==", + "dev": true }, "node_modules/@types/node": { - "version": "20.14.10", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "20.14.11", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dev": true, "license": "MIT", "dependencies": { @@ -2059,10 +2585,9 @@ } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" + "version": "2.4.3", + "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.6", @@ -2076,10 +2601,9 @@ "license": "MIT" }, "node_modules/@types/semantic-release": { - "version": "20.0.6", - "integrity": "sha512-8YJXvsT1FwMrNdZI1e6NBHPzZWendDiUsLryzxurdup+9LnV3s9fF4NgO0D3LkBfLMnocb4Ax6TQ5yFdF3dXGQ==", + "version": "20.0.4", + "integrity": "sha512-9zjlWBYjlRKKOtCu7mEcUTu5Ii5nRAujRe841R6ZfwzhLFCa+BGMdWMImzXZDeVj0ODpI37pO0FSKpMiR7sdww==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -2088,8 +2612,7 @@ "version": "7.5.8", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", @@ -2102,12 +2625,14 @@ } }, "node_modules/@types/serve-static": { - "version": "1.13.9", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "version": "1.15.7", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/unist": { @@ -2117,31 +2642,59 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-WePtbzWMaQO4qtGAXp3zzEN8yYZCEuAHVCERCUXgoSUTQ80F5UB7T5lYyA9ySpFDB7rqJ2ev98DtnbS4U3Ms+w==", + "version": "7.3.1", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/type-utils": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "7.3.1", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -2149,42 +2702,252 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.3.1", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/@typescript-eslint/parser": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-7HMXwy/q/59ZASBXz2FtdIsR7LgABrR8j2dTKq9GMR8OkjjdO4klxWSY/uOBozVt4UxlMRYsBdBDhEq4/tHRiw==", + "version": "7.3.1", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, - "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.3.1", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-KqU2e3KITMGlRfG4ehfO2zS0GutDWc+zV2nwbRDQdUfh1izgFDAh5UqiJ8YafXVzY1v0dnRggnmvjOMotjQa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.3.1", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.3.1", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-iNxuQ0TMVfFiMJ2al4bGd/mY9+aLtBxnHfo7B2xoVzR6cRFgUdBLlMa//MSIjSmVRpCEqNLQnkxpJb96tFG+xw==", + "node_modules/@typescript-eslint/utils": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-OJac7/t6M/jQlgAQSM2yffKXZL8d/6vTbQPChC5v4oGHFuKHF2dEFeevNJlIS9iR6EtquRsHup2GDwqw6bWyrw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2192,18 +2955,19 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-+QIA1z/jrox6bbvqlyqBQjotpevieLTycfiuoKuqGcKoskFZV5Rma51BV8LCJacnOafwJtSi+7b8zDo8OsXUvA==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-zT8Ib31deJCqRVJepZOMFoHiFAsSHOh5TmedcFeqyiMuzrqBMtF95iv6mPJqFDIXNgxmTkahpRan1z043ckBnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2211,16 +2975,11 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/types": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-n0P2FP3YC3pD3yoiCf4lHqbUP45xlnOk8HkjB+LtKSUZZWLLJ8k1ZXZtQj7MEX22tytCMj//Bmq403xFuCwfIg==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", "dev": true, "license": "MIT", "engines": { @@ -2231,14 +2990,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-adCr+vbLYTFhwhIwjIjjMxTdUYiPA2Jlyuhnbj092IzgLHtT79bvuwcgPWeTyLbFb/13SMKmOEka00xHiqLpig==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2259,7 +3018,24 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": { "version": "2.0.1", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, @@ -2268,7 +3044,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "node_modules/@typescript-eslint/utils/node_modules/minimatch": { "version": "9.0.5", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, @@ -2283,73 +3059,27 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-DTxc9VdERS6iloiw1P5tgRDqRArmp/sIuvgdHBvGh2SiltEFc3VjLGnHHGSTr6GfH7tjFWvcCnCtxx+pjWfp5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-uetCAUBVC+YarBdZnWzDDgX11PpAEGV8Cw31I3d1xNrhx6/bJGThKX+holEmd3amMdnr4w/XUKH/4YuQOgtjDA==", + "version": "7.3.1", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "7.3.1", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/abbrev": { "version": "1.1.1", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/accepts": { - "version": "1.3.8", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.12.1", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", @@ -2371,19 +3101,17 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.1.1", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { - "version": "7.1.1", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.3.4" }, @@ -2429,16 +3157,25 @@ } }, "node_modules/ansi-escapes": { - "version": "7.0.0", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "6.2.0", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "environment": "^1.0.0" + "type-fest": "^3.0.0" }, "engines": { - "node": ">=18" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2483,22 +3220,39 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "node_modules/arg": { "version": "4.1.3", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "node_modules/argparse": { - "version": "2.0.1", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "version": "1.0.10", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "Python-2.0" + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/argv-formatter": { "version": "1.0.0", "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", - "dev": true, - "peer": true + "dev": true }, "node_modules/array-find-index": { "version": "1.0.2", @@ -2508,16 +3262,10 @@ "node": ">=0.10.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "node_modules/array-ify": { "version": "1.0.0", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/array-union": { "version": "2.1.0", @@ -2531,7 +3279,6 @@ "version": "1.0.3", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2541,12 +3288,6 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, - "node_modules/async": { - "version": "3.2.5", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true, - "license": "MIT" - }, "node_modules/asynckit": { "version": "0.4.0", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", @@ -2560,9 +3301,7 @@ "node_modules/before-after-hook": { "version": "3.0.2", "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true, - "license": "Apache-2.0", - "peer": true + "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -2572,45 +3311,10 @@ "node": ">=8" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/bottleneck": { "version": "2.19.5", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2622,11 +3326,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2637,84 +3341,182 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/browserslist": { + "version": "4.16.6", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, "node_modules/buffer-from": { "version": "1.1.1", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "node_modules/bundle-require": { - "version": "4.0.1", - "integrity": "sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==", + "version": "5.0.0", + "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/c8": { + "version": "10.1.2", + "integrity": "sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } + } + }, + "node_modules/c8/node_modules/brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/c8/node_modules/cliui": { + "version": "8.0.1", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/c8/node_modules/foreground-child": { + "version": "3.1.1", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/c8/node_modules/glob": { + "version": "10.4.5", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/c8/node_modules/minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "load-tsconfig": "^0.2.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependencies": { - "esbuild": ">=0.17" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/c8": { - "version": "10.1.2", - "integrity": "sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==", + "node_modules/c8/node_modules/signal-exit": { + "version": "4.1.0", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^7.0.1", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "monocart-coverage-reports": "^2" + "node": ">=14" }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/c8/node_modules/cliui": { - "version": "8.0.1", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/c8/node_modules/test-exclude": { + "version": "7.0.1", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/c8/node_modules/yargs": { "version": "17.7.2", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -2732,7 +3534,6 @@ "version": "21.1.1", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -2745,9 +3546,24 @@ "node": ">=8" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.2", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2760,11 +3576,27 @@ "version": "3.1.0", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001237", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, "node_modules/caseless": { "version": "0.12.0", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", @@ -2789,22 +3621,15 @@ "version": "1.0.2", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=10" } }, "node_modules/chokidar": { - "version": "3.5.3", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2817,6 +3642,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -2833,8 +3661,6 @@ "version": "2.1.11", "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, - "license": "ISC", - "peer": true, "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -2852,11 +3678,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.5", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "version": "0.6.3", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "string-width": "^4.2.0" }, @@ -2893,6 +3717,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "1.2.2", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", @@ -2905,26 +3734,22 @@ } }, "node_modules/commander": { - "version": "11.1.0", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "11.0.0", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" } }, "node_modules/commondir": { "version": "1.0.1", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, "node_modules/compare-func": { "version": "2.0.0", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -2958,111 +3783,68 @@ "proto-list": "~1.2.1" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.5", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/consola": { + "version": "3.2.3", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "^14.18.0 || >=16.10.0" } }, "node_modules/conventional-changelog-angular": { - "version": "8.0.0", - "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", + "version": "7.0.0", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "license": "ISC", - "peer": true, "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=16" } }, "node_modules/conventional-changelog-writer": { - "version": "8.0.0", - "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==", + "version": "7.0.1", + "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@types/semver": "^7.5.5", - "conventional-commits-filter": "^5.0.0", + "conventional-commits-filter": "^4.0.0", "handlebars": "^4.7.7", - "meow": "^13.0.0", - "semver": "^7.5.2" + "json-stringify-safe": "^5.0.1", + "meow": "^12.0.1", + "semver": "^7.5.2", + "split2": "^4.0.0" }, "bin": { - "conventional-changelog-writer": "dist/cli/index.js" + "conventional-changelog-writer": "cli.mjs" }, "engines": { - "node": ">=18" + "node": ">=16" } }, "node_modules/conventional-commits-filter": { - "version": "5.0.0", - "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", + "version": "4.0.0", + "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=18" + "node": ">=16" } }, "node_modules/conventional-commits-parser": { - "version": "6.0.0", - "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", + "version": "5.0.0", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "meow": "^13.0.0" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" }, "bin": { - "conventional-commits-parser": "dist/cli/index.js" + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=18" - } - }, - "node_modules/convert-hrtime": { - "version": "5.0.0", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16" } }, "node_modules/convert-source-map": { @@ -3073,17 +3855,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/cookie": { - "version": "0.6.0", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, "node_modules/core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", @@ -3093,8 +3864,6 @@ "version": "9.0.0", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -3116,6 +3885,22 @@ } } }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/create-require": { "version": "1.1.1", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", @@ -3138,7 +3923,6 @@ "version": "4.0.0", "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^1.0.1" }, @@ -3153,7 +3937,6 @@ "version": "1.4.0", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3161,6 +3944,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dayjs": { + "version": "1.11.10", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "dev": true + }, "node_modules/debug": { "version": "4.3.5", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", @@ -3186,6 +3974,14 @@ "node": "*" } }, + "node_modules/decamelize": { + "version": "1.2.0", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", @@ -3197,8 +3993,18 @@ "node_modules/deep-is": { "version": "0.1.4", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, - "license": "MIT" + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -3208,21 +4014,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/dezalgo": { "version": "1.0.3", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", @@ -3256,8 +4047,6 @@ "version": "5.3.0", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "is-obj": "^2.0.0" }, @@ -3269,7 +4058,6 @@ "version": "0.1.4", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, - "peer": true, "dependencies": { "readable-stream": "^2.0.2" } @@ -3280,15 +4068,15 @@ "dev": true, "license": "MIT" }, - "node_modules/ee-first": { - "version": "1.1.1", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "node_modules/electron-to-chromium": { + "version": "1.3.752", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true }, "node_modules/email-addresses": { "version": "5.0.0", "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -3298,16 +4086,7 @@ "node_modules/emojilib": { "version": "2.4.0", "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } + "dev": true }, "node_modules/entities": { "version": "4.5.0", @@ -3325,8 +4104,6 @@ "version": "11.0.0", "integrity": "sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "execa": "^8.0.0", "java-properties": "^1.0.2" @@ -3339,8 +4116,6 @@ "version": "8.0.1", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -3363,8 +4138,6 @@ "version": "8.0.1", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=16" }, @@ -3376,8 +4149,6 @@ "version": "5.0.0", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=16.17.0" } @@ -3386,8 +4157,6 @@ "version": "3.0.0", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -3399,8 +4168,6 @@ "version": "4.0.0", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3409,11 +4176,9 @@ } }, "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.3.0", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "version": "5.2.0", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "path-key": "^4.0.0" }, @@ -3427,9 +4192,7 @@ "node_modules/env-ci/node_modules/onetime": { "version": "6.0.0", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "peer": true, + "dev": true, "dependencies": { "mimic-fn": "^4.0.0" }, @@ -3444,8 +4207,6 @@ "version": "4.0.0", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3457,8 +4218,6 @@ "version": "4.1.0", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", - "peer": true, "engines": { "node": ">=14" }, @@ -3470,8 +4229,6 @@ "version": "3.0.0", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3483,25 +4240,10 @@ "version": "2.2.1", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=6" } }, - "node_modules/environment": { - "version": "1.1.0", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/error-ex": { "version": "1.3.2", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", @@ -3510,9 +4252,14 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/esbuild": { - "version": "0.21.5", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.23.0", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3520,32 +4267,33 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@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" + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "node_modules/escalade": { @@ -3558,7 +4306,8 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -3572,16 +4321,16 @@ } }, "node_modules/eslint": { - "version": "9.6.0", - "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==", + "version": "9.7.0", + "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", + "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.17.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.6.0", + "@eslint/js": "9.7.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -3590,7 +4339,7 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", + "eslint-scope": "^8.0.2", "eslint-visitor-keys": "^4.0.0", "espree": "^10.1.0", "esquery": "^1.5.0", @@ -3623,10 +4372,9 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "version": "0.5.0", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.4" }, @@ -3662,8 +4410,8 @@ } }, "node_modules/eslint-scope": { - "version": "8.0.1", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "8.0.2", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3677,29 +4425,15 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { @@ -3754,7 +4488,6 @@ "version": "9.6.1", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -3767,23 +4500,22 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/esprima": { + "version": "4.0.1", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=4" } }, "node_modules/esquery": { "version": "1.5.0", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -3807,7 +4539,6 @@ "version": "5.3.0", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3821,13 +4552,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/execa": { "version": "5.1.1", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", @@ -3850,75 +4574,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/express": { - "version": "4.19.2", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", @@ -3929,7 +4584,6 @@ "version": "3.3.2", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3950,8 +4604,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fastq": { "version": "1.13.0", @@ -3980,7 +4633,6 @@ "version": "2.0.0", "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -4004,7 +4656,6 @@ "version": "2.0.0", "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -4013,7 +4664,6 @@ "version": "4.3.0", "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, - "license": "MIT", "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", @@ -4027,8 +4677,8 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -4037,38 +4687,10 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-cache-dir": { - "version": "3.3.2", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "version": "3.3.1", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, - "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -4100,8 +4722,6 @@ "version": "1.0.0", "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -4110,17 +4730,14 @@ } }, "node_modules/find-versions": { - "version": "6.0.0", - "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", + "version": "5.1.0", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "semver-regex": "^4.0.5", - "super-regex": "^1.0.0" + "semver-regex": "^4.0.5" }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4154,31 +4771,15 @@ "license": "ISC" }, "node_modules/foreground-child": { - "version": "3.2.1", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "2.0.0", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" + "signal-exit": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.0.0" } }, "node_modules/form-data": { @@ -4194,36 +4795,38 @@ "node": ">= 0.12" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/from2": { "version": "2.3.0", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/fs-extra": { - "version": "11.2.0", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.1.1", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4258,19 +4861,15 @@ }, "node_modules/function-bind": { "version": "1.1.1", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "node_modules/function-timeout": { - "version": "1.0.2", - "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, "node_modules/get-caller-file": { @@ -4284,6 +4883,7 @@ "node_modules/get-intrinsic": { "version": "1.1.1", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4293,6 +4893,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-stream": { "version": "6.0.1", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", @@ -4305,10 +4913,9 @@ } }, "node_modules/gh-pages": { - "version": "6.1.1", - "integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==", + "version": "6.0.0", + "integrity": "sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==", "dev": true, - "license": "MIT", "dependencies": { "async": "^3.2.4", "commander": "^11.0.0", @@ -4330,7 +4937,6 @@ "version": "1.0.2", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, - "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -4338,11 +4944,15 @@ "node": ">=0.10.0" } }, + "node_modules/gh-pages/node_modules/async": { + "version": "3.2.4", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "node_modules/gh-pages/node_modules/globby": { "version": "6.1.0", "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^1.0.1", "glob": "^7.0.3", @@ -4358,7 +4968,6 @@ "version": "2.3.0", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4367,7 +4976,6 @@ "version": "1.2.0", "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, - "peer": true, "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", @@ -4381,7 +4989,6 @@ "version": "1.0.0", "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, - "peer": true, "dependencies": { "through2": "~2.0.0" } @@ -4390,7 +4997,6 @@ "version": "2.0.5", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "peer": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -4400,7 +5006,6 @@ "version": "7.0.0", "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, - "license": "MIT", "dependencies": { "is-ssh": "^1.4.0", "parse-url": "^8.1.0" @@ -4410,14 +5015,13 @@ "version": "14.0.0", "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, - "license": "MIT", "dependencies": { "git-up": "^7.0.0" } }, "node_modules/glob": { - "version": "7.1.7", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -4484,15 +5088,12 @@ "node_modules/graphemer": { "version": "1.4.0", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/handlebars": { "version": "4.7.8", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -4512,6 +5113,7 @@ "node_modules/has": { "version": "1.0.3", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4530,6 +5132,7 @@ "node_modules/has-symbols": { "version": "1.0.2", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4537,6 +5140,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasha": { + "version": "5.2.2", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/he": { "version": "1.2.0", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", @@ -4549,8 +5175,6 @@ "version": "10.7.3", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, - "license": "BSD-3-Clause", - "peer": true, "engines": { "node": "*" } @@ -4559,8 +5183,6 @@ "version": "3.0.0", "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -4569,10 +5191,9 @@ } }, "node_modules/hosted-git-info": { - "version": "7.0.2", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "version": "7.0.1", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -4583,8 +5204,7 @@ "node_modules/html-escaper": { "version": "2.0.2", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/http-basic": { "version": "8.1.3", @@ -4600,26 +5220,10 @@ "node": ">=6.0.0" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -4642,11 +5246,9 @@ "dev": true }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.4", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4663,16 +5265,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { "version": "5.3.1", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", @@ -4686,7 +5278,6 @@ "version": "3.3.0", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4698,12 +5289,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-from-esm": { - "version": "1.3.4", - "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", + "node_modules/import-from": { + "version": "4.0.0", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true, + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-from-esm": { + "version": "1.3.3", + "integrity": "sha512-U3Qt/CyfFpTUv6LOP2jRTLYjphH6zg3okMfHbyqRa/W2w6hr8OsJWVggNlR4jxuojQy81TgTJTxgSkyoteRGMQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.3.4", "import-meta-resolve": "^4.0.0" @@ -4713,11 +5313,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.1.0", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "version": "4.0.0", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", "dev": true, - "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4743,7 +5341,6 @@ "version": "0.1.2", "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -4762,7 +5359,8 @@ }, "node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -4773,8 +5371,6 @@ "version": "7.0.0", "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" @@ -4786,13 +5382,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", @@ -4810,8 +5399,8 @@ } }, "node_modules/is-core-module": { - "version": "2.4.0", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.12.0", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4859,8 +5448,6 @@ "version": "2.0.0", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -4889,7 +5476,6 @@ "version": "1.4.0", "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, - "license": "MIT", "dependencies": { "protocols": "^2.0.1" } @@ -4902,6 +5488,22 @@ "node": ">=8" } }, + "node_modules/is-text-path": { + "version": "2.0.0", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", @@ -4913,6 +5515,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", @@ -4924,11 +5534,9 @@ "dev": true }, "node_modules/issue-parser": { - "version": "7.0.1", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "version": "7.0.0", + "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -4941,19 +5549,76 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "version": "3.2.0", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "3.4.0", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -4967,7 +5632,6 @@ "version": "4.0.0", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -4978,11 +5642,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.1.6", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4992,16 +5668,13 @@ } }, "node_modules/jackspeak": { - "version": "3.4.1", - "integrity": "sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==", + "version": "3.4.3", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -5013,8 +5686,6 @@ "version": "1.0.2", "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6.0" } @@ -5033,17 +5704,28 @@ "dev": true }, "node_modules/js-yaml": { - "version": "4.1.0", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", @@ -5053,8 +5735,7 @@ "node_modules/json-parse-better-errors": { "version": "1.0.2", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -5077,27 +5758,32 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonc-eslint-parser": { - "version": "2.0.4", - "integrity": "sha512-a3ZRus4qea0tSRCW2qvF/spFt7iCpdeJbiDjxbFZRZ87JCF8sI8hbxpVvUBVyZ3fLB/RQnTi+Y/yZbMlqt1BCg==", + "version": "2.1.0", + "integrity": "sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==", "dev": true, "dependencies": { "acorn": "^8.5.0", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "semver": "^7.3.5" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, "node_modules/jsonfile": { @@ -5111,6 +5797,41 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsr": { + "version": "0.12.2", + "integrity": "sha512-VjRK2vqfFxz6ml1NEbRLwD0+YAT90SXX9qKU+w1lytbAz7uaB4ewLxuuilr+R049OJ/p4MbWEvCRWISCjCZyfQ==", + "dev": true, + "dependencies": { + "kolorist": "^1.8.0", + "node-stream-zip": "^1.15.0" + }, + "bin": { + "jsr": "dist/bin.js" + } + }, "node_modules/keyv": { "version": "4.5.4", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", @@ -5120,11 +5841,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "node_modules/levn": { "version": "0.4.1", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5263,7 +5988,6 @@ "version": "4.0.0", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -5278,7 +6002,6 @@ "version": "4.0.0", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, - "peer": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -5291,7 +6014,6 @@ "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -5300,6 +6022,7 @@ "version": "0.2.5", "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -5326,22 +6049,22 @@ "node_modules/lodash-es": { "version": "4.17.21", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.capitalize": { "version": "4.2.1", "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true }, "node_modules/lodash.isempty": { "version": "4.4.0", @@ -5361,9 +6084,7 @@ "node_modules/lodash.isplainobject": { "version": "4.0.6", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/lodash.isstring": { "version": "4.0.1", @@ -5383,9 +6104,7 @@ "node_modules/lodash.uniqby": { "version": "4.7.0", "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", @@ -5414,24 +6133,28 @@ } }, "node_modules/lru-cache": { - "version": "10.3.1", - "integrity": "sha512-9/8QXrtbGeMB6LxwQd4x1tIMnsmUxMvIH/qWGsccz6bt9Uln3S+sgAaqfQNhbGA8ufzs2fHuP/yqapGgP9Hh2g==", + "version": "10.4.3", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=18" - } + "license": "ISC" }, "node_modules/lunr": { "version": "2.3.9", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, + "node_modules/luxon": { + "version": "3.4.4", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -5443,10 +6166,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5473,30 +6195,33 @@ "markdown-it": "bin/markdown-it.mjs" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/marked": { - "version": "12.0.2", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "4.3.0", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "license": "MIT", "peer": true, "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 18" + "node": ">= 12" } }, "node_modules/marked-terminal": { - "version": "7.1.0", - "integrity": "sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==", + "version": "7.0.0", + "integrity": "sha512-sNEx8nn9Ktcm6pL0TnRz8tnXq/mSS0Q1FRSwJOAqw4lAB4l49UeDf85Gm1n9RPFm5qurCPjwi1StAQT2XExhZw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "ansi-escapes": "^7.0.0", + "ansi-escapes": "^6.2.0", "chalk": "^5.3.0", "cli-highlight": "^2.1.11", - "cli-table3": "^0.6.5", + "cli-table3": "^0.6.3", "node-emoji": "^2.1.3", "supports-hyperlinks": "^3.0.0" }, @@ -5504,15 +6229,13 @@ "node": ">=16.0.0" }, "peerDependencies": { - "marked": ">=1 <14" + "marked": ">=1 <13" } }, "node_modules/marked-terminal/node_modules/chalk": { "version": "5.3.0", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5526,30 +6249,17 @@ "dev": true, "license": "MIT" }, - "node_modules/media-typer": { - "version": "0.3.0", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/meow": { - "version": "13.2.0", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "version": "12.1.1", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=18" + "node": ">=16.10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, "node_modules/merge-stream": { "version": "2.0.0", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", @@ -5563,13 +6273,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.4", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", @@ -5583,14 +6286,12 @@ } }, "node_modules/mime": { - "version": "4.0.4", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "version": "4.0.1", + "integrity": "sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" ], - "license": "MIT", - "peer": true, "bin": { "mime": "bin/cli.js" }, @@ -5599,17 +6300,19 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.48.0", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.31", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "mime-db": "1.48.0" }, "engines": { "node": ">= 0.6" @@ -5649,19 +6352,19 @@ } }, "node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mocha": { - "version": "10.6.0", - "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "version": "10.7.0", + "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", "dev": true, "license": "MIT", "dependencies": { @@ -5694,11 +6397,15 @@ "node": ">= 14.0.0" } }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5706,9 +6413,7 @@ "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5723,6 +6428,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", @@ -5805,8 +6521,8 @@ } }, "node_modules/mochawesome-report-generator/node_modules/fs-extra": { - "version": "10.1.0", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "10.0.1", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -5818,8 +6534,8 @@ } }, "node_modules/mochawesome-report-generator/node_modules/yargs": { - "version": "17.5.1", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.4.0", + "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", "dev": true, "dependencies": { "cliui": "^7.0.2", @@ -5839,7 +6555,26 @@ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=12" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dev": true, + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" } }, "node_modules/ms": { @@ -5862,31 +6597,20 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "node_modules/negotiator": { - "version": "0.6.3", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/nerf-dart": { "version": "1.0.0", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", "dev": true }, "node_modules/node-emoji": { "version": "2.1.3", "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", @@ -5897,6 +6621,34 @@ "node": ">=18" } }, + "node_modules/node-preload": { + "version": "0.2.1", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, "node_modules/nopt": { "version": "4.0.3", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", @@ -5910,12 +6662,12 @@ } }, "node_modules/normalize-package-data": { - "version": "6.0.2", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "version": "6.0.0", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -5931,21 +6683,9 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "8.0.1", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm": { - "version": "10.8.1", - "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==", + "version": "10.5.0", + "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -5954,7 +6694,6 @@ "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/promise-spawn", - "@npmcli/redact", "@npmcli/run-script", "@sigstore/tuf", "abbrev", @@ -5963,6 +6702,8 @@ "chalk", "ci-info", "cli-columns", + "cli-table3", + "columnify", "fastest-levenshtein", "fs-minipass", "glob", @@ -5998,6 +6739,7 @@ "npm-profile", "npm-registry-fetch", "npm-user-validate", + "npmlog", "p-map", "pacote", "parse-conflict-json", @@ -6017,81 +6759,75 @@ "write-file-atomic" ], "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.5.3", - "@npmcli/config": "^8.3.3", - "@npmcli/fs": "^3.1.1", - "@npmcli/map-workspaces": "^3.0.6", - "@npmcli/package-json": "^5.1.1", - "@npmcli/promise-spawn": "^7.0.2", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "@sigstore/tuf": "^2.3.4", + "@npmcli/arborist": "^7.2.1", + "@npmcli/config": "^8.0.2", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/run-script": "^7.0.4", + "@sigstore/tuf": "^2.3.1", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.3", + "cacache": "^18.0.2", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.4.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.2", - "ini": "^4.1.3", - "init-package-json": "^6.0.3", - "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^3.0.2", - "libnpmaccess": "^8.0.6", - "libnpmdiff": "^6.1.3", - "libnpmexec": "^8.1.2", - "libnpmfund": "^5.0.11", - "libnpmhook": "^10.0.5", - "libnpmorg": "^6.0.6", - "libnpmpack": "^7.0.3", - "libnpmpublish": "^9.0.9", - "libnpmsearch": "^7.0.6", - "libnpmteam": "^6.0.5", - "libnpmversion": "^6.0.3", - "make-fetch-happen": "^13.0.1", - "minimatch": "^9.0.4", - "minipass": "^7.1.1", + "hosted-git-info": "^7.0.1", + "ini": "^4.1.1", + "init-package-json": "^6.0.0", + "is-cidr": "^5.0.3", + "json-parse-even-better-errors": "^3.0.1", + "libnpmaccess": "^8.0.1", + "libnpmdiff": "^6.0.3", + "libnpmexec": "^7.0.4", + "libnpmfund": "^5.0.1", + "libnpmhook": "^10.0.0", + "libnpmorg": "^6.0.1", + "libnpmpack": "^6.0.3", + "libnpmpublish": "^9.0.2", + "libnpmsearch": "^7.0.0", + "libnpmteam": "^6.0.0", + "libnpmversion": "^5.0.1", + "make-fetch-happen": "^13.0.0", + "minimatch": "^9.0.3", + "minipass": "^7.0.4", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.1.0", - "nopt": "^7.2.1", - "normalize-package-data": "^6.0.1", + "node-gyp": "^10.0.1", + "nopt": "^7.2.0", + "normalize-package-data": "^6.0.0", "npm-audit-report": "^5.0.0", "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-profile": "^10.0.0", - "npm-registry-fetch": "^17.0.1", - "npm-user-validate": "^2.0.1", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-profile": "^9.0.0", + "npm-registry-fetch": "^16.1.0", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^18.0.6", + "pacote": "^17.0.6", "parse-conflict-json": "^3.0.1", - "proc-log": "^4.2.0", + "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", - "read": "^3.0.1", - "semver": "^7.6.2", - "spdx-expression-parse": "^4.0.0", - "ssri": "^10.0.6", + "read": "^2.1.0", + "semver": "^7.6.0", + "spdx-expression-parse": "^3.0.1", + "ssri": "^10.0.5", "supports-color": "^9.4.0", - "tar": "^6.2.1", + "tar": "^6.2.0", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.1", + "validate-npm-package-name": "^5.0.0", "which": "^4.0.0", "write-file-atomic": "^5.0.1" }, @@ -6119,6 +6855,16 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -6193,7 +6939,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.2", + "version": "2.2.1", "dev": true, "inBundle": true, "license": "ISC", @@ -6202,51 +6948,49 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "socks-proxy-agent": "^8.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.5.3", + "version": "7.4.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/metavuln-calculator": "^7.0.0", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", + "@npmcli/run-script": "^7.0.2", + "bin-links": "^4.0.1", + "cacache": "^18.0.0", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", + "hosted-git-info": "^7.0.1", + "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", + "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^10.0.6", + "ssri": "^10.0.5", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, @@ -6258,16 +7002,16 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.3.3", + "version": "8.2.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", - "ini": "^4.1.2", - "nopt": "^7.2.1", - "proc-log": "^4.2.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^3.0.1" @@ -6276,8 +7020,35 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.1", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -6289,7 +7060,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.7", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -6297,7 +7068,7 @@ "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -6308,7 +7079,7 @@ } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -6317,14 +7088,14 @@ "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "bin/index.js" + "installed-package-contents": "lib/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", + "version": "3.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -6339,15 +7110,14 @@ } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", + "pacote": "^17.0.0", "semver": "^7.3.5" }, "engines": { @@ -6373,7 +7143,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.1.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -6383,7 +7153,7 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.5.3" }, "engines": { @@ -6391,7 +7161,7 @@ } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -6414,17 +7184,8 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "8.1.0", + "version": "7.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -6433,7 +7194,6 @@ "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", "which": "^4.0.0" }, "engines": { @@ -6451,19 +7211,19 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.3.2", + "version": "2.2.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.3.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "1.1.0", + "version": "1.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -6472,53 +7232,51 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", + "version": "0.3.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.3.2", + "version": "2.2.3", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.3.2", + "@sigstore/bundle": "^2.2.0", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" + "@sigstore/protobuf-specs": "^0.3.0", + "make-fetch-happen": "^13.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.4", + "version": "2.3.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/verify": { - "version": "1.2.1", + "version": "1.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -6534,13 +7292,13 @@ } }, "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.1", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "minimatch": "^9.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -6556,7 +7314,7 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -6613,6 +7371,15 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "dev": true, @@ -6620,7 +7387,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.4", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -6635,15 +7402,12 @@ } }, "node_modules/npm/node_modules/binary-extensions": { - "version": "2.3.0", + "version": "2.2.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/brace-expansion": { @@ -6655,8 +7419,17 @@ "balanced-match": "^1.0.0" } }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.3", + "version": "18.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -6715,7 +7488,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -6748,8 +7521,32 @@ "node": ">= 10" } }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.3", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -6775,12 +7572,40 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", "dev": true, "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", "dev": true, @@ -6845,6 +7670,18 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm/node_modules/diff": { "version": "5.2.0", "dev": true, @@ -6943,23 +7780,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/glob": { - "version": "10.4.1", + "version": "10.3.10", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6971,8 +7827,14 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/hasown": { - "version": "2.0.2", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -6984,7 +7846,7 @@ } }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.2", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -7041,7 +7903,7 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.5", + "version": "6.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -7071,7 +7933,7 @@ } }, "node_modules/npm/node_modules/ini": { - "version": "4.1.3", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "ISC", @@ -7080,15 +7942,15 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.3", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^3.0.1", + "read": "^2.0.0", + "read-package-json": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -7110,6 +7972,12 @@ "node": ">= 12" } }, + "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/npm/node_modules/ip-regex": { "version": "5.0.0", "dev": true, @@ -7123,12 +7991,12 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", + "version": "5.0.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^4.1.1" + "cidr-regex": "4.0.3" }, "engines": { "node": ">=14" @@ -7168,7 +8036,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { - "version": "3.1.2", + "version": "2.3.6", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", @@ -7192,7 +8060,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -7231,50 +8099,52 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.6", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.1.3", + "version": "6.0.7", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/installed-package-contents": "^2.1.0", - "binary-extensions": "^2.3.0", + "@npmcli/arborist": "^7.2.1", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "tar": "^6.2.1" + "minimatch": "^9.0.0", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4", + "tar": "^6.2.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "8.1.2", + "version": "7.0.8", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "proc-log": "^4.2.0", - "read": "^3.0.1", + "npm-package-arg": "^11.0.1", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "proc-log": "^3.0.0", + "read": "^2.0.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" @@ -7284,112 +8154,112 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.11", + "version": "5.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.3" + "@npmcli/arborist": "^7.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.5", + "version": "10.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.6", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "7.0.3", + "version": "6.0.7", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6" + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.9", + "version": "9.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", + "normalize-package-data": "^6.0.0", + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7", "sigstore": "^2.2.0", - "ssri": "^10.0.6" + "ssri": "^10.0.5" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.6", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.5", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "6.0.3", + "version": "5.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.7", - "@npmcli/run-script": "^8.1.0", - "json-parse-even-better-errors": "^3.0.2", - "proc-log": "^4.2.0", + "@npmcli/git": "^5.0.3", + "@npmcli/run-script": "^7.0.2", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -7397,7 +8267,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.2.2", + "version": "10.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7406,7 +8276,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.1", + "version": "13.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7420,7 +8290,6 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", - "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -7429,7 +8298,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.4", + "version": "9.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -7444,7 +8313,7 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", + "version": "7.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -7465,7 +8334,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.5", + "version": "3.0.4", "dev": true, "inBundle": true, "license": "MIT", @@ -7637,7 +8506,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "10.1.0", + "version": "10.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -7660,17 +8529,8 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/nopt": { - "version": "7.2.1", + "version": "7.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7685,7 +8545,7 @@ } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.1", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -7709,7 +8569,7 @@ } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.1", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7742,13 +8602,13 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.2", + "version": "11.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -7769,7 +8629,7 @@ } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.0.1", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7784,39 +8644,38 @@ } }, "node_modules/npm/node_modules/npm-profile": { - "version": "10.0.0", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.0.0" + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "17.0.1", + "version": "16.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^2.0.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "proc-log": "^3.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.1", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -7824,6 +8683,21 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", "dev": true, @@ -7840,31 +8714,32 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "18.0.6", + "version": "17.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", + "@npmcli/run-script": "^7.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "bin/index.js" + "pacote": "lib/bin.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -7894,23 +8769,23 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", + "version": "1.10.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", + "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.0", + "version": "6.0.15", "dev": true, "inBundle": true, "license": "MIT", @@ -7923,16 +8798,7 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/proggy": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7978,12 +8844,12 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "1.0.2", + "version": "1.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "read": "^3.0.1" + "read": "^2.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -7998,12 +8864,12 @@ } }, "node_modules/npm/node_modules/read": { - "version": "3.0.1", + "version": "2.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "^1.0.0" + "mute-stream": "~1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -8018,6 +8884,21 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/read-package-json": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", "dev": true, @@ -8048,10 +8929,13 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.6.2", + "version": "7.6.0", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -8059,6 +8943,24 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -8093,17 +8995,17 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.3.1", + "version": "2.2.2", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.3.2", + "@sigstore/bundle": "^2.2.0", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" + "@sigstore/protobuf-specs": "^0.3.0", + "@sigstore/sign": "^2.2.3", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.1.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -8120,7 +9022,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.3", + "version": "2.8.0", "dev": true, "inBundle": true, "license": "MIT", @@ -8129,17 +9031,17 @@ "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.0.0", + "node": ">= 16.0.0", "npm": ">= 3.0.0" } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.3", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.0.2", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -8157,16 +9059,6 @@ "spdx-license-ids": "^3.0.0" } }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.5.0", "dev": true, @@ -8174,7 +9066,7 @@ "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -8184,19 +9076,13 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.18", + "version": "3.0.17", "dev": true, "inBundle": true, "license": "CC0-1.0" }, - "node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ssri": { - "version": "10.0.6", + "version": "10.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -8274,7 +9160,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.2.1", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -8345,14 +9231,14 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "2.2.1", + "version": "2.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/models": "2.0.1", + "@tufjs/models": "2.0.0", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "make-fetch-happen": "^13.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -8398,21 +9284,14 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8423,6 +9302,15 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/npm/node_modules/which": { "version": "4.0.0", "dev": true, @@ -8447,6 +9335,15 @@ "node": ">=16" } }, + "node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", "dev": true, @@ -8526,45 +9423,202 @@ "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=12" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/nyc": { + "version": "15.1.0", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "inBundle": true, - "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "inBundle": true, - "license": "ISC" + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } }, "node_modules/object-assign": { "version": "4.1.1", @@ -8575,22 +9629,13 @@ } }, "node_modules/object-inspect": { - "version": "1.11.0", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.10.3", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", @@ -8622,17 +9667,16 @@ } }, "node_modules/optionator": { - "version": "0.9.4", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "version": "0.9.3", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -8667,8 +9711,6 @@ "version": "3.0.0", "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8680,8 +9722,6 @@ "version": "4.1.0", "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "p-map": "^7.0.1" }, @@ -8692,12 +9732,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-filter/node_modules/p-map": { + "version": "7.0.1", + "integrity": "sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-is-promise": { "version": "3.0.0", "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -8731,15 +9780,14 @@ } }, "node_modules/p-map": { - "version": "7.0.2", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", + "version": "3.0.0", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "aggregate-error": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, "node_modules/p-reduce": { @@ -8754,11 +9802,24 @@ "version": "2.2.0", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/package-hash": { + "version": "4.0.0", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.0", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", @@ -8769,7 +9830,6 @@ "version": "1.0.1", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -8815,7 +9875,6 @@ "version": "7.0.0", "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", "dev": true, - "license": "MIT", "dependencies": { "protocols": "^2.0.0" } @@ -8824,7 +9883,6 @@ "version": "8.1.0", "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, - "license": "MIT", "dependencies": { "parse-path": "^7.0.0" } @@ -8832,16 +9890,12 @@ "node_modules/parse5": { "version": "5.1.1", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "parse5": "^6.0.1" } @@ -8849,16 +9903,7 @@ "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", @@ -8905,10 +9950,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "node_modules/path-type": { "version": "4.0.0", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", @@ -8938,7 +9979,6 @@ "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -8947,7 +9987,6 @@ "version": "2.0.4", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8956,7 +9995,6 @@ "version": "2.0.1", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, - "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -8965,9 +10003,10 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -8976,7 +10015,6 @@ "version": "2.1.0", "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, - "peer": true, "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -8989,7 +10027,6 @@ "version": "2.1.0", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, - "peer": true, "dependencies": { "locate-path": "^2.0.0" }, @@ -9001,7 +10038,6 @@ "version": "2.0.0", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, - "peer": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -9014,7 +10050,6 @@ "version": "1.3.0", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "peer": true, "dependencies": { "p-try": "^1.0.0" }, @@ -9026,7 +10061,6 @@ "version": "2.0.0", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "peer": true, "dependencies": { "p-limit": "^1.1.0" }, @@ -9038,7 +10072,6 @@ "version": "1.0.0", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -9047,7 +10080,6 @@ "version": "3.0.0", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -9056,7 +10088,6 @@ "version": "4.2.0", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -9068,7 +10099,6 @@ "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9081,7 +10111,6 @@ "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -9093,7 +10122,6 @@ "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -9108,7 +10136,6 @@ "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -9117,8 +10144,8 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.2", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "version": "6.0.1", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "funding": [ { @@ -9132,21 +10159,28 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "lilconfig": "^3.1.1" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { + "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { + "jiti": { + "optional": true + }, "postcss": { "optional": true }, - "ts-node": { + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } @@ -9155,7 +10189,6 @@ "version": "1.2.1", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -9180,6 +10213,17 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/promise": { "version": "8.1.0", "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", @@ -9206,23 +10250,11 @@ "node_modules/protocols": { "version": "2.0.1", "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } + "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -9240,6 +10272,7 @@ "node_modules/qs": { "version": "6.11.0", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -9273,7 +10306,6 @@ "version": "1.2.1", "integrity": "sha512-/5BvkHo2waR923r7NZE+G1Z7+ddW8wENrPrzt1SJRPbibHyYAHy3ZlaPfE2oX993JRqpwGyEyUD4nYhX+PfC5Q==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.5.0" } @@ -9287,26 +10319,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rc": { "version": "1.2.8", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", @@ -9385,82 +10397,191 @@ "validate-npm-package-license": "^3.0.1" } }, - "node_modules/read-package-json/node_modules/semver": { - "version": "5.7.1", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/read-package-json/node_modules/semver": { + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "10.1.0", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/lines-and-columns": { + "version": "2.0.3", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up": { - "version": "11.0.0", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "node_modules/read-pkg-up/node_modules/parse-json": { + "version": "7.1.0", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" }, "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/parse-json": { - "version": "8.1.0", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "node_modules/read-pkg-up/node_modules/parse-json/node_modules/type-fest": { + "version": "3.13.1", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/read-pkg": { - "version": "9.0.1", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "8.1.0", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@types/normalize-package-data": "^2.4.3", + "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" }, "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "4.4.0", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "engines": { + "node": ">=16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/yocto-queue": { + "version": "1.0.0", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { @@ -9496,10 +10617,9 @@ } }, "node_modules/readable-stream": { - "version": "2.3.8", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9543,6 +10663,17 @@ "node": ">=14" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/require-directory": { "version": "2.1.1", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", @@ -9551,6 +10682,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resolve": { "version": "1.20.0", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", @@ -9567,7 +10703,6 @@ "version": "4.0.0", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9581,9 +10716,23 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { - "version": "4.18.0", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.19.0", + "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", "dev": true, "license": "MIT", "dependencies": { @@ -9597,25 +10746,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@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", + "@rollup/rollup-android-arm-eabi": "4.19.0", + "@rollup/rollup-android-arm64": "4.19.0", + "@rollup/rollup-darwin-arm64": "4.19.0", + "@rollup/rollup-darwin-x64": "4.19.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.19.0", + "@rollup/rollup-linux-arm-musleabihf": "4.19.0", + "@rollup/rollup-linux-arm64-gnu": "4.19.0", + "@rollup/rollup-linux-arm64-musl": "4.19.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0", + "@rollup/rollup-linux-riscv64-gnu": "4.19.0", + "@rollup/rollup-linux-s390x-gnu": "4.19.0", + "@rollup/rollup-linux-x64-gnu": "4.19.0", + "@rollup/rollup-linux-x64-musl": "4.19.0", + "@rollup/rollup-win32-arm64-msvc": "4.19.0", + "@rollup/rollup-win32-ia32-msvc": "4.19.0", + "@rollup/rollup-win32-x64-msvc": "4.19.0", "fsevents": "~2.3.2" } }, + "node_modules/rrule": { + "version": "2.8.1", + "integrity": "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", @@ -9643,29 +10800,23 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/semantic-release": { - "version": "24.0.0", - "integrity": "sha512-v46CRPw+9eI3ZuYGF2oAjqPqsfbnfFTwLBgQsv/lch4goD09ytwOTESMN4QIrx/wPLxUGey60/NMx+ANQtWRsA==", + "version": "23.0.5", + "integrity": "sha512-4eZG/vRTV8E7rw5oHPv2Fht5qx6ITemE/b1vzG42ayYVcffJqXYy40nP4bHEPWX1/kleJWWrlPVDt1hSYVlpKQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@semantic-release/commit-analyzer": "^13.0.0-beta.1", + "@semantic-release/commit-analyzer": "^12.0.0", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^10.0.0", "@semantic-release/npm": "^12.0.0", - "@semantic-release/release-notes-generator": "^14.0.0-beta.1", + "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", "debug": "^4.0.0", "env-ci": "^11.0.0", - "execa": "^9.0.0", + "execa": "^8.0.0", "figures": "^6.0.0", - "find-versions": "^6.0.0", + "find-versions": "^5.1.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^3.0.0", @@ -9677,7 +10828,7 @@ "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", - "read-package-up": "^11.0.0", + "read-pkg-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", "semver-diff": "^4.0.0", @@ -9696,25 +10847,10 @@ "integrity": "sha512-d+p1WSCFzIxLNPKXSkRpXWKQDBhRbp7g+w8LPzjVqFsUQ/eNw0KhMnKLoxsgVzZXAhEwpsZUx1VxBT5sjgOkIQ==", "dev": true }, - "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/aggregate-error": { "version": "5.0.0", "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -9730,8 +10866,6 @@ "version": "5.2.0", "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -9746,8 +10880,6 @@ "version": "8.0.1", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", - "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -9761,8 +10893,6 @@ "version": "5.0.0", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -9771,65 +10901,50 @@ } }, "node_modules/semantic-release/node_modules/execa": { - "version": "9.3.0", - "integrity": "sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==", + "version": "8.0.1", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^7.0.0", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^5.2.0", - "pretty-ms": "^9.0.0", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^18.19.0 || >=20.5.0" + "node": ">=16.17" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { - "version": "9.0.1", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "version": "8.0.1", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semantic-release/node_modules/human-signals": { - "version": "7.0.0", - "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==", + "version": "5.0.0", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "Apache-2.0", - "peer": true, "engines": { - "node": ">=18.18.0" + "node": ">=16.17.0" } }, "node_modules/semantic-release/node_modules/indent-string": { "version": "5.0.0", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -9838,24 +10953,50 @@ } }, "node_modules/semantic-release/node_modules/is-stream": { - "version": "4.0.1", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "version": "3.0.0", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/semantic-release/node_modules/marked": { + "version": "12.0.0", + "integrity": "sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/semantic-release/node_modules/mimic-fn": { + "version": "4.0.0", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "5.3.0", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "version": "5.1.0", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "path-key": "^4.0.0" }, @@ -9866,27 +11007,88 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/onetime": { + "version": "6.0.0", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=12" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/parse-json": { + "version": "8.0.0", + "integrity": "sha512-QtWnjHuun44MCLbq9f2rlcX9Bp9FSsPgQS9nuGcIm3J557b3/CvmYUhwChgJJDlMpuNN0sFRAogzQ8xMitD1oQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.0", + "json-parse-even-better-errors": "^3.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/read-pkg": { + "version": "9.0.0", + "integrity": "sha512-SBoBio4xhJmlF4xs9IBliWZGSbDAnrOfQkLGL7xB+RYEUZNAN2LlNkzO45B7gc7c2dLMX987bhHAaJ/LG3efeQ==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/path-key": { - "version": "4.0.0", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/semantic-release/node_modules/read-pkg-up": { + "version": "11.0.0", + "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", + "deprecated": "Renamed to read-package-up", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9896,7 +11098,6 @@ "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -9905,8 +11106,6 @@ "version": "4.1.0", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", - "peer": true, "engines": { "node": ">=14" }, @@ -9915,24 +11114,31 @@ } }, "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "4.0.0", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "version": "3.0.0", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/type-fest": { + "version": "4.6.0", + "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", + "dev": true, + "engines": { + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semantic-release/node_modules/yargs": { - "version": "17.7.2", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.6.2", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9950,15 +11156,13 @@ "version": "21.1.1", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", - "peer": true, "engines": { "node": ">=12" } }, "node_modules/semver": { - "version": "7.6.2", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -9972,8 +11176,6 @@ "version": "4.0.0", "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "semver": "^7.3.5" }, @@ -9988,8 +11190,6 @@ "version": "4.0.5", "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -9997,53 +11197,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/send": { - "version": "0.18.0", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", @@ -10053,22 +11206,10 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/set-blocking": { + "version": "2.0.0", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -10090,18 +11231,19 @@ } }, "node_modules/shiki": { - "version": "1.10.3", - "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", + "version": "1.11.0", + "integrity": "sha512-NqH/O1zRHvnuk/WfSL6b7+DtI7/kkMMSQGlZhm9DyzSU+SoIHhaw/fBZMr+zp9R8KjdIzkk3JKSC6hORuGDyng==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "1.10.3", + "@shikijs/core": "1.11.0", "@types/hast": "^3.0.4" } }, "node_modules/side-channel": { "version": "1.0.4", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -10112,15 +11254,14 @@ } }, "node_modules/signal-exit": { - "version": "3.0.3", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.7", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/signale": { "version": "1.4.0", "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, - "peer": true, "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", @@ -10134,7 +11275,6 @@ "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -10146,7 +11286,6 @@ "version": "2.4.2", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10160,7 +11299,6 @@ "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -10168,14 +11306,12 @@ "node_modules/signale/node_modules/color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "peer": true + "dev": true }, "node_modules/signale/node_modules/escape-string-regexp": { "version": "1.0.5", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, - "peer": true, "engines": { "node": ">=0.8.0" } @@ -10184,7 +11320,6 @@ "version": "2.0.0", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, - "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10196,7 +11331,6 @@ "version": "3.0.0", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -10205,7 +11339,6 @@ "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -10217,8 +11350,6 @@ "version": "2.0.0", "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" }, @@ -10262,8 +11393,23 @@ "node_modules/spawn-error-forwarder": { "version": "1.0.0", "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", + "dev": true + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "peer": true + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/spdx-compare": { "version": "1.0.0", @@ -10318,18 +11464,23 @@ "spdx-ranges": "^2.0.0" } }, - "node_modules/statuses": { - "version": "2.0.1", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/split2": { + "version": "4.2.0", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">= 10.x" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "node_modules/stream-combiner2": { "version": "1.1.1", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, - "peer": true, "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -10339,7 +11490,6 @@ "version": "1.1.1", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -10396,6 +11546,14 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", @@ -10419,7 +11577,6 @@ "version": "1.0.1", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -10431,18 +11588,19 @@ "version": "1.0.5", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/sucrase": { - "version": "3.30.0", - "integrity": "sha512-7d37d3vLF0IeH2dzvHpzDNDxUqpbDHJXTJOAnQ8jvMW04o2Czps6mxtaSnKWpE+hUS/eczqfWPUgQTrazKZPnQ==", + "version": "3.35.0", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, + "license": "MIT", "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", @@ -10453,51 +11611,88 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/sucrase/node_modules/foreground-child": { + "version": "3.2.1", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/super-regex": { - "version": "1.0.0", - "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", "dependencies": { - "function-timeout": "^1.0.1", - "time-span": "^5.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/signal-exit": { + "version": "4.1.0", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/supports-color": { @@ -10515,8 +11710,6 @@ "version": "3.0.0", "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -10529,7 +11722,6 @@ "version": "0.6.2", "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.3.1" }, @@ -10551,22 +11743,20 @@ } }, "node_modules/temp-dir": { - "version": "3.0.0", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "version": "2.0.0", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=8" } }, "node_modules/tempy": { - "version": "3.1.0", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "version": "3.0.0", + "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", "dev": true, - "license": "MIT", "dependencies": { "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", + "temp-dir": "^2.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" }, @@ -10581,85 +11771,46 @@ "version": "3.0.0", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "7.0.1", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.0.1", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "10.4.3", - "integrity": "sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, "engines": { - "node": ">=18" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "9.0.5", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/test-exclude": { + "version": "6.0.0", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" + } + }, + "node_modules/text-extensions": { + "version": "2.4.0", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/text-table": { @@ -10712,20 +11863,17 @@ "node": ">=0.8" } }, - "node_modules/time-span": { - "version": "5.1.0", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "node_modules/through": { + "version": "2.3.8", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "convert-hrtime": "^5.0.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/to-regex-range": { @@ -10739,18 +11887,18 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { + "node_modules/tr46": { "version": "1.0.1", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" } }, "node_modules/traverse": { "version": "0.6.6", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true, - "peer": true + "dev": true }, "node_modules/tree-kill": { "version": "1.2.2", @@ -10772,7 +11920,6 @@ "version": "1.0.0", "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -10784,7 +11931,6 @@ "version": "1.0.5", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -10804,13 +11950,13 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/ts-node": { "version": "10.9.2", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -10858,30 +12004,31 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" + "version": "2.6.2", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/tsup": { - "version": "8.1.0", - "integrity": "sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==", + "version": "8.2.2", + "integrity": "sha512-MufIuzdSt6HYPOeOtjUXLR4rqRJySi6XsRNZdwvjC2XR+xghsu2L3vSmYmX+k4S1mO6j0OlUEyVQ3Fc0H66XcA==", "dev": true, "license": "MIT", "dependencies": { - "bundle-require": "^4.0.0", - "cac": "^6.7.12", - "chokidar": "^3.5.1", - "debug": "^4.3.1", - "esbuild": "^0.21.4", - "execa": "^5.0.0", - "globby": "^11.0.3", - "joycon": "^3.0.1", - "postcss-load-config": "^4.0.1", + "bundle-require": "^5.0.0", + "cac": "^6.7.14", + "chokidar": "^3.6.0", + "consola": "^3.2.3", + "debug": "^4.3.5", + "esbuild": "^0.23.0", + "execa": "^5.1.1", + "globby": "^11.1.0", + "joycon": "^3.1.1", + "picocolors": "^1.0.1", + "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", - "rollup": "^4.0.2", + "rollup": "^4.19.0", "source-map": "0.8.0-beta.0", - "sucrase": "^3.20.3", + "sucrase": "^3.35.0", "tree-kill": "^1.2.2" }, "bin": { @@ -10931,92 +12078,249 @@ "node": ">= 8" } }, - "node_modules/tsup/node_modules/tr46": { - "version": "1.0.1", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "node_modules/type-check": { + "version": "0.4.0", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/tsup/node_modules/webidl-conversions": { - "version": "4.0.2", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "node_modules/typedarray": { + "version": "0.0.6", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "node_modules/tsup/node_modules/whatwg-url": { - "version": "7.1.0", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "is-typedarray": "^1.0.0" } }, - "node_modules/type-check": { - "version": "0.4.0", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/typedoc": { + "version": "0.26.5", + "integrity": "sha512-Vn9YKdjKtDZqSk+by7beZ+xzkkr8T8CYoiasqyt4TTRFy5+UHzL/mF/o4wGBjRF+rlWQHDb0t6xCpA3JNL5phg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.9.1", + "yaml": "^2.4.5" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/type-fest": { - "version": "4.21.0", - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", + "node_modules/typescript": { + "version": "5.5.3", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=16" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-Hs60EyclUz1wBZMkmJ/xiiWGW91UZWcumWqOCQeWBp+xlPJJAufr5/OTrWhW+58yPv/72moEVhrA0VeUAlNoDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.0.0-alpha.51", + "@typescript-eslint/parser": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/type-is": { - "version": "1.6.18", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-989dk3/IA2HNdfl8T1Tj0+AEAtqHN5Cdac7Ff1N367Lh5e5xKi3nXWMkptbZaAEo/wi5+CZD8jngQ70wnCRweA==", + "dev": true, + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/type-utils": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 0.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/typedarray": { - "version": "0.0.6", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-UPMhWLqkP/wBGB3/eI9fRG8UFFmT8tTLlBUQFN01xtsRNhYlMYS5FQHDMkfPynnKp62AqLRrwkrI49cZN3aDUA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/typedoc": { - "version": "0.26.3", - "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-zT8Ib31deJCqRVJepZOMFoHiFAsSHOh5TmedcFeqyiMuzrqBMtF95iv6mPJqFDIXNgxmTkahpRan1z043ckBnA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "shiki": "^1.9.1", - "yaml": "^2.4.5" + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51" }, - "bin": { - "typedoc": "bin/typedoc" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/typedoc/node_modules/brace-expansion": { + "node_modules/typescript-eslint/node_modules/brace-expansion": { "version": "2.0.1", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, @@ -11025,7 +12329,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/typedoc/node_modules/minimatch": { + "node_modules/typescript-eslint/node_modules/minimatch": { "version": "9.0.5", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, @@ -11040,42 +12344,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/typescript": { - "version": "5.5.3", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-+e7D2XDZeHLe9D3bP7S0Va8YdLHzn3YcesoxMS9SjMWhtaSb5ylxk2txqT84sUS0WIDQetZlvDg2/UmY5B/ycg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.0.0-alpha.41", - "@typescript-eslint/parser": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/uc.micro": { "version": "2.1.0", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", @@ -11083,12 +12351,10 @@ "license": "MIT" }, "node_modules/uglify-js": { - "version": "3.18.0", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.17.4", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "license": "BSD-2-Clause", "optional": true, - "peer": true, "bin": { "uglifyjs": "bin/uglifyjs" }, @@ -11106,8 +12372,6 @@ "version": "1.0.0", "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -11116,7 +12380,6 @@ "version": "0.1.0", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -11128,7 +12391,6 @@ "version": "3.0.0", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, - "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" }, @@ -11142,9 +12404,7 @@ "node_modules/universal-user-agent": { "version": "7.0.2", "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", - "dev": true, - "license": "ISC", - "peer": true + "dev": true }, "node_modules/universalify": { "version": "2.0.0", @@ -11154,13 +12414,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/uri-js": { "version": "4.4.1", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", @@ -11174,8 +12427,6 @@ "version": "5.0.0", "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", "dev": true, - "license": "MIT", - "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -11190,13 +12441,6 @@ "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "8.3.2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", @@ -11205,14 +12449,18 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/uuid-random": { + "version": "1.3.2", + "integrity": "sha512-UOzej0Le/UgkbWEO8flm+0y+G+ljUon1QWTEZOq1rnMAsxo2+SckbiZdKzAHHlVh6gJqI1TjC/xwgR50MuCrBQ==" + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.0", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -11224,12 +12472,12 @@ } }, "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/validate-npm-package-license": { @@ -11249,11 +12497,19 @@ "node": ">= 0.10" } }, - "node_modules/vary": { - "version": "1.1.2", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" + "node_modules/webidl-conversions": { + "version": "4.0.2", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "node_modules/which": { @@ -11270,21 +12526,15 @@ "node": ">= 8" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/which-module": { + "version": "2.0.0", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "node_modules/wordwrap": { "version": "1.0.0", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT", - "peer": true + "dev": true }, "node_modules/workerpool": { "version": "6.5.1", @@ -11331,11 +12581,21 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/xtend": { "version": "4.0.2", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "peer": true, "engines": { "node": ">=0.4" } @@ -11414,77 +12674,319 @@ "version": "4.0.0", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.13", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/compat-data": { + "version": "7.14.5", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true + }, + "@babel/core": { + "version": "7.14.6", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.23.0", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.5", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "@babel/helper-module-transforms": { + "version": "7.14.5", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/yn": { - "version": "3.1.1", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "@babel/helper-replace-supers": { + "version": "7.14.5", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/yoctocolors": { - "version": "2.1.1", - "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "@babel/helper-simple-access": { + "version": "7.14.5", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "@babel/types": "^7.14.5" } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.24.7", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.24.7", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.22.20", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, + "@babel/helpers": { + "version": "7.14.6", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, "@babel/highlight": { - "version": "7.24.7", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.22.20", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { @@ -11538,6 +13040,55 @@ } } }, + "@babel/parser": { + "version": "7.23.0", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true + }, + "@babel/template": { + "version": "7.22.15", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.2", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.23.0", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, "@bcoe/v8-coverage": { "version": "0.2.3", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", @@ -11547,8 +13098,7 @@ "version": "1.5.0", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@cspotcode/source-map-support": { "version": "0.8.1", @@ -11559,140 +13109,146 @@ } }, "@esbuild/aix-ppc64": { - "version": "0.21.5", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.23.0", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", "dev": true, "optional": true }, "@esbuild/android-arm": { - "version": "0.21.5", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.23.0", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.21.5", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.23.0", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.21.5", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.23.0", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.21.5", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.23.0", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.21.5", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.23.0", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.21.5", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.23.0", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.21.5", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.23.0", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.21.5", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.23.0", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.21.5", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.23.0", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.21.5", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.23.0", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.21.5", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.23.0", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.21.5", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.23.0", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.21.5", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.23.0", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.21.5", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.23.0", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.21.5", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.23.0", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.21.5", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.23.0", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.21.5", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.23.0", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.0", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.21.5", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.23.0", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.21.5", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.23.0", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.21.5", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.23.0", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.21.5", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.23.0", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.21.5", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.23.0", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "dev": true, "optional": true }, @@ -11702,13 +13258,6 @@ "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - } } }, "@eslint-community/regexpp": { @@ -11717,8 +13266,8 @@ "dev": true }, "@eslint/config-array": { - "version": "0.17.0", - "integrity": "sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==", + "version": "0.17.1", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", "dev": true, "requires": { "@eslint/object-schema": "^2.1.4", @@ -11742,6 +13291,11 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "eslint-visitor-keys": { "version": "4.0.0", "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", @@ -11756,12 +13310,20 @@ "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.0.0" } + }, + "js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } } } }, "@eslint/js": { - "version": "9.6.0", - "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==", + "version": "9.7.0", + "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==", "dev": true }, "@eslint/object-schema": { @@ -11837,19 +13399,86 @@ } } }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, "@istanbuljs/schema": { "version": "0.1.3", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { @@ -11885,111 +13514,100 @@ } }, "@octokit/auth-token": { - "version": "5.1.1", - "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", - "dev": true, - "peer": true + "version": "5.0.1", + "integrity": "sha512-RTmWsLfig8SBoiSdgvCht4BXl1CHU89Co5xiQ5JF19my/sIRDFCQ1RPrmK0exgqUZuNm39C/bV8+/83+MJEjGg==", + "dev": true }, "@octokit/core": { - "version": "6.1.2", - "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "version": "6.0.1", + "integrity": "sha512-MIpPQXu8Y8GjHwXM81JLveiV+DHJZtLMcB5nKekBGOl3iAtk0HT3i12Xl8Biybu+bCS1+k4qbuKEq5d0RxNRnQ==", "dev": true, - "peer": true, "requires": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.0.0", "@octokit/request": "^9.0.0", "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" } }, "@octokit/endpoint": { - "version": "10.1.1", - "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "version": "10.0.0", + "integrity": "sha512-emBcNDxBdC1y3+knJonS5zhUB/CG6TihubxM2U1/pG/Z1y3a4oV0Gzz3lmkCvWWQI6h3tqBAX9MgCBFp+M68Jw==", "dev": true, - "peer": true, "requires": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.2" } }, "@octokit/graphql": { - "version": "8.1.1", - "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "version": "8.0.1", + "integrity": "sha512-lLDb6LhC1gBj2CxEDa5Xk10+H/boonhs+3Mi6jpRyetskDKNHe6crMeKmUE2efoLofMP8ruannLlCUgpTFmVzQ==", "dev": true, - "peer": true, "requires": { "@octokit/request": "^9.0.0", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.0" } }, "@octokit/openapi-types": { - "version": "22.2.0", - "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", - "dev": true, - "peer": true + "version": "20.0.0", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "11.3.3", - "integrity": "sha512-o4WRoOJZlKqEEgj+i9CpcmnByvtzoUYC6I8PD2SA95M+BJ2x8h7oLcVOg9qcowWXBOdcTRsMZiwvM3EyLm9AfA==", + "version": "10.0.0", + "integrity": "sha512-G1Z67qOiFneKDJyMafHQkWnKm1kU3FfbRZLzxgsFg4dOa3pRNdABbdk+xo/oev6P88lnbt7GKdBNB6dJZuPphA==", "dev": true, - "peer": true, "requires": { - "@octokit/types": "^13.5.0" + "@octokit/types": "^12.6.0" } }, "@octokit/plugin-retry": { - "version": "7.1.1", - "integrity": "sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==", + "version": "7.0.3", + "integrity": "sha512-T9l5Z7XnDZ7dkyNmhJPSUq0YjbqUT/xn4yQbhcSuv4WGC/LqM73/mKwkl68VDPoLw20e8oz4L7qQopWt9v6sow==", "dev": true, - "peer": true, "requires": { "@octokit/request-error": "^6.0.0", - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.0.0", "bottleneck": "^2.15.3" } }, "@octokit/plugin-throttling": { - "version": "9.3.0", - "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==", + "version": "9.0.3", + "integrity": "sha512-DReKamrLBJOzld73dmmxV2H137QKJfsxszAczEZXeAJQ/Po6bzQacKajPdodA6T1jfmP9+waImus+d/R2j+R7Q==", "dev": true, - "peer": true, "requires": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^12.6.0", "bottleneck": "^2.15.3" } }, "@octokit/request": { - "version": "9.1.1", - "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==", + "version": "9.0.1", + "integrity": "sha512-kL+cAcbSl3dctYLuJmLfx6Iku2MXXy0jszhaEIjQNaCp4zjHXrhVAHeuaRdNvJjW9qjl3u1MJ72+OuBP0YW/pg==", "dev": true, - "peer": true, "requires": { "@octokit/endpoint": "^10.0.0", "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.1.0", + "@octokit/types": "^12.0.0", "universal-user-agent": "^7.0.2" } }, "@octokit/request-error": { - "version": "6.1.1", - "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==", + "version": "6.0.2", + "integrity": "sha512-WtRVpoHcNXs84+s9s/wqfHaxM68NGMg8Av7h59B50OVO0PwwMx+2GgQ/OliUd0iQBSNWgR6N8afi/KjSHbXHWw==", "dev": true, - "peer": true, "requires": { - "@octokit/types": "^13.0.0" + "@octokit/types": "^12.0.0" } }, "@octokit/types": { - "version": "13.5.0", - "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", + "version": "12.6.0", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", "dev": true, - "peer": true, "requires": { - "@octokit/openapi-types": "^22.2.0" + "@octokit/openapi-types": "^20.0.0" } }, "@pkgjs/parseargs": { @@ -12039,134 +13657,142 @@ } }, "@qiwi/substrate": { - "version": "2.1.0", - "integrity": "sha512-F19fckn9+ztlPD0yogxoqWRRlGiLaSJcI+mqYWc8mzSwr4LFRJhwPkitmCPXluKxHeOT1IYQJacRMEWt5yA1AA==", + "version": "2.0.4", + "integrity": "sha512-MCJfVyqnc5gasdeAYWQnFo/P3eysvrQzrS5NB9g5WKMWBvAmBz6BkzOgMOGaHRgW0dkGsGT/iDu5c5sFhdISPQ==", "dev": true, "requires": { - "@qiwi/substrate-abstract": "2.1.0", - "@qiwi/substrate-std": "2.1.0", - "@qiwi/substrate-types": "2.1.0", - "tslib": "^2.6.2" + "@qiwi/substrate-abstract": "2.0.4", + "@qiwi/substrate-std": "2.0.4", + "@qiwi/substrate-types": "2.0.4", + "tslib": "^2.5.2" } }, "@qiwi/substrate-abstract": { - "version": "2.1.0", - "integrity": "sha512-ZzvNT1kWLGLMBtnsTRNs+1WXl1m+z9RNDvhjFcX0whpCtYxYQW1iIfpTJ/UbxiZ4TAQW72ROtIXkob3MuXF31g==", + "version": "2.0.4", + "integrity": "sha512-QSVLvJnBWLMcfS5uSZhEv/027xGu9tCoMVKyAFo2OEoVXtKfs57JR8Ig92uYEhzzLPwVRhaF3wrbrISXgHuFTw==", "dev": true, "requires": { - "@qiwi/substrate-types": "2.1.0" + "@qiwi/substrate-types": "2.0.4" } }, "@qiwi/substrate-std": { - "version": "2.1.0", - "integrity": "sha512-wqQF0g2ISnww4eggCfL4FJUemx7r07i1y8MVHo5qd7gG35LMjeWP0X05Ez/pyGsOxO+aaRxmm3iFSQMSrNCnyw==", + "version": "2.0.4", + "integrity": "sha512-0VQZ0kO3KjOBWaGsK1eSbBfdBFw7FIF76ZTelMOuyJr8o0beJGZvuGt382SpLrrf28HoxKc3ML/ZAHmcx7a1Zg==", "dev": true, "requires": { - "@qiwi/substrate-types": "2.1.0", - "tslib": "^2.6.2" + "@qiwi/substrate-types": "2.0.4", + "tslib": "^2.5.2" } }, "@qiwi/substrate-types": { - "version": "2.1.0", - "integrity": "sha512-WLPKeX61SNFTUDLpywY91MNKwR/+JN+KEqyYnCncjqEtlmDkuUn+FVWhzmbd4BUmF5PQ3icyQkppSCgrxcEBlg==", + "version": "2.0.4", + "integrity": "sha512-XXVPfaBoN27Lim/jClxy9ofCXAPkHMAb/PX/a/kqS3ijhOv0TbDqN34Ko4D9OCqLdEvhu1prYOhA58zlXtr8/g==", "dev": true }, "@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.19.0", + "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.18.0", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.19.0", + "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.19.0", + "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.19.0", + "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.19.0", + "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.19.0", + "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.19.0", + "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.19.0", + "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.19.0", + "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.19.0", + "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==", "dev": true, "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.19.0", + "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.19.0", + "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.19.0", + "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.19.0", + "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.19.0", + "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.19.0", + "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", "dev": true, "optional": true }, + "@sebbo2002/semantic-release-jsr": { + "version": "1.0.0-develop.6", + "integrity": "sha512-SkSjF/NpTx9Fp0RYUu2XksEsGosu62Gbw6UpOVbSNWinUh+LY6202GU9uzS2WuxeGYEH1307y8SZZS4+QbAkag==", + "dev": true, + "requires": { + "jsr": "^0.12.2" + } + }, "@sec-ant/readable-stream": { "version": "0.4.1", "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", @@ -12191,15 +13817,13 @@ } }, "@semantic-release/commit-analyzer": { - "version": "13.0.0", - "integrity": "sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==", + "version": "12.0.0", + "integrity": "sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==", "dev": true, - "peer": true, "requires": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-filter": "^4.0.0", + "conventional-commits-parser": "^5.0.0", "debug": "^4.0.0", "import-from-esm": "^1.0.3", "lodash-es": "^4.17.21", @@ -12254,13 +13878,12 @@ } }, "@semantic-release/github": { - "version": "10.0.7", - "integrity": "sha512-J7JiFvOu/8QKqFF5FDTk/k19Z/Jku4LdDof/+LsjaGgLOISJR7TL66q89c2YXV6Dh5Jw5VmiT4uK4q6SSfbQGA==", + "version": "10.0.2", + "integrity": "sha512-SP5ihhv/uQa8vPuWKmbJrrzfv8lRUkDFC6qwgaWoorrflN1DEW0IGCa9w/PxUp8Ad3dbvXZPmpXdGiP3eyTzhg==", "dev": true, - "peer": true, "requires": { "@octokit/core": "^6.0.0", - "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-paginate-rest": "^10.0.0", "@octokit/plugin-retry": "^7.0.0", "@octokit/plugin-throttling": "^9.0.0", "@semantic-release/error": "^4.0.0", @@ -12281,7 +13904,6 @@ "version": "5.0.0", "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "peer": true, "requires": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -12291,7 +13913,6 @@ "version": "5.2.0", "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "peer": true, "requires": { "escape-string-regexp": "5.0.0" } @@ -12299,14 +13920,12 @@ "escape-string-regexp": { "version": "5.0.0", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "peer": true + "dev": true }, "globby": { - "version": "14.0.2", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "version": "14.0.1", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, - "peer": true, "requires": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -12319,20 +13938,17 @@ "indent-string": { "version": "5.0.0", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "peer": true + "dev": true }, "path-type": { "version": "5.0.0", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "peer": true + "dev": true }, "slash": { "version": "5.1.0", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "peer": true + "dev": true } } }, @@ -12426,6 +14042,16 @@ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true + }, "npm-run-path": { "version": "5.3.0", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", @@ -12435,12 +14061,13 @@ } }, "parse-json": { - "version": "8.1.0", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "version": "8.0.1", + "integrity": "sha512-soKUg/q/8bcfuF3+plsbYldE74cVEVEPSC1BUPIGTaX1byXdz6Fo+CVYBdH0jj/5xWsFrNRksl11QkBgHqPQeQ==", "dev": true, "requires": { "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", + "index-to-position": "^0.1.1", + "json-parse-even-better-errors": "^3.0.0", "type-fest": "^4.7.1" } }, @@ -12450,15 +14077,14 @@ "dev": true }, "read-pkg": { - "version": "9.0.1", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "version": "9.0.0", + "integrity": "sha512-SBoBio4xhJmlF4xs9IBliWZGSbDAnrOfQkLGL7xB+RYEUZNAN2LlNkzO45B7gc7c2dLMX987bhHAaJ/LG3efeQ==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "type-fest": "^4.6.0" } }, "signal-exit": { @@ -12470,38 +14096,41 @@ "version": "4.0.0", "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true + }, + "type-fest": { + "version": "4.7.1", + "integrity": "sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==", + "dev": true } } }, "@semantic-release/release-notes-generator": { - "version": "14.0.1", - "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==", + "version": "12.0.0", + "integrity": "sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==", "dev": true, - "peer": true, "requires": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-changelog-writer": "^7.0.0", + "conventional-commits-filter": "^4.0.0", + "conventional-commits-parser": "^5.0.0", "debug": "^4.0.0", "get-stream": "^7.0.0", - "import-from-esm": "^1.0.3", + "import-from": "^4.0.0", "into-stream": "^7.0.0", "lodash-es": "^4.17.21", - "read-package-up": "^11.0.0" + "read-pkg-up": "^10.0.0" }, "dependencies": { "get-stream": { "version": "7.0.1", "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", - "dev": true, - "peer": true + "dev": true } } }, "@shikijs/core": { - "version": "1.10.3", - "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", + "version": "1.11.0", + "integrity": "sha512-VbEhDAhT/2ozO0TPr5/ZQBO/NWLqtk4ZiBf6NplYpF38mKjNfMMied5fNEfIfYfN+cdKvhDB4VMcKvG/g9c3zg==", "dev": true, "requires": { "@types/hast": "^3.0.4" @@ -12510,14 +14139,17 @@ "@sindresorhus/is": { "version": "4.6.0", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "peer": true + "dev": true }, "@sindresorhus/merge-streams": { "version": "2.3.0", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "peer": true + "dev": true + }, + "@touch4it/ical-timezones": { + "version": "1.9.0", + "integrity": "sha512-UAiZMrFlgMdOIaJDPsKu5S7OecyMLr3GGALJTYkRgHmsHAA/8Ixm1qD09ELP2X7U1lqgrctEgvKj9GzMbczC+g==", + "dev": true }, "@tsconfig/node10": { "version": "1.0.8", @@ -12540,8 +14172,8 @@ "dev": true }, "@types/body-parser": { - "version": "1.19.0", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "version": "1.19.5", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "requires": { "@types/connect": "*", @@ -12557,24 +14189,24 @@ } }, "@types/connect": { - "version": "3.4.34", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "version": "3.4.38", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "requires": { "@types/node": "*" } }, "@types/debug": { - "version": "4.1.12", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "version": "4.1.10", + "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", "dev": true, "requires": { "@types/ms": "*" } }, "@types/eslint": { - "version": "8.56.10", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.0", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", "dev": true, "requires": { "@types/estree": "*", @@ -12630,8 +14262,8 @@ "dev": true }, "@types/git-url-parse": { - "version": "9.0.3", - "integrity": "sha512-Wrb8zeghhpKbYuqAOg203g+9YSNlrZWNZYvwxJuDF4dTmerijqpnGbI79yCuPtHSXHPEwv1pAFUB4zsSqn82Og==", + "version": "9.0.2", + "integrity": "sha512-WLeklQNHJVFaChgqO0GdlSxvTPIofIPz/rK2UJdDXkkCYZjy8nonkl4RwssvD/BbKYoFHcvJ7qlAE1RvYNaHOQ==", "dev": true }, "@types/hast": { @@ -12642,6 +14274,11 @@ "@types/unist": "*" } }, + "@types/http-errors": { + "version": "2.0.4", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", @@ -12653,13 +14290,18 @@ "dev": true }, "@types/lodash": { - "version": "4.17.6", - "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", + "version": "4.14.200", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", + "dev": true + }, + "@types/luxon": { + "version": "3.4.2", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", "dev": true }, "@types/mime": { - "version": "1.3.2", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.5", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "@types/mocha": { @@ -12668,21 +14310,21 @@ "dev": true }, "@types/ms": { - "version": "0.7.34", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "version": "0.7.33", + "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==", "dev": true }, "@types/node": { - "version": "20.14.10", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "20.14.11", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dev": true, "requires": { "undici-types": "~5.26.4" } }, "@types/normalize-package-data": { - "version": "2.4.4", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "version": "2.4.3", + "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", "dev": true }, "@types/qs": { @@ -12696,8 +14338,8 @@ "dev": true }, "@types/semantic-release": { - "version": "20.0.6", - "integrity": "sha512-8YJXvsT1FwMrNdZI1e6NBHPzZWendDiUsLryzxurdup+9LnV3s9fF4NgO0D3LkBfLMnocb4Ax6TQ5yFdF3dXGQ==", + "version": "20.0.4", + "integrity": "sha512-9zjlWBYjlRKKOtCu7mEcUTu5Ii5nRAujRe841R6ZfwzhLFCa+BGMdWMImzXZDeVj0ODpI37pO0FSKpMiR7sdww==", "dev": true, "requires": { "@types/node": "*" @@ -12706,8 +14348,7 @@ "@types/semver": { "version": "7.5.8", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "peer": true + "dev": true }, "@types/send": { "version": "0.17.4", @@ -12719,12 +14360,13 @@ } }, "@types/serve-static": { - "version": "1.13.9", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "version": "1.15.7", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "requires": { - "@types/mime": "^1", - "@types/node": "*" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" } }, "@types/unist": { @@ -12733,71 +14375,148 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-WePtbzWMaQO4qtGAXp3zzEN8yYZCEuAHVCERCUXgoSUTQ80F5UB7T5lYyA9ySpFDB7rqJ2ev98DtnbS4U3Ms+w==", + "version": "7.3.1", + "integrity": "sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/type-utils": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/type-utils": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", + "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "@typescript-eslint/type-utils": { + "version": "7.3.1", + "integrity": "sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/utils": "7.3.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/utils": { + "version": "7.3.1", + "integrity": "sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "semver": "^7.5.4" + } + } } }, "@typescript-eslint/parser": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-7HMXwy/q/59ZASBXz2FtdIsR7LgABrR8j2dTKq9GMR8OkjjdO4klxWSY/uOBozVt4UxlMRYsBdBDhEq4/tHRiw==", + "version": "7.3.1", + "integrity": "sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==", "dev": true, + "peer": true, "requires": { - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@typescript-eslint/scope-manager": "7.3.1", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/typescript-estree": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-iNxuQ0TMVfFiMJ2al4bGd/mY9+aLtBxnHfo7B2xoVzR6cRFgUdBLlMa//MSIjSmVRpCEqNLQnkxpJb96tFG+xw==", + "version": "7.3.1", + "integrity": "sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==", "dev": true, "requires": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41" + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1" } }, "@typescript-eslint/type-utils": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-+QIA1z/jrox6bbvqlyqBQjotpevieLTycfiuoKuqGcKoskFZV5Rma51BV8LCJacnOafwJtSi+7b8zDo8OsXUvA==", + "version": "8.0.0-alpha.51", + "integrity": "sha512-KqU2e3KITMGlRfG4ehfO2zS0GutDWc+zV2nwbRDQdUfh1izgFDAh5UqiJ8YafXVzY1v0dnRggnmvjOMotjQa1w==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/types": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-n0P2FP3YC3pD3yoiCf4lHqbUP45xlnOk8HkjB+LtKSUZZWLLJ8k1ZXZtQj7MEX22tytCMj//Bmq403xFuCwfIg==", + "version": "7.3.1", + "integrity": "sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-adCr+vbLYTFhwhIwjIjjMxTdUYiPA2Jlyuhnbj092IzgLHtT79bvuwcgPWeTyLbFb/13SMKmOEka00xHiqLpig==", + "version": "7.3.1", + "integrity": "sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.41", + "@typescript-eslint/types": "7.3.1", + "@typescript-eslint/visitor-keys": "7.3.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "dependencies": { "brace-expansion": { @@ -12809,8 +14528,8 @@ } }, "minimatch": { - "version": "9.0.5", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.3", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -12819,30 +14538,79 @@ } }, "@typescript-eslint/utils": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-DTxc9VdERS6iloiw1P5tgRDqRArmp/sIuvgdHBvGh2SiltEFc3VjLGnHHGSTr6GfH7tjFWvcCnCtxx+pjWfp5Q==", + "version": "8.0.0-alpha.51", + "integrity": "sha512-OJac7/t6M/jQlgAQSM2yffKXZL8d/6vTbQPChC5v4oGHFuKHF2dEFeevNJlIS9iR6EtquRsHup2GDwqw6bWyrw==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.41", - "@typescript-eslint/types": "8.0.0-alpha.41", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.41" + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-zT8Ib31deJCqRVJepZOMFoHiFAsSHOh5TmedcFeqyiMuzrqBMtF95iv6mPJqFDIXNgxmTkahpRan1z043ckBnA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51" + } + }, + "@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "@typescript-eslint/visitor-keys": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-uetCAUBVC+YarBdZnWzDDgX11PpAEGV8Cw31I3d1xNrhx6/bJGThKX+holEmd3amMdnr4w/XUKH/4YuQOgtjDA==", + "version": "7.3.1", + "integrity": "sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.0.0-alpha.41", - "eslint-visitor-keys": "^3.4.3" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - } + "@typescript-eslint/types": "7.3.1", + "eslint-visitor-keys": "^3.4.1" } }, "abbrev": { @@ -12850,14 +14618,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "accepts": { - "version": "1.3.8", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, "acorn": { "version": "8.12.1", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", @@ -12870,15 +14630,14 @@ "requires": {} }, "acorn-walk": { - "version": "8.2.0", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.1.1", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", "dev": true }, "agent-base": { - "version": "7.1.1", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.0", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "peer": true, "requires": { "debug": "^4.3.4" } @@ -12909,12 +14668,18 @@ "dev": true }, "ansi-escapes": { - "version": "7.0.0", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "6.2.0", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", "dev": true, - "peer": true, "requires": { - "environment": "^1.0.0" + "type-fest": "^3.0.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } } }, "ansi-regex": { @@ -12944,36 +14709,46 @@ "picomatch": "^2.0.4" } }, + "append-transform": { + "version": "2.0.0", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "arg": { "version": "4.1.3", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { - "version": "2.0.1", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "argv-formatter": { "version": "1.0.0", "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", - "dev": true, - "peer": true + "dev": true }, "array-find-index": { "version": "1.0.2", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "array-ify": { "version": "1.0.0", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "peer": true + "dev": true }, "array-union": { "version": "2.1.0", @@ -12990,11 +14765,6 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, - "async": { - "version": "3.2.5", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "asynckit": { "version": "0.4.0", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", @@ -13008,50 +14778,17 @@ "before-after-hook": { "version": "3.0.2", "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true, - "peer": true + "dev": true }, "binary-extensions": { "version": "2.2.0", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "body-parser": { - "version": "1.20.2", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "bottleneck": { "version": "2.19.5", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true, - "peer": true + "dev": true }, "brace-expansion": { "version": "1.1.11", @@ -13063,11 +14800,11 @@ } }, "braces": { - "version": "3.0.2", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browser-stdout": { @@ -13075,23 +14812,31 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.16.6", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, "buffer-from": { "version": "1.1.1", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "bundle-require": { - "version": "4.0.1", - "integrity": "sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==", + "version": "5.0.0", + "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==", "dev": true, "requires": { "load-tsconfig": "^0.2.3" } }, - "bytes": { - "version": "3.1.2", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, "c8": { "version": "10.1.2", "integrity": "sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==", @@ -13110,6 +14855,14 @@ "yargs-parser": "^21.1.1" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "cliui": { "version": "8.0.1", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", @@ -13120,6 +14873,51 @@ "wrap-ansi": "^7.0.0" } }, + "foreground-child": { + "version": "3.1.1", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.4.5", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "test-exclude": { + "version": "7.0.1", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + } + }, "yargs": { "version": "17.7.2", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", @@ -13146,9 +14944,21 @@ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true }, + "caching-transform": { + "version": "4.0.0", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "call-bind": { "version": "1.0.2", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -13159,6 +14969,16 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001237", + "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "dev": true + }, "caseless": { "version": "0.12.0", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", @@ -13176,12 +14996,11 @@ "char-regex": { "version": "1.0.2", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "peer": true + "dev": true }, "chokidar": { - "version": "3.5.3", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -13203,7 +15022,6 @@ "version": "2.1.11", "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, - "peer": true, "requires": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -13214,10 +15032,9 @@ } }, "cli-table3": { - "version": "0.6.5", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "version": "0.6.3", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "peer": true, "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" @@ -13246,6 +15063,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "1.2.2", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", @@ -13255,20 +15077,19 @@ } }, "commander": { - "version": "11.1.0", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "11.0.0", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true }, "commondir": { "version": "1.0.1", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "compare-func": { "version": "2.0.0", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "peer": true, "requires": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -13299,66 +15120,48 @@ "proto-list": "~1.2.1" } }, - "content-disposition": { - "version": "0.5.4", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "content-type": { - "version": "1.0.5", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + "consola": { + "version": "3.2.3", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true }, "conventional-changelog-angular": { - "version": "8.0.0", - "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", + "version": "7.0.0", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "peer": true, "requires": { "compare-func": "^2.0.0" } }, "conventional-changelog-writer": { - "version": "8.0.0", - "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==", + "version": "7.0.1", + "integrity": "sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==", "dev": true, - "peer": true, "requires": { - "@types/semver": "^7.5.5", - "conventional-commits-filter": "^5.0.0", + "conventional-commits-filter": "^4.0.0", "handlebars": "^4.7.7", - "meow": "^13.0.0", - "semver": "^7.5.2" + "json-stringify-safe": "^5.0.1", + "meow": "^12.0.1", + "semver": "^7.5.2", + "split2": "^4.0.0" } }, "conventional-commits-filter": { - "version": "5.0.0", - "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", - "dev": true, - "peer": true + "version": "4.0.0", + "integrity": "sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==", + "dev": true }, "conventional-commits-parser": { - "version": "6.0.0", - "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", + "version": "5.0.0", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, - "peer": true, "requires": { - "meow": "^13.0.0" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" } }, - "convert-hrtime": { - "version": "5.0.0", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", - "dev": true, - "peer": true - }, "convert-source-map": { "version": "1.7.0", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", @@ -13367,14 +15170,6 @@ "safe-buffer": "~5.1.1" } }, - "cookie": { - "version": "0.6.0", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" - }, - "cookie-signature": { - "version": "1.0.6", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, "core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", @@ -13384,12 +15179,26 @@ "version": "9.0.0", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, - "peer": true, "requires": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, "create-require": { @@ -13422,6 +15231,11 @@ } } }, + "dayjs": { + "version": "1.11.10", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "dev": true + }, "debug": { "version": "4.3.5", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", @@ -13435,6 +15249,11 @@ "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true }, + "decamelize": { + "version": "1.2.0", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "deep-extend": { "version": "0.6.0", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", @@ -13445,19 +15264,19 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-require-extensions": { + "version": "3.0.0", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "depd": { - "version": "2.0.0", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, "dezalgo": { "version": "1.0.3", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", @@ -13484,7 +15303,6 @@ "version": "5.3.0", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "peer": true, "requires": { "is-obj": "^2.0.0" } @@ -13493,7 +15311,6 @@ "version": "0.1.4", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, - "peer": true, "requires": { "readable-stream": "^2.0.2" } @@ -13503,9 +15320,10 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "ee-first": { - "version": "1.1.1", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "electron-to-chromium": { + "version": "1.3.752", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true }, "email-addresses": { "version": "5.0.0", @@ -13520,12 +15338,7 @@ "emojilib": { "version": "2.4.0", "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "dev": true, - "peer": true - }, - "encodeurl": { - "version": "1.0.2", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "dev": true }, "entities": { "version": "4.5.0", @@ -13536,7 +15349,6 @@ "version": "11.0.0", "integrity": "sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ==", "dev": true, - "peer": true, "requires": { "execa": "^8.0.0", "java-properties": "^1.0.2" @@ -13546,7 +15358,6 @@ "version": "8.0.1", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "peer": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -13562,32 +15373,27 @@ "get-stream": { "version": "8.0.1", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "peer": true + "dev": true }, "human-signals": { "version": "5.0.0", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "peer": true + "dev": true }, "is-stream": { "version": "3.0.0", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "peer": true + "dev": true }, "mimic-fn": { "version": "4.0.0", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "peer": true + "dev": true }, "npm-run-path": { - "version": "5.3.0", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "version": "5.2.0", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, - "peer": true, "requires": { "path-key": "^4.0.0" } @@ -13596,7 +15402,6 @@ "version": "6.0.0", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "peer": true, "requires": { "mimic-fn": "^4.0.0" } @@ -13604,34 +15409,24 @@ "path-key": { "version": "4.0.0", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "peer": true + "dev": true }, "signal-exit": { "version": "4.1.0", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true + "dev": true }, "strip-final-newline": { "version": "3.0.0", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "peer": true + "dev": true } } }, "env-paths": { "version": "2.2.1", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "peer": true - }, - "environment": { - "version": "1.1.0", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "peer": true + "dev": true }, "error-ex": { "version": "1.3.2", @@ -13641,34 +15436,40 @@ "is-arrayish": "^0.2.1" } }, + "es6-error": { + "version": "4.1.1", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "esbuild": { - "version": "0.21.5", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "requires": { - "@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" + "version": "0.23.0", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "escalade": { @@ -13678,7 +15479,8 @@ }, "escape-html": { "version": "1.0.3", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true }, "escape-string-regexp": { "version": "4.0.0", @@ -13686,15 +15488,15 @@ "dev": true }, "eslint": { - "version": "9.6.0", - "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==", + "version": "9.7.0", + "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", + "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.17.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.6.0", + "@eslint/js": "9.7.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -13703,7 +15505,7 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", + "eslint-scope": "^8.0.2", "eslint-visitor-keys": "^4.0.0", "espree": "^10.1.0", "esquery": "^1.5.0", @@ -13752,8 +15554,8 @@ } }, "eslint-compat-utils": { - "version": "0.5.1", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "version": "0.5.0", + "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", "dev": true, "requires": { "semver": "^7.5.4" @@ -13774,25 +15576,17 @@ } }, "eslint-scope": { - "version": "8.0.1", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "version": "8.0.2", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, "eslint-visitor-keys": { - "version": "2.1.0", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.4.3", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "esm": { @@ -13808,15 +15602,13 @@ "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - } } }, + "esprima": { + "version": "4.0.1", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.5.0", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", @@ -13843,10 +15635,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, "execa": { "version": "5.1.1", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", @@ -13863,60 +15651,6 @@ "strip-final-newline": "^2.0.0" } }, - "express": { - "version": "4.19.2", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "safe-buffer": { - "version": "5.2.1", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "fast-deep-equal": { "version": "3.1.3", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", @@ -13991,42 +15725,16 @@ } }, "fill-range": { - "version": "7.0.1", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.2.0", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "find-cache-dir": { - "version": "3.3.2", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "version": "3.3.1", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -14046,17 +15754,14 @@ "find-up-simple": { "version": "1.0.0", "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", - "dev": true, - "peer": true + "dev": true }, "find-versions": { - "version": "6.0.0", - "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", + "version": "5.1.0", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, - "peer": true, "requires": { - "semver-regex": "^4.0.5", - "super-regex": "^1.0.0" + "semver-regex": "^4.0.5" } }, "flat": { @@ -14079,19 +15784,12 @@ "dev": true }, "foreground-child": { - "version": "3.2.1", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "2.0.0", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } + "signal-exit": "^3.0.2" } }, "form-data": { @@ -14104,27 +15802,23 @@ "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.2.0", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, "from2": { "version": "2.3.0", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "peer": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, + "fromentries": { + "version": "1.3.2", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-extra": { - "version": "11.2.0", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.1.1", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -14150,13 +15844,13 @@ }, "function-bind": { "version": "1.1.1", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "function-timeout": { - "version": "1.0.2", - "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", - "dev": true, - "peer": true + "gensync": { + "version": "1.0.0-beta.2", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -14166,20 +15860,26 @@ "get-intrinsic": { "version": "1.1.1", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, + "get-package-type": { + "version": "0.1.0", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-stream": { "version": "6.0.1", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "gh-pages": { - "version": "6.1.1", - "integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==", + "version": "6.0.0", + "integrity": "sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==", "dev": true, "requires": { "async": "^3.2.4", @@ -14199,6 +15899,11 @@ "array-uniq": "^1.0.1" } }, + "async": { + "version": "3.2.4", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "globby": { "version": "6.1.0", "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", @@ -14222,7 +15927,6 @@ "version": "1.2.0", "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, - "peer": true, "requires": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", @@ -14236,7 +15940,6 @@ "version": "1.0.0", "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, - "peer": true, "requires": { "through2": "~2.0.0" } @@ -14245,7 +15948,6 @@ "version": "2.0.5", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "peer": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -14271,8 +15973,8 @@ } }, "glob": { - "version": "7.1.7", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -14323,7 +16025,6 @@ "version": "4.7.8", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "peer": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -14335,6 +16036,7 @@ "has": { "version": "1.0.3", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -14346,7 +16048,24 @@ }, "has-symbols": { "version": "1.0.2", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "hasha": { + "version": "5.2.2", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } }, "he": { "version": "1.2.0", @@ -14356,18 +16075,16 @@ "highlight.js": { "version": "10.7.3", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true, - "peer": true + "dev": true }, "hook-std": { "version": "3.0.0", "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", - "dev": true, - "peer": true + "dev": true }, "hosted-git-info": { - "version": "7.0.2", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "version": "7.0.1", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, "requires": { "lru-cache": "^10.0.1" @@ -14389,22 +16106,10 @@ "parse-cache-control": "^1.0.1" } }, - "http-errors": { - "version": "2.0.0", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "http-proxy-agent": { "version": "7.0.2", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "peer": true, "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -14426,10 +16131,9 @@ } }, "https-proxy-agent": { - "version": "7.0.5", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.4", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, - "peer": true, "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -14440,13 +16144,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ignore": { "version": "5.3.1", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", @@ -14461,21 +16158,24 @@ "resolve-from": "^4.0.0" } }, + "import-from": { + "version": "4.0.0", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true + }, "import-from-esm": { - "version": "1.3.4", - "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", + "version": "1.3.3", + "integrity": "sha512-U3Qt/CyfFpTUv6LOP2jRTLYjphH6zg3okMfHbyqRa/W2w6hr8OsJWVggNlR4jxuojQy81TgTJTxgSkyoteRGMQ==", "dev": true, - "peer": true, "requires": { "debug": "^4.3.4", "import-meta-resolve": "^4.0.0" } }, "import-meta-resolve": { - "version": "4.1.0", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true, - "peer": true + "version": "4.0.0", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "dev": true }, "imurmurhash": { "version": "0.1.4", @@ -14503,7 +16203,8 @@ }, "inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -14514,16 +16215,11 @@ "version": "7.0.0", "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", "dev": true, - "peer": true, "requires": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" } }, - "ipaddr.js": { - "version": "1.9.1", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, "is-arrayish": { "version": "0.2.1", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", @@ -14538,8 +16234,8 @@ } }, "is-core-module": { - "version": "2.4.0", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.12.0", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -14571,8 +16267,7 @@ "is-obj": { "version": "2.0.0", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "peer": true + "dev": true }, "is-path-inside": { "version": "3.0.3", @@ -14597,11 +16292,29 @@ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, + "is-text-path": { + "version": "2.0.0", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "requires": { + "text-extensions": "^2.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-unicode-supported": { "version": "0.1.0", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-windows": { + "version": "1.0.2", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", @@ -14613,10 +16326,9 @@ "dev": true }, "issue-parser": { - "version": "7.0.1", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "version": "7.0.0", + "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==", "dev": true, - "peer": true, "requires": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -14626,10 +16338,57 @@ } }, "istanbul-lib-coverage": { - "version": "3.2.2", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "version": "3.2.0", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, + "istanbul-lib-hook": { + "version": "3.0.0", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, "istanbul-lib-report": { "version": "3.0.1", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", @@ -14650,9 +16409,19 @@ } } }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, "istanbul-reports": { - "version": "3.1.7", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.1.6", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -14660,8 +16429,8 @@ } }, "jackspeak": { - "version": "3.4.1", - "integrity": "sha512-U23pQPDnmYybVkYjObcuYMk43VRlMLLqLI+RdZy8s8WV8WsxO9SnqSroKaluuvcNOdCAlauKszDwd+umbot5Mg==", + "version": "3.4.3", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", @@ -14671,8 +16440,7 @@ "java-properties": { "version": "1.0.2", "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "dev": true, - "peer": true + "dev": true }, "joycon": { "version": "3.1.1", @@ -14685,13 +16453,19 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.2", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-buffer": { "version": "3.0.1", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", @@ -14700,8 +16474,7 @@ "json-parse-better-errors": { "version": "1.0.2", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "peer": true + "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -14723,23 +16496,20 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, + "json5": { + "version": "2.2.3", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, "jsonc-eslint-parser": { - "version": "2.0.4", - "integrity": "sha512-a3ZRus4qea0tSRCW2qvF/spFt7iCpdeJbiDjxbFZRZ87JCF8sI8hbxpVvUBVyZ3fLB/RQnTi+Y/yZbMlqt1BCg==", + "version": "2.1.0", + "integrity": "sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==", "dev": true, "requires": { "acorn": "^8.5.0", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "semver": "^7.3.5" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", - "dev": true - } } }, "jsonfile": { @@ -14751,6 +16521,29 @@ "universalify": "^2.0.0" } }, + "jsonparse": { + "version": "1.3.1", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsr": { + "version": "0.12.2", + "integrity": "sha512-VjRK2vqfFxz6ml1NEbRLwD0+YAT90SXX9qKU+w1lytbAz7uaB4ewLxuuilr+R049OJ/p4MbWEvCRWISCjCZyfQ==", + "dev": true, + "requires": { + "kolorist": "^1.8.0", + "node-stream-zip": "^1.15.0" + } + }, "keyv": { "version": "4.5.4", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", @@ -14759,6 +16552,11 @@ "json-buffer": "3.0.1" } }, + "kolorist": { + "version": "1.8.0", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "levn": { "version": "0.4.1", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", @@ -14871,7 +16669,6 @@ "version": "4.0.0", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, - "peer": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -14883,7 +16680,6 @@ "version": "4.0.0", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, - "peer": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -14892,8 +16688,7 @@ "strip-bom": { "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "peer": true + "dev": true } } }, @@ -14923,14 +16718,17 @@ "lodash.capitalize": { "version": "4.2.1", "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true, - "peer": true + "dev": true }, "lodash.escaperegexp": { "version": "4.1.2", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true, - "peer": true + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true }, "lodash.isempty": { "version": "4.4.0", @@ -14950,8 +16748,7 @@ "lodash.isplainobject": { "version": "4.0.6", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "peer": true + "dev": true }, "lodash.isstring": { "version": "4.0.1", @@ -14971,8 +16768,7 @@ "lodash.uniqby": { "version": "4.7.0", "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true, - "peer": true + "dev": true }, "log-symbols": { "version": "4.1.0", @@ -14992,8 +16788,8 @@ } }, "lru-cache": { - "version": "10.3.1", - "integrity": "sha512-9/8QXrtbGeMB6LxwQd4x1tIMnsmUxMvIH/qWGsccz6bt9Uln3S+sgAaqfQNhbGA8ufzs2fHuP/yqapGgP9Hh2g==", + "version": "10.4.3", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, "lunr": { @@ -15001,6 +16797,11 @@ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, + "luxon": { + "version": "3.4.4", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "dev": true + }, "make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", @@ -15010,8 +16811,8 @@ }, "dependencies": { "semver": { - "version": "6.3.1", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -15032,24 +16833,30 @@ "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, "marked": { - "version": "12.0.2", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "4.3.0", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, "peer": true }, "marked-terminal": { - "version": "7.1.0", - "integrity": "sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==", + "version": "7.0.0", + "integrity": "sha512-sNEx8nn9Ktcm6pL0TnRz8tnXq/mSS0Q1FRSwJOAqw4lAB4l49UeDf85Gm1n9RPFm5qurCPjwi1StAQT2XExhZw==", "dev": true, - "peer": true, "requires": { - "ansi-escapes": "^7.0.0", + "ansi-escapes": "^6.2.0", "chalk": "^5.3.0", "cli-highlight": "^2.1.11", - "cli-table3": "^0.6.5", + "cli-table3": "^0.6.3", "node-emoji": "^2.1.3", "supports-hyperlinks": "^3.0.0" }, @@ -15057,8 +16864,7 @@ "chalk": { "version": "5.3.0", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "peer": true + "dev": true } } }, @@ -15067,19 +16873,10 @@ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, "meow": { - "version": "13.2.0", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "peer": true - }, - "merge-descriptors": { - "version": "1.0.1", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "version": "12.1.1", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true }, "merge-stream": { "version": "2.0.0", @@ -15091,10 +16888,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "methods": { - "version": "1.1.2", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { "version": "4.0.4", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", @@ -15105,20 +16898,21 @@ } }, "mime": { - "version": "4.0.4", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", - "dev": true, - "peer": true + "version": "4.0.1", + "integrity": "sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==", + "dev": true }, "mime-db": { - "version": "1.52.0", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "version": "1.48.0", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true }, "mime-types": { - "version": "2.1.35", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.31", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, "requires": { - "mime-db": "1.52.0" + "mime-db": "1.48.0" } }, "mimic-fn": { @@ -15145,16 +16939,16 @@ "dev": true }, "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "mocha": { - "version": "10.6.0", - "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "version": "10.7.0", + "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", "dev": true, "requires": { "ansi-colors": "^4.1.3", @@ -15179,6 +16973,11 @@ "yargs-unparser": "^2.0.0" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "brace-expansion": { "version": "2.0.1", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -15199,6 +16998,14 @@ "once": "^1.3.0" } }, + "js-yaml": { + "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "minimatch": { "version": "5.1.6", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", @@ -15264,8 +17071,8 @@ "dev": true }, "fs-extra": { - "version": "10.1.0", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "version": "10.0.1", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -15274,8 +17081,8 @@ } }, "yargs": { - "version": "17.5.1", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.4.0", + "integrity": "sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -15294,6 +17101,19 @@ } } }, + "moment": { + "version": "2.30.1", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true + }, + "moment-timezone": { + "version": "0.5.45", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dev": true, + "requires": { + "moment": "^2.29.4" + } + }, "ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", @@ -15314,26 +17134,20 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.3", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, "neo-async": { "version": "2.6.2", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true + "dev": true }, "nerf-dart": { "version": "1.0.0", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", "dev": true }, "node-emoji": { "version": "2.1.3", "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", "dev": true, - "peer": true, "requires": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", @@ -15341,6 +17155,24 @@ "skin-tone": "^2.0.0" } }, + "node-preload": { + "version": "0.2.1", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "1.1.73", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node-stream-zip": { + "version": "1.15.0", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true + }, "nopt": { "version": "4.0.3", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", @@ -15351,11 +17183,12 @@ } }, "normalize-package-data": { - "version": "6.0.2", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "version": "6.0.0", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", "dev": true, "requires": { "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } @@ -15365,86 +17198,89 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-url": { - "version": "8.0.1", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "dev": true - }, "npm": { - "version": "10.8.1", - "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==", + "version": "10.5.0", + "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==", "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.5.3", - "@npmcli/config": "^8.3.3", - "@npmcli/fs": "^3.1.1", - "@npmcli/map-workspaces": "^3.0.6", - "@npmcli/package-json": "^5.1.1", - "@npmcli/promise-spawn": "^7.0.2", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "@sigstore/tuf": "^2.3.4", + "@npmcli/arborist": "^7.2.1", + "@npmcli/config": "^8.0.2", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/run-script": "^7.0.4", + "@sigstore/tuf": "^2.3.1", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.3", + "cacache": "^18.0.2", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.4.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.2", - "ini": "^4.1.3", - "init-package-json": "^6.0.3", - "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^3.0.2", - "libnpmaccess": "^8.0.6", - "libnpmdiff": "^6.1.3", - "libnpmexec": "^8.1.2", - "libnpmfund": "^5.0.11", - "libnpmhook": "^10.0.5", - "libnpmorg": "^6.0.6", - "libnpmpack": "^7.0.3", - "libnpmpublish": "^9.0.9", - "libnpmsearch": "^7.0.6", - "libnpmteam": "^6.0.5", - "libnpmversion": "^6.0.3", - "make-fetch-happen": "^13.0.1", - "minimatch": "^9.0.4", - "minipass": "^7.1.1", + "hosted-git-info": "^7.0.1", + "ini": "^4.1.1", + "init-package-json": "^6.0.0", + "is-cidr": "^5.0.3", + "json-parse-even-better-errors": "^3.0.1", + "libnpmaccess": "^8.0.1", + "libnpmdiff": "^6.0.3", + "libnpmexec": "^7.0.4", + "libnpmfund": "^5.0.1", + "libnpmhook": "^10.0.0", + "libnpmorg": "^6.0.1", + "libnpmpack": "^6.0.3", + "libnpmpublish": "^9.0.2", + "libnpmsearch": "^7.0.0", + "libnpmteam": "^6.0.0", + "libnpmversion": "^5.0.1", + "make-fetch-happen": "^13.0.0", + "minimatch": "^9.0.3", + "minipass": "^7.0.4", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.1.0", - "nopt": "^7.2.1", - "normalize-package-data": "^6.0.1", + "node-gyp": "^10.0.1", + "nopt": "^7.2.0", + "normalize-package-data": "^6.0.0", "npm-audit-report": "^5.0.0", "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-profile": "^10.0.0", - "npm-registry-fetch": "^17.0.1", - "npm-user-validate": "^2.0.1", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-profile": "^9.0.0", + "npm-registry-fetch": "^16.1.0", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^18.0.6", + "pacote": "^17.0.6", "parse-conflict-json": "^3.0.1", - "proc-log": "^4.2.0", + "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", - "read": "^3.0.1", - "semver": "^7.6.2", - "spdx-expression-parse": "^4.0.0", - "ssri": "^10.0.6", + "read": "^2.1.0", + "semver": "^7.6.0", + "spdx-expression-parse": "^3.0.1", + "ssri": "^10.0.5", "supports-color": "^9.4.0", - "tar": "^6.2.1", + "tar": "^6.2.0", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.1", + "validate-npm-package-name": "^5.0.0", "which": "^4.0.0", "write-file-atomic": "^5.0.1" }, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "dev": true, + "optional": true + }, "@isaacs/cliui": { "version": "8.0.2", "bundled": true, @@ -15494,7 +17330,7 @@ "dev": true }, "@npmcli/agent": { - "version": "2.2.2", + "version": "2.2.1", "bundled": true, "dev": true, "requires": { @@ -15502,68 +17338,84 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "socks-proxy-agent": "^8.0.1" } }, "@npmcli/arborist": { - "version": "7.5.3", + "version": "7.4.0", "bundled": true, "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/metavuln-calculator": "^7.0.0", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", + "@npmcli/run-script": "^7.0.2", + "bin-links": "^4.0.1", + "cacache": "^18.0.0", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", + "hosted-git-info": "^7.0.1", + "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", + "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^10.0.6", + "ssri": "^10.0.5", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" } }, "@npmcli/config": { - "version": "8.3.3", + "version": "8.2.0", "bundled": true, "dev": true, "requires": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", - "ini": "^4.1.2", - "nopt": "^7.2.1", - "proc-log": "^4.2.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^3.0.1" } }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, "@npmcli/fs": { - "version": "3.1.1", + "version": "3.1.0", "bundled": true, "dev": true, "requires": { @@ -15571,14 +17423,14 @@ } }, "@npmcli/git": { - "version": "5.0.7", + "version": "5.0.4", "bundled": true, "dev": true, "requires": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -15586,7 +17438,7 @@ } }, "@npmcli/installed-package-contents": { - "version": "2.1.0", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { @@ -15595,7 +17447,7 @@ } }, "@npmcli/map-workspaces": { - "version": "3.0.6", + "version": "3.0.4", "bundled": true, "dev": true, "requires": { @@ -15606,14 +17458,13 @@ } }, "@npmcli/metavuln-calculator": { - "version": "7.1.1", + "version": "7.0.0", "bundled": true, "dev": true, "requires": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", + "pacote": "^17.0.0", "semver": "^7.3.5" } }, @@ -15628,7 +17479,7 @@ "dev": true }, "@npmcli/package-json": { - "version": "5.1.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { @@ -15637,12 +17488,12 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.5.3" } }, "@npmcli/promise-spawn": { - "version": "7.0.2", + "version": "7.0.1", "bundled": true, "dev": true, "requires": { @@ -15657,13 +17508,8 @@ "postcss-selector-parser": "^6.0.10" } }, - "@npmcli/redact": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, "@npmcli/run-script": { - "version": "8.1.0", + "version": "7.0.4", "bundled": true, "dev": true, "requires": { @@ -15671,7 +17517,6 @@ "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", "which": "^4.0.0" } }, @@ -15682,53 +17527,51 @@ "optional": true }, "@sigstore/bundle": { - "version": "2.3.2", + "version": "2.2.0", "bundled": true, "dev": true, "requires": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.3.0" } }, "@sigstore/core": { - "version": "1.1.0", + "version": "1.0.0", "bundled": true, "dev": true }, "@sigstore/protobuf-specs": { - "version": "0.3.2", + "version": "0.3.0", "bundled": true, "dev": true }, "@sigstore/sign": { - "version": "2.3.2", + "version": "2.2.3", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.3.2", + "@sigstore/bundle": "^2.2.0", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" + "@sigstore/protobuf-specs": "^0.3.0", + "make-fetch-happen": "^13.0.0" } }, "@sigstore/tuf": { - "version": "2.3.4", + "version": "2.3.1", "bundled": true, "dev": true, "requires": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" } }, "@sigstore/verify": { - "version": "1.2.1", + "version": "1.1.0", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0" } }, "@tufjs/canonical-json": { @@ -15737,12 +17580,12 @@ "dev": true }, "@tufjs/models": { - "version": "2.0.1", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "minimatch": "^9.0.3" } }, "abbrev": { @@ -15751,7 +17594,7 @@ "dev": true }, "agent-base": { - "version": "7.1.1", + "version": "7.1.0", "bundled": true, "dev": true, "requires": { @@ -15787,13 +17630,18 @@ "bundled": true, "dev": true }, + "are-we-there-yet": { + "version": "4.0.2", + "bundled": true, + "dev": true + }, "balanced-match": { "version": "1.0.2", "bundled": true, "dev": true }, "bin-links": { - "version": "4.0.4", + "version": "4.0.3", "bundled": true, "dev": true, "requires": { @@ -15804,7 +17652,7 @@ } }, "binary-extensions": { - "version": "2.3.0", + "version": "2.2.0", "bundled": true, "dev": true }, @@ -15816,8 +17664,16 @@ "balanced-match": "^1.0.0" } }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "cacache": { - "version": "18.0.3", + "version": "18.0.2", "bundled": true, "dev": true, "requires": { @@ -15851,7 +17707,7 @@ "dev": true }, "cidr-regex": { - "version": "4.1.1", + "version": "4.0.3", "bundled": true, "dev": true, "requires": { @@ -15872,8 +17728,22 @@ "strip-ansi": "^6.0.1" } }, + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, "cmd-shim": { - "version": "6.0.3", + "version": "6.0.2", "bundled": true, "dev": true }, @@ -15890,11 +17760,30 @@ "bundled": true, "dev": true }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, "common-ancestor-path": { "version": "1.0.1", "bundled": true, "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, "cross-spawn": { "version": "7.0.3", "bundled": true, @@ -15935,6 +17824,14 @@ } } }, + "defaults": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "diff": { "version": "5.2.0", "bundled": true, @@ -16001,16 +17898,31 @@ "bundled": true, "dev": true }, + "gauge": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, "glob": { - "version": "10.4.1", + "version": "10.3.10", "bundled": true, "dev": true, "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" } }, "graceful-fs": { @@ -16018,8 +17930,13 @@ "bundled": true, "dev": true }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, "hasown": { - "version": "2.0.2", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { @@ -16027,7 +17944,7 @@ } }, "hosted-git-info": { - "version": "7.0.2", + "version": "7.0.1", "bundled": true, "dev": true, "requires": { @@ -16067,7 +17984,7 @@ } }, "ignore-walk": { - "version": "6.0.5", + "version": "6.0.4", "bundled": true, "dev": true, "requires": { @@ -16085,19 +18002,19 @@ "dev": true }, "ini": { - "version": "4.1.3", + "version": "4.1.1", "bundled": true, "dev": true }, "init-package-json": { - "version": "6.0.3", + "version": "6.0.0", "bundled": true, "dev": true, "requires": { - "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^3.0.1", + "read": "^2.0.0", + "read-package-json": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -16110,6 +18027,13 @@ "requires": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "bundled": true, + "dev": true + } } }, "ip-regex": { @@ -16118,11 +18042,11 @@ "dev": true }, "is-cidr": { - "version": "5.1.0", + "version": "5.0.3", "bundled": true, "dev": true, "requires": { - "cidr-regex": "^4.1.1" + "cidr-regex": "4.0.3" } }, "is-core-module": { @@ -16149,7 +18073,7 @@ "dev": true }, "jackspeak": { - "version": "3.1.2", + "version": "2.3.6", "bundled": true, "dev": true, "requires": { @@ -16163,7 +18087,7 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "3.0.2", + "version": "3.0.1", "bundled": true, "dev": true }, @@ -16188,134 +18112,136 @@ "dev": true }, "libnpmaccess": { - "version": "8.0.6", + "version": "8.0.2", "bundled": true, "dev": true, "requires": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.0.0" } }, "libnpmdiff": { - "version": "6.1.3", + "version": "6.0.7", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/installed-package-contents": "^2.1.0", - "binary-extensions": "^2.3.0", + "@npmcli/arborist": "^7.2.1", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "tar": "^6.2.1" + "minimatch": "^9.0.0", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4", + "tar": "^6.2.0" } }, "libnpmexec": { - "version": "8.1.2", + "version": "7.0.8", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "proc-log": "^4.2.0", - "read": "^3.0.1", + "npm-package-arg": "^11.0.1", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "proc-log": "^3.0.0", + "read": "^2.0.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" } }, "libnpmfund": { - "version": "5.0.11", + "version": "5.0.5", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.5.3" + "@npmcli/arborist": "^7.2.1" } }, "libnpmhook": { - "version": "10.0.5", + "version": "10.0.1", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" } }, "libnpmorg": { - "version": "6.0.6", + "version": "6.0.2", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" } }, "libnpmpack": { - "version": "7.0.3", + "version": "6.0.7", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.5.3", - "@npmcli/run-script": "^8.1.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6" + "@npmcli/arborist": "^7.2.1", + "@npmcli/run-script": "^7.0.2", + "npm-package-arg": "^11.0.1", + "pacote": "^17.0.4" } }, "libnpmpublish": { - "version": "9.0.9", + "version": "9.0.4", "bundled": true, "dev": true, "requires": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", + "normalize-package-data": "^6.0.0", + "npm-package-arg": "^11.0.1", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7", "sigstore": "^2.2.0", - "ssri": "^10.0.6" + "ssri": "^10.0.5" } }, "libnpmsearch": { - "version": "7.0.6", + "version": "7.0.1", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" } }, "libnpmteam": { - "version": "6.0.5", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^16.0.0" } }, "libnpmversion": { - "version": "6.0.3", + "version": "5.0.2", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^5.0.7", - "@npmcli/run-script": "^8.1.0", - "json-parse-even-better-errors": "^3.0.2", - "proc-log": "^4.2.0", + "@npmcli/git": "^5.0.3", + "@npmcli/run-script": "^7.0.2", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.7" } }, "lru-cache": { - "version": "10.2.2", + "version": "10.2.0", "bundled": true, "dev": true }, "make-fetch-happen": { - "version": "13.0.1", + "version": "13.0.0", "bundled": true, "dev": true, "requires": { @@ -16328,13 +18254,12 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", - "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" } }, "minimatch": { - "version": "9.0.4", + "version": "9.0.3", "bundled": true, "dev": true, "requires": { @@ -16342,7 +18267,7 @@ } }, "minipass": { - "version": "7.1.2", + "version": "7.0.4", "bundled": true, "dev": true }, @@ -16355,7 +18280,7 @@ } }, "minipass-fetch": { - "version": "3.0.5", + "version": "3.0.4", "bundled": true, "dev": true, "requires": { @@ -16478,7 +18403,7 @@ "dev": true }, "node-gyp": { - "version": "10.1.0", + "version": "10.0.1", "bundled": true, "dev": true, "requires": { @@ -16492,17 +18417,10 @@ "semver": "^7.3.5", "tar": "^6.1.2", "which": "^4.0.0" - }, - "dependencies": { - "proc-log": { - "version": "3.0.0", - "bundled": true, - "dev": true - } } }, "nopt": { - "version": "7.2.1", + "version": "7.2.0", "bundled": true, "dev": true, "requires": { @@ -16510,7 +18428,7 @@ } }, "normalize-package-data": { - "version": "6.0.1", + "version": "6.0.0", "bundled": true, "dev": true, "requires": { @@ -16526,7 +18444,7 @@ "dev": true }, "npm-bundled": { - "version": "3.0.1", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { @@ -16547,12 +18465,12 @@ "dev": true }, "npm-package-arg": { - "version": "11.0.2", + "version": "11.0.1", "bundled": true, "dev": true, "requires": { "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } @@ -16566,7 +18484,7 @@ } }, "npm-pick-manifest": { - "version": "9.0.1", + "version": "9.0.0", "bundled": true, "dev": true, "requires": { @@ -16577,34 +18495,44 @@ } }, "npm-profile": { - "version": "10.0.0", + "version": "9.0.0", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.0.0" + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0" } }, "npm-registry-fetch": { - "version": "17.0.1", + "version": "16.1.0", "bundled": true, "dev": true, "requires": { - "@npmcli/redact": "^2.0.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "proc-log": "^3.0.0" } }, "npm-user-validate": { - "version": "2.0.1", + "version": "2.0.0", "bundled": true, "dev": true }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } + }, "p-map": { "version": "4.0.0", "bundled": true, @@ -16614,24 +18542,25 @@ } }, "pacote": { - "version": "18.0.6", + "version": "17.0.6", "bundled": true, "dev": true, "requires": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", + "@npmcli/run-script": "^7.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" @@ -16653,16 +18582,16 @@ "dev": true }, "path-scurry": { - "version": "1.11.1", + "version": "1.10.1", "bundled": true, "dev": true, "requires": { - "lru-cache": "^10.2.0", + "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "postcss-selector-parser": { - "version": "6.1.0", + "version": "6.0.15", "bundled": true, "dev": true, "requires": { @@ -16671,12 +18600,7 @@ } }, "proc-log": { - "version": "4.2.0", - "bundled": true, - "dev": true - }, - "proggy": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, @@ -16705,11 +18629,11 @@ } }, "promzard": { - "version": "1.0.2", + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "read": "^3.0.1" + "read": "^2.0.0" } }, "qrcode-terminal": { @@ -16718,11 +18642,11 @@ "dev": true }, "read": { - "version": "3.0.1", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { - "mute-stream": "^1.0.0" + "mute-stream": "~1.0.0" } }, "read-cmd-shim": { @@ -16730,6 +18654,17 @@ "bundled": true, "dev": true }, + "read-package-json": { + "version": "7.0.0", + "bundled": true, + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, "read-package-json-fast": { "version": "3.0.2", "bundled": true, @@ -16751,7 +18686,25 @@ "optional": true }, "semver": { - "version": "7.6.2", + "version": "7.6.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", "bundled": true, "dev": true }, @@ -16774,16 +18727,16 @@ "dev": true }, "sigstore": { - "version": "2.3.1", + "version": "2.2.2", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.3.2", + "@sigstore/bundle": "^2.2.0", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" + "@sigstore/protobuf-specs": "^0.3.0", + "@sigstore/sign": "^2.2.3", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.1.0" } }, "smart-buffer": { @@ -16792,7 +18745,7 @@ "dev": true }, "socks": { - "version": "2.8.3", + "version": "2.8.0", "bundled": true, "dev": true, "requires": { @@ -16801,11 +18754,11 @@ } }, "socks-proxy-agent": { - "version": "8.0.3", + "version": "8.0.2", "bundled": true, "dev": true, "requires": { - "agent-base": "^7.1.1", + "agent-base": "^7.0.2", "debug": "^4.3.4", "socks": "^2.7.1" } @@ -16817,17 +18770,6 @@ "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" - }, - "dependencies": { - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - } } }, "spdx-exceptions": { @@ -16836,7 +18778,7 @@ "dev": true }, "spdx-expression-parse": { - "version": "4.0.0", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { @@ -16845,17 +18787,12 @@ } }, "spdx-license-ids": { - "version": "3.0.18", - "bundled": true, - "dev": true - }, - "sprintf-js": { - "version": "1.1.3", + "version": "3.0.17", "bundled": true, "dev": true }, "ssri": { - "version": "10.0.6", + "version": "10.0.5", "bundled": true, "dev": true, "requires": { @@ -16904,7 +18841,7 @@ "dev": true }, "tar": { - "version": "6.2.1", + "version": "6.2.0", "bundled": true, "dev": true, "requires": { @@ -16957,13 +18894,13 @@ "dev": true }, "tuf-js": { - "version": "2.2.1", + "version": "2.2.0", "bundled": true, "dev": true, "requires": { - "@tufjs/models": "2.0.1", + "@tufjs/models": "2.0.0", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "make-fetch-happen": "^13.0.0" } }, "unique-filename": { @@ -16994,29 +18931,29 @@ "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" - }, - "dependencies": { - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - } } }, "validate-npm-package-name": { - "version": "5.0.1", + "version": "5.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "builtins": "^5.0.0" + } }, "walk-up-path": { "version": "3.0.1", "bundled": true, "dev": true }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "which": { "version": "4.0.0", "bundled": true, @@ -17032,6 +18969,14 @@ } } }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "wrap-ansi": { "version": "8.1.0", "bundled": true, @@ -17121,21 +19066,141 @@ "path-key": "^3.0.0" } }, + "nyc": { + "version": "15.1.0", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "object-assign": { "version": "4.1.1", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-inspect": { - "version": "1.11.0", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "on-finished": { - "version": "2.4.1", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } + "version": "1.10.3", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true }, "once": { "version": "1.4.0", @@ -17159,16 +19224,16 @@ "dev": true }, "optionator": { - "version": "0.9.4", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "version": "0.9.3", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "type-check": "^0.4.0" } }, "os-homedir": { @@ -17193,23 +19258,27 @@ "p-each-series": { "version": "3.0.0", "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", - "dev": true, - "peer": true + "dev": true }, "p-filter": { "version": "4.1.0", "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "peer": true, "requires": { "p-map": "^7.0.1" + }, + "dependencies": { + "p-map": { + "version": "7.0.1", + "integrity": "sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==", + "dev": true + } } }, "p-is-promise": { "version": "3.0.0", "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true, - "peer": true + "dev": true }, "p-limit": { "version": "3.1.0", @@ -17228,9 +19297,12 @@ } }, "p-map": { - "version": "7.0.2", - "integrity": "sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==", - "dev": true + "version": "3.0.0", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } }, "p-reduce": { "version": "2.1.0", @@ -17242,6 +19314,17 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-hash": { + "version": "4.0.0", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "package-json-from-dist": { "version": "1.0.0", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", @@ -17295,14 +19378,12 @@ "parse5": { "version": "5.1.1", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true, - "peer": true + "dev": true }, "parse5-htmlparser2-tree-adapter": { "version": "6.0.1", "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "peer": true, "requires": { "parse5": "^6.0.1" }, @@ -17310,15 +19391,10 @@ "parse5": { "version": "6.0.1", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "peer": true + "dev": true } } }, - "parseurl": { - "version": "1.3.3", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, "path-exists": { "version": "4.0.0", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", @@ -17348,10 +19424,6 @@ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, - "path-to-regexp": { - "version": "0.1.7", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "path-type": { "version": "4.0.0", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", @@ -17370,8 +19442,7 @@ "pify": { "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "peer": true + "dev": true }, "pinkie": { "version": "2.0.4", @@ -17387,15 +19458,14 @@ } }, "pirates": { - "version": "4.0.5", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, "pkg-conf": { "version": "2.1.0", "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, - "peer": true, "requires": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -17405,7 +19475,6 @@ "version": "2.1.0", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, - "peer": true, "requires": { "locate-path": "^2.0.0" } @@ -17414,7 +19483,6 @@ "version": "2.0.0", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, - "peer": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -17424,7 +19492,6 @@ "version": "1.3.0", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "peer": true, "requires": { "p-try": "^1.0.0" } @@ -17433,7 +19500,6 @@ "version": "2.0.0", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "peer": true, "requires": { "p-limit": "^1.1.0" } @@ -17441,14 +19507,12 @@ "p-try": { "version": "1.0.0", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true + "dev": true }, "path-exists": { "version": "3.0.0", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "peer": true + "dev": true } } }, @@ -17496,12 +19560,11 @@ } }, "postcss-load-config": { - "version": "4.0.2", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "version": "6.0.1", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "requires": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "lilconfig": "^3.1.1" } }, "prelude-ls": { @@ -17522,6 +19585,14 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "process-on-spawn": { + "version": "1.0.0", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "promise": { "version": "8.1.0", "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", @@ -17550,17 +19621,9 @@ "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, - "proxy-addr": { - "version": "2.0.7", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, "punycode": { - "version": "2.1.1", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "punycode.js": { @@ -17571,6 +19634,7 @@ "qs": { "version": "6.11.0", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -17596,20 +19660,6 @@ "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.2", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "rc": { "version": "1.2.8", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", @@ -17688,43 +19738,6 @@ } } }, - "read-package-up": { - "version": "11.0.0", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "dev": true, - "peer": true, - "requires": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "dependencies": { - "parse-json": { - "version": "8.1.0", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - } - }, - "read-pkg": { - "version": "9.0.1", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "dev": true, - "peer": true, - "requires": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - } - } - } - }, "read-pkg": { "version": "5.2.0", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", @@ -17764,9 +19777,109 @@ } } }, + "read-pkg-up": { + "version": "10.1.0", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "lines-and-columns": { + "version": "2.0.3", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, + "locate-path": { + "version": "7.2.0", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "parse-json": { + "version": "7.1.0", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "path-exists": { + "version": "5.0.0", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "read-pkg": { + "version": "8.1.0", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + } + }, + "type-fest": { + "version": "4.4.0", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, "readable-stream": { - "version": "2.3.8", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -17805,11 +19918,24 @@ "@pnpm/npm-conf": "^1.0.4" } }, + "release-zalgo": { + "version": "1.0.0", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "require-directory": { "version": "2.1.1", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve": { "version": "1.20.0", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", @@ -17829,31 +19955,47 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "rollup": { - "version": "4.18.0", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", - "dev": true, - "requires": { - "@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", + "version": "4.19.0", + "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.19.0", + "@rollup/rollup-android-arm64": "4.19.0", + "@rollup/rollup-darwin-arm64": "4.19.0", + "@rollup/rollup-darwin-x64": "4.19.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.19.0", + "@rollup/rollup-linux-arm-musleabihf": "4.19.0", + "@rollup/rollup-linux-arm64-gnu": "4.19.0", + "@rollup/rollup-linux-arm64-musl": "4.19.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0", + "@rollup/rollup-linux-riscv64-gnu": "4.19.0", + "@rollup/rollup-linux-s390x-gnu": "4.19.0", + "@rollup/rollup-linux-x64-gnu": "4.19.0", + "@rollup/rollup-linux-x64-musl": "4.19.0", + "@rollup/rollup-win32-arm64-msvc": "4.19.0", + "@rollup/rollup-win32-ia32-msvc": "4.19.0", + "@rollup/rollup-win32-x64-msvc": "4.19.0", "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, + "rrule": { + "version": "2.8.1", + "integrity": "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, "run-parallel": { "version": "1.2.0", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", @@ -17867,28 +20009,23 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "semantic-release": { - "version": "24.0.0", - "integrity": "sha512-v46CRPw+9eI3ZuYGF2oAjqPqsfbnfFTwLBgQsv/lch4goD09ytwOTESMN4QIrx/wPLxUGey60/NMx+ANQtWRsA==", + "version": "23.0.5", + "integrity": "sha512-4eZG/vRTV8E7rw5oHPv2Fht5qx6ITemE/b1vzG42ayYVcffJqXYy40nP4bHEPWX1/kleJWWrlPVDt1hSYVlpKQ==", "dev": true, - "peer": true, "requires": { - "@semantic-release/commit-analyzer": "^13.0.0-beta.1", + "@semantic-release/commit-analyzer": "^12.0.0", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^10.0.0", "@semantic-release/npm": "^12.0.0", - "@semantic-release/release-notes-generator": "^14.0.0-beta.1", + "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", "debug": "^4.0.0", "env-ci": "^11.0.0", - "execa": "^9.0.0", + "execa": "^8.0.0", "figures": "^6.0.0", - "find-versions": "^6.0.0", + "find-versions": "^5.1.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^3.0.0", @@ -17900,7 +20037,7 @@ "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", - "read-package-up": "^11.0.0", + "read-pkg-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", "semver-diff": "^4.0.0", @@ -17908,17 +20045,10 @@ "yargs": "^17.5.1" }, "dependencies": { - "@sindresorhus/merge-streams": { - "version": "4.0.0", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "peer": true - }, "aggregate-error": { "version": "5.0.0", "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "peer": true, "requires": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" @@ -17928,7 +20058,6 @@ "version": "5.2.0", "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "peer": true, "requires": { "escape-string-regexp": "5.0.0" } @@ -17937,7 +20066,6 @@ "version": "8.0.1", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -17947,103 +20075,143 @@ "escape-string-regexp": { "version": "5.0.0", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "peer": true + "dev": true }, "execa": { - "version": "9.3.0", - "integrity": "sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==", + "version": "8.0.1", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "peer": true, "requires": { - "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^7.0.0", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^5.2.0", - "pretty-ms": "^9.0.0", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" + "strip-final-newline": "^3.0.0" }, "dependencies": { "get-stream": { - "version": "9.0.1", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "peer": true, - "requires": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - } + "version": "8.0.1", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true } } }, "human-signals": { - "version": "7.0.0", - "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==", - "dev": true, - "peer": true + "version": "5.0.0", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true }, "indent-string": { "version": "5.0.0", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "peer": true + "dev": true }, "is-stream": { - "version": "4.0.1", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "dev": true, - "peer": true + "version": "3.0.0", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "marked": { + "version": "12.0.0", + "integrity": "sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true }, "npm-run-path": { - "version": "5.3.0", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "version": "5.1.0", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, - "peer": true, "requires": { "path-key": "^4.0.0" } }, + "onetime": { + "version": "6.0.0", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, "p-reduce": { "version": "3.0.0", "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "dev": true + }, + "parse-json": { + "version": "8.0.0", + "integrity": "sha512-QtWnjHuun44MCLbq9f2rlcX9Bp9FSsPgQS9nuGcIm3J557b3/CvmYUhwChgJJDlMpuNN0sFRAogzQ8xMitD1oQ==", "dev": true, - "peer": true + "requires": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.0", + "json-parse-even-better-errors": "^3.0.0", + "type-fest": "^4.6.0" + } }, "path-key": { "version": "4.0.0", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "read-pkg": { + "version": "9.0.0", + "integrity": "sha512-SBoBio4xhJmlF4xs9IBliWZGSbDAnrOfQkLGL7xB+RYEUZNAN2LlNkzO45B7gc7c2dLMX987bhHAaJ/LG3efeQ==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0" + } + }, + "read-pkg-up": { + "version": "11.0.0", + "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", "dev": true, - "peer": true + "requires": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + } }, "resolve-from": { "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "peer": true + "dev": true }, "signal-exit": { "version": "4.1.0", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "peer": true + "dev": true }, "strip-final-newline": { - "version": "4.0.0", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", - "dev": true, - "peer": true + "version": "3.0.0", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "4.6.0", + "integrity": "sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==", + "dev": true }, "yargs": { - "version": "17.7.2", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.6.2", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "peer": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -18057,8 +20225,7 @@ "yargs-parser": { "version": "21.1.1", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "peer": true + "dev": true } } }, @@ -18068,15 +20235,14 @@ "dev": true }, "semver": { - "version": "7.6.2", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true }, "semver-diff": { "version": "4.0.0", "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, - "peer": true, "requires": { "semver": "^7.3.5" } @@ -18084,72 +20250,20 @@ "semver-regex": { "version": "4.0.5", "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "dev": true, - "peer": true - }, - "send": { - "version": "0.18.0", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "mime": { - "version": "1.6.0", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.3", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } + "dev": true }, "serialize-javascript": { "version": "6.0.2", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.15.0", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "randombytes": "^2.1.0" } }, - "setprototypeof": { - "version": "1.2.0", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "set-blocking": { + "version": "2.0.0", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -18165,17 +20279,18 @@ "dev": true }, "shiki": { - "version": "1.10.3", - "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", + "version": "1.11.0", + "integrity": "sha512-NqH/O1zRHvnuk/WfSL6b7+DtI7/kkMMSQGlZhm9DyzSU+SoIHhaw/fBZMr+zp9R8KjdIzkk3JKSC6hORuGDyng==", "dev": true, "requires": { - "@shikijs/core": "1.10.3", + "@shikijs/core": "1.11.0", "@types/hast": "^3.0.4" } }, "side-channel": { "version": "1.0.4", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -18183,15 +20298,14 @@ } }, "signal-exit": { - "version": "3.0.3", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.7", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "signale": { "version": "1.4.0", "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, - "peer": true, "requires": { "chalk": "^2.3.2", "figures": "^2.0.0", @@ -18202,7 +20316,6 @@ "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "peer": true, "requires": { "color-convert": "^1.9.0" } @@ -18211,7 +20324,6 @@ "version": "2.4.2", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "peer": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -18222,7 +20334,6 @@ "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "peer": true, "requires": { "color-name": "1.1.3" } @@ -18230,20 +20341,17 @@ "color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "peer": true + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "peer": true + "dev": true }, "figures": { "version": "2.0.0", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, - "peer": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -18251,14 +20359,12 @@ "has-flag": { "version": "3.0.0", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "peer": true + "dev": true }, "supports-color": { "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "peer": true, "requires": { "has-flag": "^3.0.0" } @@ -18269,7 +20375,6 @@ "version": "2.0.0", "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, - "peer": true, "requires": { "unicode-emoji-modifier-base": "^1.0.0" } @@ -18301,8 +20406,20 @@ "spawn-error-forwarder": { "version": "1.0.0", "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", + "dev": true + }, + "spawn-wrap": { + "version": "2.0.0", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "peer": true + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } }, "spdx-compare": { "version": "1.0.0", @@ -18357,15 +20474,20 @@ "spdx-ranges": "^2.0.0" } }, - "statuses": { - "version": "2.0.1", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "split2": { + "version": "4.2.0", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "stream-combiner2": { "version": "1.1.1", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, - "peer": true, "requires": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -18415,6 +20537,11 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "4.0.0", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", @@ -18441,48 +20568,69 @@ } }, "sucrase": { - "version": "3.30.0", - "integrity": "sha512-7d37d3vLF0IeH2dzvHpzDNDxUqpbDHJXTJOAnQ8jvMW04o2Czps6mxtaSnKWpE+hUS/eczqfWPUgQTrazKZPnQ==", + "version": "3.35.0", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "requires": { + "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "commander": { "version": "4.1.1", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, + "foreground-child": { + "version": "3.2.1", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, "glob": { - "version": "7.1.6", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.4.5", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" } + }, + "signal-exit": { + "version": "4.1.0", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true } } }, - "super-regex": { - "version": "1.0.0", - "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", - "dev": true, - "peer": true, - "requires": { - "function-timeout": "^1.0.1", - "time-span": "^5.1.0" - } - }, "supports-color": { "version": "7.2.0", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -18495,7 +20643,6 @@ "version": "3.0.0", "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, - "peer": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -18523,17 +20670,17 @@ } }, "temp-dir": { - "version": "3.0.0", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "version": "2.0.0", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true }, "tempy": { - "version": "3.1.0", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "version": "3.0.0", + "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", "dev": true, "requires": { "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", + "temp-dir": "^2.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" }, @@ -18551,46 +20698,20 @@ } }, "test-exclude": { - "version": "7.0.1", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "version": "6.0.0", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.4.3", - "integrity": "sha512-Q38SGlYRpVtDBPSWEylRyctn7uDeTp4NQERTLiCT1FqA9JXPYWqAVmQU6qh4r/zMM5ehxTcbaO8EjhWnvEhmyg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "minimatch": { - "version": "9.0.5", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, + "text-extensions": { + "version": "2.4.0", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true + }, "text-table": { "version": "0.2.0", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", @@ -18637,14 +20758,15 @@ "thenify": ">= 3.1.0 < 4" } }, - "time-span": { - "version": "5.1.0", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", - "dev": true, - "peer": true, - "requires": { - "convert-hrtime": "^5.0.0" - } + "through": { + "version": "2.3.8", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "to-regex-range": { "version": "5.0.1", @@ -18654,15 +20776,18 @@ "is-number": "^7.0.0" } }, - "toidentifier": { + "tr46": { "version": "1.0.1", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, "traverse": { "version": "0.6.6", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true, - "peer": true + "dev": true }, "tree-kill": { "version": "1.2.2", @@ -18728,28 +20853,30 @@ } }, "tslib": { - "version": "2.6.3", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.6.2", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "tsup": { - "version": "8.1.0", - "integrity": "sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==", + "version": "8.2.2", + "integrity": "sha512-MufIuzdSt6HYPOeOtjUXLR4rqRJySi6XsRNZdwvjC2XR+xghsu2L3vSmYmX+k4S1mO6j0OlUEyVQ3Fc0H66XcA==", "dev": true, "requires": { - "bundle-require": "^4.0.0", - "cac": "^6.7.12", - "chokidar": "^3.5.1", - "debug": "^4.3.1", - "esbuild": "^0.21.4", - "execa": "^5.0.0", - "globby": "^11.0.3", - "joycon": "^3.0.1", - "postcss-load-config": "^4.0.1", + "bundle-require": "^5.0.0", + "cac": "^6.7.14", + "chokidar": "^3.6.0", + "consola": "^3.2.3", + "debug": "^4.3.5", + "esbuild": "^0.23.0", + "execa": "^5.1.1", + "globby": "^11.1.0", + "joycon": "^3.1.1", + "picocolors": "^1.0.1", + "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", - "rollup": "^4.0.2", + "rollup": "^4.19.0", "source-map": "0.8.0-beta.0", - "sucrase": "^3.20.3", + "sucrase": "^3.35.0", "tree-kill": "^1.2.2" }, "dependencies": { @@ -18765,29 +20892,6 @@ "requires": { "whatwg-url": "^7.0.0" } - }, - "tr46": { - "version": "1.0.1", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } } } }, @@ -18799,27 +20903,22 @@ "prelude-ls": "^1.2.1" } }, - "type-fest": { - "version": "4.21.0", - "integrity": "sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typedarray": { "version": "0.0.6", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typedoc": { - "version": "0.26.3", - "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==", + "version": "0.26.5", + "integrity": "sha512-Vn9YKdjKtDZqSk+by7beZ+xzkkr8T8CYoiasqyt4TTRFy5+UHzL/mF/o4wGBjRF+rlWQHDb0t6xCpA3JNL5phg==", "dev": true, "requires": { "lunr": "^2.3.9", @@ -18853,13 +20952,97 @@ "dev": true }, "typescript-eslint": { - "version": "8.0.0-alpha.41", - "integrity": "sha512-+e7D2XDZeHLe9D3bP7S0Va8YdLHzn3YcesoxMS9SjMWhtaSb5ylxk2txqT84sUS0WIDQetZlvDg2/UmY5B/ycg==", + "version": "8.0.0-alpha.51", + "integrity": "sha512-Hs60EyclUz1wBZMkmJ/xiiWGW91UZWcumWqOCQeWBp+xlPJJAufr5/OTrWhW+58yPv/72moEVhrA0VeUAlNoDQ==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.0.0-alpha.41", - "@typescript-eslint/parser": "8.0.0-alpha.41", - "@typescript-eslint/utils": "8.0.0-alpha.41" + "@typescript-eslint/eslint-plugin": "8.0.0-alpha.51", + "@typescript-eslint/parser": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51" + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-989dk3/IA2HNdfl8T1Tj0+AEAtqHN5Cdac7Ff1N367Lh5e5xKi3nXWMkptbZaAEo/wi5+CZD8jngQ70wnCRweA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/type-utils": "8.0.0-alpha.51", + "@typescript-eslint/utils": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/parser": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-UPMhWLqkP/wBGB3/eI9fRG8UFFmT8tTLlBUQFN01xtsRNhYlMYS5FQHDMkfPynnKp62AqLRrwkrI49cZN3aDUA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.0.0-alpha.51", + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-zT8Ib31deJCqRVJepZOMFoHiFAsSHOh5TmedcFeqyiMuzrqBMtF95iv6mPJqFDIXNgxmTkahpRan1z043ckBnA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51" + } + }, + "@typescript-eslint/types": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.51", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.0.0-alpha.51", + "integrity": "sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.0.0-alpha.51", + "eslint-visitor-keys": "^3.4.3" + } + }, + "brace-expansion": { + "version": "2.0.1", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "uc.micro": { @@ -18868,11 +21051,10 @@ "dev": true }, "uglify-js": { - "version": "3.18.0", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.17.4", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "undici-types": { "version": "5.26.5", @@ -18882,8 +21064,7 @@ "unicode-emoji-modifier-base": { "version": "1.0.0", "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "dev": true, - "peer": true + "dev": true }, "unicorn-magic": { "version": "0.1.0", @@ -18901,18 +21082,13 @@ "universal-user-agent": { "version": "7.0.2", "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", - "dev": true, - "peer": true + "dev": true }, "universalify": { "version": "2.0.0", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, "uri-js": { "version": "4.4.1", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", @@ -18924,8 +21100,7 @@ "url-join": { "version": "5.0.0", "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "dev": true, - "peer": true + "dev": true }, "util-deprecate": { "version": "1.0.2", @@ -18937,23 +21112,23 @@ "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", "dev": true }, - "utils-merge": { - "version": "1.0.1", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, "uuid": { "version": "8.3.2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "uuid-random": { + "version": "1.3.2", + "integrity": "sha512-UOzej0Le/UgkbWEO8flm+0y+G+ljUon1QWTEZOq1rnMAsxo2+SckbiZdKzAHHlVh6gJqI1TjC/xwgR50MuCrBQ==" + }, "v8-compile-cache-lib": { "version": "3.0.1", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "v8-to-istanbul": { - "version": "9.0.1", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.0", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", @@ -18962,12 +21137,12 @@ }, "dependencies": { "@jridgewell/trace-mapping": { - "version": "0.3.14", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.17", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } } } @@ -18986,9 +21161,20 @@ "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "dev": true }, - "vary": { - "version": "1.1.2", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "webidl-conversions": { + "version": "4.0.2", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } }, "which": { "version": "2.0.2", @@ -18998,16 +21184,15 @@ "isexe": "^2.0.0" } }, - "word-wrap": { - "version": "1.2.5", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "which-module": { + "version": "2.0.0", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wordwrap": { "version": "1.0.0", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "peer": true + "dev": true }, "workerpool": { "version": "6.5.1", @@ -19039,11 +21224,21 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "3.0.3", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xtend": { "version": "4.0.2", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "peer": true + "dev": true }, "y18n": { "version": "5.0.8", diff --git a/package.json b/package.json index 43994f5f6..4edaea2be 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,42 @@ { "author": "Sebastian Pekarek ", - "bin": { - "test-cli": "./dist/bin/cli.js" - }, "bugs": { - "url": "https://github.com/sebbo2002/js-template/issues" + "url": "http://github.com/sebbo2002/ical-generator/issues" }, "dependencies": { - "express": "^4.19.2" + "uuid-random": "^1.3.2" }, - "description": "A template that I use to start new projects and services.", + "description": "ical-generator is a small piece of code which generates ical calendar files", "devDependencies": { "@eslint/js": "^9.6.0", "@qiwi/semantic-release-gh-pages-plugin": "^5.2.12", + "@sebbo2002/semantic-release-jsr": "^1.0.0-develop.6", "@semantic-release/changelog": "^6.0.3", "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@semantic-release/npm": "^12.0.1", + "@touch4it/ical-timezones": "^1.9.0", "@types/eslint__js": "^8.42.3", "@types/express": "^4.17.21", + "@types/luxon": "^3.4.2", "@types/mocha": "^10.0.7", + "@typescript-eslint/eslint-plugin": "^7.3.1", "@types/node": "^20.14.10", "c8": "^10.1.2", + "dayjs": "^1.11.10", "eslint": "^9.6.0", "eslint-plugin-jsonc": "^2.16.0", "esm": "^3.2.25", "license-checker": "^25.0.1", + "luxon": "^3.4.4", "mocha": "^10.6.0", "mochawesome": "^7.1.3", - "semantic-release-license": "^1.0.3", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "nyc": "^15.1.0", + "rrule": "^2.8.1", + "semantic-release": "^23.0.5", + "semantic-release-license": "^1.0.2", "source-map-support": "^0.5.21", "ts-node": "^10.9.2", "tsup": "^8.1.0", @@ -40,31 +48,87 @@ "node": ">=18.0.0" }, "exports": { - "import": "./dist/lib/index.js", - "require": "./dist/lib/index.cjs" + "import": "./dist/index.js", + "require": "./dist/index.cjs" }, "files": [ + "/src", "/dist" ], - "homepage": "https://github.com/sebbo2002/js-template#readme", + "homepage": "https://github.com/sebbo2002/ical-generator", + "keywords": [ + "ical", + "ics", + "icalendar", + "generator", + "calendar", + "subscription", + "outlook", + "rfc", + "rfc5545", + "events", + "alarms" + ], "license": "MIT", - "main": "./dist/lib/index.cjs", - "module": "./dist/lib/index.js", - "name": "@sebbo2002/js-template-test", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "name": "ical-generator", + "peerDependencies": { + "@touch4it/ical-timezones": ">=1.6.0", + "@types/luxon": ">= 1.26.0", + "@types/mocha": ">= 8.2.1", + "dayjs": ">= 1.10.0", + "luxon": ">= 1.26.0", + "moment": ">= 2.29.0", + "moment-timezone": ">= 0.5.33", + "rrule": ">= 2.6.8" + }, + "peerDependenciesMeta": { + "@touch4it/ical-timezones": { + "optional": true + }, + "@types/luxon": { + "optional": true + }, + "@types/mocha": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-timezone": { + "optional": true + }, + "rrule": { + "optional": true + } + }, + "preferGlobal": false, "repository": { "type": "git", - "url": "git+https://github.com/sebbo2002/js-template.git" + "url": "https://github.com/sebbo2002/ical-generator.git" }, + "runkitExampleFilename": "examples/example-runkit.js", "scripts": { - "build": "tsup && cp ./dist/lib/index.d.ts ./dist/lib/index.d.cts", + "build": "tsup && cp ./dist/index.d.ts ./dist/index.d.cts", "build-all": "./.github/workflows/build.sh", "coverage": "c8 mocha", "develop": "TS_NODE_TRANSPILE_ONLY=true node --no-warnings --enable-source-maps --loader ts-node/esm src/bin/start.ts", + "example": "node ./dist/examples/push.js", "license-check": "license-checker --production --summary", "lint": "eslint .", "start": "node ./dist/bin/start.js", "test": "mocha" }, "type": "module", - "version": "1.0.0" + "version": "7.2.0-develop.3" } diff --git a/release.config.cjs b/release.config.cjs index db576bb0f..f25368611 100644 --- a/release.config.cjs +++ b/release.config.cjs @@ -35,6 +35,12 @@ configuration.plugins.push('semantic-release-license'); configuration.plugins.push('@semantic-release/npm'); +configuration.plugins.push('@sebbo2002/semantic-release-jsr'); + +configuration.plugins.push(['@semantic-release/exec', { + 'prepareCmd': './.github/workflows/build.sh' +}]); + configuration.plugins.push(['@semantic-release/exec', { 'prepareCmd': './.github/workflows/build.sh' }]); @@ -45,7 +51,7 @@ configuration.plugins.push(['@semantic-release/github', { }]); configuration.plugins.push(['@semantic-release/git', { - 'assets': ['CHANGELOG.md', 'LICENSE'], + 'assets': ['CHANGELOG.md', 'LICENSE', 'package-lock.json', 'package.json'], 'message': 'chore(release): :bookmark: ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}' }]); diff --git a/src/alarm.ts b/src/alarm.ts new file mode 100755 index 000000000..643f2031a --- /dev/null +++ b/src/alarm.ts @@ -0,0 +1,746 @@ +'use strict'; + +import ICalEvent from './event.ts'; +import { + addOrGetCustomAttributes, + formatDate, + escape, + generateCustomAttributes, + checkDate, + toDurationString, + toJSON, + checkNameAndMail +} from './tools.ts'; +import {ICalDateTimeValue} from './types.ts'; +import ICalAttendee, { ICalAttendeeData } from './attendee.ts'; + + +export enum ICalAlarmType { + display = 'display', + audio = 'audio', + email = 'email' +} + +export const ICalAlarmRelatesTo = { + end: 'END', + start: 'START' +} as const; + +export type ICalAlarmRelatesTo = typeof ICalAlarmRelatesTo[keyof typeof ICalAlarmRelatesTo]; + +export type ICalAlarmTypeValue = keyof ICalAlarmType; + +export interface ICalAttachment { + uri: string; + mime: string | null; +} + +export type ICalAlarmData = ICalAlarmBaseData | + ICalAlarmTriggerData | + ICalAlarmTriggerAfterData | + ICalAlarmTriggerBeforeData; + +export type ICalAlarmTriggerData = ICalAlarmBaseData & { trigger: number | ICalDateTimeValue }; +export type ICalAlarmTriggerAfterData = ICalAlarmBaseData & { triggerAfter: number | ICalDateTimeValue }; +export type ICalAlarmTriggerBeforeData = ICalAlarmBaseData & { triggerBefore: number | ICalDateTimeValue }; + +export interface ICalAlarmBaseData { + type?: ICalAlarmType; + relatesTo?: ICalAlarmRelatesTo | null; + repeat?: ICalAlarmRepeatData | null; + attach?: string | ICalAttachment | null; + description?: string | null; + summary?: string | null; + attendees?: ICalAttendee[] | ICalAttendeeData[]; + x?: {key: string, value: string}[] | [string, string][] | Record; +} + +export interface ICalAlarmRepeatData { + times: number; + interval: number; +} + +interface ICalInternalAlarmData { + type: ICalAlarmType; + trigger: ICalDateTimeValue | number; + relatesTo: ICalAlarmRelatesTo | null; + repeat: ICalAlarmRepeatData | null; + interval: number | null; + attach: ICalAttachment | null; + description: string | null; + summary: string | null; + attendees: ICalAttendee[]; + x: [string, string][]; +} + +export interface ICalAlarmJSONData { + type: ICalAlarmType; + trigger: string | number; + relatesTo: ICalAlarmRelatesTo | null; + repeat: ICalAlarmRepeatData | null; + interval: number | null; + attach: ICalAttachment | null; + description: string | null; + summary: string | null; + attendees: ICalAttendee[]; + x: {key: string, value: string}[]; +} + + +/** + * Usually you get an {@link ICalAlarm} object like this: + * + * ```javascript + * import ical from 'ical-generator'; + * const calendar = ical(); + * const event = calendar.createEvent(); + * const alarm = event.createAlarm(); + * ``` + * + * You can also use the {@link ICalAlarm} object directly: + * + * ```javascript + * import ical, {ICalAlarm} from 'ical-generator'; + * const alarm = new ICalAlarm(); + * event.alarms([alarm]); + * ``` + */ +export default class ICalAlarm { + private readonly data: ICalInternalAlarmData; + private readonly event: ICalEvent; + + /** + * Constructor of {@link ICalAttendee}. The event reference is required + * to query the calendar's timezone and summary when required. + * + * @param data Alarm Data + * @param event Reference to ICalEvent object + */ + constructor (data: ICalAlarmData, event: ICalEvent) { + this.data = { + type: ICalAlarmType.display, + trigger: -600, + relatesTo: null, + repeat: null, + interval: null, + attach: null, + description: null, + summary: null, + attendees: [], + x: [] + }; + + this.event = event; + if (!event) { + throw new Error('`event` option required!'); + } + + data.type !== undefined && this.type(data.type); + 'trigger' in data && data.trigger !== undefined && this.trigger(data.trigger); + 'triggerBefore' in data && data.triggerBefore !== undefined && this.triggerBefore(data.triggerBefore); + 'triggerAfter' in data && data.triggerAfter !== undefined && this.triggerAfter(data.triggerAfter); + data.repeat && this.repeat(data.repeat); + data.attach !== undefined && this.attach(data.attach); + data.description !== undefined && this.description(data.description); + data.summary !== undefined && this.summary(data.summary); + data.attendees !== undefined && this.attendees(data.attendees); + data.x !== undefined && this.x(data.x); + } + + + /** + * Get the alarm type + * @since 0.2.1 + */ + type (type: ICalAlarmType): this; + + /** + * Set the alarm type. See {@link ICalAlarmType} + * for available status options. + * @since 0.2.1 + */ + type (): ICalAlarmType; + type (type?: ICalAlarmType): this | ICalAlarmType { + if (type === undefined) { + return this.data.type; + } + if (!type || !Object.keys(ICalAlarmType).includes(type)) { + throw new Error('`type` is not correct, must be either `display` or `audio`!'); + } + + this.data.type = type; + return this; + } + + + /** + * Get the trigger time for the alarm. Can either + * be a date and time value ({@link ICalDateTimeValue}) or + * a number, which will represent the seconds between + * alarm and event start. The number is negative, if the + * alarm is triggered after the event started. + * + * @since 0.2.1 + */ + trigger (): number | ICalDateTimeValue; + + /** + * Use this method to set the alarm time. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const alarm = cal.createAlarm(); + * + * alarm.trigger(600); // -> 10 minutes before event starts + * alarm.trigger(new Date()); // -> now + * ``` + * + * You can use any supported date object, see + * [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.1 + */ + trigger (trigger: number | ICalDateTimeValue | Date): this; + trigger (trigger?: number | ICalDateTimeValue | Date): this | number | ICalDateTimeValue { + + // Getter + if (trigger === undefined && typeof this.data.trigger === 'number') { + return -1 * this.data.trigger; + } + if (trigger === undefined) { + return this.data.trigger; + } + + // Setter + if (typeof trigger === 'number' && isFinite(trigger)) { + this.data.trigger = -1 * trigger; + } + else if(!trigger || typeof trigger === 'number') { + throw new Error('`trigger` is not correct, must be a finite number or a supported date!'); + } + else { + this.data.trigger = checkDate(trigger, 'trigger'); + } + + return this; + } + + /** + * Get to which time alarm trigger relates to. + * Can be either `START` or `END`. If the value is + * `START` the alarm is triggerd relative to the event start time. + * If the value is `END` the alarm is triggerd relative to the event end time + * + * @since 4.0.1 + */ + relatesTo(): ICalAlarmRelatesTo | null; + + /** + * Use this method to set to which time alarm trigger relates to. + * Works only if trigger is a `number` + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const alarm = cal.createAlarm(); + * + * alarm.trigger(600); // -> 10 minutes before event starts + * + * alarm.relatesTo('START'); // -> 10 minutes before event starts + * alarm.relatesTo('END'); // -> 10 minutes before event ends + * + * alarm.trigger(-600); // -> 10 minutes after event starts + * + * alarm.relatesTo('START'); // -> 10 minutes after event starts + * alarm.relatesTo('END'); // -> 10 minutes after event ends + * ``` + * @since 4.0.1 + */ + relatesTo(relatesTo: ICalAlarmRelatesTo | null): this; + relatesTo(relatesTo?: ICalAlarmRelatesTo | null): this | ICalAlarmRelatesTo | null { + if (relatesTo === undefined) { + return this.data.relatesTo; + } + if (!relatesTo) { + this.data.relatesTo = null; + return this; + } + + if (!Object.values(ICalAlarmRelatesTo).includes(relatesTo)) { + throw new Error('`relatesTo` is not correct, must be either `START` or `END`!'); + } + + this.data.relatesTo = relatesTo; + return this; + } + + + /** + * Get the trigger time for the alarm. Can either + * be a date and time value ({@link ICalDateTimeValue}) or + * a number, which will represent the seconds between + * alarm and event start. The number is negative, if the + * alarm is triggered before the event started. + * + * @since 0.2.1 + */ + triggerAfter (): number | ICalDateTimeValue; + + /** + * Use this method to set the alarm time. Unlike `trigger`, this time + * the alarm takes place after the event has started. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const alarm = cal.createAlarm(); + * + * alarm.trigger(600); // -> 10 minutes after event starts + * ``` + * + * You can use any supported date object, see + * [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.1 + */ + triggerAfter (trigger: number | ICalDateTimeValue): this; + triggerAfter (trigger?: number | ICalDateTimeValue): this | number | ICalDateTimeValue { + if (trigger === undefined) { + return this.data.trigger; + } + + return this.trigger(typeof trigger === 'number' ? -1 * trigger : trigger); + } + + + /** + * Get the trigger time for the alarm. Can either + * be a date and time value ({@link ICalDateTimeValue}) or + * a number, which will represent the seconds between + * alarm and event start. The number is negative, if the + * alarm is triggered after the event started. + * + * @since 0.2.1 + * @alias trigger + */ + triggerBefore (trigger: number | ICalDateTimeValue): this; + + /** + * Use this method to set the alarm time. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const alarm = cal.createAlarm(); + * + * alarm.trigger(600); // -> 10 minutes before event starts + * alarm.trigger(new Date()); // -> now + * ``` + * + * You can use any supported date object, see + * [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.1 + * @alias trigger + */ + triggerBefore (): number | ICalDateTimeValue; + triggerBefore (trigger?: number | ICalDateTimeValue): this | number | ICalDateTimeValue { + if(trigger === undefined) { + return this.trigger(); + } + + return this.trigger(trigger); + } + + + /** + * Get Alarm Repetitions + * @since 0.2.1 + */ + repeat(): ICalAlarmRepeatData | null; + + /** + * Set Alarm Repetitions. Use this to repeat the alarm. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * + * // repeat the alarm 4 times every 5 minutes… + * cal.createAlarm({ + * repeat: { + * times: 4, + * interval: 300 + * } + * }); + * ``` + * + * @since 0.2.1 + */ + repeat(repeat: ICalAlarmRepeatData | null): this; + repeat (repeat?: ICalAlarmRepeatData | null): this | ICalAlarmRepeatData | null { + if (repeat === undefined) { + return this.data.repeat; + } + if (!repeat) { + this.data.repeat = null; + return this; + } + + if (typeof repeat !== 'object') { + throw new Error('`repeat` is not correct, must be an object!'); + } + if (typeof repeat.times !== 'number' || !isFinite(repeat.times)) { + throw new Error('`repeat.times` is not correct, must be numeric!'); + } + if (typeof repeat.interval !== 'number' || !isFinite(repeat.interval)) { + throw new Error('`repeat.interval` is not correct, must be numeric!'); + } + + this.data.repeat = repeat; + return this; + } + + + /** + * Get Attachment + * @since 0.2.1 + */ + attach (): {uri: string, mime: string | null} | null; + + /** + * Set Alarm attachment. Used to set the alarm sound + * if alarm type is audio. Defaults to "Basso". + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * + * event.createAlarm({ + * attach: 'https://example.com/notification.aud' + * }); + * + * // OR + * + * event.createAlarm({ + * attach: { + * uri: 'https://example.com/notification.aud', + * mime: 'audio/basic' + * } + * }); + * ``` + * + * @since 0.2.1 + */ + attach (attachment: {uri: string, mime?: string | null} | string | null): this; + attach (attachment?: {uri: string, mime?: string | null} | string | null): this | {uri: string, mime: string | null} | null { + if (attachment === undefined) { + return this.data.attach; + } + if (!attachment) { + this.data.attach = null; + return this; + } + + let _attach = null; + if (typeof attachment === 'string') { + _attach = { + uri: attachment, + mime: null + }; + } + else if (typeof attachment === 'object') { + _attach = { + uri: attachment.uri, + mime: attachment.mime || null + }; + } + else { + throw new Error( + '`attachment` needs to be a valid formed string or an object. See https://sebbo2002.github.io/' + + 'ical-generator/develop/reference/classes/ICalAlarm.html#attach' + ); + } + + if (!_attach.uri) { + throw new Error('`attach.uri` is empty!'); + } + + this.data.attach = { + uri: _attach.uri, + mime: _attach.mime + }; + return this; + } + + + /** + * Get the alarm description. Used to set the alarm message + * if alarm type is `display`. If the alarm type is `email`, it's + * used to set the email body. Defaults to the event's summary. + * + * @since 0.2.1 + */ + description (): string | null; + + /** + * Set the alarm description. Used to set the alarm message + * if alarm type is `display`. If the alarm type is `email`, it's + * used to set the email body. Defaults to the event's summary. + * + * @since 0.2.1 + */ + description (description: string | null): this; + description (description?: string | null): this | string | null { + if (description === undefined) { + return this.data.description; + } + if (!description) { + this.data.description = null; + return this; + } + + this.data.description = description; + return this; + } + + + /** + * Get the alarm summary. Used to set the email subject + * if alarm type is `email`. Defaults to the event's summary. + * + * @since 7.0.0 + */ + summary (): string | null; + + /** + * Set the alarm summary. Used to set the email subject + * if alarm type is display. Defaults to the event's summary. + * + * @since 0.2.1 + */ + summary (summary: string | null): this; + summary (summary?: string | null): this | string | null { + if (summary === undefined) { + return this.data.summary; + } + if (!summary) { + this.data.summary = null; + return this; + } + + this.data.summary = summary; + return this; + } + + + /** + * Creates a new {@link ICalAttendee} and returns it. Use options to prefill + * the attendee's attributes. Calling this method without options will create + * an empty attendee. + * + * @since 7.0.0 + */ + createAttendee(data: ICalAttendee | ICalAttendeeData | string): ICalAttendee { + if (data instanceof ICalAttendee) { + this.data.attendees.push(data); + return data; + } + if (typeof data === 'string') { + data = { email: data, ...checkNameAndMail('data', data) }; + } + + const attendee = new ICalAttendee(data, this); + this.data.attendees.push(attendee); + return attendee; + } + + + /** + * Get all attendees + * @since 7.0.0 + */ + attendees(): ICalAttendee[]; + + /** + * Add multiple attendees to your event + * + * @since 7.0.0 + */ + attendees(attendees: (ICalAttendee | ICalAttendeeData | string)[]): this; + attendees(attendees?: (ICalAttendee | ICalAttendeeData | string)[]): this | ICalAttendee[] { + if (!attendees) { + return this.data.attendees; + } + + attendees.forEach(attendee => this.createAttendee(attendee)); + return this; + } + + + /** + * Set X-* attributes. Woun't filter double attributes, + * which are also added by another method (e.g. type), + * so these attributes may be inserted twice. + * + * ```javascript + * alarm.x([ + * { + * key: "X-MY-CUSTOM-ATTR", + * value: "1337!" + * } + * ]); + * + * alarm.x([ + * ["X-MY-CUSTOM-ATTR", "1337!"] + * ]); + * + * alarm.x({ + * "X-MY-CUSTOM-ATTR": "1337!" + * }); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: {key: string, value: string}[] | [string, string][] | Record): this; + + /** + * Set a X-* attribute. Woun't filter double attributes, + * which are also added by another method (e.g. type), + * so these attributes may be inserted twice. + * + * ```javascript + * alarm.x("X-MY-CUSTOM-ATTR", "1337!"); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: string, value: string): this; + + /** + * Get all custom X-* attributes. + * @since 1.9.0 + */ + x (): {key: string, value: string}[]; + x (keyOrArray?: ({key: string, value: string})[] | [string, string][] | Record | string, value?: string): this | void | ({key: string, value: string})[] { + if(keyOrArray === undefined) { + return addOrGetCustomAttributes (this.data); + } + + if(typeof keyOrArray === 'string' && typeof value === 'string') { + addOrGetCustomAttributes (this.data, keyOrArray, value); + } + else if(typeof keyOrArray === 'object') { + addOrGetCustomAttributes (this.data, keyOrArray); + } + else { + throw new Error('Either key or value is not a string!'); + } + + return this; + } + + + /** + * Return a shallow copy of the alarm's options for JSON stringification. + * Third party objects like moment.js values are stringified as well. Can + * be used for persistence. + * + * @since 0.2.4 + */ + toJSON (): ICalAlarmJSONData { + const trigger = this.trigger(); + return Object.assign({}, this.data, { + trigger: typeof trigger === 'number' ? trigger : toJSON(trigger), + x: this.x() + }); + } + + + /** + * Return generated event as a string. + * + * ```javascript + * const alarm = event.createAlarm(); + * console.log(alarm.toString()); // → BEGIN:VALARM… + * ``` + */ + toString (): string { + let g = 'BEGIN:VALARM\r\n'; + + // ACTION + g += 'ACTION:' + this.data.type.toUpperCase() + '\r\n'; + + if (typeof this.data.trigger === 'number' && this.data.relatesTo === null) { + if (this.data.trigger > 0) { + g += 'TRIGGER;RELATED=END:' + toDurationString(this.data.trigger) + '\r\n'; + } + else { + g += 'TRIGGER:' + toDurationString(this.data.trigger) + '\r\n'; + } + } + else if (typeof this.data.trigger === 'number') { + g += 'TRIGGER;RELATED=' + this.data.relatesTo?.toUpperCase() + ':' + toDurationString(this.data.trigger) + '\r\n'; + } + else { + g += 'TRIGGER;VALUE=DATE-TIME:' + formatDate(this.event.timezone(), this.data.trigger) + '\r\n'; + } + + // REPEAT + if (this.data.repeat) { + if (!this.data.repeat.times) { + throw new Error('No value for `repeat.times` in ICalAlarm given, but required for `interval`!'); + } + if (!this.data.repeat.interval) { + throw new Error('No value for `repeat.interval` in ICalAlarm given, but required for `repeat`!'); + } + + g += 'REPEAT:' + this.data.repeat.times + '\r\n'; + g += 'DURATION:' + toDurationString(this.data.repeat.interval) + '\r\n'; + } + + // ATTACH + if (this.data.type === 'audio' && this.data.attach && this.data.attach.mime) { + g += 'ATTACH;FMTTYPE=' + escape(this.data.attach.mime, false) + ':' + escape(this.data.attach.uri, false) + '\r\n'; + } + else if (this.data.type === 'audio' && this.data.attach) { + g += 'ATTACH;VALUE=URI:' + escape(this.data.attach.uri, false) + '\r\n'; + } + else if (this.data.type === 'audio') { + g += 'ATTACH;VALUE=URI:Basso\r\n'; + } + + // DESCRIPTION + if (this.data.type !== 'audio' && this.data.description) { + g += 'DESCRIPTION:' + escape(this.data.description, false) + '\r\n'; + } + else if (this.data.type !== 'audio') { + g += 'DESCRIPTION:' + escape(this.event.summary(), false) + '\r\n'; + } + + // SUMMARY + if (this.data.type === 'email' && this.data.summary) { + g += 'SUMMARY:' + escape(this.data.summary, false) + '\r\n'; + } + else if (this.data.type === 'email') { + g += 'SUMMARY:' + escape(this.event.summary(), false) + '\r\n'; + } + + // ATTENDEES + if (this.data.type === 'email') { + this.data.attendees.forEach(attendee => { + g += attendee.toString(); + }); + } + + // CUSTOM X ATTRIBUTES + g += generateCustomAttributes(this.data); + + g += 'END:VALARM\r\n'; + return g; + } +} diff --git a/src/attendee.ts b/src/attendee.ts new file mode 100755 index 000000000..7462d0fb6 --- /dev/null +++ b/src/attendee.ts @@ -0,0 +1,618 @@ +'use strict'; + + +import {addOrGetCustomAttributes, checkEnum, checkNameAndMail, escape} from './tools.ts'; +import ICalEvent from './event.ts'; +import ICalAlarm from './alarm.ts'; + + +interface ICalInternalAttendeeData { + name: string | null; + email: string; + mailto: string | null; + sentBy: string | null; + status: ICalAttendeeStatus | null; + role: ICalAttendeeRole; + rsvp: boolean | null; + type: ICalAttendeeType | null; + delegatedTo: ICalAttendee | null; + delegatedFrom: ICalAttendee | null; + x: [string, string][]; +} + +export interface ICalAttendeeData { + name?: string | null; + email: string; + mailto?: string | null; + sentBy?: string | null; + status?: ICalAttendeeStatus | null; + role?: ICalAttendeeRole; + rsvp?: boolean | null; + type?: ICalAttendeeType | null; + delegatedTo?: ICalAttendee | ICalAttendeeData | string | null; + delegatedFrom?: ICalAttendee | ICalAttendeeData | string | null; + delegatesTo?: ICalAttendee | ICalAttendeeData | string | null; + delegatesFrom?: ICalAttendee | ICalAttendeeData | string | null; + x?: {key: string, value: string}[] | [string, string][] | Record; +} + +export interface ICalAttendeeJSONData { + name: string | null; + email: string; + mailto: string | null; + sentBy: string | null; + status: ICalAttendeeStatus | null; + role: ICalAttendeeRole; + rsvp: boolean | null; + type: ICalAttendeeType | null; + delegatedTo: string | null; + delegatedFrom: string | null; + x: {key: string, value: string}[]; +} + +export enum ICalAttendeeRole { + CHAIR = 'CHAIR', + REQ = 'REQ-PARTICIPANT', + OPT = 'OPT-PARTICIPANT', + NON = 'NON-PARTICIPANT' +} + +export enum ICalAttendeeStatus { + ACCEPTED = 'ACCEPTED', + TENTATIVE = 'TENTATIVE', + DECLINED = 'DECLINED', + DELEGATED = 'DELEGATED', + NEEDSACTION = 'NEEDS-ACTION' +} + +// ref: https://tools.ietf.org/html/rfc2445#section-4.2.3 +export enum ICalAttendeeType { + INDIVIDUAL = 'INDIVIDUAL', + GROUP = 'GROUP', + RESOURCE = 'RESOURCE', + ROOM = 'ROOM', + UNKNOWN = 'UNKNOWN' +} + + +/** + * Usually you get an {@link ICalAttendee} object like this: + * + * ```javascript + * import ical from 'ical-generator'; + * const calendar = ical(); + * const event = calendar.createEvent(); + * const attendee = event.createAttendee({ email: 'mail@example.com' }); + * ``` + * + * You can also use the {@link ICalAttendee} object directly: + * + * ```javascript + * import ical, {ICalAttendee} from 'ical-generator'; + * const attendee = new ICalAttendee({ email: 'mail@example.com' }); + * event.attendees([attendee]); + * ``` + */ +export default class ICalAttendee { + private readonly data: ICalInternalAttendeeData; + private readonly parent: ICalEvent | ICalAlarm; + + /** + * Constructor of {@link ICalAttendee}. The event reference is + * required to query the calendar's timezone when required. + * + * @param data Attendee Data + * @param parent Reference to ICalEvent object + */ + constructor(data: ICalAttendeeData, parent: ICalEvent | ICalAlarm) { + this.data = { + name: null, + email: '', + mailto: null, + sentBy: null, + status: null, + role: ICalAttendeeRole.REQ, + rsvp: null, + type: null, + delegatedTo: null, + delegatedFrom: null, + x: [] + }; + this.parent = parent; + if (!this.parent) { + throw new Error('`event` option required!'); + } + if (!data.email) { + throw new Error('No value for `email` in ICalAttendee given!'); + } + + data.name !== undefined && this.name(data.name); + data.email !== undefined && this.email(data.email); + data.mailto !== undefined && this.mailto(data.mailto); + data.sentBy !== undefined && this.sentBy(data.sentBy); + data.status !== undefined && this.status(data.status); + data.role !== undefined && this.role(data.role); + data.rsvp !== undefined && this.rsvp(data.rsvp); + data.type !== undefined && this.type(data.type); + data.delegatedTo !== undefined && this.delegatedTo(data.delegatedTo); + data.delegatedFrom !== undefined && this.delegatedFrom(data.delegatedFrom); + data.delegatesTo && this.delegatesTo(data.delegatesTo); + data.delegatesFrom && this.delegatesFrom(data.delegatesFrom); + data.x !== undefined && this.x(data.x); + } + + + /** + * Get the attendee's name + * @since 0.2.0 + */ + name(): string | null; + + /** + * Set the attendee's name + * @since 0.2.0 + */ + name(name: string | null): this; + name(name?: string | null): this | string | null { + if (name === undefined) { + return this.data.name; + } + + this.data.name = name || null; + return this; + } + + + /** + * Get the attendee's email address + * @since 0.2.0 + */ + email(): string; + + /** + * Set the attendee's email address + * @since 0.2.0 + */ + email(email: string): this; + email(email?: string): this | string { + if (!email) { + return this.data.email; + } + + this.data.email = email; + return this; + } + + /** + * Get the attendee's email address + * @since 1.3.0 + */ + mailto(): string | null; + + /** + * Set the attendee's email address + * @since 1.3.0 + */ + mailto(mailto: string | null): this; + mailto(mailto?: string | null): this | string | null { + if (mailto === undefined) { + return this.data.mailto; + } + + this.data.mailto = mailto || null; + return this; + } + + + /** + * Get the acting user's email adress + * @since 3.3.0 + */ + sentBy(): string | null; + + /** + * Set the acting user's email adress + * @since 3.3.0 + */ + sentBy(email: string | null): this; + sentBy(email?: string | null): this | string | null { + if (!email) { + return this.data.sentBy; + } + + this.data.sentBy = email; + return this; + } + + + /** + * Get attendee's role + * @since 0.2.0 + */ + role(): ICalAttendeeRole; + + /** + * Set the attendee's role, defaults to `REQ` / `REQ-PARTICIPANT`. + * Checkout {@link ICalAttendeeRole} for available roles. + * + * @since 0.2.0 + */ + role(role: ICalAttendeeRole): this; + role(role?: ICalAttendeeRole): this | ICalAttendeeRole { + if (role === undefined) { + return this.data.role; + } + + this.data.role = checkEnum(ICalAttendeeRole, role) as ICalAttendeeRole; + return this; + } + + + /** + * Get attendee's RSVP expectation + * @since 0.2.1 + */ + rsvp(): boolean | null; + + /** + * Set the attendee's RSVP expectation + * @since 0.2.1 + */ + rsvp(rsvp: boolean | null): this; + rsvp(rsvp?: boolean | null): this | boolean | null { + if (rsvp === undefined) { + return this.data.rsvp; + } + if (rsvp === null) { + this.data.rsvp = null; + return this; + } + + this.data.rsvp = Boolean(rsvp); + return this; + } + + + /** + * Get attendee's status + * @since 0.2.0 + */ + status(): ICalAttendeeStatus | null; + + /** + * Set the attendee's status. See {@link ICalAttendeeStatus} + * for available status options. + * + * @since 0.2.0 + */ + status(status: ICalAttendeeStatus | null): this; + status(status?: ICalAttendeeStatus | null): this | ICalAttendeeStatus | null { + if (status === undefined) { + return this.data.status; + } + if (!status) { + this.data.status = null; + return this; + } + + this.data.status = checkEnum(ICalAttendeeStatus, status) as ICalAttendeeStatus; + return this; + } + + + /** + * Get attendee's type (a.k.a. CUTYPE) + * @since 0.2.3 + */ + type(): ICalAttendeeType; + + /** + * Set attendee's type (a.k.a. CUTYPE). + * See {@link ICalAttendeeType} for available status options. + * + * @since 0.2.3 + */ + type(type: ICalAttendeeType | null): this; + type(type?: ICalAttendeeType | null): this | ICalAttendeeType | null { + if (type === undefined) { + return this.data.type; + } + if (!type) { + this.data.type = null; + return this; + } + + this.data.type = checkEnum(ICalAttendeeType, type) as ICalAttendeeType; + return this; + } + + + /** + * Get the attendee's delegated-to value. + * @since 0.2.0 + */ + delegatedTo(): ICalAttendee | null; + + /** + * Set the attendee's delegated-to field. + * + * Creates a new Attendee if the passed object is not already a + * {@link ICalAttendee} object. Will set the `delegatedTo` and + * `delegatedFrom` attributes. + * + * Will also set the `status` to `DELEGATED`, if attribute is set. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const attendee = cal.createAttendee(); + * + * attendee.delegatesTo({email: 'foo@bar.com', name: 'Foo'}); + ``` + * + * @since 0.2.0 + */ + delegatedTo(delegatedTo: ICalAttendee | ICalAttendeeData | string | null): this; + delegatedTo(delegatedTo?: ICalAttendee | ICalAttendeeData | string | null): this | ICalAttendee | null { + if (delegatedTo === undefined) { + return this.data.delegatedTo; + } + if (!delegatedTo) { + this.data.delegatedTo = null; + if (this.data.status === ICalAttendeeStatus.DELEGATED) { + this.data.status = null; + } + return this; + } + + if(typeof delegatedTo === 'string') { + this.data.delegatedTo = new ICalAttendee( + { email: delegatedTo, ...checkNameAndMail('delegatedTo', delegatedTo) }, + this.parent, + ); + } + else if(delegatedTo instanceof ICalAttendee) { + this.data.delegatedTo = delegatedTo; + } + else { + this.data.delegatedTo = new ICalAttendee(delegatedTo, this.parent); + } + + this.data.status = ICalAttendeeStatus.DELEGATED; + return this; + } + + + /** + * Get the attendee's delegated-from field + * @since 0.2.0 + */ + delegatedFrom (): ICalAttendee | null; + + /** + * Set the attendee's delegated-from field + * + * Creates a new Attendee if the passed object is not already a + * {@link ICalAttendee} object. Will set the `delegatedTo` and + * `delegatedFrom` attributes. + * + * @param delegatedFrom + */ + delegatedFrom (delegatedFrom: ICalAttendee | ICalAttendeeData | string | null): this; + delegatedFrom(delegatedFrom?: ICalAttendee | ICalAttendeeData | string | null): this | ICalAttendee | null { + if (delegatedFrom === undefined) { + return this.data.delegatedFrom; + } + + if (!delegatedFrom) { + this.data.delegatedFrom = null; + } + else if(typeof delegatedFrom === 'string') { + this.data.delegatedFrom = new ICalAttendee( + { email: delegatedFrom, ...checkNameAndMail('delegatedFrom', delegatedFrom) }, + this.parent, + ); + } + else if(delegatedFrom instanceof ICalAttendee) { + this.data.delegatedFrom = delegatedFrom; + } + else { + this.data.delegatedFrom = new ICalAttendee(delegatedFrom, this.parent); + } + + return this; + } + + + /** + * Create a new attendee this attendee delegates to and returns + * this new attendee. Creates a new attendee if the passed object + * is not already an {@link ICalAttendee}. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const attendee = cal.createAttendee(); + * + * attendee.delegatesTo({email: 'foo@bar.com', name: 'Foo'}); + * ``` + * + * @since 0.2.0 + */ + delegatesTo (options: ICalAttendee | ICalAttendeeData | string): ICalAttendee { + const a = options instanceof ICalAttendee ? options : this.parent.createAttendee(options); + this.delegatedTo(a); + a.delegatedFrom(this); + return a; + } + + + /** + * Create a new attendee this attendee delegates from and returns + * this new attendee. Creates a new attendee if the passed object + * is not already an {@link ICalAttendee}. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const attendee = cal.createAttendee(); + * + * attendee.delegatesFrom({email: 'foo@bar.com', name: 'Foo'}); + * ``` + * + * @since 0.2.0 + */ + delegatesFrom (options: ICalAttendee | ICalAttendeeData | string): ICalAttendee { + const a = options instanceof ICalAttendee ? options : this.parent.createAttendee(options); + this.delegatedFrom(a); + a.delegatedTo(this); + return a; + } + + /** + * Set X-* attributes. Woun't filter double attributes, + * which are also added by another method (e.g. status), + * so these attributes may be inserted twice. + * + * ```javascript + * attendee.x([ + * { + * key: "X-MY-CUSTOM-ATTR", + * value: "1337!" + * } + * ]); + * + * attendee.x([ + * ["X-MY-CUSTOM-ATTR", "1337!"] + * ]); + * + * attendee.x({ + * "X-MY-CUSTOM-ATTR": "1337!" + * }); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: {key: string, value: string}[] | [string, string][] | Record): this; + + /** + * Set a X-* attribute. Woun't filter double attributes, + * which are also added by another method (e.g. status), + * so these attributes may be inserted twice. + * + * ```javascript + * attendee.x("X-MY-CUSTOM-ATTR", "1337!"); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: string, value: string): this; + + /** + * Get all custom X-* attributes. + * @since 1.9.0 + */ + x (): {key: string, value: string}[]; + x (keyOrArray?: ({key: string, value: string})[] | [string, string][] | Record | string, value?: string): this | void | ({key: string, value: string})[] { + if(keyOrArray === undefined) { + return addOrGetCustomAttributes (this.data); + } + + if(typeof keyOrArray === 'string' && typeof value === 'string') { + addOrGetCustomAttributes (this.data, keyOrArray, value); + } + else if(typeof keyOrArray === 'object') { + addOrGetCustomAttributes (this.data, keyOrArray); + } + else { + throw new Error('Either key or value is not a string!'); + } + + return this; + } + + + /** + * Return a shallow copy of the attendee's options for JSON stringification. + * Can be used for persistence. + * + * @since 0.2.4 + */ + toJSON(): ICalAttendeeJSONData { + return Object.assign({}, this.data, { + delegatedTo: this.data.delegatedTo?.email() || null, + delegatedFrom: this.data.delegatedFrom?.email() || null, + x: this.x() + }); + } + + + /** + * Return generated attendee as a string. + * + * ```javascript + * console.log(attendee.toString()); // → ATTENDEE;ROLE=… + * ``` + */ + toString (): string { + let g = 'ATTENDEE'; + + if (!this.data.email) { + throw new Error('No value for `email` in ICalAttendee given!'); + } + + // ROLE + g += ';ROLE=' + this.data.role; + + // TYPE + if (this.data.type) { + g += ';CUTYPE=' + this.data.type; + } + + // PARTSTAT + if (this.data.status) { + g += ';PARTSTAT=' + this.data.status; + } + + // RSVP + if (this.data.rsvp !== null) { + g += ';RSVP=' + this.data.rsvp.toString().toUpperCase(); + } + + // SENT-BY + if (this.data.sentBy !== null) { + g += ';SENT-BY="mailto:' + this.data.sentBy + '"'; + } + + // DELEGATED-TO + if (this.data.delegatedTo) { + g += ';DELEGATED-TO="' + this.data.delegatedTo.email() + '"'; + } + + // DELEGATED-FROM + if (this.data.delegatedFrom) { + g += ';DELEGATED-FROM="' + this.data.delegatedFrom.email() + '"'; + } + + // CN / Name + if (this.data.name) { + g += ';CN="' + escape(this.data.name, true) + '"'; + } + + // EMAIL + if (this.data.email && this.data.mailto) { + g += ';EMAIL=' + escape(this.data.email, false); + } + + // CUSTOM X ATTRIBUTES + if(this.data.x.length) { + g += ';' + this.data.x + .map(([key, value]) => key.toUpperCase() + '=' + escape(value, false)) + .join(';'); + } + + g += ':MAILTO:' + escape(this.data.mailto || this.data.email, false) + '\r\n'; + + return g; + } +} diff --git a/src/bin/cli.ts b/src/bin/cli.ts deleted file mode 100644 index 2493e5bbe..000000000 --- a/src/bin/cli.ts +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -/* istanbul ignore file */ - -import Magic from '../lib/index.js'; - -const number = parseInt(process.argv[process.argv.length - 1], 10); -console.log(Magic.double(number)); diff --git a/src/bin/start.ts b/src/bin/start.ts deleted file mode 100644 index b15b1ff75..000000000 --- a/src/bin/start.ts +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -import express, {Express} from 'express'; -import {Server} from 'http'; - - -class AppServer { - static run() { - new AppServer(); - } - - private app: Express; - private server: Server; - - constructor() { - this.app = express(); - - this.setupRoutes(); - this.server = this.app.listen(process.env.PORT || 8080); - - process.on('SIGINT', () => this.stop()); - process.on('SIGTERM', () => this.stop()); - } - - setupRoutes() { - this.app.get('/ping', (req, res) => { - res.send('pong'); - }); - - // add additional routes - } - - async stop() { - await new Promise(cb => this.server.close(cb)); - - // await db.close() if we have a db connection in this app - // await other things we should cleanup nicely - - process.exit(); - } -} - -AppServer.run(); diff --git a/src/calendar.ts b/src/calendar.ts new file mode 100755 index 000000000..5bb85e1b4 --- /dev/null +++ b/src/calendar.ts @@ -0,0 +1,817 @@ +'use strict'; + +import { + addOrGetCustomAttributes, + checkEnum, + foldLines, + generateCustomAttributes, + isMomentDuration, + toDurationString +} from './tools.ts'; +import ICalEvent, {ICalEventData, ICalEventJSONData} from './event.ts'; +import { ICalMomentDurationStub, ICalTimezone } from './types.ts'; + + +export interface ICalCalendarData { + prodId?: ICalCalendarProdIdData | string; + method?: ICalCalendarMethod | null; + name?: string | null; + description?: string | null; + timezone?: ICalTimezone | string | null; + source?: string | null; + url?: string | null; + scale?: string | null; + ttl?: number | ICalMomentDurationStub | null; + events?: (ICalEvent | ICalEventData)[]; + x?: {key: string, value: string}[] | [string, string][] | Record; +} + +interface ICalCalendarInternalData { + prodId: string; + method: ICalCalendarMethod | null; + name: string | null; + description: string | null; + timezone: ICalTimezone | null; + source: string | null; + url: string | null; + scale: string | null; + ttl: number | null; + events: ICalEvent[]; + x: [string, string][]; +} + +export interface ICalCalendarJSONData { + prodId: string; + method: ICalCalendarMethod | null; + name: string | null; + description: string | null; + timezone: string | null; + source: string | null; + url: string | null; + scale: string | null; + ttl: number | null; + events: ICalEventJSONData[]; + x: {key: string, value: string}[]; +} + +export interface ICalCalendarProdIdData { + company: string; + product: string; + language?: string; +} + +export enum ICalCalendarMethod { + PUBLISH = 'PUBLISH', + REQUEST = 'REQUEST', + REPLY = 'REPLY', + ADD = 'ADD', + CANCEL = 'CANCEL', + REFRESH = 'REFRESH', + COUNTER = 'COUNTER', + DECLINECOUNTER = 'DECLINECOUNTER' +} + + +/** + * Usually you get an {@link ICalCalendar} object like this: + * ```javascript + * import ical from 'ical-generator'; + * const calendar = ical(); + * ``` + * + * But you can also use the constructor directly like this: + * ```javascript + * import {ICalCalendar} from 'ical-generator'; + * const calendar = new ICalCalendar(); + * ``` + */ +export default class ICalCalendar { + private readonly data: ICalCalendarInternalData; + + /** + * You can pass options to set up your calendar or use setters to do this. + * + * ```javascript + * * import ical from 'ical-generator'; + * + * // or use require: + * // const { default: ical } = require('ical-generator'); + * + * + * const cal = ical({name: 'my first iCal'}); + * + * // is the same as + * + * const cal = ical().name('my first iCal'); + * + * // is the same as + * + * const cal = ical(); + * cal.name('sebbo.net'); + * ``` + * + * `cal.toString()` would then produce the following string: + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * NAME:sebbo.net + * X-WR-CALNAME:sebbo.net + * END:VCALENDAR + * ``` + * + * @param data Calendar data + */ + constructor(data: ICalCalendarData = {}) { + this.data = { + prodId: '//sebbo.net//ical-generator//EN', + method: null, + name: null, + description: null, + timezone: null, + source: null, + url: null, + scale: null, + ttl: null, + events: [], + x: [] + }; + + data.prodId !== undefined && this.prodId(data.prodId); + data.method !== undefined && this.method(data.method); + data.name !== undefined && this.name(data.name); + data.description !== undefined && this.description(data.description); + data.timezone !== undefined && this.timezone(data.timezone); + data.source !== undefined && this.source(data.source); + data.url !== undefined && this.url(data.url); + data.scale !== undefined && this.scale(data.scale); + data.ttl !== undefined && this.ttl(data.ttl); + data.events !== undefined && this.events(data.events); + data.x !== undefined && this.x(data.x); + } + + + /** + * Get your feed's prodid. Will always return a string. + * @since 0.2.0 + */ + prodId(): string; + + /** + * Set your feed's prodid. `prodid` can be either a + * string like `//sebbo.net//ical-generator//EN` or a + * valid {@link ICalCalendarProdIdData} object. `language` + * is optional and defaults to `EN`. + * + * ```javascript + * cal.prodId({ + * company: 'My Company', + * product: 'My Product', + * language: 'EN' // optional, defaults to EN + * }); + * ``` + * + * `cal.toString()` would then produce the following string: + * ```text + * PRODID:-//My Company//My Product//EN + * ``` + * + * @since 0.2.0 + */ + prodId(prodId: ICalCalendarProdIdData | string): this; + prodId(prodId?: ICalCalendarProdIdData | string): this | string { + if (!prodId) { + return this.data.prodId; + } + + if (typeof prodId === 'string') { + this.data.prodId = prodId; + return this; + } + + if (typeof prodId !== 'object') { + throw new Error('`prodid` needs to be a string or an object!'); + } + + if (!prodId.company) { + throw new Error('`prodid.company` is a mandatory item!'); + } + if (!prodId.product) { + throw new Error('`prodid.product` is a mandatory item!'); + } + + const language = (prodId.language || 'EN').toUpperCase(); + this.data.prodId = '//' + prodId.company + '//' + prodId.product + '//' + language; + return this; + } + + + /** + * Get the feed method attribute. + * See {@link ICalCalendarMethod} for possible results. + * + * @since 0.2.8 + */ + method(): ICalCalendarMethod | null; + + /** + * Set the feed method attribute. + * See {@link ICalCalendarMethod} for available options. + * + * #### Typescript Example + * ```typescript + * import {ICalCalendarMethod} from 'ical-generator'; + * + * // METHOD:PUBLISH + * calendar.method(ICalCalendarMethod.PUBLISH); + * ``` + * + * @since 0.2.8 + */ + method(method: ICalCalendarMethod | null): this; + method(method?: ICalCalendarMethod | null): this | ICalCalendarMethod | null { + if (method === undefined) { + return this.data.method; + } + if (!method) { + this.data.method = null; + return this; + } + + this.data.method = checkEnum(ICalCalendarMethod, method) as ICalCalendarMethod; + return this; + } + + + /** + * Get your feed's name + * @since 0.2.0 + */ + name(): string | null; + + /** + * Set your feed's name. Is used to fill `NAME` + * and `X-WR-CALNAME` in your iCal file. + * + * ```typescript + * import ical from 'ical-generator'; + * + * const cal = ical(); + * cal.name('Next Arrivals'); + * + * cal.toString(); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * NAME:Next Arrivals + * X-WR-CALNAME:Next Arrivals + * END:VCALENDAR + * ``` + * + * @since 0.2.0 + */ + name(name: string | null): this; + name(name?: string | null): this | string | null { + if (name === undefined) { + return this.data.name; + } + + this.data.name = name ? String(name) : null; + return this; + } + + + /** + * Get your feed's description + * @since 0.2.7 + */ + description(): string | null; + + /** + * Set your feed's description + * @since 0.2.7 + */ + description(description: string | null): this; + description(description?: string | null): this | string | null { + if (description === undefined) { + return this.data.description; + } + + this.data.description = description ? String(description) : null; + return this; + } + + + /** + * Get the current calendar timezone + * @since 0.2.0 + */ + timezone(): string | null; + + /** + * Use this method to set your feed's timezone. Is used + * to fill `TIMEZONE-ID` and `X-WR-TIMEZONE` in your iCal export. + * Please not that all date values are treaded differently, if + * a timezone was set. See {@link formatDate} for details. If no + * time zone is specified, all information is output as UTC. + * + * ```javascript + * cal.timezone('America/New_York'); + * ``` + * + * @see https://github.com/sebbo2002/ical-generator#-date-time--timezones + * @since 0.2.0 + */ + timezone(timezone: string | null): this; + + /** + * Sets the time zone to be used in this calendar file for all times of all + * events. Please note that if the time zone is set, ical-generator assumes + * that all times are already in the correct time zone. Alternatively, a + * `moment-timezone` or a Luxon object can be passed with `setZone`, + * ical-generator will then set the time zone itself. + * + * For the best support of time zones, a VTimezone entry in the calendar is + * recommended, which informs the client about the corresponding time zones + * (daylight saving time, deviation from UTC, etc.). `ical-generator` itself + * does not have a time zone database, so an external generator is needed here. + * + * A VTimezone generator is a function that takes a time zone as a string and + * returns a VTimezone component according to the ical standard. For example, + * ical-timezones can be used for this: + * + * ```typescript + * import ical from 'ical-generator'; + * import {getVtimezoneComponent} from '@touch4it/ical-timezones'; + * + * const cal = ical(); + * cal.timezone({ + * name: 'FOO', + * generator: getVtimezoneComponent + * }); + * cal.createEvent({ + * start: new Date(), + * timezone: 'Europe/London' + * }); + * ``` + * + * @see https://github.com/sebbo2002/ical-generator#-date-time--timezones + * @since 2.0.0 + */ + timezone(timezone: ICalTimezone | string | null): this; + timezone(timezone?: ICalTimezone | string | null): this | string | null { + if (timezone === undefined) { + return this.data.timezone?.name || null; + } + + if(timezone === 'UTC') { + this.data.timezone = null; + } + else if(typeof timezone === 'string') { + this.data.timezone = {name: timezone}; + } + else if(timezone === null) { + this.data.timezone = null; + } + else { + this.data.timezone = timezone; + } + + return this; + } + + + /** + * Get current value of the `SOURCE` attribute. + * @since 2.2.0-develop.1 + */ + source(): string | null; + + /** + * Use this method to set your feed's `SOURCE` attribute. + * This tells the client where to refresh your feed. + * + * ```javascript + * cal.source('http://example.com/my/original_source.ical'); + * ``` + * + * ```text + * SOURCE;VALUE=URI:http://example.com/my/original_source.ical + * ``` + * + * @since 2.2.0-develop.1 + */ + source(source: string | null): this; + source(source?: string | null): this | string | null { + if (source === undefined) { + return this.data.source; + } + + this.data.source = source || null; + return this; + } + + + /** + * Get your feed's URL + * @since 0.2.5 + */ + url(): string | null; + + /** + * Set your feed's URL + * + * ```javascript + * calendar.url('http://example.com/my/feed.ical'); + * ``` + * + * @since 0.2.5 + */ + url(url: string | null): this; + url(url?: string | null): this | string | null { + if (url === undefined) { + return this.data.url; + } + + this.data.url = url || null; + return this; + } + + + /** + * Get current value of the `CALSCALE` attribute. It will + * return `null` if no value was set. The iCal standard + * specifies this as `GREGORIAN` if no value is present. + * + * @since 1.8.0 + */ + scale(): string | null; + + /** + * Use this method to set your feed's `CALSCALE` attribute. There is no + * default value for this property and it will not appear in your iCal + * file unless set. The iCal standard specifies this as `GREGORIAN` if + * no value is present. + * + * ```javascript + * cal.scale('gregorian'); + * ``` + * + * @since 1.8.0 + */ + scale(scale: string | null): this; + scale(scale?: string | null): this | string | null { + if (scale === undefined) { + return this.data.scale; + } + + if (scale === null) { + this.data.scale = null; + } + else { + this.data.scale = scale.toUpperCase(); + } + + return this; + } + + + /** + * Get the current ttl duration in seconds + * @since 0.2.5 + */ + ttl(): number | null; + + /** + * Use this method to set your feed's time to live + * (in seconds). Is used to fill `REFRESH-INTERVAL` and + * `X-PUBLISHED-TTL` in your iCal. + * + * ```javascript + * const cal = ical().ttl(60 * 60 * 24); // 1 day + * ``` + * + * You can also pass a moment.js duration object. Zero, null + * or negative numbers will reset the `ttl` attribute. + * + * @since 0.2.5 + */ + ttl(ttl: number | ICalMomentDurationStub | null): this; + ttl(ttl?: number | ICalMomentDurationStub | null): this | number | null { + if (ttl === undefined) { + return this.data.ttl; + } + + if (isMomentDuration(ttl)) { + this.data.ttl = ttl.asSeconds(); + } + else if (ttl && ttl > 0) { + this.data.ttl = ttl; + } + else { + this.data.ttl = null; + } + + return this; + } + + + /** + * Creates a new {@link ICalEvent} and returns it. Use options to prefill the event's attributes. + * Calling this method without options will create an empty event. + * + * ```javascript + * import ical from 'ical-generator'; + * + * // or use require: + * // const { default: ical } = require('ical-generator'); + * + * const cal = ical(); + * const event = cal.createEvent({summary: 'My Event'}); + * + * // overwrite event summary + * event.summary('Your Event'); + * ``` + * + * @since 0.2.0 + */ + createEvent(data: ICalEvent | ICalEventData): ICalEvent { + const event = data instanceof ICalEvent ? data : new ICalEvent(data, this); + this.data.events.push(event); + return event; + } + + + /** + * Returns all events of this calendar. + * + * ```javascript + * const cal = ical(); + * + * cal.events([ + * { + * start: new Date(), + * end: new Date(new Date().getTime() + 3600000), + * summary: 'Example Event', + * description: 'It works ;)', + * url: 'http://sebbo.net/' + * } + * ]); + * + * cal.events(); // --> [ICalEvent] + * ``` + * + * @since 0.2.0 + */ + events(): ICalEvent[]; + + /** + * Add multiple events to your calendar. + * + * ```javascript + * const cal = ical(); + * + * cal.events([ + * { + * start: new Date(), + * end: new Date(new Date().getTime() + 3600000), + * summary: 'Example Event', + * description: 'It works ;)', + * url: 'http://sebbo.net/' + * } + * ]); + * + * cal.events(); // --> [ICalEvent] + * ``` + * + * @since 0.2.0 + */ + events(events: (ICalEvent | ICalEventData)[]): this; + events(events?: (ICalEvent | ICalEventData)[]): this | ICalEvent[] { + if (!events) { + return this.data.events; + } + + events.forEach((e: ICalEvent | ICalEventData) => this.createEvent(e)); + return this; + } + + + /** + * Remove all events from the calendar without + * touching any other data like name or prodId. + * + * @since 2.0.0-develop.1 + */ + clear(): this { + this.data.events = []; + return this; + } + + + /** + * Set X-* attributes. Woun't filter double attributes, + * which are also added by another method (e.g. busystatus), + * so these attributes may be inserted twice. + * + * ```javascript + * calendar.x([ + * { + * key: "X-MY-CUSTOM-ATTR", + * value: "1337!" + * } + * ]); + * + * calendar.x([ + * ["X-MY-CUSTOM-ATTR", "1337!"] + * ]); + * + * calendar.x({ + * "X-MY-CUSTOM-ATTR": "1337!" + * }); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * X-MY-CUSTOM-ATTR:1337! + * END:VCALENDAR + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: {key: string, value: string}[] | [string, string][] | Record): this; + + /** + * Set a X-* attribute. Woun't filter double attributes, + * which are also added by another method (e.g. busystatus), + * so these attributes may be inserted twice. + * + * ```javascript + * calendar.x("X-MY-CUSTOM-ATTR", "1337!"); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * X-MY-CUSTOM-ATTR:1337! + * END:VCALENDAR + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: string, value: string): this; + + /** + * Get all custom X-* attributes. + * @since 1.9.0 + */ + x (): {key: string, value: string}[]; + x (keyOrArray?: {key: string, value: string}[] | [string, string][] | Record | string, value?: string): this | void | ({key: string, value: string})[] { + if(keyOrArray === undefined) { + return addOrGetCustomAttributes (this.data); + } + + if(typeof keyOrArray === 'string' && typeof value === 'string') { + addOrGetCustomAttributes (this.data, keyOrArray, value); + } + else if(typeof keyOrArray === 'object') { + addOrGetCustomAttributes (this.data, keyOrArray); + } + else { + throw new Error('Either key or value is not a string!'); + } + + return this; + } + + + /** + * Return a shallow copy of the calendar's options for JSON stringification. + * Third party objects like moment.js values or RRule objects are stringified + * as well. Can be used for persistence. + * + * ```javascript + * const cal = ical(); + * const json = JSON.stringify(cal); + * + * // later: restore calendar data + * cal = ical(JSON.parse(json)); + * ``` + * + * @since 0.2.4 + */ + toJSON(): ICalCalendarJSONData { + return Object.assign({}, this.data, { + timezone: this.timezone(), + events: this.data.events.map(event => event.toJSON()), + x: this.x() + }); + } + + + /** + * Get the number of events added to your calendar + */ + length(): number { + return this.data.events.length; + } + + + /** + * Return generated calendar as a string. + * + * ```javascript + * const cal = ical(); + * console.log(cal.toString()); // → BEGIN:VCALENDAR… + * ``` + */ + toString(): string { + let g = ''; + + // VCALENDAR and VERSION + g = 'BEGIN:VCALENDAR\r\nVERSION:2.0\r\n'; + + // PRODID + g += 'PRODID:-' + this.data.prodId + '\r\n'; + + // URL + if (this.data.url) { + g += 'URL:' + this.data.url + '\r\n'; + } + + // SOURCE + if (this.data.source) { + g += 'SOURCE;VALUE=URI:' + this.data.source + '\r\n'; + } + + // CALSCALE + if (this.data.scale) { + g += 'CALSCALE:' + this.data.scale + '\r\n'; + } + + // METHOD + if (this.data.method) { + g += 'METHOD:' + this.data.method + '\r\n'; + } + + // NAME + if (this.data.name) { + g += 'NAME:' + this.data.name + '\r\n'; + g += 'X-WR-CALNAME:' + this.data.name + '\r\n'; + } + + // Description + if (this.data.description) { + g += 'X-WR-CALDESC:' + this.data.description + '\r\n'; + } + + // Timezone + if(this.data.timezone?.generator) { + const timezones = [...new Set([ + this.timezone(), + ...this.data.events.map(event => event.timezone()) + ])].filter(tz => tz !== null && !tz.startsWith('/')) as string[]; + + timezones.forEach(tz => { + if(!this.data.timezone?.generator) { + return; + } + + const s = this.data.timezone.generator(tz); + if(!s) { + return; + } + + g += s.replace(/\r\n/g, '\n') + .replace(/\n/g, '\r\n') + .trim() + '\r\n'; + }); + } + if (this.data.timezone?.name) { + g += 'TIMEZONE-ID:' + this.data.timezone.name + '\r\n'; + g += 'X-WR-TIMEZONE:' + this.data.timezone.name + '\r\n'; + } + + // TTL + if (this.data.ttl) { + g += 'REFRESH-INTERVAL;VALUE=DURATION:' + toDurationString(this.data.ttl) + '\r\n'; + g += 'X-PUBLISHED-TTL:' + toDurationString(this.data.ttl) + '\r\n'; + } + + // Events + this.data.events.forEach(event => g += event.toString()); + + // CUSTOM X ATTRIBUTES + g += generateCustomAttributes(this.data); + + g += 'END:VCALENDAR'; + + return foldLines(g); + } +} diff --git a/src/category.ts b/src/category.ts new file mode 100755 index 000000000..d539f976c --- /dev/null +++ b/src/category.ts @@ -0,0 +1,101 @@ +'use strict'; + + +import {escape} from './tools.ts'; + + +export interface ICalCategoryData { + name: string; +} + + +export interface ICalCategoryJSONData { + name: string; +} + +export type ICalCategoryInternalData = ICalCategoryJSONData; + + +/** + * Usually you get an {@link ICalCategory} object like this: + * + * ```javascript + * import ical from 'ical-generator'; + * const calendar = ical(); + * const event = calendar.createEvent(); + * const category = event.createCategory(); + * ``` + * + * You can also use the {@link ICalCategory} object directly: + * + * ```javascript + * import ical, {ICalCategory} from 'ical-generator'; + * const category = new ICalCategory(); + * event.categories([category]); + * ``` + */ +export default class ICalCategory { + private readonly data: ICalCategoryInternalData; + + /** + * Constructor of {@link ICalCategory}. + * @param data Category Data + */ + constructor(data: ICalCategoryData) { + this.data = { + name: '' + }; + + if(!data.name) { + throw new Error('No value for `name` in ICalCategory given!'); + } + + this.name(data.name); + } + + + /** + * Get the category name + * @since 0.3.0 + */ + name(): string; + + /** + * Set the category name + * @since 0.3.0 + */ + name(name: string): this; + name(name?: string): this | string { + if (name === undefined) { + return this.data.name; + } + + this.data.name = name; + return this; + } + + + /** + * Return a shallow copy of the category's options for JSON stringification. + * Can be used for persistence. + * + * @since 0.2.4 + */ + toJSON(): ICalCategoryInternalData { + return Object.assign({}, this.data); + } + + + /** + * Return generated category name as a string. + * + * ```javascript + * console.log(category.toString()); + * ``` + */ + toString(): string { + + // CN / Name + return escape(this.data.name, false); + } +} diff --git a/src/event.ts b/src/event.ts new file mode 100755 index 000000000..a9fe51778 --- /dev/null +++ b/src/event.ts @@ -0,0 +1,1888 @@ +'use strict'; + +import uuid from 'uuid-random'; +import { + addOrGetCustomAttributes, + checkDate, + checkEnum, + checkNameAndMail, + escape, + formatDate, + formatDateTZ, + generateCustomAttributes, + isRRule, + toDate, + toJSON +} from './tools.ts'; +import ICalAttendee, {ICalAttendeeData} from './attendee.ts'; +import ICalAlarm, {ICalAlarmData} from './alarm.ts'; +import ICalCategory, {ICalCategoryData} from './category.ts'; +import ICalCalendar from './calendar.ts'; +import { + ICalDateTimeValue, + ICalDescription, + ICalEventRepeatingFreq, + ICalLocation, + ICalOrganizer, + ICalRepeatingOptions, + ICalRRuleStub, + ICalWeekday +} from './types.ts'; + + +export enum ICalEventStatus { + CONFIRMED = 'CONFIRMED', + TENTATIVE = 'TENTATIVE', + CANCELLED = 'CANCELLED' +} + +export enum ICalEventBusyStatus { + FREE = 'FREE', + TENTATIVE = 'TENTATIVE', + BUSY = 'BUSY', + OOF = 'OOF' +} + +export enum ICalEventTransparency { + TRANSPARENT = 'TRANSPARENT', + OPAQUE = 'OPAQUE' +} + +export enum ICalEventClass { + PUBLIC = 'PUBLIC', + PRIVATE = 'PRIVATE', + CONFIDENTIAL = 'CONFIDENTIAL' +} + +export interface ICalEventData { + id?: string | number | null, + sequence?: number, + start: ICalDateTimeValue, + end?: ICalDateTimeValue | null, + recurrenceId?: ICalDateTimeValue | null, + timezone?: string | null, + stamp?: ICalDateTimeValue, + allDay?: boolean, + floating?: boolean, + repeating?: ICalRepeatingOptions | ICalRRuleStub | string | null, + summary?: string, + location?: ICalLocation | string | null, + description?: ICalDescription | string | null, + organizer?: ICalOrganizer | string | null, + attendees?: ICalAttendee[] | ICalAttendeeData[], + alarms?: ICalAlarm[] | ICalAlarmData[], + categories?: ICalCategory[] | ICalCategoryData[], + status?: ICalEventStatus | null, + busystatus?: ICalEventBusyStatus | null, + priority?: number | null, + url?: string | null, + attachments?: string[], + transparency?: ICalEventTransparency | null, + created?: ICalDateTimeValue | null, + lastModified?: ICalDateTimeValue | null, + class?: ICalEventClass | null; + x?: {key: string, value: string}[] | [string, string][] | Record; +} + +interface ICalEventInternalData { + id: string, + sequence: number, + start: ICalDateTimeValue, + end: ICalDateTimeValue | null, + recurrenceId: ICalDateTimeValue | null, + timezone: string | null, + stamp: ICalDateTimeValue, + allDay: boolean, + floating: boolean, + repeating: ICalEventJSONRepeatingData | ICalRRuleStub | string | null, + summary: string, + location: ICalLocation | null, + description: ICalDescription | null, + organizer: ICalOrganizer | null, + attendees: ICalAttendee[], + alarms: ICalAlarm[], + categories: ICalCategory[], + status: ICalEventStatus | null, + busystatus: ICalEventBusyStatus | null, + priority: number | null, + url: string | null, + attachments: string[], + transparency: ICalEventTransparency | null, + created: ICalDateTimeValue | null, + lastModified: ICalDateTimeValue | null, + class: ICalEventClass | null, + x: [string, string][]; +} + +export interface ICalEventJSONData { + id: string, + sequence: number, + start: string, + end: string | null, + recurrenceId: string | null, + timezone: string | null, + stamp: string, + allDay: boolean, + floating: boolean, + repeating: ICalEventJSONRepeatingData | string | null, + summary: string, + location: ICalLocation | null, + description: ICalDescription | null, + organizer: ICalOrganizer | null, + attendees: ICalAttendee[], + alarms: ICalAlarm[], + categories: ICalCategory[], + status: ICalEventStatus | null, + busystatus: ICalEventBusyStatus | null, + priority?: number | null, + url: string | null, + attachments: string[], + transparency: ICalEventTransparency | null, + created: string | null, + lastModified: string | null, + x: {key: string, value: string}[]; +} + +export interface ICalEventJSONRepeatingData { + freq: ICalEventRepeatingFreq; + count?: number; + interval?: number; + until?: ICalDateTimeValue; + byDay?: ICalWeekday[]; + byMonth?: number[]; + byMonthDay?: number[]; + bySetPos?: number[]; + exclude?: ICalDateTimeValue[]; + startOfWeek?: ICalWeekday; +} + + +/** + * Usually you get an {@link ICalEvent} object like this: + * ```javascript + * import ical from 'ical-generator'; + * const calendar = ical(); + * const event = calendar.createEvent(); + * ``` + */ +export default class ICalEvent { + private readonly data: ICalEventInternalData; + private readonly calendar: ICalCalendar; + + /** + * Constructor of [[`ICalEvent`]. The calendar reference is + * required to query the calendar's timezone when required. + * + * @param data Calendar Event Data + * @param calendar Reference to ICalCalendar object + */ + constructor(data: ICalEventData, calendar: ICalCalendar) { + this.data = { + id: uuid(), + sequence: 0, + start: new Date(), + end: null, + recurrenceId: null, + timezone: null, + stamp: new Date(), + allDay: false, + floating: false, + repeating: null, + summary: '', + location: null, + description: null, + organizer: null, + attendees: [], + alarms: [], + categories: [], + status: null, + busystatus: null, + priority: null, + url: null, + attachments: [], + transparency: null, + created: null, + lastModified: null, + class: null, + x: [] + }; + + this.calendar = calendar; + if (!calendar) { + throw new Error('`calendar` option required!'); + } + + data.id && this.id(data.id); + data.sequence !== undefined && this.sequence(data.sequence); + data.start && this.start(data.start); + data.end !== undefined && this.end(data.end); + data.recurrenceId !== undefined && this.recurrenceId(data.recurrenceId); + data.timezone !== undefined && this.timezone(data.timezone); + data.stamp !== undefined && this.stamp(data.stamp); + data.allDay !== undefined && this.allDay(data.allDay); + data.floating !== undefined && this.floating(data.floating); + data.repeating !== undefined && this.repeating(data.repeating); + data.summary !== undefined && this.summary(data.summary); + data.location !== undefined && this.location(data.location); + data.description !== undefined && this.description(data.description); + data.organizer !== undefined && this.organizer(data.organizer); + data.attendees !== undefined && this.attendees(data.attendees); + data.alarms !== undefined && this.alarms(data.alarms); + data.categories !== undefined && this.categories(data.categories); + data.status !== undefined && this.status(data.status); + data.busystatus !== undefined && this.busystatus(data.busystatus); + data.priority !== undefined && this.priority(data.priority); + data.url !== undefined && this.url(data.url); + data.attachments !== undefined && this.attachments(data.attachments); + data.transparency !== undefined && this.transparency(data.transparency); + data.created !== undefined && this.created(data.created); + data.lastModified !== undefined && this.lastModified(data.lastModified); + data.class !== undefined && this.class(data.class); + data.x !== undefined && this.x(data.x); + } + + /** + * Get the event's ID + * @since 0.2.0 + */ + id(): string; + + /** + * Use this method to set the event's ID. + * If not set, a UUID will be generated randomly. + * + * @param id Event ID you want to set + */ + id(id: string | number): this; + id(id?: string | number): this | string { + if (id === undefined) { + return this.data.id; + } + + this.data.id = String(id); + return this; + } + + /** + * Get the event's ID + * @since 0.2.0 + * @alias id + */ + uid(): string; + + /** + * Use this method to set the event's ID. + * If not set, a UUID will be generated randomly. + * + * @param id Event ID you want to set + * @alias id + */ + uid(id: string | number): this; + uid(id?: string | number): this | string { + return id === undefined ? this.id() : this.id(id); + } + + /** + * Get the event's SEQUENCE number. Use this method to get the event's + * revision sequence number of the calendar component within a sequence of revisions. + * + * @since 0.2.6 + */ + sequence(): number; + + /** + * Set the event's SEQUENCE number. For a new event, this should be zero. + * Each time the organizer makes a significant revision, the sequence + * number should be incremented. + * + * @param sequence Sequence number or null to unset it + */ + sequence(sequence: number): this; + sequence(sequence?: number): this | number { + if (sequence === undefined) { + return this.data.sequence; + } + + const s = parseInt(String(sequence), 10); + if (isNaN(s)) { + throw new Error('`sequence` must be a number!'); + } + + this.data.sequence = sequence; + return this; + } + + /** + * Get the event start time which is currently + * set. Can be any supported date object. + * + * @since 0.2.0 + */ + start(): ICalDateTimeValue; + + /** + * Set the appointment date of beginning, which is required for all events. + * You can use any supported date object, see + * [Readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * ```typescript + * import ical from 'ical-generator'; + * + * const cal = ical(); + * + * const event = cal.createEvent({ + * start: new Date('2020-01-01') + * }); + * + * // overwrites old start date + * event.start(new Date('2024-02-01')); + * + * cal.toString(); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * BEGIN:VEVENT + * UID:7e2aee64-b07a-4256-9b3e-e9eaa452bac8 + * SEQUENCE:0 + * DTSTAMP:20240212T190915Z + * DTSTART:20240201T000000Z + * SUMMARY: + * END:VEVENT + * END:VCALENDAR + * ``` + * + * @since 0.2.0 + */ + start(start: ICalDateTimeValue): this; + start(start?: ICalDateTimeValue): this | ICalDateTimeValue { + if (start === undefined) { + this.swapStartAndEndIfRequired(); + return this.data.start; + } + + this.data.start = checkDate(start, 'start'); + return this; + } + + /** + * Get the event end time which is currently + * set. Can be any supported date object. + * + * @since 0.2.0 + */ + end(): ICalDateTimeValue | null; + + /** + * Set the appointment date of end. You can use any supported date object, see + * [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.0 + */ + end(end: ICalDateTimeValue | null): this; + end(end?: ICalDateTimeValue | null): this | ICalDateTimeValue | null { + if (end === undefined) { + this.swapStartAndEndIfRequired(); + return this.data.end; + } + if (end === null) { + this.data.end = null; + return this; + } + + this.data.end = checkDate(end, 'end'); + return this; + } + + /** + * Checks if the start date is after the end date and swaps them if necessary. + * @private + */ + private swapStartAndEndIfRequired(): void { + if (this.data.start && this.data.end && toDate(this.data.start).getTime() > toDate(this.data.end).getTime()) { + const t = this.data.start; + this.data.start = this.data.end; + this.data.end = t; + } + } + + /** + * Get the event's recurrence id + * @since 0.2.0 + */ + recurrenceId(): ICalDateTimeValue | null; + + /** + * Set the event's recurrence id. You can use any supported date object, see + * [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.0 + */ + recurrenceId(recurrenceId: ICalDateTimeValue | null): this; + recurrenceId(recurrenceId?: ICalDateTimeValue | null): this | ICalDateTimeValue | null { + if (recurrenceId === undefined) { + return this.data.recurrenceId; + } + if (recurrenceId === null) { + this.data.recurrenceId = null; + return this; + } + + this.data.recurrenceId = checkDate(recurrenceId, 'recurrenceId'); + return this; + } + + /** + * Get the event's timezone. + * @since 0.2.6 + */ + timezone(): string | null; + + /** + * Sets the time zone to be used for this event. If a time zone has been + * defined in both the event and the calendar, the time zone of the event + * is used. + * + * Please note that if the time zone is set, ical-generator assumes + * that all times are already in the correct time zone. Alternatively, + * a `moment-timezone` or a Luxon object can be passed with `setZone`, + * ical-generator will then set the time zone itself. + * + * This and the 'floating' flag (see below) are mutually exclusive, and setting a timezone will unset the + * 'floating' flag. If neither 'timezone' nor 'floating' are set, the date will be output with in UTC format + * (see [date-time form #2 in section 3.3.5 of RFC 554](https://tools.ietf.org/html/rfc5545#section-3.3.5)). + * + * See [Readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) for details about + * supported values and timezone handling. + * + * ```javascript + * event.timezone('America/New_York'); + * ``` + * + * @see https://github.com/sebbo2002/ical-generator#-date-time--timezones + * @since 0.2.6 + */ + timezone(timezone: string | null): this; + timezone(timezone?: string | null): this | string | null { + if (timezone === undefined && this.data.timezone !== null) { + return this.data.timezone; + } + if (timezone === undefined) { + return this.calendar.timezone(); + } + + this.data.timezone = timezone && timezone !== 'UTC' ? timezone.toString() : null; + if (this.data.timezone) { + this.data.floating = false; + } + + return this; + } + + /** + * Get the event's timestamp + * @since 0.2.0 + */ + stamp(): ICalDateTimeValue; + + /** + * Set the appointment date of creation. Defaults to the current time and date (`new Date()`). You can use + * any supported date object, see [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.0 + */ + stamp(stamp: ICalDateTimeValue): this; + stamp(stamp?: ICalDateTimeValue): this | ICalDateTimeValue { + if (stamp === undefined) { + return this.data.stamp; + } + + this.data.stamp = checkDate(stamp, 'stamp'); + return this; + } + + /** + * Get the event's timestamp + * @since 0.2.0 + * @alias stamp + */ + timestamp(): ICalDateTimeValue; + + /** + * Set the appointment date of creation. Defaults to the current time and date (`new Date()`). You can use + * any supported date object, see [readme](https://github.com/sebbo2002/ical-generator#-date-time--timezones) + * for details about supported values and timezone handling. + * + * @since 0.2.0 + * @alias stamp + */ + timestamp(stamp: ICalDateTimeValue): this; + timestamp(stamp?: ICalDateTimeValue): this | ICalDateTimeValue { + if (stamp === undefined) { + return this.stamp(); + } + + return this.stamp(stamp); + } + + /** + * Get the event's allDay flag + * @since 0.2.0 + */ + allDay(): boolean; + + /** + * Set the event's allDay flag. + * + * ```javascript + * event.allDay(true); // → appointment is for the whole day + * ``` + * + * ```typescript + * import ical from 'ical-generator'; + * + * const cal = ical(); + * + * cal.createEvent({ + * start: new Date('2020-01-01'), + * summary: 'Very Important Day', + * allDay: true + * }); + * + * cal.toString(); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * BEGIN:VEVENT + * UID:1964fe8d-32c5-4f2a-bd62-7d9d7de5992b + * SEQUENCE:0 + * DTSTAMP:20240212T191956Z + * DTSTART;VALUE=DATE:20200101 + * X-MICROSOFT-CDO-ALLDAYEVENT:TRUE + * X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE + * SUMMARY:Very Important Day + * END:VEVENT + * END:VCALENDAR + * ``` + * + * @since 0.2.0 + */ + allDay(allDay: boolean): this; + allDay(allDay?: boolean): this | boolean { + if (allDay === undefined) { + return this.data.allDay; + } + + this.data.allDay = Boolean(allDay); + return this; + } + + /** + * Get the event's floating flag. + * @since 0.2.0 + */ + floating(): boolean; + floating(floating: boolean): this; + + /** + * Set the event's floating flag. This unsets the event's timezone. + * Events whose floating flag is set to true always take place at the + * same time, regardless of the time zone. + * + * ```typescript + * import ical from 'ical-generator'; + * + * const cal = ical(); + * + * cal.createEvent({ + * start: new Date('2020-01-01T20:00:00Z'), + * summary: 'Always at 20:00 in every checkEnum(ICalWeekday, day) as ICalWeekday); + } + + if (repeating.byMonth) { + const byMonthArray = Array.isArray(repeating.byMonth) ? repeating.byMonth : [repeating.byMonth]; + this.data.repeating.byMonth = byMonthArray.map(month => { + if (typeof month !== 'number' || month < 1 || month > 12) { + throw new Error('`repeating.byMonth` contains invalid value `' + month + '`!'); + } + + return month; + }); + } + + if (repeating.byMonthDay) { + const byMonthDayArray = Array.isArray(repeating.byMonthDay) ? repeating.byMonthDay : [repeating.byMonthDay]; + + + this.data.repeating.byMonthDay = byMonthDayArray.map(monthDay => { + if (typeof monthDay !== 'number' || monthDay < -31 || monthDay > 31 || monthDay === 0) { + throw new Error('`repeating.byMonthDay` contains invalid value `' + monthDay + '`!'); + } + + return monthDay; + }); + } + + if (repeating.bySetPos) { + if (!this.data.repeating.byDay) { + throw '`repeating.bySetPos` must be used along with `repeating.byDay`!'; + } + const bySetPosArray = Array.isArray(repeating.bySetPos) ? repeating.bySetPos : [repeating.bySetPos]; + this.data.repeating.bySetPos = bySetPosArray.map(bySetPos => { + if (typeof bySetPos !== 'number' || bySetPos < -366 || bySetPos > 366 || bySetPos === 0) { + throw '`repeating.bySetPos` contains invalid value `' + bySetPos + '`!'; + } + return bySetPos; + }); + } + + if (repeating.exclude) { + const excludeArray = Array.isArray(repeating.exclude) ? repeating.exclude : [repeating.exclude]; + this.data.repeating.exclude = excludeArray.map((exclude, i) => { + return checkDate(exclude, `repeating.exclude[${i}]`); + }); + } + + if (repeating.startOfWeek) { + this.data.repeating.startOfWeek = checkEnum(ICalWeekday, repeating.startOfWeek) as ICalWeekday; + } + + return this; + } + + /** + * Get the event's summary + * @since 0.2.0 + */ + summary(): string; + + /** + * Set the event's summary. + * Defaults to an empty string if nothing is set. + * + * @since 0.2.0 + */ + summary(summary: string): this; + summary(summary?: string): this | string { + if (summary === undefined) { + return this.data.summary; + } + + this.data.summary = summary ? String(summary) : ''; + return this; + } + + + /** + * Get the event's location + * @since 0.2.0 + */ + location(): ICalLocation | null; + + /** + * Set the event's location by passing a string (minimum) or + * an {@link ICalLocationWithTitle} object which will also fill the iCal + * `GEO` attribute and Apple's `X-APPLE-STRUCTURED-LOCATION`. + * + * ```javascript + * event.location({ + * title: 'Apple Store Kurfürstendamm', + * address: 'Kurfürstendamm 26, 10719 Berlin, Deutschland', + * radius: 141.1751386318387, + * geo: { + * lat: 52.503630, + * lon: 13.328650 + * } + * }); + * ``` + * + * ```text + * LOCATION:Apple Store Kurfürstendamm\nKurfürstendamm 26\, 10719 Berlin\, + * Deutschland + * X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Kurfürstendamm 26\, 10719 + * Berlin\, Deutschland;X-APPLE-RADIUS=141.1751386318387;X-TITLE=Apple Store + * Kurfürstendamm:geo:52.50363,13.32865 + * GEO:52.50363;13.32865 + * ``` + * + * Since v6.1.0 you can also pass a {@link ICalLocationWithoutTitle} object to pass + * the geolocation only. This will only fill the iCal `GEO` attribute. + * + * ```javascript + * event.location({ + * geo: { + * lat: 52.503630, + * lon: 13.328650 + * } + * }); + * ``` + * + * ```text + * GEO:52.50363;13.32865 + * ``` + * + * @since 0.2.0 + */ + location(location: ICalLocation | string | null): this; + location(location?: ICalLocation | string | null): this | ICalLocation | null { + if (location === undefined) { + return this.data.location; + } + if (typeof location === 'string') { + this.data.location = { + title: location + }; + return this; + } + if (location && ( + ('title' in location && !location.title) || + (location?.geo && (!isFinite(location.geo.lat) || !isFinite(location.geo.lon))) || + (!('title' in location) && !location?.geo) + )) { + throw new Error( + '`location` isn\'t formatted correctly. See https://sebbo2002.github.io/ical-generator/'+ + 'develop/reference/classes/ICalEvent.html#location' + ); + } + + this.data.location = location || null; + return this; + } + + + /** + * Get the event's description as an {@link ICalDescription} object. + * @since 0.2.0 + */ + description(): ICalDescription | null; + + /** + * Set the events description by passing a plaintext string or + * an object containing both a plaintext and a html description. + * Only a few calendar apps support html descriptions and like in + * emails, supported HTML tags and styling is limited. + * + * ```javascript + * event.description({ + * plain: 'Hello World!', + * html: '

Hello World!

' + * }); + * ``` + * + * ```text + * DESCRIPTION:Hello World! + * X-ALT-DESC;FMTTYPE=text/html:

Hello World!

+ * ``` + * + * @since 0.2.0 + */ + description(description: ICalDescription | string | null): this; + description(description?: ICalDescription | string | null): this | ICalDescription | null { + if (description === undefined) { + return this.data.description; + } + if (description === null) { + this.data.description = null; + return this; + } + + if (typeof description === 'string') { + this.data.description = {plain: description}; + } + else { + this.data.description = description; + } + return this; + } + + + /** + * Get the event's organizer + * @since 0.2.0 + */ + organizer(): ICalOrganizer | null; + + /** + * Set the event's organizer + * + * ```javascript + * event.organizer({ + * name: 'Organizer\'s Name', + * email: 'organizer@example.com' + * }); + * + * // OR + * + * event.organizer('Organizer\'s Name '); + * ``` + * + * You can also add an explicit `mailto` email address or or the sentBy address. + * + * ```javascript + * event.organizer({ + * name: 'Organizer\'s Name', + * email: 'organizer@example.com', + * mailto: 'explicit@mailto.com', + * sentBy: 'substitute@example.com' + * }) + * ``` + * + * @since 0.2.0 + */ + organizer(organizer: ICalOrganizer | string | null): this; + organizer(organizer?: ICalOrganizer | string | null): this | ICalOrganizer | null { + if (organizer === undefined) { + return this.data.organizer; + } + if (organizer === null) { + this.data.organizer = null; + return this; + } + + this.data.organizer = checkNameAndMail('organizer', organizer); + return this; + } + + + /** + * Creates a new {@link ICalAttendee} and returns it. Use options to prefill + * the attendee's attributes. Calling this method without options will create + * an empty attendee. + * + * ```javascript + * import ical from 'ical-generator'; + * + * const cal = ical(); + * const event = cal.createEvent({ + * start: new Date() + * }); + * + * event.createAttendee({email: 'hui@example.com', name: 'Hui'}); + * + * // add another attendee + * event.createAttendee('Buh '); + * ``` + * + * ```text + * BEGIN:VCALENDAR + * VERSION:2.0 + * PRODID:-//sebbo.net//ical-generator//EN + * BEGIN:VEVENT + * UID:b4944f07-98e4-4581-ac80-2589bb20273d + * SEQUENCE:0 + * DTSTAMP:20240212T194232Z + * DTSTART:20240212T194232Z + * SUMMARY: + * ATTENDEE;ROLE=REQ-PARTICIPANT;CN="Hui":MAILTO:hui@example.com + * ATTENDEE;ROLE=REQ-PARTICIPANT;CN="Buh":MAILTO:buh@example.net + * END:VEVENT + * END:VCALENDAR + * ``` + * + * As with the organizer, you can also add an explicit `mailto` address. + * + * ```javascript + * event.createAttendee({email: 'hui@example.com', name: 'Hui', mailto: 'another@mailto.com'}); + * + * // overwrite an attendee's mailto address + * attendee.mailto('another@mailto.net'); + * ``` + * + * @since 0.2.0 + */ + createAttendee(data: ICalAttendee | ICalAttendeeData | string): ICalAttendee { + if (data instanceof ICalAttendee) { + this.data.attendees.push(data); + return data; + } + if (typeof data === 'string') { + data = { email: data, ...checkNameAndMail('data', data) }; + } + + const attendee = new ICalAttendee(data, this); + this.data.attendees.push(attendee); + return attendee; + } + + + /** + * Get all attendees + * @since 0.2.0 + */ + attendees(): ICalAttendee[]; + + /** + * Add multiple attendees to your event + * + * ```javascript + * const event = ical().createEvent(); + * + * cal.attendees([ + * {email: 'a@example.com', name: 'Person A'}, + * {email: 'b@example.com', name: 'Person B'} + * ]); + * + * cal.attendees(); // --> [ICalAttendee, ICalAttendee] + * ``` + * + * @since 0.2.0 + */ + attendees(attendees: (ICalAttendee | ICalAttendeeData | string)[]): this; + attendees(attendees?: (ICalAttendee | ICalAttendeeData | string)[]): this | ICalAttendee[] { + if (!attendees) { + return this.data.attendees; + } + + attendees.forEach(attendee => this.createAttendee(attendee)); + return this; + } + + + /** + * Creates a new {@link ICalAlarm} and returns it. Use options to prefill + * the alarm's attributes. Calling this method without options will create + * an empty alarm. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const alarm = event.createAlarm({type: ICalAlarmType.display, trigger: 300}); + * + * // add another alarm + * event.createAlarm({ + * type: ICalAlarmType.audio, + * trigger: 300, // 5min before event + * }); + * ``` + * + * @since 0.2.1 + */ + createAlarm(data: ICalAlarm | ICalAlarmData): ICalAlarm { + const alarm = data instanceof ICalAlarm ? data : new ICalAlarm(data, this); + this.data.alarms.push(alarm); + return alarm; + } + + + /** + * Get all alarms + * @since 0.2.0 + */ + alarms(): ICalAlarm[]; + + /** + * Add one or multiple alarms + * + * ```javascript + * const event = ical().createEvent(); + * + * cal.alarms([ + * {type: ICalAlarmType.display, trigger: 600}, + * {type: ICalAlarmType.audio, trigger: 300} + * ]); + * + * cal.alarms(); // --> [ICalAlarm, ICalAlarm] + ``` + * + * @since 0.2.0 + */ + alarms(alarms: ICalAlarm[] | ICalAlarmData[]): this; + alarms(alarms?: ICalAlarm[] | ICalAlarmData[]): this | ICalAlarm[] { + if (!alarms) { + return this.data.alarms; + } + + alarms.forEach((alarm: ICalAlarm | ICalAlarmData) => this.createAlarm(alarm)); + return this; + } + + + /** + * Creates a new {@link ICalCategory} and returns it. Use options to prefill the category's attributes. + * Calling this method without options will create an empty category. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * const category = event.createCategory({name: 'APPOINTMENT'}); + * + * // add another category + * event.createCategory({ + * name: 'MEETING' + * }); + * ``` + * + * @since 0.3.0 + */ + createCategory(data: ICalCategory | ICalCategoryData): ICalCategory { + const category = data instanceof ICalCategory ? data : new ICalCategory(data); + this.data.categories.push(category); + return category; + } + + + /** + * Get all categories + * @since 0.3.0 + */ + categories(): ICalCategory[]; + + /** + * Add categories to the event or return all selected categories. + * + * ```javascript + * const event = ical().createEvent(); + * + * cal.categories([ + * {name: 'APPOINTMENT'}, + * {name: 'MEETING'} + * ]); + * + * cal.categories(); // --> [ICalCategory, ICalCategory] + * ``` + * + * @since 0.3.0 + */ + categories(categories: (ICalCategory | ICalCategoryData)[]): this; + categories(categories?: (ICalCategory | ICalCategoryData)[]): this | ICalCategory[] { + if (!categories) { + return this.data.categories; + } + + categories.forEach(category => this.createCategory(category)); + return this; + } + + + /** + * Get the event's status + * @since 0.2.0 + */ + status(): ICalEventStatus | null; + + /** + * Set the event's status + * + * ```javascript + * import ical, {ICalEventStatus} from 'ical-generator'; + * event.status(ICalEventStatus.CONFIRMED); + * ``` + * + * @since 0.2.0 + */ + status(status: ICalEventStatus | null): this; + status(status?: ICalEventStatus | null): this | ICalEventStatus | null { + if (status === undefined) { + return this.data.status; + } + if (status === null) { + this.data.status = null; + return this; + } + + this.data.status = checkEnum(ICalEventStatus, status) as ICalEventStatus; + return this; + } + + + /** + * Get the event's busy status + * @since 1.0.2 + */ + busystatus(): ICalEventBusyStatus | null; + + /** + * Set the event's busy status. Will add the + * [`X-MICROSOFT-CDO-BUSYSTATUS`](https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/cd68eae7-ed65-4dd3-8ea7-ad585c76c736) + * attribute to your event. + * + * ```javascript + * import ical, {ICalEventBusyStatus} from 'ical-generator'; + * event.busystatus(ICalEventBusyStatus.BUSY); + * ``` + * + * @since 1.0.2 + */ + busystatus(busystatus: ICalEventBusyStatus | null): this; + busystatus(busystatus?: ICalEventBusyStatus | null): this | ICalEventBusyStatus | null { + if (busystatus === undefined) { + return this.data.busystatus; + } + if (busystatus === null) { + this.data.busystatus = null; + return this; + } + + this.data.busystatus = checkEnum(ICalEventBusyStatus, busystatus) as ICalEventBusyStatus; + return this; + } + + + /** + * Get the event's priority. A value of 1 represents + * the highest priority, 9 the lowest. 0 specifies an undefined + * priority. + * + * @since v2.0.0-develop.7 + */ + priority(): number | null; + + /** + * Set the event's priority. A value of 1 represents + * the highest priority, 9 the lowest. 0 specifies an undefined + * priority. + * + * @since v2.0.0-develop.7 + */ + priority(priority: number | null): this; + priority(priority?: number | null): this | number | null { + if (priority === undefined) { + return this.data.priority; + } + if (priority === null) { + this.data.priority = null; + return this; + } + + if(priority < 0 || priority > 9) { + throw new Error('`priority` is invalid, musst be 0 ≤ priority ≤ 9.'); + } + + this.data.priority = Math.round(priority); + return this; + } + + + /** + * Get the event's URL + * @since 0.2.0 + */ + url(): string | null; + + /** + * Set the event's URL + * @since 0.2.0 + */ + url(url: string | null): this; + url(url?: string | null): this | string | null { + if (url === undefined) { + return this.data.url; + } + + this.data.url = url ? String(url) : null; + return this; + } + + /** + * Adds an attachment to the event by adding the file URL to the calendar. + * + * `ical-generator` only supports external attachments. File attachments that + * are directly included in the file are not supported, because otherwise the + * calendar file could easily become unfavourably large. + * + * ```javascript + * const cal = ical(); + * const event = cal.createEvent(); + * event.createAttachment('https://files.sebbo.net/calendar/attachments/foo'); + * ``` + * + * @since 3.2.0-develop.1 + */ + createAttachment(url: string): this { + this.data.attachments.push(url); + return this; + } + + + /** + * Get all attachment urls + * @since 3.2.0-develop.1 + */ + attachments(): string[]; + + /** + * Add one or multiple alarms + * + * ```javascript + * const event = ical().createEvent(); + * + * cal.attachments([ + * 'https://files.sebbo.net/calendar/attachments/foo', + * 'https://files.sebbo.net/calendar/attachments/bar' + * ]); + * + * cal.attachments(); // --> [string, string] + ``` + * + * 3.2.0-develop.1 + */ + attachments(attachments: string[]): this; + attachments(attachments?: string[]): this | string[] { + if (!attachments) { + return this.data.attachments; + } + + attachments.forEach((attachment: string) => this.createAttachment(attachment)); + return this; + } + + /** + * Get the event's transparency + * @since 1.7.3 + */ + transparency(): ICalEventTransparency | null; + + /** + * Set the event's transparency + * + * Set the field to `OPAQUE` if the person or resource is no longer + * available due to this event. If the calendar entry has no influence + * on availability, you can set the field to `TRANSPARENT`. This value + * is mostly used to find out if a person has time on a certain date or + * not (see `TRANSP` in iCal specification). + * + * ```javascript + * import ical, {ICalEventTransparency} from 'ical-generator'; + * event.transparency(ICalEventTransparency.OPAQUE); + * ``` + * + * @since 1.7.3 + */ + transparency(transparency: ICalEventTransparency | null): this; + transparency(transparency?: ICalEventTransparency | null): this | ICalEventTransparency | null { + if (transparency === undefined) { + return this.data.transparency; + } + if (!transparency) { + this.data.transparency = null; + return this; + } + + this.data.transparency = checkEnum(ICalEventTransparency, transparency) as ICalEventTransparency; + return this; + } + + + /** + * Get the event's creation date + * @since 0.3.0 + */ + created(): ICalDateTimeValue | null; + + /** + * Set the event's creation date + * @since 0.3.0 + */ + created(created: ICalDateTimeValue | null): this; + created(created?: ICalDateTimeValue | null): this | ICalDateTimeValue | null { + if (created === undefined) { + return this.data.created; + } + if (created === null) { + this.data.created = null; + return this; + } + + this.data.created = checkDate(created, 'created'); + return this; + } + + + /** + * Get the event's last modification date + * @since 0.3.0 + */ + lastModified(): ICalDateTimeValue | null; + + /** + * Set the event's last modification date + * @since 0.3.0 + */ + lastModified(lastModified: ICalDateTimeValue | null): this; + lastModified(lastModified?: ICalDateTimeValue | null): this | ICalDateTimeValue | null { + if (lastModified === undefined) { + return this.data.lastModified; + } + if (lastModified === null) { + this.data.lastModified = null; + return this; + } + + this.data.lastModified = checkDate(lastModified, 'lastModified'); + return this; + } + + /** + * Get the event's class + * @since 2.0.0 + */ + class(): ICalEventClass | null; + + /** + * Set the event's class + * + * ```javascript + * import ical, { ICalEventClass } from 'ical-generator'; + * event.class(ICalEventClass.PRIVATE); + * ``` + * + * @since 2.0.0 + */ + class(class_: ICalEventClass | null): this; + class(class_?: ICalEventClass | null): this | ICalEventClass | null { + if (class_ === undefined) { + return this.data.class; + } + if (class_ === null) { + this.data.class = null; + return this; + } + + this.data.class = checkEnum(ICalEventClass, class_) as ICalEventClass; + return this; + } + + + /** + * Set X-* attributes. Woun't filter double attributes, + * which are also added by another method (e.g. summary), + * so these attributes may be inserted twice. + * + * ```javascript + * event.x([ + * { + * key: "X-MY-CUSTOM-ATTR", + * value: "1337!" + * } + * ]); + * + * event.x([ + * ["X-MY-CUSTOM-ATTR", "1337!"] + * ]); + * + * event.x({ + * "X-MY-CUSTOM-ATTR": "1337!" + * }); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: {key: string, value: string}[] | [string, string][] | Record): this; + + /** + * Set a X-* attribute. Woun't filter double attributes, + * which are also added by another method (e.g. summary), + * so these attributes may be inserted twice. + * + * ```javascript + * event.x("X-MY-CUSTOM-ATTR", "1337!"); + * ``` + * + * @since 1.9.0 + */ + x (keyOrArray: string, value: string): this; + + /** + * Get all custom X-* attributes. + * @since 1.9.0 + */ + x (): {key: string, value: string}[]; + x(keyOrArray?: ({ key: string, value: string })[] | [string, string][] | Record | string, value?: string): this | void | ({ key: string, value: string })[] { + if (keyOrArray === undefined) { + return addOrGetCustomAttributes(this.data); + } + + if (typeof keyOrArray === 'string' && typeof value === 'string') { + addOrGetCustomAttributes(this.data, keyOrArray, value); + } + if (typeof keyOrArray === 'object') { + addOrGetCustomAttributes(this.data, keyOrArray); + } + + return this; + } + + + /** + * Return a shallow copy of the events's options for JSON stringification. + * Third party objects like moment.js values or RRule objects are stringified + * as well. Can be used for persistence. + * + * ```javascript + * const event = ical().createEvent(); + * const json = JSON.stringify(event); + * + * // later: restore event data + * const calendar = ical().createEvent(JSON.parse(json)); + * ``` + * + * @since 0.2.4 + */ + toJSON(): ICalEventJSONData { + let repeating: ICalEventJSONRepeatingData | string | null = null; + if(isRRule(this.data.repeating) || typeof this.data.repeating === 'string') { + repeating = this.data.repeating.toString(); + } + else if(this.data.repeating) { + repeating = Object.assign({}, this.data.repeating, { + until: toJSON(this.data.repeating.until) || undefined, + exclude: this.data.repeating.exclude?.map(d => toJSON(d)), + }); + } + + this.swapStartAndEndIfRequired(); + return Object.assign({}, this.data, { + start: toJSON(this.data.start) || null, + end: toJSON(this.data.end) || null, + recurrenceId: toJSON(this.data.recurrenceId) || null, + stamp: toJSON(this.data.stamp) || null, + created: toJSON(this.data.created) || null, + lastModified: toJSON(this.data.lastModified) || null, + repeating, + x: this.x() + }); + } + + + /** + * Return generated event as a string. + * + * ```javascript + * const event = ical().createEvent(); + * console.log(event.toString()); // → BEGIN:VEVENT… + * ``` + */ + toString(): string { + let g = ''; + + // DATE & TIME + g += 'BEGIN:VEVENT\r\n'; + g += 'UID:' + this.data.id + '\r\n'; + + // SEQUENCE + g += 'SEQUENCE:' + this.data.sequence + '\r\n'; + + this.swapStartAndEndIfRequired(); + g += 'DTSTAMP:' + formatDate(this.calendar.timezone(), this.data.stamp) + '\r\n'; + if (this.data.allDay) { + g += 'DTSTART;VALUE=DATE:' + formatDate(this.timezone(), this.data.start, true) + '\r\n'; + if (this.data.end) { + g += 'DTEND;VALUE=DATE:' + formatDate(this.timezone(), this.data.end, true) + '\r\n'; + } + + g += 'X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\n'; + g += 'X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE\r\n'; + } + else { + g += formatDateTZ(this.timezone(), 'DTSTART', this.data.start, this.data) + '\r\n'; + if (this.data.end) { + g += formatDateTZ(this.timezone(), 'DTEND', this.data.end, this.data) + '\r\n'; + } + } + + // REPEATING + if(isRRule(this.data.repeating) || typeof this.data.repeating === 'string') { + let repeating = this.data.repeating + .toString() + .replace(/\r\n/g, '\n') + .split('\n') + .filter(l => l && !l.startsWith('DTSTART:')) + .join('\r\n'); + + if(!repeating.includes('\r\n') && !repeating.startsWith('RRULE:')) { + repeating = 'RRULE:' + repeating; + } + + g += repeating.trim() + '\r\n'; + } + else if (this.data.repeating) { + g += 'RRULE:FREQ=' + this.data.repeating.freq; + + if (this.data.repeating.count) { + g += ';COUNT=' + this.data.repeating.count; + } + + if (this.data.repeating.interval) { + g += ';INTERVAL=' + this.data.repeating.interval; + } + + if (this.data.repeating.until) { + g += ';UNTIL=' + formatDate(this.calendar.timezone(), this.data.repeating.until, false, this.floating()); + } + + if (this.data.repeating.byDay) { + g += ';BYDAY=' + this.data.repeating.byDay.join(','); + } + + if (this.data.repeating.byMonth) { + g += ';BYMONTH=' + this.data.repeating.byMonth.join(','); + } + + if (this.data.repeating.byMonthDay) { + g += ';BYMONTHDAY=' + this.data.repeating.byMonthDay.join(','); + } + + if (this.data.repeating.bySetPos) { + g += ';BYSETPOS=' + this.data.repeating.bySetPos.join(','); + } + + if (this.data.repeating.startOfWeek) { + g += ';WKST=' + this.data.repeating.startOfWeek; + } + + g += '\r\n'; + + // REPEATING EXCLUSION + if (this.data.repeating.exclude) { + if (this.data.allDay) { + g += 'EXDATE;VALUE=DATE:' + this.data.repeating.exclude.map(excludedDate => { + return formatDate(this.calendar.timezone(), excludedDate, true); + }).join(',') + '\r\n'; + } + else { + g += 'EXDATE'; + if (this.timezone()) { + g += ';TZID=' + this.timezone() + ':' + this.data.repeating.exclude.map(excludedDate => { + // This isn't a 'floating' event because it has a timezone; + // but we use it to omit the 'Z' UTC specifier in formatDate() + return formatDate(this.timezone(), excludedDate, false, true); + }).join(',') + '\r\n'; + } + else { + g += ':' + this.data.repeating.exclude.map(excludedDate => { + return formatDate(this.timezone(), excludedDate, false, this.floating()); + }).join(',') + '\r\n'; + } + } + } + } + + // RECURRENCE + if (this.data.recurrenceId) { + g += formatDateTZ(this.timezone(), 'RECURRENCE-ID', this.data.recurrenceId, this.data) + '\r\n'; + } + + // SUMMARY + g += 'SUMMARY:' + escape(this.data.summary, false) + '\r\n'; + + // TRANSPARENCY + if (this.data.transparency) { + g += 'TRANSP:' + escape(this.data.transparency, false) + '\r\n'; + } + + // LOCATION + if (this.data.location && 'title' in this.data.location && this.data.location.title) { + g += 'LOCATION:' + escape( + this.data.location.title + + (this.data.location.address ? '\n' + this.data.location.address : ''), + false + ) + '\r\n'; + + if (this.data.location.radius && this.data.location.geo) { + g += 'X-APPLE-STRUCTURED-LOCATION;VALUE=URI;' + + (this.data.location.address ? 'X-ADDRESS=' + escape(this.data.location.address, false) + ';' : '') + + 'X-APPLE-RADIUS=' + escape(this.data.location.radius, false) + ';' + + 'X-TITLE=' + escape(this.data.location.title, false) + + ':geo:' + escape(this.data.location.geo?.lat, false) + ',' + + escape(this.data.location.geo?.lon, false) + '\r\n'; + } + } + + // GEO + if (this.data.location && 'geo' in this.data.location && this.data.location.geo) { + g += 'GEO:' + escape(this.data.location.geo?.lat, false) + ';' + + escape(this.data.location.geo?.lon, false) + '\r\n'; + } + + // DESCRIPTION + if (this.data.description) { + g += 'DESCRIPTION:' + escape(this.data.description.plain, false) + '\r\n'; + + // HTML DESCRIPTION + if (this.data.description.html) { + g += 'X-ALT-DESC;FMTTYPE=text/html:' + escape(this.data.description.html, false) + '\r\n'; + } + } + + // ORGANIZER + if (this.data.organizer) { + g += 'ORGANIZER;CN="' + escape(this.data.organizer.name, true) + '"'; + + if (this.data.organizer.sentBy) { + g += ';SENT-BY="mailto:' + escape(this.data.organizer.sentBy, true) + '"'; + } + if (this.data.organizer.email && this.data.organizer.mailto) { + g += ';EMAIL=' + escape(this.data.organizer.email, false); + } + if(this.data.organizer.email) { + g += ':mailto:' + escape(this.data.organizer.mailto || this.data.organizer.email, false); + } + g += '\r\n'; + } + + // ATTENDEES + this.data.attendees.forEach(function (attendee) { + g += attendee.toString(); + }); + + // ALARMS + this.data.alarms.forEach(function (alarm) { + g += alarm.toString(); + }); + + // CATEGORIES + if (this.data.categories.length > 0) { + g += 'CATEGORIES:' + this.data.categories + .map(category => category.toString()) + .join() + '\r\n'; + } + + // URL + if (this.data.url) { + g += 'URL;VALUE=URI:' + escape(this.data.url, false) + '\r\n'; + } + + // ATTACHMENT + if (this.data.attachments.length > 0) { + this.data.attachments.forEach(url => { + g += 'ATTACH:' + escape(url, false) + '\r\n'; + }); + } + + // STATUS + if (this.data.status) { + g += 'STATUS:' + this.data.status.toUpperCase() + '\r\n'; + } + + // BUSYSTATUS + if (this.data.busystatus) { + g += 'X-MICROSOFT-CDO-BUSYSTATUS:' + this.data.busystatus.toUpperCase() + '\r\n'; + } + + // PRIORITY + if (this.data.priority !== null) { + g += 'PRIORITY:' + this.data.priority + '\r\n'; + } + + // CUSTOM X ATTRIBUTES + g += generateCustomAttributes(this.data); + + // CREATED + if (this.data.created) { + g += 'CREATED:' + formatDate(this.calendar.timezone(), this.data.created) + '\r\n'; + } + + // LAST-MODIFIED + if (this.data.lastModified) { + g += 'LAST-MODIFIED:' + formatDate(this.calendar.timezone(), this.data.lastModified) + '\r\n'; + } + + if (this.data.class) { + g+= 'CLASS:' + this.data.class.toUpperCase() + '\r\n'; + } + + g += 'END:VEVENT\r\n'; + return g; + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100755 index 000000000..c18eb7c7e --- /dev/null +++ b/src/index.ts @@ -0,0 +1,123 @@ +/** + * ical-generator entrypoint + */ + +'use strict'; + +import ICalCalendar, {ICalCalendarData} from './calendar.ts'; + + +/** + * Create a new, empty calendar and returns it. + * + * ```javascript + * import ical from 'ical-generator'; + * + * // or use require: + * // const { default: ical } = require('ical-generator'); + * + * const cal = ical(); + * ``` + * + * You can pass options to setup your calendar or use setters to do this. + * + * ```javascript + * import ical from 'ical-generator'; + * + * // or use require: + * // const { default: ical } = require('ical-generator'); + * const cal = ical({domain: 'sebbo.net'}); + * + * // is the same as + * + * const cal = ical().domain('sebbo.net'); + * + * // is the same as + * + * const cal = ical(); + * cal.domain('sebbo.net'); + * ``` + * + * @param data Calendar data + */ +function ical(data?: ICalCalendarData): ICalCalendar { + return new ICalCalendar(data); +} + +export default ical; + +export { + default as ICalAlarm, + ICalAlarmData, + ICalAlarmBaseData, + ICalAlarmJSONData, + ICalAlarmRelatesTo, + ICalAlarmRepeatData, + ICalAlarmTriggerData, + ICalAlarmTriggerAfterData, + ICalAlarmTriggerBeforeData, + ICalAlarmType, + ICalAlarmTypeValue, + ICalAttachment, +} from './alarm.ts'; + +export { + default as ICalAttendee, + ICalAttendeeData, + ICalAttendeeType, + ICalAttendeeRole, + ICalAttendeeStatus, + ICalAttendeeJSONData +} from './attendee.ts'; + +export { + default as ICalCalendar, + ICalCalendarData, + ICalCalendarProdIdData, + ICalCalendarMethod, + ICalCalendarJSONData +} from './calendar.ts'; + +export { + default as ICalCategory, + ICalCategoryData, + ICalCategoryJSONData +} from './category.ts'; + +export { + default as ICalEvent, + ICalEventStatus, + ICalEventBusyStatus, + ICalEventTransparency, + ICalEventData, + ICalEventJSONData, + ICalEventJSONRepeatingData, + ICalEventClass, +} from './event.ts'; + +export { + ICalDateTimeValue, + ICalRepeatingOptions, + ICalLocation, + ICalLocationWithTitle, + ICalLocationWithoutTitle, + ICalGeo, + ICalOrganizer, + ICalDescription, + ICalEventRepeatingFreq, + ICalWeekday, + ICalTimezone, + ICalMomentStub, + ICalMomentTimezoneStub, + ICalMomentDurationStub, + ICalLuxonDateTimeStub, + ICalDayJsStub, + ICalRRuleStub +} from './types.ts'; + +export { + formatDate, + formatDateTZ, + escape, + foldLines +} from './tools.ts'; diff --git a/src/lib/index.ts b/src/lib/index.ts deleted file mode 100644 index 675e159bc..000000000 --- a/src/lib/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default class Magic { - static double (n: number): number { - return n + n; - } -} diff --git a/src/tools.ts b/src/tools.ts new file mode 100755 index 000000000..0aa861d2a --- /dev/null +++ b/src/tools.ts @@ -0,0 +1,410 @@ +'use strict'; + +import { + ICalDateTimeValue, + ICalDayJsStub, + ICalLuxonDateTimeStub, + ICalMomentDurationStub, + ICalMomentStub, + ICalMomentTimezoneStub, + ICalOrganizer, ICalRRuleStub +} from './types.ts'; + +/** + * Converts a valid date/time object supported by this library to a string. + */ +export function formatDate (timezone: string | null, d: ICalDateTimeValue, dateonly?: boolean, floating?: boolean): string { + if(timezone?.startsWith('/')) { + timezone = timezone.substr(1); + } + + if(typeof d === 'string' || d instanceof Date) { + const m = new Date(d); + + // (!dateonly && !floating) || !timezone => utc + let s = m.getUTCFullYear() + + String(m.getUTCMonth() + 1).padStart(2, '0') + + m.getUTCDate().toString().padStart(2, '0'); + + // (dateonly || floating) && timezone => tz + if(timezone) { + s = m.getFullYear() + + String(m.getMonth() + 1).padStart(2, '0') + + m.getDate().toString().padStart(2, '0'); + } + + if(dateonly) { + return s; + } + + if(timezone) { + s += 'T' + m.getHours().toString().padStart(2, '0') + + m.getMinutes().toString().padStart(2, '0') + + m.getSeconds().toString().padStart(2, '0'); + + return s; + } + + s += 'T' + m.getUTCHours().toString().padStart(2, '0') + + m.getUTCMinutes().toString().padStart(2, '0') + + m.getUTCSeconds().toString().padStart(2, '0') + + (floating ? '' : 'Z'); + + return s; + } + else if(isMoment(d)) { + // @see https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/ + const m = timezone + ? (isMomentTZ(d) && !d.tz() ? d.clone().tz(timezone) : d) + : (floating || (dateonly && isMomentTZ(d) && d.tz()) ? d : d.utc()); + + return m.format('YYYYMMDD') + (!dateonly ? ( + 'T' + m.format('HHmmss') + (floating || timezone ? '' : 'Z') + ) : ''); + } + else if(isLuxonDate(d)) { + const m = timezone + ? d.setZone(timezone) + : (floating || (dateonly && d.zone.type !== 'system') ? d : d.setZone('utc')); + + return m.toFormat('yyyyLLdd') + (!dateonly ? ( + 'T' + m.toFormat('HHmmss') + (floating || timezone ? '' : 'Z') + ) : ''); + } + else { + // @see https://day.js.org/docs/en/plugin/utc + + let m = d; + if(timezone) { + // @see https://day.js.org/docs/en/plugin/timezone + // @ts-ignore + m = typeof d.tz === 'function' ? d.tz(timezone) : d; + } + else if(floating) { + // m = d; + } + + // @ts-ignore + else if (typeof d.utc === 'function') { + // @ts-ignore + m = d.utc(); + } + else { + throw new Error('Unable to convert dayjs object to UTC value: UTC plugin is not available!'); + } + + return m.format('YYYYMMDD') + (!dateonly ? ( + 'T' + m.format('HHmmss') + (floating || timezone ? '' : 'Z') + ) : ''); + } +} + +/** + * Converts a valid date/time object supported by this library to a string. + * For information about this format, see RFC 5545, section 3.3.5 + * https://tools.ietf.org/html/rfc5545#section-3.3.5 + */ +export function formatDateTZ (timezone: string | null, property: string, date: ICalDateTimeValue | Date | string, eventData?: {floating?: boolean | null, timezone?: string | null}): string { + let tzParam = ''; + let floating = eventData?.floating || false; + + if (eventData?.timezone) { + tzParam = ';TZID=' + eventData.timezone; + + // This isn't a 'floating' event because it has a timezone; + // but we use it to omit the 'Z' UTC specifier in formatDate() + floating = true; + } + + return property + tzParam + ':' + formatDate(timezone, date, false, floating); +} + +/** + * Escapes special characters in the given string + */ +export function escape (str: string | unknown, inQuotes: boolean): string { + return String(str).replace(inQuotes ? /[\\"]/g : /[\\;,]/g, function (match) { + return '\\' + match; + }).replace(/(?:\r\n|\r|\n)/g, '\\n'); +} + +/** + * Trim line length of given string + */ +export function foldLines (input: string): string { + return input.split('\r\n').map(function (line) { + let result = ''; + let c = 0; + for (let i = 0; i < line.length; i++) { + let ch = line.charAt(i); + + // surrogate pair, see https://mathiasbynens.be/notes/javascript-encoding#surrogate-pairs + if (ch >= '\ud800' && ch <= '\udbff') { + ch += line.charAt(++i); + } + + // TextEncoder is available in browsers and node.js >= 11.0.0 + const charsize = new TextEncoder().encode(ch).length; + c += charsize; + if (c > 74) { + result += '\r\n '; + c = charsize; + } + + result += ch; + } + return result; + }).join('\r\n'); +} + +export function addOrGetCustomAttributes (data: {x: [string, string][]}, keyOrArray: ({key: string, value: string})[] | [string, string][] | Record): void; +export function addOrGetCustomAttributes (data: {x: [string, string][]}, keyOrArray: string, value: string): void; +export function addOrGetCustomAttributes (data: {x: [string, string][]}): ({key: string, value: string})[]; +export function addOrGetCustomAttributes (data: {x: [string, string][]}, keyOrArray?: ({key: string, value: string})[] | [string, string][] | Record | string | undefined, value?: string | undefined): void | ({key: string, value: string})[] { + if (Array.isArray(keyOrArray)) { + data.x = keyOrArray.map((o: {key: string, value: string} | [string, string]) => { + if(Array.isArray(o)) { + return o; + } + if (typeof o.key !== 'string' || typeof o.value !== 'string') { + throw new Error('Either key or value is not a string!'); + } + if (o.key.substr(0, 2) !== 'X-') { + throw new Error('Key has to start with `X-`!'); + } + + return [o.key, o.value] as [string, string]; + }); + } + else if (typeof keyOrArray === 'object') { + data.x = Object.entries(keyOrArray).map(([key, value]) => { + if (typeof key !== 'string' || typeof value !== 'string') { + throw new Error('Either key or value is not a string!'); + } + if (key.substr(0, 2) !== 'X-') { + throw new Error('Key has to start with `X-`!'); + } + + return [key, value]; + }); + } + else if (typeof keyOrArray === 'string' && typeof value === 'string') { + if (keyOrArray.substr(0, 2) !== 'X-') { + throw new Error('Key has to start with `X-`!'); + } + + data.x.push([keyOrArray, value]); + } + else { + return data.x.map(a => ({ + key: a[0], + value: a[1] + })); + } +} + +export function generateCustomAttributes (data: {x: [string, string][]}): string { + const str = data.x + .map(([key, value]) => key.toUpperCase() + ':' + escape(value, false)) + .join('\r\n'); + return str.length ? str + '\r\n' : ''; +} + +/** + * Check the given string or ICalOrganizer. Parses + * the string for name and email address if possible. + * + * @param attribute Attribute name for error messages + * @param value Value to parse name/email from + */ +export function checkNameAndMail (attribute: string, value: string | ICalOrganizer): ICalOrganizer { + let result: ICalOrganizer | null = null; + + if (typeof value === 'string') { + const match = value.match(/^(.+) ?<([^>]+)>$/); + if (match) { + result = { + name: match[1].trim(), + email: match[2].trim() + }; + } + else if(value.includes('@')) { + result = { + name: value.trim(), + email: value.trim() + }; + } + } + else if (typeof value === 'object') { + result = { + name: value.name, + email: value.email, + mailto: value.mailto, + sentBy: value.sentBy + }; + } + + if (!result && typeof value === 'string') { + throw new Error( + '`' + attribute + '` isn\'t formated correctly. See https://sebbo2002.github.io/ical-generator/develop/'+ + 'reference/interfaces/ICalOrganizer.html' + ); + } + else if (!result) { + throw new Error( + '`' + attribute + '` needs to be a valid formed string or an object. See https://sebbo2002.github.io/'+ + 'ical-generator/develop/reference/interfaces/ICalOrganizer.html' + ); + } + + if (!result.name) { + throw new Error('`' + attribute + '.name` is empty!'); + } + + return result; +} + +/** + * Checks if the given string `value` is a + * valid one for the type `type` + */ +export function checkEnum(type: Record, value: unknown): unknown { + const allowedValues = Object.values(type); + const valueStr = String(value).toUpperCase(); + + if (!valueStr || !allowedValues.includes(valueStr)) { + throw new Error(`Input must be one of the following: ${allowedValues.join(', ')}`); + } + + return valueStr; +} + +/** + * Checks if the given input is a valid date and + * returns the internal representation (= moment object) + */ +export function checkDate(value: ICalDateTimeValue, attribute: string): ICalDateTimeValue { + + // Date & String + if( + (value instanceof Date && isNaN(value.getTime())) || + (typeof value === 'string' && isNaN(new Date(value).getTime())) + ) { + throw new Error(`\`${attribute}\` has to be a valid date!`); + } + if(value instanceof Date || typeof value === 'string') { + return value; + } + + // Luxon + if(isLuxonDate(value) && value.isValid === true) { + return value; + } + + // Moment / Moment Timezone + if((isMoment(value) || isDayjs(value)) && value.isValid()) { + return value; + } + + throw new Error(`\`${attribute}\` has to be a valid date!`); +} + +export function toDate(value: ICalDateTimeValue): Date { + if(typeof value === 'string' || value instanceof Date) { + return new Date(value); + } + + // @ts-ignore + if(isLuxonDate(value)) { + return value.toJSDate(); + } + + return value.toDate(); +} + +export function isMoment(value: ICalDateTimeValue): value is ICalMomentStub { + + // @ts-ignore + return value != null && value._isAMomentObject != null; +} +export function isMomentTZ(value: ICalDateTimeValue): value is ICalMomentTimezoneStub { + return isMoment(value) && 'tz' in value && typeof value.tz === 'function'; +} +export function isDayjs(value: ICalDateTimeValue): value is ICalDayJsStub { + return typeof value === 'object' && + value !== null && + !(value instanceof Date) && + !isMoment(value) && + !isLuxonDate(value); +} +export function isLuxonDate(value: ICalDateTimeValue): value is ICalLuxonDateTimeStub { + return typeof value === 'object' && value !== null && 'toJSDate' in value && typeof value.toJSDate === 'function'; +} + +export function isMomentDuration(value: unknown): value is ICalMomentDurationStub { + + // @ts-ignore + return value !== null && typeof value === 'object' && typeof value.asSeconds === 'function'; +} + +export function isRRule(value: unknown): value is ICalRRuleStub { + + // @ts-ignore + return value !== null && typeof value === 'object' && typeof value.between === 'function' && typeof value.toString === 'function'; +} + +export function toJSON(value: ICalDateTimeValue | null | undefined): string | null | undefined { + if(!value) { + return null; + } + if(typeof value === 'string') { + return value; + } + + return value.toJSON(); +} + +export function toDurationString(seconds: number): string { + let string = ''; + + // < 0 + if(seconds < 0) { + string = '-'; + seconds *= -1; + } + + string += 'P'; + + // DAYS + if(seconds >= 86400) { + string += Math.floor(seconds / 86400) + 'D'; + seconds %= 86400; + } + if(!seconds && string.length > 1) { + return string; + } + + string += 'T'; + + // HOURS + if(seconds >= 3600) { + string += Math.floor(seconds / 3600) + 'H'; + seconds %= 3600; + } + + // MINUTES + if(seconds >= 60) { + string += Math.floor(seconds / 60) + 'M'; + seconds %= 60; + } + + // SECONDS + if(seconds > 0) { + string += seconds + 'S'; + } + else if(string.length <= 2) { + string += '0S'; + } + + return string; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 000000000..d11deb4eb --- /dev/null +++ b/src/types.ts @@ -0,0 +1,118 @@ +/** + * ical-generator supports [native Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), + * [moment.js](https://momentjs.com/) (and [moment-timezone](https://momentjs.com/timezone/), [Day.js](https://day.js.org/en/) and + * [Luxon](https://moment.github.io/luxon/)'s [DateTime](https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html) + * objects. You can also pass a string which is then passed to javascript's Date internally. + */ +export type ICalDateTimeValue = Date | ICalMomentStub | ICalMomentTimezoneStub | ICalLuxonDateTimeStub | ICalDayJsStub | string; + +export interface ICalRepeatingOptions { + freq: ICalEventRepeatingFreq; + count?: number; + interval?: number; + until?: ICalDateTimeValue; + byDay?: ICalWeekday[] | ICalWeekday; + byMonth?: number[] | number; + byMonthDay?: number[] | number; + bySetPos?: number[] | number; + exclude?: ICalDateTimeValue[] | ICalDateTimeValue; + startOfWeek?: ICalWeekday; +} + +export type ICalLocation = ICalLocationWithTitle | ICalLocationWithoutTitle; + +export interface ICalLocationWithTitle { + title: string; + address?: string; + radius?: number; + geo?: ICalGeo; +} + +export interface ICalLocationWithoutTitle { + geo: ICalGeo; +} + +export interface ICalGeo { + lat: number; + lon: number; +} + +export interface ICalOrganizer { + name: string; + email?: string; + mailto?: string; + sentBy?: string; +} + +export interface ICalDescription { + plain: string; + html?: string; +} + +export interface ICalTimezone { + name: string | null; + generator?: (timezone: string) => string|null; +} + +export interface ICalMomentStub { + format(format?: string): string; + clone(): ICalMomentStub; + utc(): ICalMomentStub; + toDate(): Date; + isValid(): boolean; + toJSON(): string; +} + +export interface ICalMomentTimezoneStub extends ICalMomentStub { + clone(): ICalMomentTimezoneStub; + utc(): ICalMomentTimezoneStub; + tz(): string | undefined; + tz(timezone: string): ICalMomentTimezoneStub; +} + +export interface ICalMomentDurationStub { + asSeconds(): number; +} + +export interface ICalLuxonDateTimeStub { + setZone(zone?: string): ICalLuxonDateTimeStub; + zone: { type: string; }; + toFormat(fmt: string): string; + toJSDate(): Date; + get isValid(): boolean; + toJSON(): string | null; +} + +export interface ICalDayJsStub { + tz(zone?: string): ICalDayJsStub; + utc(): ICalDayJsStub; + format(format?: string): string; + toDate(): Date; + isValid(): boolean; + toJSON(): string; +} + +export interface ICalRRuleStub { + between(after: Date, before: Date, inc?: boolean, iterator?: (d: Date, len: number) => boolean): Date[]; + toString(): string; +} + +export enum ICalEventRepeatingFreq { + SECONDLY = 'SECONDLY', + MINUTELY = 'MINUTELY', + HOURLY = 'HOURLY', + DAILY = 'DAILY', + WEEKLY = 'WEEKLY', + MONTHLY = 'MONTHLY', + YEARLY = 'YEARLY' +} + +export enum ICalWeekday { + SU = 'SU', + MO = 'MO', + TU = 'TU', + WE = 'WE', + TH = 'TH', + FR = 'FR', + SA = 'SA' +} diff --git a/test/alarm.ts b/test/alarm.ts new file mode 100644 index 000000000..a973e8cdf --- /dev/null +++ b/test/alarm.ts @@ -0,0 +1,799 @@ +'use strict'; + +import assert from 'assert'; +import moment from 'moment-timezone'; + +import ICalCalendar from '../src/calendar.js'; +import ICalEvent from '../src/event.js'; +import ICalAlarm, { ICalAlarmRelatesTo, ICalAlarmType } from '../src/alarm.js'; +import ICalAttendee from '../src/attendee.js'; + + +describe('ical-generator Alarm', function () { + describe('constructor()', function () { + it('shouldn\'t work without event reference', function () { + assert.throws(function () { + // @ts-ignore + new ICalAlarm({type: ICalAlarmType.display}, null); + }, /`event`/); + }); + + it('should ignore unknown data attributes', function () { + const a = new ICalAlarm({ + // @ts-ignore + unknown: true, + type: ICalAlarmType.display + }, new ICalEvent({ + start: new Date() + }, new ICalCalendar())); + + assert.strictEqual(a.type(), 'display'); + }); + }); + + describe('type()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent({ + start: new Date() + }, new ICalCalendar())); + assert.deepStrictEqual(a, a.type(ICalAlarmType.display)); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent({ + start: new Date() + }, new ICalCalendar())); + assert.strictEqual(a.type(), 'display'); + + a.type(ICalAlarmType.audio); + assert.strictEqual(a.type(), 'audio'); + }); + + it('should throw error when type not allowed', function () { + const a = new ICalAlarm({}, new ICalEvent({ + start: new Date() + }, new ICalCalendar())); + assert.throws(function () { + // @ts-ignore + a.type('BANANA'); + }, /`type`/); + + assert.throws(function () { + // @ts-ignore + a.type(null); + }, /`type`/); + }); + + it('should change something', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + assert.ok(a.toString().indexOf('ACTION:DISPLAY') > -1); + }); + }); + + describe('trigger()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + assert.deepStrictEqual(a, a.trigger(60 * 10)); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + const now = new Date(); + + assert.strictEqual(a.trigger(), 600); + assert.strictEqual(a.triggerAfter(), -600); + + a.trigger(300); + assert.strictEqual(a.trigger(), 300); + assert.strictEqual(a.triggerAfter(), -300); + + // Date + a.trigger(now); + const dateResult = a.trigger(); + assert.deepStrictEqual(dateResult, now); + }); + + it('should throw error when trigger not allowed', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + assert.throws(function () { + a.trigger(Infinity); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.trigger('hi'); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.trigger(true); + }, /`trigger`/); + }); + + it('setter should work with date', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.trigger(new Date()); + assert.ok(a.trigger() instanceof Date); + }); + + it('setter should work with moment instance', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.trigger(moment()); + assert.ok(moment.isMoment(a.trigger())); + }); + + it('setter should work with number', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.trigger(2 * 60); + assert.strictEqual(a.trigger(), 120); + }); + + it('should change something', function () { + const trigger = moment('2015-02-01T13:38:45.000Z'); + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().includes('TRIGGER:-PT10M')); + + a.trigger(trigger); + assert.ok(a.toString().includes('TRIGGER;VALUE=DATE-TIME:20150201T133845Z')); + }); + }); + + describe('triggerAfter()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.triggerAfter(60 * 10)); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )).triggerAfter(300); + + assert.strictEqual(a.triggerAfter(), 300); + assert.strictEqual(a.trigger(), -300); + }); + + it('setter should work with number', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.triggerAfter(120); + assert.strictEqual(a.trigger(), -120); + }); + + it('setter should throw error when trigger not allowed', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + a.triggerAfter(Infinity); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.triggerAfter('hi'); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.triggerAfter(true); + }, /`trigger`/); + }); + + it('should change something', function () { + const trigger = moment('20150201T133845Z'); + const a = new ICalAlarm({ triggerAfter: 600 }, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().indexOf('TRIGGER;RELATED=END:PT10M') > -1); + + a.triggerAfter(trigger); + assert.ok(a.toString().indexOf('TRIGGER;VALUE=DATE-TIME:20150201T133845Z') > -1); + }); + }); + + describe('triggerBefore()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.triggerBefore(60 * 10)); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + const now = new Date(); + + assert.strictEqual(a.triggerBefore(), 600); + + a.trigger(300); + assert.strictEqual(a.triggerBefore(), 300); + + // Date + a.trigger(now); + const dateResult = a.triggerBefore(); + assert.deepStrictEqual(dateResult, now); + }); + + it('should throw error when trigger not allowed', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + a.triggerBefore(Infinity); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.triggerBefore('hi'); + }, /`trigger`/); + assert.throws(function () { + // @ts-ignore + a.triggerBefore(true); + }, /`trigger`/); + }); + + it('setter should work with date', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + const now = new Date(); + a.triggerBefore(now); + assert.deepStrictEqual(a.trigger(), now); + }); + + it('setter should work with moment instance', function () { + const a = new ICalAlarm({ triggerBefore: moment() }, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(moment.isMoment(a.trigger())); + }); + + it('setter should work with number', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.triggerBefore(2 * 60); + assert.strictEqual(a.trigger(), 120); + }); + + it('should change something', function () { + const trigger = moment('2015-02-01T13:38:45.000Z'); + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().indexOf('TRIGGER:-PT10M') > -1); + + a.triggerBefore(trigger); + assert.ok(a.toString().indexOf('TRIGGER;VALUE=DATE-TIME:20150201T133845Z') > -1); + }); + }); + + describe('relatesTo()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.relatesTo(null)); + assert.deepStrictEqual(a, a.relatesTo(ICalAlarmRelatesTo.end)); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.relatesTo(ICalAlarmRelatesTo.end); + assert.strictEqual(a.relatesTo(), ICalAlarmRelatesTo.end); + a.relatesTo(null); + assert.strictEqual(a.relatesTo(), null); + }); + + it('should throw if value is not `null`, "START" or "END"', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + // @ts-ignore + a.relatesTo('hi'); + }, /`relatesTo`/); + assert.throws(function () { + // @ts-ignore + a.relatesTo(true); + }, /`relatesTo`/); + assert.throws(function () { + // @ts-ignore + a.relatesTo(Infinity); + }, /`relatesTo`/); + }); + + it('should change RELATED', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().indexOf('RELATED=START') === -1); + + a.relatesTo(ICalAlarmRelatesTo.start); + assert.ok(a.toString().indexOf('RELATED=START') > -1); + + a.relatesTo(ICalAlarmRelatesTo.end); + assert.ok(a.toString().indexOf('RELATED=END') > -1); + }); + }); + + describe('repeat()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.repeat({ + times: 4, + interval: 60 + })); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.strictEqual(a.repeat(), null); + a.repeat({ times: 4, interval: 60 }); + assert.deepStrictEqual(a.repeat(), { times: 4, interval: 60 }); + }); + + it('should throw error if repeat not allowed', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + a.repeat({ + times: Infinity, + interval: 60 + }); + }, /`repeat.times`/); + assert.throws(function () { + a.repeat({ + // @ts-ignore + times: 'hi', + interval: 60 + }); + }, /`repeat.times`/); + assert.throws(function () { + a.repeat({ + // @ts-ignore + times: true, + interval: 60 + }); + }, /`repeat.times`/); + + assert.throws(function () { + a.repeat({ + times: 4, + interval: Infinity + }); + }, /`repeat.interval`/); + assert.throws(function () { + a.repeat({ + times: 4, + // @ts-ignore + interval: 'hi' + }); + }, /`repeat.interval`/); + assert.throws(function () { + a.repeat({ + times: 4, + // @ts-ignore + interval: true + }); + }, /`repeat.interval`/); + }); + + it('should change something', function () { + const a = new ICalAlarm({ + trigger: 300, + repeat: { + times: 42, + interval: 90 + } + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().includes('REPEAT:42')); + assert.ok(a.toString().includes('DURATION:PT1M30S')); + + a.repeat(null); + assert.ok(!a.toString().includes('REPEAT:42')); + assert.ok(!a.toString().includes('DURATION:PT1M30S')); + }); + + it('should throw an error if repeat is set but interval isn\'t', function () { + assert.throws(function () { + new ICalAlarm( + { + trigger: 300, + repeat: { + times: 4, + // @ts-ignore + interval: null + } + }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + }, /`repeat.interval`/); + }); + + it('should throw an error if interval is set but repeat isn\'t', function () { + assert.throws(function () { + new ICalAlarm({ + trigger: 300, + repeat: { + // @ts-ignore + times: null, + interval: 60 + } + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + }, /`repeat.times`/); + }); + + it('should throw an error if interval is of wrong type', function () { + assert.throws(function () { + new ICalAlarm({ + trigger: 300, + // @ts-ignore + repeat: true + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + }, /`repeat` is not correct, must be an object!/); + }); + }); + + describe('attach()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.attach(null)); + assert.deepStrictEqual(a, a.attach('https://sebbo.net/beep.aud')); + }); + + it('getter should return value', function () { + const t = {uri: 'https://example.com/alarm.aud', mime: 'audio/basic'}; + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.strictEqual(a.attach(), null); + + a.attach(t); + assert.deepStrictEqual(a.attach(), t); + + a.attach('https://www.example.com/beep.aud'); + assert.deepStrictEqual(a.attach(), { + uri: 'https://www.example.com/beep.aud', + mime: null + }); + + a.attach({ + uri: 'https://www.example.com/beep.aud' + }); + assert.deepStrictEqual(a.attach(), { + uri: 'https://www.example.com/beep.aud', + mime: null + }); + + a.attach(null); + assert.strictEqual(a.attach(), null); + }); + + it('should throw error withour uri', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + // @ts-ignore + a.attach({mime: 'audio/basic'}); + }, /`attach.uri`/); + }); + + it('should throw error when unknown format', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.throws(function () { + // @ts-ignore + a.attach(Infinity); + }, /`attachment`/); + }); + + it('should change something', function () { + const a = new ICalAlarm({ type: ICalAlarmType.audio }, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().indexOf('\r\nATTACH;VALUE=URI:Basso') > -1); + + a.attach('https://example.com/beep.aud'); + assert.ok(a.toString().indexOf('\r\nATTACH;VALUE=URI:https://example.com/beep.aud') > -1); + + a.attach({ + uri: 'https://example.com/beep.aud', + mime: 'audio/basic' + }); + assert.ok(a.toString().indexOf('\r\nATTACH;FMTTYPE=audio/basic:https://example.com/beep.aud') > -1); + }); + }); + + describe('description()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.description(null)); + assert.deepStrictEqual(a, a.description('Hey Ho!')); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a.description(), null); + a.description('blablabla'); + assert.deepStrictEqual(a.description(), 'blablabla'); + a.description(null); + assert.deepStrictEqual(a.description(), null); + }); + + it('should change something', function () { + const a = new ICalAlarm({ + description: 'Huibuh!' + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().indexOf('\r\nDESCRIPTION:Huibuh') > -1); + }); + + it('should fallback to event summary', function () { + const a = new ICalAlarm({ description: 'Example Event' }, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.ok(a.toString().indexOf('\r\nDESCRIPTION:Example Event') > -1); + }); + }); + + describe('summary()', function () { + it('setter should return this', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.summary(null)); + assert.deepStrictEqual(a, a.summary('Hey Ho!')); + }); + + it('getter should return value', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a.summary(), null); + a.summary('blablabla'); + assert.deepStrictEqual(a.summary(), 'blablabla'); + a.summary(null); + assert.deepStrictEqual(a.summary(), null); + }); + + it('should change something', function () { + const a = new ICalAlarm({ + type: ICalAlarmType.email, + summary: 'Huibuh!' + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().indexOf('\r\nSUMMARY:Huibuh') > -1); + }); + + it('should fallback to event summary', function () { + const a = new ICalAlarm( + { type: ICalAlarmType.email }, + new ICalEvent({ start: new Date(), summary: 'Example Event' }, new ICalCalendar()) + ); + + assert.ok(a.toString().indexOf('\r\nSUMMARY:Example Event') > -1); + }); + }); + + describe('createAttendee()', function () { + it('if Attendee passed, it should add and return it', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + }); + + const attendee = new ICalAttendee({ email: 'mail@example.com' }, alarm); + assert.strictEqual(alarm.createAttendee(attendee), attendee, 'createAttendee returns attendee'); + assert.deepStrictEqual(alarm.attendees()[0], attendee, 'attendee pushed'); + }); + + it('should return a ICalAttendee instance', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + });; + + assert.ok(alarm.createAttendee({ email: 'mail@example.com' }) instanceof ICalAttendee); + assert.strictEqual(alarm.attendees.length, 1, 'attendee pushed'); + }); + + it('should accept string', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + });; + const attendee = alarm.createAttendee('Zac '); + + assert.strictEqual(attendee.name(), 'Zac'); + assert.strictEqual(attendee.email(), 'zac@example.com'); + assert.strictEqual(alarm.attendees().length, 1, 'attendee pushed'); + }); + + it('should throw error when string misformated', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + });; + assert.throws(function () { + alarm.createAttendee('foo bar'); + }, /isn't formated correctly/); + }); + + it('should accept object', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + }); + const attendee = alarm.createAttendee({name: 'Zac', email: 'zac@example.com'}); + + assert.strictEqual(attendee.name(), 'Zac'); + assert.strictEqual(attendee.email(), 'zac@example.com'); + assert.strictEqual(alarm.attendees().length, 1, 'attendee pushed'); + assert.ok(alarm.toString().includes('ATTENDEE;ROLE=REQ-PARTICIPANT;CN="Zac":MAILTO:zac@example.com')); + }); + }); + + describe('attendees()', function () { + it('getter should return an array of attendees…', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + }); + assert.strictEqual(alarm.attendees().length, 0); + + const attendee = alarm.createAttendee({ email: 'mail@example.com' }); + assert.strictEqual(alarm.attendees().length, 1); + assert.deepStrictEqual(alarm.attendees()[0], attendee); + }); + + it('setter should add attendees and return this', function () { + const alarm = new ICalEvent({ start: new Date() }, new ICalCalendar()).createAlarm({ + type: ICalAlarmType.email + }); + const foo = alarm.attendees([ + { name: 'Person A', email: 'a@example.com' }, + { name: 'Person B', email: 'b@example.com' } + ]); + + assert.strictEqual(alarm.attendees().length, 2); + assert.deepStrictEqual(foo, alarm); + }); + }); + + describe('x()', function () { + it('is there', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + assert.deepStrictEqual(a, a.x('X-FOO', 'bar')); + }); + }); + + describe('toJSON()', function () { + it('should work', function() { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + a.type(ICalAlarmType.display); + a.trigger(120); + + assert.deepStrictEqual(a.toJSON(), { + attach: null, + attendees: [], + description: null, + relatesTo: null, + interval: null, + repeat: null, + summary: null, + trigger: 120, + type: 'display', + x: [] + }); + }); + + it('should be compatible with constructor (type check)', function () { + const a = new ICalAlarm({}, new ICalEvent( + { start: new Date() }, + new ICalCalendar() + )); + + new ICalAlarm(a.toJSON(), new ICalEvent({ start: new Date() }, new ICalCalendar())); + }); + }); +}); diff --git a/test/attendee.ts b/test/attendee.ts new file mode 100644 index 000000000..1dbef7290 --- /dev/null +++ b/test/attendee.ts @@ -0,0 +1,561 @@ +'use strict'; + +import assert from 'assert'; +import ICalCalendar from '../src/calendar.js'; +import ICalEvent from '../src/event.js'; +import ICalAttendee, { + ICalAttendeeData, + ICalAttendeeRole, + ICalAttendeeStatus, + ICalAttendeeType +} from '../src/attendee.js'; + +describe('ical-generator Attendee', function () { + describe('constructor()', function () { + it('shoud set data from constructor', function () { + const data: ICalAttendeeData = { + name: 'John Doe', + email: 'john@example.org', + mailto: 'john+calendar@example.org', + sentBy: null, + status: ICalAttendeeStatus.ACCEPTED, + role: ICalAttendeeRole.REQ, + rsvp: false, + type: ICalAttendeeType.INDIVIDUAL, + delegatedTo: null, + delegatedFrom: null, + x: [] + }; + const event = new ICalAttendee( + data, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(event.toJSON(), data); + }); + + it('shouldn\'t work without event reference', function () { + assert.throws(function () { + // @ts-ignore + new ICalAttendee({ email: 'foo@bar.com' }); + }, /`event`/); + }); + + it('should throw an error without email', function () { + assert.throws(function () { + new ICalAttendee( + + // @ts-ignore + { name: 'Testuser' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + }, /`email`/); + }); + }); + + describe('name()', function () { + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.name(), null); + + a.name('Sebastian'); + assert.strictEqual(a.name(), 'Sebastian'); + }); + + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.name(null)); + assert.deepStrictEqual(a, a.name('Sebastian')); + }); + + it('setter should change something', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + + a.name('Sebastian'); + assert.strictEqual(a.name(), 'Sebastian'); + + a.name(null); + assert.strictEqual(a.name(), null); + }); + }); + + describe('email()', function () { + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ).email('foo@example.com'); + assert.strictEqual(a.email(), 'foo@example.com'); + }); + + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.email('foo@example.com')); + }); + + it('should change something', function () { + const a = new ICalAttendee( + { email: 'mail@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().indexOf('mail@example.com') > -1); + }); + }); + + describe('mailto()', function () { + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.mailto(), null); + + a.mailto('foo@example.com'); + assert.strictEqual(a.mailto(), 'foo@example.com'); + }); + + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.mailto(null)); + assert.deepStrictEqual(a, a.mailto('foo@example.com')); + }); + + it('should change mailto and keep email if present', function () { + const a = new ICalAttendee( + { email: 'mail@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + a.mailto('mail2@example2.com'); + assert.ok( + a.toString().indexOf('EMAIL=mail@example.com') > -1 && + a.toString().indexOf('MAILTO:mail2@example2.com') > -1 + ); + }); + }); + + describe('sentBy()', function () { + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ).sentBy('foo@example.com'); + assert.strictEqual(a.sentBy(), 'foo@example.com'); + }); + + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.sentBy('foo@example.com')); + }); + + it('should change something', function () { + const a = new ICalAttendee( + { email: 'foo@example.com', sentBy: 'bar@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().includes('bar@example.com')); + }); + }); + + describe('role()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.role(ICalAttendeeRole.REQ)); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ).role(ICalAttendeeRole.REQ); + assert.strictEqual(a.role(), 'REQ-PARTICIPANT'); + }); + + it('should throw error when method empty', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.throws(function () { + // @ts-ignore + a.role(''); + }, /Input must be one of the following: CHAIR, REQ-PARTICIPANT, OPT-PARTICIPANT, NON-PARTICIPANT/); + }); + + it('should throw error when method not allowed', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.throws(function () { + // @ts-ignore + a.role('COOKING'); + }, /must be one of the following/); + }); + + it('should change something', function () { + const a = new ICalAttendee( + { email: 'mail@example.com', role: ICalAttendeeRole.NON }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().indexOf('NON-PARTICIPANT') > -1); + }); + }); + + describe('rsvp()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.rsvp(null)); + assert.deepStrictEqual(a, a.rsvp(true)); + }); + + it('setter should also work with booleans', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + + a.rsvp(true); + assert.strictEqual(a.rsvp(), true); + + a.rsvp(false); + assert.strictEqual(a.rsvp(), false); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.rsvp(), null); + a.rsvp(false); + assert.strictEqual(a.rsvp(), false); + a.rsvp(null); + assert.strictEqual(a.rsvp(), null); + }); + + it('should change something', function () { + const a = new ICalAttendee( + { email: 'mail@example.com', rsvp: true }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().indexOf(';RSVP=TRUE') > -1); + }); + }); + + describe('status()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.status(null)); + assert.deepStrictEqual(a, a.status(ICalAttendeeStatus.ACCEPTED)); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.status(), null); + + a.status(ICalAttendeeStatus.ACCEPTED); + assert.strictEqual(a.status(), 'ACCEPTED'); + + a.status(null); + assert.strictEqual(a.status(), null); + }); + + it('should throw error when method not allowed', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.throws(function () { + // @ts-ignore + a.status('DRINKING'); + }, /must be one of the following/); + }); + + it('should change something', function () { + const a = new ICalAttendee( + { email: 'mail@example.com', status: ICalAttendeeStatus.DECLINED }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().indexOf('DECLINED') > -1); + }); + + it('should change something too', function () { + const a = new ICalAttendee( + { email: 'mail@example.com', status: ICalAttendeeStatus.NEEDSACTION }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.toString().indexOf('NEEDS-ACTION') > -1); + }); + }); + + describe('type()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a.type(null), a); + assert.deepStrictEqual(a.type(ICalAttendeeType.INDIVIDUAL), a); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.type(), null); + a.type(ICalAttendeeType.ROOM); + assert.strictEqual(a.type(), 'ROOM'); + a.type(null); + assert.strictEqual(a.type(), null); + }); + + it('should throw error when method not allowed', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.throws(function () { + // @ts-ignore + a.type('DRINKING'); + }, /must be one of the following/); + }); + + it('should change something', function () { + const a = new ICalAttendee({ + email: 'mailing-list@example.com', + type: ICalAttendeeType.GROUP + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().indexOf('GROUP') > -1); + }); + }); + + describe('delegatedTo()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.delegatedTo(null)); + assert.deepStrictEqual(a, a.delegatedTo('foo@example.com')); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.delegatedTo(), null); + + a.delegatedTo('foo@example.com'); + const result = a.delegatedTo(); + assert.ok(result); + assert.strictEqual(result.email(), 'foo@example.com'); + + a.delegatedTo(null); + assert.strictEqual(a.delegatedTo(), null); + }); + + it('should change something', function () { + const a = new ICalAttendee({ + email: 'mail@example.com', + delegatedTo: 'foo@example.com' + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().indexOf('foo@example') > -1); + }); + }); + + describe('delegatedFrom()', function () { + it('setter should return this', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.delegatedFrom(null)); + assert.deepStrictEqual(a, a.delegatedFrom('foo@example.com')); + }); + + it('getter should return value', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(a.delegatedFrom(), null); + + a.delegatedFrom('foo@example.com'); + let result = a.delegatedFrom(); + assert.ok(result); + assert.strictEqual(result.email(), 'foo@example.com'); + + a.delegatedFrom({ + name: 'Max Mustermann', + email: 'max.mustermann@example.com' + }); + result = a.delegatedFrom(); + assert.ok(result); + assert.strictEqual(result.name(), 'Max Mustermann'); + assert.strictEqual(result.email(), 'max.mustermann@example.com'); + + a.delegatedFrom(null); + assert.strictEqual(a.delegatedFrom(), null); + }); + + it('should change something', function () { + const a = new ICalAttendee({ + email: 'mail@example.com', + delegatedFrom: 'foo@example.com' + }, new ICalEvent({ start: new Date() }, new ICalCalendar())); + assert.ok(a.toString().indexOf('foo@example.com') > -1); + }); + }); + + describe('delegatesTo()', function () { + it('should return a new ICalAttendee instance by default', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.delegatesTo({ email: 'mail@example.com' }) instanceof ICalAttendee); + }); + + it('should reuse the same ICalAttendee instance if passed', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const attendee = new ICalAttendee({ + name: 'Muh', + email: 'muh@example.com' + }, event); + + assert.deepStrictEqual( + new ICalAttendee({ email: 'foo@example.com' }, event).delegatesTo(attendee), + attendee + ); + }); + + it('should pass data to instance', function () { + const attendee = new ICalAttendee( + { name: 'Zac', email: 'zac@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ).delegatesTo({ name: 'Cody', email: 'cody@example.com' }); + + assert.strictEqual(attendee.name(), 'Cody'); + }); + }); + + describe('delegatesFrom()', function () { + it('should return a new ICalAttendee instance by default', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.ok(a.delegatesFrom({ + email: 'bar@example.com' + }) instanceof ICalAttendee); + }); + + it('should reuse the same ICalAttendee instance if passed', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const attendee = new ICalAttendee({ + name: 'Muh', + email: 'muh@example.com' + }, event); + + assert.deepStrictEqual( + new ICalAttendee({ email: 'bar@example.com'}, event).delegatesFrom(attendee), + attendee + ); + }); + + it('should pass data to instance', function () { + const a = new ICalAttendee( + { name: 'Zac', email: 'zac@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ).delegatesFrom({ name: 'Cody', email: 'cody@example.com' }); + assert.strictEqual(a.name(), 'Cody'); + + const b = new ICalAttendee( + { + name: 'Zac', + email: 'zac@example.com', + delegatesFrom: { name: 'Cody', email: 'cody@example.com' } + }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.strictEqual(b.name(), 'Zac'); + }); + }); + + describe('x()', function () { + it('works as expected', function () { + const a = new ICalAttendee( + { email: 'foo@example.org' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + assert.deepStrictEqual(a, a.x('X-NUM-GUESTS', '5')); + assert.ok(a.toString().includes('ATTENDEE;ROLE=REQ-PARTICIPANT;X-NUM-GUESTS=5:MAILTO:foo@example.org')); + }); + }); + + describe('toJSON()', function () { + it('should work', function () { + const a = new ICalAttendee( + { name: 'Max Mustermann', email: 'max@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + a.delegatesTo('Moritz '); + + assert.deepStrictEqual(a.toJSON(), { + delegatedFrom: null, + delegatedTo: 'moritz@example.com', + email: 'max@example.com', + mailto: null, + sentBy: null, + name: 'Max Mustermann', + role: 'REQ-PARTICIPANT', + rsvp: null, + status: 'DELEGATED', + type: null, + x: [] + }); + }); + + it('should be compatible with constructor (type check)', function () { + const a = new ICalAttendee( + { email: 'foo@example.com' }, + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + new ICalAttendee( + a.toJSON(), + new ICalEvent({ start: new Date() }, new ICalCalendar()) + ); + }); + }); +}); diff --git a/test/calendar.ts b/test/calendar.ts new file mode 100644 index 000000000..8baa5be79 --- /dev/null +++ b/test/calendar.ts @@ -0,0 +1,583 @@ +'use strict'; + +import assert from 'assert'; +import moment from 'moment'; +import ICalCalendar, {ICalCalendarJSONData, ICalCalendarMethod} from '../src/calendar.js'; +import ICalEvent from '../src/event.js'; +import {getVtimezoneComponent} from '@touch4it/ical-timezones'; + +describe('ical-generator Calendar', function () { + describe('constructor()', function () { + it('shoud load json export', function () { + const data: ICalCalendarJSONData = { + prodId: '//sebbo.net//ical-generator//EN', + method: ICalCalendarMethod.PUBLISH, + name: 'Test Calendar', + description: 'Hi, I am the description.', + timezone: null, + url: 'https://github.com/sebbo2002/ical-generator', + source: 'http://example.com/my/original_source.ical', + scale: null, + ttl: null, + events: [], + x: [] + }; + const cal = new ICalCalendar(data); + assert.deepStrictEqual(cal.toJSON(), data); + }); + }); + + describe('prodId()', function () { + it('getter should return value', function () { + const cal = new ICalCalendar(); + cal.prodId('//loremipsum.de//ical-tests//EN'); + assert.strictEqual(cal.prodId(), '//loremipsum.de//ical-tests//EN'); + }); + + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.prodId('//loremipsum.de//ical-tests//EN')); + }); + + it('should throw error when not string/object', function () { + const cal = new ICalCalendar(); + assert.throws(function () { + // @ts-ignore + cal.prodId(256); + }, /`prodid`/); + }); + + it('should throw error when no company given', function () { + const cal = new ICalCalendar(); + assert.throws(function () { + // @ts-ignore + cal.prodId({ + product: 'ical-tests' + }); + }, /`prodid\.company`/); + }); + + it('should throw error when no product given', function () { + const cal = new ICalCalendar(); + assert.throws(function () { + // @ts-ignore + cal.prodId({ + company: 'sebbo.net' + }); + }, /`prodid\.product`/); + }); + + it('should change something #1', function () { + const cal = new ICalCalendar().prodId({ + company: 'loremipsum.com', + product: 'awesome-unit-tests' + }); + + assert.strictEqual(cal.prodId(), '//loremipsum.com//awesome-unit-tests//EN'); + }); + + it('should change something #2', function () { + const cal = new ICalCalendar().prodId({ + company: 'loremipsum.com', + product: 'awesome-unit-tests', + language: 'DE' + }); + + assert.strictEqual(cal.prodId(), '//loremipsum.com//awesome-unit-tests//DE'); + }); + }); + + describe('method()', function () { + it('setter should return this', function () { + const c = new ICalCalendar(); + assert.deepStrictEqual(c, c.method(null), 'method(null)'); + assert.deepStrictEqual(c, c.method(ICalCalendarMethod.PUBLISH), 'method(enum)'); + }); + + it('getter should return value', function () { + const c = new ICalCalendar(); + assert.strictEqual(c.method(), null); + c.method(null); + assert.strictEqual(c.method(), null); + c.method(ICalCalendarMethod.PUBLISH); + assert.strictEqual(c.method(), 'PUBLISH'); + c.method(null); + assert.strictEqual(c.method(), null); + }); + + it('should throw error when method not allowed', function () { + const c = new ICalCalendar(); + assert.throws(function () { + // @ts-ignore + c.method('KICK ASS'); + }, /Input must be one of the following: PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER, DECLINECOUNTER/); + }); + + it('should change something', function () { + const c = new ICalCalendar({method: ICalCalendarMethod.PUBLISH}); + assert.strictEqual(c.method(), 'PUBLISH'); + + c.method(ICalCalendarMethod.ADD); + assert.strictEqual(c.method(), 'ADD'); + }); + }); + + describe('name()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.name(null)); + assert.deepStrictEqual(cal, cal.name('Testevents')); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.name(), null); + cal.name('Testevents'); + assert.strictEqual(cal.name(), 'Testevents'); + cal.name(null); + assert.strictEqual(cal.name(), null); + }); + + it('should change something', function () { + const cal = new ICalCalendar().name('Testevents'); + cal.createEvent({ + start: new Date(), + summary: 'Example Event' + }); + assert.strictEqual(cal.name(), 'Testevents'); + }); + }); + + describe('description()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.description(null)); + assert.deepStrictEqual(cal, cal.description('Testbeschreibung')); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.description(), null); + cal.description('Testbeschreibung'); + assert.strictEqual(cal.description(), 'Testbeschreibung'); + cal.description(null); + assert.strictEqual(cal.description(), null); + }); + + it('should change something', function () { + const cal = new ICalCalendar().description('Testbeschreibung'); + cal.createEvent({ + start: new Date(), + summary: 'Example Event' + }); + + assert.ok(cal.description(), 'Testbeschreibung'); + }); + }); + + describe('timezone()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.timezone('Europe/Berlin')); + assert.deepStrictEqual(cal, cal.timezone(null)); + assert.deepStrictEqual(cal, cal.timezone({ + name: 'Europe/Berlin', + generator: getVtimezoneComponent + })); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar().timezone('Europe/Berlin'); + assert.strictEqual(cal.timezone(), 'Europe/Berlin'); + + cal.timezone(null); + assert.strictEqual(cal.timezone(), null); + + cal.timezone({name: 'Europe/Berlin'}); + assert.strictEqual(cal.timezone(), 'Europe/Berlin'); + }); + + it('setting UTC should reset timezone as UTC is the default', function () { + const cal = new ICalCalendar().timezone('Europe/Berlin'); + assert.strictEqual(cal.timezone(), 'Europe/Berlin'); + + cal.timezone('UTC'); + assert.strictEqual(cal.timezone(), null); + }); + }); + + describe('ttl()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal.ttl(60 * 60 * 24), cal); + assert.deepStrictEqual(cal.ttl(moment.duration(2, 'days')), cal); + assert.deepStrictEqual(cal.ttl(null), cal); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.ttl(), null); + cal.ttl(86400); + assert.strictEqual(cal.ttl(), 86400); + }); + + it('should change something', function () { + const cal = new ICalCalendar().ttl(86400); + assert.strictEqual(cal.ttl(), 86400); + }); + }); + + describe('source()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.source('http://example.com/my/original_source.ical')); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.source(), null); + + cal.source('http://example.com/my/original_source.ical'); + assert.strictEqual(cal.source(), 'http://example.com/my/original_source.ical'); + + cal.url(null); + assert.strictEqual(cal.url(), null); + }); + }); + + describe('url()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.url('https://example.com/calendar.ical')); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.url(), null); + cal.url('https://example.com/calendar.ical'); + assert.strictEqual(cal.url(), 'https://example.com/calendar.ical'); + cal.url(null); + assert.strictEqual(cal.url(), null); + }); + + it('should change something', function () { + const cal = new ICalCalendar().url('https://example.com/calendar.ical'); + cal.createEvent({ + start: new Date(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Example Event' + }); + assert.ok(cal.url(), 'https://example.com/calendar.ical'); + }); + }); + + describe('scale()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.scale('gregorian')); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.scale(), null); + cal.scale('GREGORIAN'); + assert.strictEqual(cal.scale(), 'GREGORIAN'); + cal.scale(null); + assert.strictEqual(cal.scale(), null); + }); + + it('should change something', function () { + const cal = new ICalCalendar().scale('gregorian'); + cal.createEvent({ + start: new Date(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Example Event' + }); + assert.ok(cal.scale(), 'GREGORIAN'); + }); + }); + + describe('createEvent()', function () { + it('should return a ICalEvent instance', function () { + const cal = new ICalCalendar(); + assert.ok(cal.createEvent({ start: new Date() }) instanceof ICalEvent); + }); + + it('should pass data to instance', function () { + const cal = new ICalCalendar(); + const event = cal.createEvent({ + start: new Date(), + summary: 'Patch-Day' + }); + + assert.strictEqual(event.summary(), 'Patch-Day'); + }); + + it('should not require optional parameters', function () { + assert.doesNotThrow(function () { + new ICalCalendar().createEvent({ + start: new Date(), + summary: 'Patch-Day' + }); + }, Error); + }); + }); + + describe('events()', function () { + it('getter should return an array of events…', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.events().length, 0); + + const event = cal.createEvent({ start: new Date() }); + assert.strictEqual(cal.events().length, 1); + assert.deepStrictEqual(cal.events()[0], event); + }); + + it('setter should add events and return this', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.length(), 0); + + const cal2 = cal.events([ + { start: new Date(), summary: 'Event A'}, + { start: new Date(), summary: 'Event B'} + ]); + + assert.strictEqual(cal.length(), 2); + assert.deepStrictEqual(cal2, cal); + }); + }); + + describe('clear()', function () { + it('should do the job', function () { + const cal = new ICalCalendar(); + cal.createEvent({ start: new Date() }); + assert.strictEqual(cal.events().length, 1); + assert.deepStrictEqual(cal.clear(), cal); + assert.strictEqual(cal.events().length, 0); + }); + }); + + describe('x()', function () { + it('setter should return this', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.x('X-FOO', 'bar')); + }); + + it('setter should work with key and value strings', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.x('X-FOO', 'bar')); + assert.deepEqual(cal.x(), [{ + key: 'X-FOO', + value: 'bar' + }]); + + assert.deepStrictEqual(cal, cal.x('X-LOREM', 'ipsum')); + assert.deepEqual(cal.x(), [ + {key: 'X-FOO', value: 'bar'}, + {key: 'X-LOREM', value: 'ipsum'} + ]); + + assert.throws(() => { + cal.x('LOREM', 'ipsum'); + }); + + assert.throws(() => { + // @ts-ignore + cal.x('X-LOREM', 1337); + }); + + assert.throws(() => { + // @ts-ignore + cal.x(5, 'ipsum'); + }); + }); + + it('setter should work with key and value array', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.x([{key: 'X-FOO', value: 'bar'}])); + assert.deepEqual(cal.x(), [{key: 'X-FOO', value: 'bar'}]); + + assert.deepStrictEqual(cal, cal.x([{key: 'X-LOREM', value: 'ipsum'}])); + assert.deepEqual(cal.x(), [{key: 'X-LOREM', value: 'ipsum'}]); + + assert.throws(() => { + cal.x([{key: 'LOREM', value: 'ipsum'}]); + }); + + assert.throws(() => { + // @ts-ignore + cal.x([{key: 'X-LOREM', value: 1337}]); + }); + + assert.throws(() => { + // @ts-ignore + cal.x([{key: 5, value: 'ipsum'}]); + }); + }); + + it('setter should work with key and value object', function () { + const cal = new ICalCalendar(); + assert.deepStrictEqual(cal, cal.x({'X-FOO': 'bar'})); + assert.deepEqual(cal.x(), [{key: 'X-FOO', value: 'bar'}]); + + assert.deepStrictEqual(cal, cal.x({'X-LOREM': 'ipsum'})); + assert.deepEqual(cal.x(), [{key: 'X-LOREM', value: 'ipsum'}]); + + assert.throws(() => { + cal.x({'LOREM': 'ipsum'}); + }); + + assert.throws(() => { + // @ts-ignore + cal.x({'X-LOREM': 1337}); + }); + + assert.throws(() => { + cal.x({5: 'ipsum'}); + }); + }); + + it('getter should return value', function () { + const cal = new ICalCalendar(); + assert.deepEqual(cal.x(), []); + cal.x('X-FOO', 'BAR'); + assert.deepEqual(cal.x(), [{key: 'X-FOO', value: 'BAR'}]); + cal.x({}); + assert.deepEqual(cal.x().length, 0); + }); + + it('should change something', function () { + const cal = new ICalCalendar().x('X-FOO', 'BAR'); + cal.createEvent({ + start: new Date(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Example Event' + }); + assert.ok(cal.toString().includes('X-FOO')); + }); + }); + + describe('toJSON()', function () { + it('should work', function () { + const cal = new ICalCalendar(); + const prodId = cal.toJSON().prodId; + assert.strictEqual(typeof prodId, 'string'); + assert.ok(prodId.length > 0); + + assert.strictEqual(cal.toJSON().events?.length, 0); + }); + + it('should work with params', function () { + const cal = new ICalCalendar(); + cal.createEvent({ + start: new Date(), + end: new Date(new Date().getTime() + (1000 * 60 * 60)), + summary: 'HTTP Calendar Event', + x: [ + {key: 'X-FOO', value: 'bar'}, + {key: 'X-LOREM', value: 'ipsum'} + ] + }); + + const prodId = cal.toJSON().prodId; + assert.strictEqual(typeof prodId, 'string'); + assert.ok(prodId.length > 0); + + const events = cal.toJSON().events; + assert.strictEqual(events?.length, 1); + assert.deepEqual(events[0].x, [ + {'key': 'X-FOO', 'value': 'bar'}, + {'key': 'X-LOREM', 'value': 'ipsum'} + ]); + }); + + it('should be compatible with constructor (type check)', function () { + const a = new ICalCalendar(); + new ICalCalendar(a.toJSON()); + }); + }); + + describe('length()', function () { + it('should work', function () { + const cal = new ICalCalendar(); + assert.strictEqual(cal.length(), 0); + + cal.createEvent({ + start: new Date(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Example Event' + }); + assert.strictEqual(cal.length(), 1); + }); + }); + + describe('toString()', function () { + it('should include the URL', function () { + const cal = new ICalCalendar(); + cal.url('https://sebbo.net/foo'); + assert.ok(cal.toString().indexOf('URL:https://sebbo.net/foo') > -1); + }); + + it('should include the method', function () { + const cal = new ICalCalendar(); + cal.method(ICalCalendarMethod.REFRESH); + assert.ok(cal.toString().indexOf('METHOD:REFRESH') > -1); + }); + + it('should include the name', function () { + const cal = new ICalCalendar(); + cal.name('TEST'); + assert.ok(cal.toString().indexOf('NAME:TEST') > -1); + assert.ok(cal.toString().indexOf('X-WR-CALNAME:TEST') > -1); + }); + + it('should include the description', function () { + const cal = new ICalCalendar(); + cal.description('TEST'); + assert.ok(cal.toString().indexOf('X-WR-CALDESC:TEST') > -1); + }); + + it('should include the timezone', function () { + const cal = new ICalCalendar(); + cal.timezone('TEST'); + assert.ok(cal.toString().indexOf('TIMEZONE-ID:TEST') > -1); + assert.ok(cal.toString().indexOf('X-WR-TIMEZONE:TEST') > -1); + }); + + it('should include the source', function () { + const cal = new ICalCalendar(); + cal.source('http://foo.bar.example.com/ical.cal'); + assert.ok(cal.toString().includes('http://foo.bar.example.com/ical.cal')); + }); + + it('should include VTimezone objects if generator was supplied', function () { + const cal = new ICalCalendar(); + cal.timezone({name: 'Europe/Berlin', generator: getVtimezoneComponent}); + cal.createEvent({ + start: new Date(), + timezone: 'Europe/London' + }); + + assert.ok(cal.toString().includes('BEGIN:VTIMEZONE\r\n'), 'BEGIN:VTIMEZONE'); + assert.ok(cal.toString().includes('TZID:Europe/Berlin\r\n'), 'TZID:Europe/Berlin'); + assert.ok(cal.toString().includes('TZID:Europe/London\r\n'), 'TZID:Europe/London'); + }); + it('should also work if VTimezone was not found', function () { + const cal = new ICalCalendar(); + cal.timezone({name: 'FOO', generator: getVtimezoneComponent}); + assert.ok(!cal.toString().includes('TZID:Foo\r\n')); + }); + it('should ignore global timezone ids', function () { + const cal = new ICalCalendar(); + cal.timezone({name: '/Europe/Berlin', generator: getVtimezoneComponent}); + assert.ok(!cal.toString().includes('TZID:/Europe/Berlin\r\n')); + }); + + it('should include the ttl', function () { + const cal = new ICalCalendar(); + cal.ttl(moment.duration(3, 'days')); + assert.ok(cal.toString().indexOf('REFRESH-INTERVAL;VALUE=DURATION:P3D') > -1); + assert.ok(cal.toString().indexOf('X-PUBLISHED-TTL:P3D') > -1); + }); + }); +}); diff --git a/test/cases.ts b/test/cases.ts new file mode 100644 index 000000000..c7010866d --- /dev/null +++ b/test/cases.ts @@ -0,0 +1,292 @@ +'use strict'; + +import assert from 'assert'; +import { join, dirname } from 'node:path'; +import { promises as fs } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import ical, { ICalEventTransparency } from '../src/index.js'; +import { ICalCalendarMethod } from '../src/calendar.js'; +import { ICalEventStatus } from '../src/event.js'; +import { ICalEventRepeatingFreq, ICalWeekday } from '../src/types.js'; +import { ICalAttendeeRole, ICalAttendeeStatus, ICalAttendeeType } from '../src/attendee.js'; +import { ICalAlarmType } from '../src/alarm.js'; +import { getVtimezoneComponent } from '@touch4it/ical-timezones'; + +describe('ical-generator Cases', function () { + const resultDir = join(dirname(fileURLToPath(import.meta.url)), 'results'); + it('case #1', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 04 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + created: new Date('Fr Oct 04 2013 23:34:53 UTC'), + lastModified: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Simple Event' + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_01.ics', 'utf8')); + + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #2', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 04 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Sample Event', + location: 'localhost', + transparency: ICalEventTransparency.OPAQUE, + description: { + plain: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\nbeep boop', + html: '

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\nbeep boop

' + } + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_02.ics', 'utf8')); + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #3', async function () { + const cal = ical({ + method: ICalCalendarMethod.ADD, + prodId: '//sebbo.net//ical-generator.tests//EN' + }); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + allDay: true, + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Sample Event', + location: { + title: 'Apple Store Kurfürstendamm', + address: 'Kurfürstendamm 26, 10719 Berlin, Deutschland', + radius: 141.1751386318387, + geo: {lat: 52.503630, lon: 13.328650} + }, + organizer: 'Sebastian Pekarek ', + status: ICalEventStatus.CONFIRMED, + categories: [{name: 'WORK'}], + url: 'http://sebbo.net/', + attachments: [ + 'https://files.sebbo.net/calendar/attachments/foo' + ] + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_03.ics', 'utf8'), 'toString'); + assert.strictEqual(ical(cal.toJSON()).toString(), string, 'toJSON / toString()'); + }); + + it('case #4 (repeating)', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.timezone({name: null, generator: getVtimezoneComponent}); + cal.events([ + { + id: '1', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'repeating by month', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + exclude: new Date('Fr Oct 06 2013 23:15:00 UTC') + } + }, + { + id: '2', + start: new Date('Fr Oct 04 2013 22:39:30'), + end: new Date('Fr Oct 06 2013 23:15:00'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + timezone: 'Europe/Berlin', + summary: 'repeating by day, twice', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + count: 2 + } + }, + { + id: '3', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'repeating by 3 weeks, until 2014', + repeating: { + freq: ICalEventRepeatingFreq.WEEKLY, + interval: 3, + until: new Date('We Jan 01 2014 00:00:00 UTC') + } + } + ]); + + assert.strictEqual(cal.toString(), await fs.readFile(resultDir + '/generate_04.ics', 'utf8'), 'first check'); + + // Wount be same, as reference to VTimezone generator is not exported + // assert.strictEqual(ical(cal.toJSON()).toString(), string); + + cal.timezone(null); + assert.strictEqual(ical(cal.toJSON()).toString(), cal.toString(), 'second check'); + }); + + it('case #5 (floating)', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.createEvent({ + id: '1', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'floating', + floating: true + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_05.ics', 'utf8')); + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #6 (attendee with simple delegation and alarm)', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN', method: ICalCalendarMethod.PUBLISH}); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + allDay: true, + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Sample Event', + organizer: 'Sebastian Pekarek ', + attendees: [ + { + name: 'Smith, Matt; ("Sales")', + email: 'matt@example.com', + delegatesTo: { + name: 'John', + email: 'john@example.com', + status: ICalAttendeeStatus.ACCEPTED + } + } + ], + alarms: [ + { + type: ICalAlarmType.display, + trigger: 60 * 10, + repeat: { + times: 2, + interval: 60 + } + }, + { + type: ICalAlarmType.display, + trigger: 60 * 60, + description: 'I\'m a reminder :)' + } + ], + status: ICalEventStatus.CONFIRMED, + url: 'http://sebbo.net/' + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_06.ics', 'utf8')); + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #7 (repeating: byDay, byMonth, byMonthDay)', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.events([ + { + id: '1', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'repeating by month', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + byMonth: [1, 4, 7, 10] + } + }, + { + id: '2', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'repeating on Mo/We/Fr, twice', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + count: 2, + byDay: [ICalWeekday.MO, ICalWeekday.WE, ICalWeekday.FR] + } + }, + { + id: '3', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 06 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'repeating on 1st and 15th', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 1, + byMonthDay: [1, 15] + } + } + ]); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_07.ics', 'utf8')); + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #8', async function () { + const cal = ical({prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 04 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + created: new Date('Fr Oct 04 2013 23:34:53 UTC'), + lastModified: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Simple Event', + attendees: [{ + type: ICalAttendeeType.INDIVIDUAL, + role: ICalAttendeeRole.REQ, + status: ICalAttendeeStatus.NEEDSACTION, + email: 'mail@example.com', + rsvp: true + }] + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_08.ics', 'utf8')); + assert.strictEqual(ical(cal.toJSON()).toString(), string); + }); + + it('case #9 (organizer with mailto)', async function () { + const cal = ical({method: ICalCalendarMethod.REQUEST, prodId: '//sebbo.net//ical-generator.tests//EN'}); + cal.createEvent({ + id: '123', + start: new Date('Fr Oct 04 2013 22:39:30 UTC'), + end: new Date('Fr Oct 04 2013 23:15:00 UTC'), + stamp: new Date('Fr Oct 04 2013 23:34:53 UTC'), + summary: 'Sample Event', + organizer: { + name: 'Sebastian Pekarek', + email: 'mail@sebbo.net', + mailto: 'mail2@example2.com' + }, + attendees: [{ + type: ICalAttendeeType.INDIVIDUAL, + role: ICalAttendeeRole.REQ, + status: ICalAttendeeStatus.NEEDSACTION, + email: 'mail@example.com', + rsvp: true + }] + }); + + const string = cal.toString(); + assert.strictEqual(string, await fs.readFile(resultDir + '/generate_09.ics', 'utf8'), 'toString'); + assert.strictEqual(ical(cal.toJSON()).toString(), string, 'toJSON / toString()'); + }); +}); diff --git a/test/category.ts b/test/category.ts new file mode 100644 index 000000000..4c2dc51eb --- /dev/null +++ b/test/category.ts @@ -0,0 +1,52 @@ +'use strict'; + +import assert from 'assert'; +import ICalCategory from '../src/category.js'; + +describe('ical-generator Category', function () { + describe('constructor()', function () { + it('should ignore unknown data attributes', function () { + const a = new ICalCategory({ + // @ts-ignore + unknown: true, + name: 'FOO' + }); + + assert.strictEqual(a.name(), 'FOO'); + }); + + it('shoult throw an error without name', function () { + assert.throws(function () { + // @ts-ignore + new ICalCategory({}); + }, /`name`/); + }); + }); + + describe('name()', function () { + it('setter should return this', function () { + const c = new ICalCategory({ name: 'foo' }); + assert.deepStrictEqual(c, c.name('FOO')); + }); + + it('getter should return value', function () { + const c = new ICalCategory({ name: 'foo' }); + assert.strictEqual(c.name(), 'foo'); + + c.name('HELLO-WORLD'); + assert.strictEqual(c.name(), 'HELLO-WORLD'); + }); + + it('should change something', function () { + const c = new ICalCategory({name: 'BANANA'}); + assert.ok(c.toString().includes('BANANA')); + }); + }); + + describe('toJSON()', function () { + it('should contain valued previously set', function () { + const c = new ICalCategory({name: 'FOOBAR'}); + assert.deepStrictEqual(c.toJSON(), {name: 'FOOBAR'}); + }); + }); +}); diff --git a/test/event.ts b/test/event.ts new file mode 100644 index 000000000..4a7208519 --- /dev/null +++ b/test/event.ts @@ -0,0 +1,2074 @@ +'use strict'; + +import assert from 'assert'; +import moment from 'moment-timezone'; +import ICalCalendar from '../src/calendar.js'; +import ICalEvent, { + ICalEventBusyStatus, + ICalEventClass, + ICalEventData, + ICalEventStatus, + ICalEventTransparency +} from '../src/event.js'; +import { ICalEventRepeatingFreq, ICalWeekday } from '../src/types.js'; +import ICalAttendee from '../src/attendee.js'; +import ICalAlarm, { ICalAlarmType } from '../src/alarm.js'; +import ICalCategory from '../src/category.js'; +import { isRRule } from '../src/tools.js'; +import rrule from 'rrule'; +import {DateTime} from 'luxon'; + +describe('ical-generator Event', function () { + describe('constructor()', function () { + it('shoud set data from constructor', function () { + const data: ICalEventData = { + id: 'FOO', + sequence: 1, + start: new Date().toJSON(), + end: new Date().toJSON(), + recurrenceId: new Date().toJSON(), + timezone: 'Europe/Berlin', + stamp: new Date().toJSON(), + allDay: true, + floating: false, + repeating: null, + summary: 'Hello.', + location: null, + description: null, + organizer: null, + attendees: [], + alarms: [], + categories: [], + status: null, + busystatus: ICalEventBusyStatus.BUSY, + priority: 5, + url: 'https://github.com/sebbo2002/ical-generator', + attachments: [ + 'https://files.sebbo.net/calendar/attachments/foo' + ], + transparency: ICalEventTransparency.TRANSPARENT, + created: new Date().toJSON(), + lastModified: new Date().toJSON(), + class: null, + x: [] + }; + const event = new ICalEvent(data, new ICalCalendar()); + assert.deepStrictEqual(event.toJSON(), data); + }); + + it('shouldn\'t work without calendar reference', function () { + assert.throws(function () { + // @ts-ignore + new ICalEvent({summary: 'Testevent'}, null); + }, /`calendar`/); + }); + }); + + describe('id()', function () { + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.id(1048)); + }); + + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()).id(512); + assert.strictEqual(event.id(), '512'); + + event.id('xyz'); + assert.strictEqual(event.id(), 'xyz'); + }); + }); + + describe('uid()', function () { + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.uid(1048)); + }); + + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()).uid(512); + assert.strictEqual(event.uid(), '512'); + + event.id('xyz'); + assert.strictEqual(event.uid(), 'xyz'); + }); + }); + + describe('sequence()', function () { + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.sequence(1)); + }); + + it('getter should return value', function () { + const event = new ICalEvent( + { start: new Date() }, + new ICalCalendar() + ).sequence(1048); + + assert.strictEqual(event.sequence(), 1048); + }); + + it('setter should throw error when sequence is not valid', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.sequence('hello'); + }, /`sequence`/); + }); + + it('setter should work with 0', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()).sequence(12); + assert.strictEqual(event.sequence(), 12); + + event.sequence(0); + assert.strictEqual(event.sequence(), 0); + }); + }); + + describe('start()', function () { + it('getter should return value', function () { + const now = moment(); + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + event.start(now); + assert.strictEqual(event.start(), now); + }); + + it('setter should parse string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + assert.deepStrictEqual(event, event.start(date)); + assert.deepStrictEqual(event.start(), date); + }); + + it('setter should handle Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + assert.deepStrictEqual(event, event.start(date)); + assert.deepStrictEqual(event.start(), date); + }); + + it('setter should throw error when start time is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.start(3); + }, /`start`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.start(null); + }, /`start`/, 'null'); + assert.throws(function () { + // @ts-ignore + event.start(NaN); + }, /`start`/, 'NaN'); + assert.throws(function () { + event.start(new Date('hallo')); + }, /`start`/, 'Invalid Date'); + }); + + it('setter should flip start and end if necessary', function () { + const start = moment().add(5, 'minutes'); + const end = moment(); + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .end(end) + .start(start); + + assert.deepStrictEqual(event.start(), end); + assert.deepStrictEqual(event.end(), start); + }); + + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.start(moment())); + assert.deepStrictEqual(event, event.start(new Date())); + }); + }); + + describe('end()', function () { + it('getter should return value', function () { + const now = moment(); + const event = new ICalEvent({ start: moment().subtract({ minute: 1 }) }, new ICalCalendar()); + event.end(now); + assert.deepStrictEqual(event.end(), now); + }); + + it('setter should parse string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + assert.deepStrictEqual(event, event.end(date)); + assert.deepStrictEqual(event.end(), date); + }); + + it('setter should handle Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + assert.deepStrictEqual(event, event.end(date)); + assert.deepStrictEqual(event.end(), date); + }); + + it('setter should throw error when time is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.end(3); + }, /`end`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.end(NaN); + }, /`end`/, 'NaN'); + assert.throws(function () { + event.end(new Date('hallo')); + }, /`end`/, 'Invalid Date'); + }); + + it('setter should flip start and end if necessary', function () { + const start = moment().add(5, 'minutes'); + const end = moment(); + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .start(start) + .end(end); + + assert.deepStrictEqual(event.start(), end); + assert.deepStrictEqual(event.end(), start); + }); + + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.end(moment())); + assert.deepStrictEqual(event, event.end(new Date())); + }); + }); + + describe('recurrenceId()', function () { + it('getter should return value', function () { + const now = moment(); + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + event.recurrenceId(now); + assert.deepStrictEqual(event.recurrenceId(), now); + }); + + it('setter should parse string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + assert.deepStrictEqual(event, event.recurrenceId(date)); + assert.deepStrictEqual(event.recurrenceId(), date); + }); + + it('setter should handle Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + assert.deepStrictEqual(event, event.recurrenceId(date)); + assert.deepStrictEqual(event.recurrenceId(), date); + }); + + it('setter should throw error when time is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.recurrenceId(3); + }, /`recurrenceId`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.recurrenceId(NaN); + }, /`recurrenceId`/, 'NaN'); + assert.throws(function () { + event.recurrenceId(new Date('hallo')); + }, /`recurrenceId`/, 'Invalid Date'); + }); + + it('setter should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event, event.recurrenceId(moment())); + assert.deepStrictEqual(event, event.recurrenceId(new Date())); + }); + }); + + describe('timezone()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .timezone('Europe/Berlin'); + + assert.strictEqual(e.timezone(), 'Europe/Berlin'); + }); + + it('getter should inherit from calendar', function () { + const cal = new ICalCalendar(); + const e = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, cal); + + assert.strictEqual(cal.timezone(), null); + assert.strictEqual(e.timezone(), null); + + cal.timezone('Europe/London'); + assert.strictEqual(cal.timezone(), 'Europe/London'); + assert.strictEqual(e.timezone(), 'Europe/London'); + + e.timezone('Europe/Berlin'); + assert.strictEqual(cal.timezone(), 'Europe/London'); + assert.strictEqual(e.timezone(), 'Europe/Berlin'); + + cal.timezone(null); + assert.strictEqual(cal.timezone(), null); + assert.strictEqual(e.timezone(), 'Europe/Berlin'); + + e.timezone(null); + assert.strictEqual(cal.timezone(), null); + assert.strictEqual(e.timezone(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.timezone('Europe/Berlin')); + }); + + it('should update timezone', function () { + const e = new ICalEvent({ + start: moment(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Example Event' + }, new ICalCalendar()); + + e.timezone('Europe/London'); + assert.strictEqual(e.timezone(), 'Europe/London'); + }); + + it('should disable floating when truthy', function () { + const e = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + e.floating(true); + e.timezone('Europe/London'); + assert.strictEqual(e.floating(), false); + }); + + it('should not disable floating when falsy', function () { + const e = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + e.floating(true); + e.timezone(null); + assert.strictEqual(e.floating(), true); + }); + + it('setting UTC should reset timezone as UTC is the default', function () { + const e = new ICalEvent({ + start: moment(), + timezone: 'Europe/Berlin', + summary: 'Example Event' + }, new ICalCalendar()); + assert.strictEqual(e.timezone(), 'Europe/Berlin'); + + e.timezone('UTC'); + assert.strictEqual(e.timezone(), null); + }); + }); + + describe('stamp()', function () { + it('getter should return value', function () { + const now = moment().add(1, 'day'); + const e = new ICalEvent( + { start: new Date() }, + new ICalCalendar() + ).stamp(now); + assert.deepStrictEqual(e.stamp(), now); + }); + + it('setter should parse string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + assert.deepStrictEqual(event, event.stamp(date)); + assert.deepStrictEqual(event.stamp(), date); + }); + + it('setter should handle Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + assert.deepStrictEqual(event, event.stamp(date)); + assert.deepStrictEqual(event.stamp(), date); + }); + + it('setter should throw error when time is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.stamp(3); + }, /`stamp`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.stamp(null); + }, /`stamp`/, 'null'); + assert.throws(function () { + // @ts-ignore + event.stamp(NaN); + }, /`stamp`/, 'NaN'); + assert.throws(function () { + event.stamp(new Date('hallo')); + }, /`stamp`/, 'Invalid Date'); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.stamp(new Date())); + }); + }); + + describe('timestamp()', function () { + it('getter should return value', function () { + const now = moment().add(1, 'day'); + const e = new ICalEvent( + { start: new Date() }, + new ICalCalendar() + ).timestamp(now); + assert.deepStrictEqual(e.timestamp(), now); + }); + + it('setter should parse string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + assert.deepStrictEqual(event, event.timestamp(date)); + assert.deepStrictEqual(event.stamp(), date); + }); + + it('setter should handle Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + assert.deepStrictEqual(event, event.timestamp(date)); + assert.deepStrictEqual(event.stamp(), date); + }); + + it('setter should throw error when time is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.timestamp(3); + }, /`stamp`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.timestamp(null); + }, /`stamp`/, 'null'); + assert.throws(function () { + // @ts-ignore + event.timestamp(NaN); + }, /`stamp`/, 'NaN'); + assert.throws(function () { + event.timestamp(new Date('hallo')); + }, /`stamp`/, 'Invalid Date'); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.timestamp(new Date())); + }); + }); + + describe('allDay()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.allDay(true); + assert.strictEqual(e.allDay(), true); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.allDay(true)); + }); + + it('should change something', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.allDay(true); + assert.strictEqual(event.allDay(), true); + }); + }); + + describe('floating()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()).floating(true); + assert.strictEqual(e.floating(), true); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.floating(false)); + assert.deepStrictEqual(e, e.floating(true)); + }); + + it('should update floating', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.floating(true); + assert.strictEqual(event.floating(), true); + }); + + it('should remove timezone when truthy', function () { + const e = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + e.timezone('Europe/London'); + e.floating(true); + assert.strictEqual(e.timezone(), null); + }); + + it('should not remove timezone when falsy', function () { + const e = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + e.timezone('Europe/London'); + e.floating(false); + assert.strictEqual(e.timezone(), 'Europe/London'); + }); + }); + + describe('repeating()', function () { + it('getter should return value', function () { + const options = { + freq: ICalEventRepeatingFreq.MONTHLY, + count: 5, + interval: 2, + until: moment(), + exclude: [moment()] + }; + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e.repeating(), null); + + e.repeating(options); + assert.strictEqual( + JSON.stringify(e.repeating(), null, ' '), + JSON.stringify(options, null, ' ') + ); + + e.repeating(null); + assert.deepStrictEqual(e.repeating(), null); + }); + + it('setter should handle null', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.repeating(null)); + assert.deepStrictEqual(e.repeating(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.repeating(null), 'repeating(null)'); + assert.deepStrictEqual(e, e.repeating({ + freq: ICalEventRepeatingFreq.MONTHLY + }), 'repeating({freq: \'MONTHLY\'})'); + }); + + it('setter should throw error when repeating without freq', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + + // @ts-ignore + repeating: {} + }, new ICalCalendar()); + }, /Input must be one of the following: SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY/); + }); + + it('setter should throw error when repeating when freq is not allowed', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + // @ts-ignore + freq: 'hello' + } + }, new ICalCalendar()); + }, /must be one of the following/); + }); + + it('setter should update freq', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({freq: ICalEventRepeatingFreq.MONTHLY}); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.strictEqual(result.freq, 'MONTHLY'); + }); + + it('setter should throw error when repeating.count is not a number', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + count: Infinity + } + }, new ICalCalendar()); + }, /`repeating.count` must be a finite number!/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + // @ts-ignore + count: 'abc' + } + }, new ICalCalendar()); + }, /`repeating\.count` must be a finite number!/); + }); + + it('setter should update count', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({freq: ICalEventRepeatingFreq.MONTHLY, count: 5}); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.strictEqual(result.count, 5); + }); + + it('should throw error when repeating.interval is not a number', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: Infinity + } + }, new ICalCalendar()); + }, /`repeating.interval` must be a finite number!/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + // @ts-ignore + interval: 'abc' + } + }, new ICalCalendar()); + }, /`repeating.interval` must be a finite number!/); + }); + + it('setter should update interval', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({freq: ICalEventRepeatingFreq.MONTHLY, interval: 5}); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.strictEqual(result.interval, 5); + }); + + it('should throw error when repeating.until is not a date', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + // @ts-ignore + until: null + } + }, new ICalCalendar()); + }, /Error: `repeating\.until` has to be a valid date!/); + }); + + it('setter should parse repeating.until string if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toJSON(); + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: date}); + + const result = event.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.until, date); + }); + + it('setter should handle repeating.until Dates if required', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week').toDate(); + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: date}); + + const result = event.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.until, date); + }); + + it('setter should handle repeating.until moments', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week'); + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: date}); + + const result = event.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.until, date); + }); + + it('setter should throw error when repeating.until is not a Date', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: 3}); + }, /`repeating.until`/, 'Number'); + assert.throws(function () { + // @ts-ignore + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: null}); + }, /`repeating.until`/, 'null'); + assert.throws(function () { + // @ts-ignore + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: NaN}); + }, /`repeating.until`/, 'NaN'); + assert.throws(function () { + event.repeating({freq: ICalEventRepeatingFreq.MONTHLY, until: new Date('foo')}); + }, /`repeating.until`/, 'Invalid Date'); + }); + + it('should throw error when repeating.byDay is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + byDay: 'FOO' + } + }, new ICalCalendar()); + }, /Input must be one of the following: SU, MO, TU, WE, TH, FR, SA/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + byDay: ['SU', 'BAR', 'th'] + } + }, new ICalCalendar()); + }, /Input must be one of the following: SU, MO, TU, WE, TH, FR, SA/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + byDay: ['SU', Infinity, 'th'] + } + }, new ICalCalendar()); + }, /Input must be one of the following: SU, MO, TU, WE, TH, FR, SA/); + }); + + it('setter should update repeating.byDay', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({ + freq: ICalEventRepeatingFreq.MONTHLY, + byDay: [ICalWeekday.SU, ICalWeekday.WE, ICalWeekday.TH] + }); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.byDay, ['SU', 'WE', 'TH']); + }); + + it('should throw error when repeating.byMonth is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + byMonth: 'FOO' + } + }, new ICalCalendar()); + }, /`repeating\.byMonth` contains invalid value `FOO`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byMonth: [1, 14, 7] + } + }, new ICalCalendar()); + }, /`repeating\.byMonth` contains invalid value `14`/); + }); + + it('setter should update repeating.byMonth', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({freq: ICalEventRepeatingFreq.MONTHLY, byMonth: [1, 12, 7]}); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.byMonth, [1, 12, 7]); + }); + + it('should throw error when repeating.byMonthDay is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + byMonthDay: 'FOO' + } + }, new ICalCalendar()); + }, /`repeating\.byMonthDay` contains invalid value `FOO`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byMonthDay: [1, 32, -15] + } + }, new ICalCalendar()); + }, /`repeating\.byMonthDay` contains invalid value `32`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byMonthDay: [-1, -32, 15] + } + }, new ICalCalendar()); + }, /`repeating\.byMonthDay` contains invalid value `-32`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byMonthDay: [1, 0, 15] + } + }, new ICalCalendar()); + }, /`repeating\.byMonthDay` contains invalid value `0`/); + }); + + it('setter should update repeating.byMonthDay', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({freq: ICalEventRepeatingFreq.MONTHLY, byMonthDay: [1, 15]}); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.byMonthDay, [1, 15]); + }); + + it('should throw error when repeating.bySetPos is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + interval: 2, + byDay: [ICalWeekday.SU], + bySetPos: [367] + } + }, new ICalCalendar()); + }, /`repeating\.bySetPos` contains invalid value `367`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + interval: 2, + byDay: [ICalWeekday.SU], + bySetPos: [-367] + } + }, new ICalCalendar()); + }, /`repeating\.bySetPos` contains invalid value `-367`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + interval: 2, + byDay: [ICalWeekday.SU], + bySetPos: [0] + } + }, new ICalCalendar()); + }, /`repeating\.bySetPos` contains invalid value `0`/); + + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + interval: 2, + byDay: [ICalWeekday.SU], + // @ts-ignore + bySetPos: ['FOO'] + } + }, new ICalCalendar()); + }, /`repeating\.bySetPos` contains invalid value `FOO`/); + }); + + it('should throw error when repeating.byDay is not present with repeating.bySetPos', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + interval: 2, + bySetPos: 6 + } + }, new ICalCalendar()); + }, /`repeating\.bySetPos` must be used along with `repeating\.byDay`/); + }); + + it('setter should update repeating.bySetPos', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({ + freq: ICalEventRepeatingFreq.MONTHLY, + byDay: [ICalWeekday.SU], + bySetPos: [2] + }); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.strictEqual(result.byDay?.length, 1); + + // @ts-ignore + assert.strictEqual(result.bySetPos?.length, 1); + }); + + it('should throw error when repeating.exclude is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byDay: [ICalWeekday.SU], + exclude: new Date('FOO') + } + }, new ICalCalendar()); + }, /has to be a valid date/); + }); + + it('should throw error when repeating.exclude is not valid (should throw on first err value', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byDay: [ICalWeekday.SU], + exclude: [moment(), new Date('BAR'), 'FOO'] + } + }, new ICalCalendar()); + }, /has to be a valid date/); + }); + + it('should throw error when repeating.exclude is not a valid type', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + end: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + byDay: [ICalWeekday.SU], + // @ts-ignore + exclude: 42 + } + }, new ICalCalendar()); + }, /`repeating.exclude\[0\]` has to be a valid date!/); + }); + + it('setter should update repeating.exclude', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().add(1, 'week'); + + e.repeating({ + freq: ICalEventRepeatingFreq.MONTHLY, + exclude: [ + date.toJSON(), + date.toDate(), + date + ] + }); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.ok(Array.isArray(result.exclude)); + // @ts-ignore + assert.strictEqual(result.exclude.length, 3); + + // @ts-ignore + assert.deepStrictEqual(result.exclude[0], date.toJSON(), 'String'); + // @ts-ignore + assert.deepStrictEqual(result.exclude[1], date.toDate(), 'Date'); + // @ts-ignore + assert.deepStrictEqual(result.exclude[2], date, 'Moment'); + }); + + it('should throw error when repeating.startOfWeek is not valid', function () { + assert.throws(function () { + new ICalEvent({ + start: moment(), + summary: 'test', + repeating: { + freq: ICalEventRepeatingFreq.DAILY, + interval: 2, + // @ts-ignore + startOfWeek: 'FOO' + } + }, new ICalCalendar()); + }, /Input must be one of the following: SU, MO, TU, WE, TH, FR, SA/); + }); + + it('setter should update repeating.wkst', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + e.repeating({ + freq: ICalEventRepeatingFreq.MONTHLY, + startOfWeek: ICalWeekday.SU + }); + + const result = e.repeating(); + assert.ok(result); + assert.ok(!isRRule(result)); + assert.ok(typeof result !== 'string'); + + // @ts-ignore + assert.deepStrictEqual(result.startOfWeek, 'SU'); + }); + + it('should support RRules', function () { + const start = new Date(Date.UTC(2012, 1, 1, 10, 30)); + const e = new ICalEvent({start}, new ICalCalendar()); + const rule = new rrule.RRule({ + freq: rrule.RRule.WEEKLY, + interval: 5, + byweekday: [rrule.RRule.MO, rrule.RRule.FR], + dtstart: start, + until: new Date(Date.UTC(2012, 12, 31)) + }); + + e.repeating(rule); + + const result = e.repeating(); + assert.ok(isRRule(result)); + assert.deepStrictEqual(result, rule); + assert.ok(e.toString().includes('RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO,FR;UNTIL=20130131T000000Z')); + }); + it('should support strings', function () { + const e = new ICalEvent({start: new Date()}, new ICalCalendar()); + const rule = 'RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO,FR;UNTIL=20130131T000000Z'; + e.repeating(rule); + + const result = e.repeating(); + assert.deepStrictEqual(result, rule); + assert.ok(e.toString().includes('RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO,FR;UNTIL=20130131T000000Z')); + }); + it('should add RRULE: prefix for single line string if not already there', function () { + const e = new ICalEvent({start: new Date()}, new ICalCalendar()); + const rule = 'FREQ=WEEKLY;INTERVAL=5;BYDAY=MO,FR;UNTIL=20130131T000000Z'; + e.repeating(rule); + + const result = e.repeating(); + assert.deepStrictEqual(result, rule); + assert.ok(e.toString().includes('RRULE:FREQ=WEEKLY;INTERVAL=5;BYDAY=MO,FR;UNTIL=20130131T000000Z')); + }); + }); + + describe('summary()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.summary(), ''); + + e.summary('Testevent'); + assert.strictEqual(e.summary(), 'Testevent'); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.summary('')); + assert.deepStrictEqual(e, e.summary('Testevent')); + }); + + it('should update summary', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.summary('Example Event II'); + assert.strictEqual(event.summary(), 'Example Event II'); + + event.summary(''); + assert.strictEqual(event.summary(), ''); + }); + }); + + describe('location()', function () { + it('getter should return value (string)', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.location(), null); + + e.location('Test Location'); + assert.deepStrictEqual(e.location(), {title: 'Test Location'}); + + e.location(null); + assert.strictEqual(e.location(), null); + }); + + it('getter should return value (obj)', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.location(), null); + + e.location({ + title: 'Foo', + geo: {lat: 44.5, lon: -3.4} + }); + + const location = e.location(); + assert.ok(location); + assert.ok('title' in location); + assert.deepStrictEqual(location?.title, 'Foo'); + assert.deepStrictEqual(location?.geo, {lat: 44.5, lon: -3.4}); + + e.location(null); + assert.strictEqual(e.location(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.location(null)); + assert.deepStrictEqual(e, e.location('Test Location')); + }); + + it('should update location', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.location('Europa-Park'); + + const location = event.location(); + assert.ok(location); + assert.ok('title' in location); + assert.strictEqual(location?.title, 'Europa-Park'); + }); + + it('should throw error when location is not valid', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + // @ts-ignore + assert.throws(() => event.location({geo: 3}), /`location` isn't formatted correctly/i); + + // @ts-ignore + assert.throws(() => event.location({}), /`location` isn't formatted correctly/i); + }); + }); + + describe('description()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.description(), null); + + e.description('I don\'t need a description. I\'m far to awesome for descriptions…'); + assert.deepStrictEqual(e.description(), { + plain: 'I don\'t need a description. I\'m far to awesome for descriptions…' + }); + + e.description({ + plain: 'I don\'t need a description. I\'m far to awesome for descriptions…', + html: 'I don\'t need a description.
I\'m far to awesome for descriptions…' + }); + assert.deepStrictEqual(e.description(), { + plain: 'I don\'t need a description. I\'m far to awesome for descriptions…', + html: 'I don\'t need a description.
I\'m far to awesome for descriptions…' + }); + + e.description(null); + assert.strictEqual(e.description(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.description(null)); + assert.deepStrictEqual(e, e.description('I don\'t need a description. I\'m far to awesome for descriptions…')); + }); + + it('should change something', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.description('Well. But other people need descriptions… :/'); + assert.deepStrictEqual(event.description(), { + plain: 'Well. But other people need descriptions… :/' + }); + + event.description({ + plain: 'I am uncool text.', + html: 'I\'m the best HTML tag in this universe!' + }); + assert.ok(event.toString().includes('I\'m the best HTML tag in this universe!')); + }); + }); + + describe('organizer()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.organizer(), null); + + e.organizer(null); + assert.strictEqual(e.organizer(), null); + + e.organizer({name: 'Sebastian Pekarek', email: 'mail@example.com'}); + assert.strictEqual('Sebastian Pekarek', e.organizer()?.name); + assert.strictEqual('mail@example.com', e.organizer()?.email); + + e.organizer({name: 'Sebastian Pekarek', email: 'mail@example.com', mailto: 'mail2@example2.com'}); + assert.strictEqual('Sebastian Pekarek', e.organizer()?.name); + assert.strictEqual('mail@example.com', e.organizer()?.email); + assert.strictEqual('mail2@example2.com', e.organizer()?.mailto); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.organizer(null)); + assert.deepStrictEqual(e, e.organizer('Sebastian Pekarek ')); + }); + + it('should work with objects', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.organizer({name: 'Sebastian Pekarek', email: 'mail@example.com'}); + assert.deepStrictEqual(event.organizer(), { + name: 'Sebastian Pekarek', + email: 'mail@example.com', + mailto: undefined, + sentBy: undefined + }); + + event.organizer({name: 'Sebastian Pekarek', email: 'mail@example.com', mailto: 'mail2@example2.com'}); + assert.deepStrictEqual(event.organizer(), { + name: 'Sebastian Pekarek', + email: 'mail@example.com', + mailto: 'mail2@example2.com', + sentBy: undefined + }); + }); + + it('should support sent by when using object', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.organizer({name: 'Sebastian Pekarek', email: 'mail@example.com', sentBy: 'bot@example.com'}); + assert.deepStrictEqual(event.organizer(), { + name: 'Sebastian Pekarek', + email: 'mail@example.com', + mailto: undefined, + sentBy: 'bot@example.com' + }); + }); + + it('should work with valid strings', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.organizer('Sebastian Pekarek '); + assert.deepStrictEqual(event.organizer(), {name: 'Sebastian Pekarek', email: 'mail@example.com'}); + }); + + it('should throw error when string misformated', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + e.organizer('foo bar'); + }, /`organizer`/); + }); + + it('should throw error when object misses data', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.organizer({email: 'foo'}); + }, /`organizer\.name`/); + }); + + it('should throw error when unknown format', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.organizer(Infinity); + }, /`organizer`/); + assert.throws(function () { + // @ts-ignore + e.organizer(NaN); + }, /`organizer`/); + }); + + it('should work without an email', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.organizer({name: 'Sebastian Pekarek'}); + assert.deepStrictEqual(event.organizer(), { + name: 'Sebastian Pekarek', + email: undefined, + mailto: undefined, + sentBy: undefined + }); + }); + }); + + describe('createAttendee()', function () { + it('if Attendee passed, it should add and return it', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const attendee = new ICalAttendee({ email: 'mail@example.com' }, event); + + assert.strictEqual(event.createAttendee(attendee), attendee, 'createAttendee returns attendee'); + assert.deepStrictEqual(event.attendees()[0], attendee, 'attendee pushed'); + }); + + it('should return a ICalAttendee instance', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + assert.ok(event.createAttendee({ email: 'mail@example.com' }) instanceof ICalAttendee); + assert.strictEqual(event.attendees.length, 1, 'attendee pushed'); + }); + + it('should accept string', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const attendee = event.createAttendee('Zac '); + + assert.strictEqual(attendee.name(), 'Zac'); + assert.strictEqual(attendee.email(), 'zac@example.com'); + assert.strictEqual(event.attendees().length, 1, 'attendee pushed'); + }); + + it('should throw error when string misformated', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + e.createAttendee('foo bar'); + }, /isn't formated correctly/); + }); + + it('should accept object', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const attendee = event.createAttendee({name: 'Zac', email: 'zac@example.com'}); + + assert.strictEqual(attendee.name(), 'Zac'); + assert.strictEqual(attendee.email(), 'zac@example.com'); + assert.strictEqual(event.attendees().length, 1, 'attendee pushed'); + }); + }); + + describe('attendees()', function () { + it('getter should return an array of attendees…', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.attendees().length, 0); + + const attendee = event.createAttendee({ email: 'mail@example.com' }); + assert.strictEqual(event.attendees().length, 1); + assert.deepStrictEqual(event.attendees()[0], attendee); + }); + + it('setter should add attendees and return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const foo = event.attendees([ + { name: 'Person A', email: 'a@example.com' }, + { name: 'Person B', email: 'b@example.com' } + ]); + + assert.strictEqual(event.attendees().length, 2); + assert.deepStrictEqual(foo, event); + }); + }); + + describe('createAlarm()', function () { + it('should return a ICalAlarm instance', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + + assert.ok(event.createAlarm({ + type: ICalAlarmType.display, + trigger: 60 * 10 + }) instanceof ICalAlarm); + }); + + it('should pass data to instance', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const alarm = event.createAlarm({ + type: ICalAlarmType.audio, + trigger: 60 * 10 + }); + + assert.strictEqual(alarm.type(), 'audio'); + }); + }); + + describe('alarms()', function () { + it('getter should return an array of alarms…', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.alarms().length, 0); + + const alarm = event.createAlarm({ + type: ICalAlarmType.display, + trigger: 600 + }); + assert.strictEqual(event.alarms().length, 1); + assert.deepStrictEqual(event.alarms()[0], alarm); + }); + + it('setter should add alarms and return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const foo = event.alarms([ + { type: ICalAlarmType.audio, trigger: 60 }, + { type: ICalAlarmType.display, trigger: 600 } + ]); + + assert.strictEqual(event.alarms().length, 2); + assert.deepStrictEqual(foo, event); + }); + }); + + describe('createCategory()', function () { + it('should return a ICalCategory instance', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.ok(event.createCategory({ name: 'Test' }) instanceof ICalCategory); + }); + + it('should pass data to instance', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const category = event.createCategory({name: 'foo'}); + + assert.strictEqual(category.name(), 'foo'); + }); + }); + + describe('categories()', function () { + it('getter should return an array of categories…', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.categories().length, 0); + + const category = event.createCategory({ name: 'Test' }); + assert.strictEqual(event.categories().length, 1); + assert.deepStrictEqual(event.categories()[0], category); + }); + + it('setter should add category and return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const foo = event.categories([ + {name: 'foo'}, + {name: 'bar'} + ]); + + assert.strictEqual(event.categories().length, 2); + assert.deepStrictEqual(foo, event); + }); + }); + + describe('status()', function () { + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.status(), null); + + event.status(ICalEventStatus.CONFIRMED); + assert.strictEqual(event.status(), 'CONFIRMED'); + + event.status(null); + assert.strictEqual(event.status(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.status(null)); + assert.deepStrictEqual(e, e.status(ICalEventStatus.CONFIRMED)); + }); + + it('setter should allow setting null', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.status(ICalEventStatus.CONFIRMED); + e.status(null); + assert.strictEqual(e.status(), null); + }); + + it('setter should allow setting valid value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.status(ICalEventStatus.CONFIRMED); + assert.strictEqual(e.status(), 'CONFIRMED'); + assert.strictEqual(e.status(), ICalEventStatus.CONFIRMED); + }); + + it('should throw error when method not allowed', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.status('COOKING'); + }, /Input must be one of the following: CONFIRMED, TENTATIVE, CANCELLED/); + assert.throws(function () { + // @ts-ignore + e.status(Infinity); + }, /Input must be one of the following: CONFIRMED, TENTATIVE, CANCELLED/); + assert.throws(function () { + // @ts-ignore + e.status(NaN); + }, /Input must be one of the following: CONFIRMED, TENTATIVE, CANCELLED/); + assert.throws(function () { + // @ts-ignore + e.status(-1); + }, /Input must be one of the following: CONFIRMED, TENTATIVE, CANCELLED/); + }); + }); + + describe('busystatus()', function () { + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.busystatus(), null); + + event.busystatus(ICalEventBusyStatus.BUSY); + assert.strictEqual(event.busystatus(), 'BUSY'); + + event.busystatus(null); + assert.strictEqual(event.busystatus(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.busystatus(null)); + assert.deepStrictEqual(e, e.busystatus(ICalEventBusyStatus.BUSY)); + }); + + it('setter should allow setting null', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.busystatus(ICalEventBusyStatus.BUSY); + e.busystatus(null); + assert.strictEqual(e.busystatus(), null); + }); + + it('setter should allow setting valid value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.busystatus(ICalEventBusyStatus.BUSY); + assert.strictEqual(e.busystatus(), 'BUSY'); + }); + + it('should throw error when method not allowed', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.busystatus('COOKING'); + }, /FREE, TENTATIVE, BUSY, OOF/); + assert.throws(function () { + // @ts-ignore + e.busystatus(Infinity); + }, /FREE, TENTATIVE, BUSY, OOF/); + assert.throws(function () { + // @ts-ignore + e.busystatus(NaN); + }, /FREE, TENTATIVE, BUSY, OOF/); + assert.throws(function () { + // @ts-ignore + e.busystatus(-1); + }, /FREE, TENTATIVE, BUSY, OOF/); + }); + }); + + describe('priority()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.priority(), null); + + e.priority(5); + assert.strictEqual(e.priority(), 5); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.priority(null)); + assert.deepStrictEqual(e, e.priority(5)); + }); + + it('should update value', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.priority(5); + assert.strictEqual(event.priority(), 5); + assert.ok(event.toString().includes('PRIORITY:5')); + }); + }); + + describe('url()', function () { + it('getter should return value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(e.url(), null); + + e.url('http://sebbo.net/'); + assert.strictEqual(e.url(), 'http://sebbo.net/'); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.url(null)); + assert.deepStrictEqual(e, e.url('http://sebbo.net/')); + }); + + it('should update value', function () { + const event = new ICalEvent({ + start: moment(), + summary: 'Example Event' + }, new ICalCalendar()); + + event.url('http://github.com/sebbo2002/ical-generator'); + assert.strictEqual(event.url(), 'http://github.com/sebbo2002/ical-generator'); + }); + }); + + describe('createAttachment()', function () { + it('should return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(event.createAttachment('https://files.sebbo.net/calendar/attachments/foo'), event); + }); + }); + + describe('attachments()', function () { + it('getter should return an array of strings…', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.attachments().length, 0); + + event.createAttachment('https://files.sebbo.net/calendar/attachments/foo'); + assert.strictEqual(event.attachments().length, 1); + assert.deepStrictEqual(typeof event.attachments()[0], 'string'); + }); + + it('setter should add url and return this', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const foo = event.attachments([ + 'https://files.sebbo.net/calendar/attachments/foo', + 'https://files.sebbo.net/calendar/attachments/bar' + ]); + + assert.strictEqual(event.attachments().length, 2); + assert.deepStrictEqual(foo, event); + }); + }); + + describe('created()', function () { + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.created(new Date())); + }); + + it('setter should work with moment', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.created(moment()); + assert.ok(moment.isMoment(e.created())); + }); + + it('setter should work with Date', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.created(new Date()); + assert.ok(e.created() instanceof Date); + }); + + it('setter should work with String', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.created(moment().toJSON()); + assert.strictEqual(typeof e.created(), 'string'); + }); + + it('setter should work with Number', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.created(new Date()); + assert.ok(e.created() instanceof Date); + }); + + it('getter should return value', function () { + const now = new Date(); + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .created(now); + + assert.deepStrictEqual(e.created()?.valueOf(), now.getTime()); + }); + + it('should throw error when created is not a Date', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + e.created('hallo'); // this will produce a "Deprecation warning", sorry 😇 + }, /`created`/); + }); + }); + + describe('lastModified()', function () { + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.lastModified(new Date())); + }); + + it('setter should work with moment', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.lastModified(moment()); + assert.ok(moment.isMoment(e.lastModified())); + }); + + it('setter should work with Date', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.lastModified(new Date()); + assert.ok(e.lastModified() instanceof Date); + }); + + it('setter should work with String', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + const date = moment().toJSON(); + e.lastModified(date); + assert.strictEqual(e.lastModified(), date); + }); + + it('setter should work with Number', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.lastModified(new Date()); + assert.ok(e.lastModified() instanceof Date); + }); + + it('getter should return value', function () { + const now = new Date(); + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .lastModified(now); + + assert.deepStrictEqual(e.lastModified()?.valueOf(), now.getTime()); + }); + + it('should throw error when lastModified is not a Date', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + e.lastModified('hallo'); + }, /`lastModified`/); + }); + }); + + describe('class()', function () { + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.class(), null); + + event.class(ICalEventClass.PRIVATE); + assert.strictEqual(event.class(), 'PRIVATE'); + + event.class(null); + assert.strictEqual(event.class(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.class(null)); + assert.deepStrictEqual(e, e.class(ICalEventClass.PRIVATE)); + }); + + it('setter should allow setting null', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.class(ICalEventClass.PRIVATE); + e.class(null); + assert.strictEqual(e.class(), null); + }); + + it('setter should allow setting valid value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.class(ICalEventClass.PRIVATE); + assert.strictEqual(e.class(), 'PRIVATE'); + assert.strictEqual(e.class(), ICalEventClass.PRIVATE); + }); + + it('should throw error when method not allowed', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.class('COOKING'); + }, /Input must be one of the following: PUBLIC, PRIVATE, CONFIDENTIAL/); + assert.throws(function () { + // @ts-ignore + e.class(Infinity); + }, /Input must be one of the following: PUBLIC, PRIVATE, CONFIDENTIAL/); + assert.throws(function () { + // @ts-ignore + e.class(NaN); + }, /Input must be one of the following: PUBLIC, PRIVATE, CONFIDENTIAL/); + assert.throws(function () { + // @ts-ignore + e.class(-1); + }, /Input must be one of the following: PUBLIC, PRIVATE, CONFIDENTIAL/); + }); + }); + + describe('x()', function () { + it('is there', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.x('X-FOO', 'bar')); + }); + }); + + describe('toJSON()', function () { + it('should maybe work', function () { + const date = moment().add(1, 'month'); + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .summary('foo') + .start(date); + + assert.strictEqual(event.toJSON().summary, 'foo', 'summary is okay'); + assert.deepStrictEqual(event.toJSON().start, date.toJSON(), 'start is okay'); + assert.strictEqual(typeof event.toJSON().start, 'string', 'start is string'); + }); + + it('should stringify RRule objects', function() { + const date = new Date(); + const rule = new rrule.RRule({ + freq: rrule.RRule.WEEKLY, + interval: 5, + byweekday: [rrule.RRule.MO, rrule.RRule.FR], + dtstart: date, + until: new Date(Date.UTC(2012, 12, 31)) + }); + + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()) + .summary('foo') + .start(date) + .repeating(rule); + + const json = event.toJSON(); + const before = event.toString(); + assert.ok(typeof json.repeating === 'string'); + + const event2 = new ICalEvent(event.toJSON(), new ICalCalendar()); + const after = event2.toString(); + assert.strictEqual(after, before); + }); + + it('should be compatible with constructor (type check)', function () { + const a = new ICalEvent({ start: new Date() }, new ICalCalendar()); + new ICalEvent(a.toJSON(), new ICalCalendar()); + }); + }); + + describe('transparency()', function () { + it('getter should return value', function () { + const event = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.strictEqual(event.transparency(), null); + + event.transparency(ICalEventTransparency.OPAQUE); + assert.strictEqual(event.transparency(), 'OPAQUE'); + + event.transparency(null); + assert.strictEqual(event.transparency(), null); + }); + + it('setter should return this', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.deepStrictEqual(e, e.transparency(null)); + assert.deepStrictEqual(e, e.transparency(ICalEventTransparency.TRANSPARENT)); + }); + + it('setter should allow setting null', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.transparency(ICalEventTransparency.OPAQUE); + e.transparency(null); + assert.strictEqual(e.transparency(), null); + }); + + it('setter should allow setting valid value', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + e.transparency(ICalEventTransparency.OPAQUE); + assert.strictEqual(e.transparency(), 'OPAQUE'); + }); + + it('should throw error when method not allowed', function () { + const e = new ICalEvent({ start: new Date() }, new ICalCalendar()); + assert.throws(function () { + // @ts-ignore + e.transparency('COOKING'); + }, /TRANSPARENT, OPAQUE/); + assert.throws(function () { + // @ts-ignore + e.transparency(Infinity); + }, /TRANSPARENT, OPAQUE/); + assert.throws(function () { + // @ts-ignore + e.transparency(-1); + }, /TRANSPARENT, OPAQUE/); + }); + }); + + describe('toString()', function () { + it('should make use of escaping', function () { + const e = new ICalEvent({ + start: new Date(), + end: new Date(new Date().getTime() + 3600000), + summary: 'Hel\\\\lo\nW;orl,d' + }, new ICalCalendar()); + + assert.ok(e.toString().indexOf('Hel\\\\\\\\lo\\nW\\;orl\\,d') > -1); + }); + + it('should render correct UIDs', function () { + const cal = new ICalCalendar(); + const event = new ICalEvent({ + id: 42, + start: moment(), + summary: ':)' + }, cal); + + assert.ok(event.toString().indexOf('UID:42\r') > -1); + }); + + it('should include wkst only if provided', function () { + const cal = new ICalCalendar(); + let event = new ICalEvent({ + start: moment(), + end: moment(), + repeating: { + freq: ICalEventRepeatingFreq.WEEKLY + } + }, cal); + assert.ok(!event.toString().includes('WKST'), 'without WKST'); + + event = new ICalEvent({ + start: moment(), + end: moment(), + repeating: { + freq: ICalEventRepeatingFreq.WEEKLY, + startOfWeek: ICalWeekday.SU + } + }, cal); + assert.ok(event.toString().includes('WKST'), 'with WKST'); + }); + + it('should render allday events for luxon dates with timezone correct', function () { + const cal = new ICalCalendar(); + const luxonStartDate = DateTime.fromISO('2024-03-17T00:00:00.000+01:00', {setZone: true}); + const luxonEndDate = DateTime.fromISO('2024-03-18T00:00:00.000+01:00', {setZone: true}); + const event = new ICalEvent({ + allDay: true, + start: luxonStartDate, + end: luxonEndDate, + }, cal); + + const actual = event.toString(); + assert.match(actual, new RegExp('X-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\n'), 'with Microsoft CDO alldayevent set'); + assert.match(actual, new RegExp('X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE\r\n'), 'with Microsoft MSNCalendar alldayevent flag set'); + assert.match(actual, new RegExp(`DTSTART;VALUE=DATE:${luxonStartDate.toFormat('yyyyLLdd')}\r\n`), 'for DTSTART'); + assert.match(actual, new RegExp(`DTEND;VALUE=DATE:${luxonEndDate.toFormat('yyyyLLdd')}\r\n`), 'for DTEND'); + }); + }); +}); diff --git a/test/index.ts b/test/index.ts new file mode 100644 index 000000000..c6192bb77 --- /dev/null +++ b/test/index.ts @@ -0,0 +1,114 @@ +'use strict'; + +import assert from 'assert'; +import ical, { + ICalAlarm, + ICalAlarmType, + ICalAttendee, + ICalAttendeeType, + ICalAttendeeRole, + ICalAttendeeStatus, + ICalCategory, + ICalCalendar, + ICalCalendarMethod, + ICalEvent, + ICalEventStatus, + ICalEventBusyStatus, + ICalEventTransparency, + ICalEventRepeatingFreq, + ICalWeekday, + formatDate, + formatDateTZ, + escape, + foldLines +} from '../src/index.js'; + +describe('ical-generator Index', function() { + describe('default', function () { + it('should be a function', function() { + assert.strictEqual(typeof ical, 'function'); + }); + it('should return a ICalCalendar', function() { + assert.ok(ical() instanceof ICalCalendar); + }); + }); + + describe('Alarm', function () { + it('should export ICalAlarm', function () { + assert.ok(ICalAlarm); + }); + it('should export ICalAlarmType', function () { + assert.ok(ICalAlarmType); + }); + }); + + describe('Attendee', function () { + it('should export ICalAttendee', function () { + assert.ok(ICalAttendee); + }); + it('should export ICalAttendeeType', function () { + assert.ok(ICalAttendeeType); + }); + it('should export ICalAttendeeRole', function () { + assert.ok(ICalAttendeeRole); + }); + it('should export ICalAttendeeStatus', function () { + assert.ok(ICalAttendeeStatus); + }); + }); + + describe('Calendar', function () { + it('should export ICalCalendar', function() { + assert.ok(ICalCalendar); + }); + + it('should export ICalCalendarMethod', function() { + assert.ok(ICalCalendarMethod); + }); + }); + + describe('Category', function () { + it('should export ICalCategory', function () { + assert.ok(ICalCategory); + }); + }); + + describe('Event', function () { + it('should export ICalEvent', function() { + assert.ok(ICalEvent); + }); + it('should export ICalEventStatus', function() { + assert.ok(ICalEventStatus); + }); + it('should export ICalEventBusyStatus', function() { + assert.ok(ICalEventBusyStatus); + }); + it('should export ICalEventTransparency', function() { + assert.ok(ICalEventTransparency); + }); + }); + + describe('Type', function () { + it('should export ICalEventRepeatingFreq', function () { + assert.ok(ICalEventRepeatingFreq); + }); + it('should export ICalWeekday', function () { + assert.ok(ICalWeekday); + }); + }); + + describe('Tools', function () { + it('should export formatDate', function () { + assert.ok(typeof formatDate === 'function'); + }); + it('should export formatDateTZ', function () { + assert.ok(typeof formatDateTZ === 'function'); + }); + it('should export escape', function () { + assert.ok(typeof escape === 'function'); + }); + it('should export foldLines', function () { + assert.ok(typeof foldLines === 'function'); + }); + }); +}); diff --git a/test/issues.ts b/test/issues.ts new file mode 100644 index 000000000..3acf22607 --- /dev/null +++ b/test/issues.ts @@ -0,0 +1,327 @@ +'use strict'; + +import assert from 'assert'; +import moment from 'moment-timezone'; +import ical from '../src/index.js'; +import {ICalEventRepeatingFreq, ICalWeekday} from '../src/types.js'; + +describe('Issues', function () { + describe('Issue #38', function () { + it('should work with Europe/Berlin', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + timezone: 'Europe/Berlin', + events: [{ + start: moment('2016-04-30T22:00:00.000Z'), + summary: 'Example Event', + allDay: true + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('DTSTART;VALUE=DATE:20160501') > -1); + }); + it('should work with Brazil/East', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + timezone: 'Brazil/East', + events: [{ + start: moment('2016-05-01T03:00:00.000Z'), + summary: 'Example Event', + allDay: true + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('DTSTART;VALUE=DATE:20160501') > -1); + }); + }); + + describe('Issue #123', function () { + it('should work with repeating bySetPos', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [{ + start: moment('2016-04-30T22:00:00.000Z'), + end: moment('2016-05-01T00:00:00.000Z'), + summary: 'Example Event', + allDay: true, + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + count: 3, + interval: 1, + byDay: [ICalWeekday.SU], + bySetPos: 3 + } + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('RRULE:FREQ=MONTHLY;COUNT=3;INTERVAL=1;BYDAY=SU;BYSETPOS=3') > -1); + }); + + it('should work with repeating bySetPos by taking all elements of the byDay array', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + events: [{ + start: moment('2016-04-30T22:00:00.000Z'), + end: moment('2016-05-01T00:00:00.000Z'), + summary: 'Example Event', + allDay: true, + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + count: 3, + interval: 1, + byDay: [ICalWeekday.MO, ICalWeekday.FR], + bySetPos: 3 + } + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('RRULE:FREQ=MONTHLY;COUNT=3;INTERVAL=1;BYDAY=MO,FR;BYSETPOS=3') > -1); + }); + }); + + describe('Issue #154', function () { + ['DTSTART', 'DTEND', 'RECURRENCE-ID'].forEach(function (prop) { + it(`it should correctly set ${prop} when using different timezone in calendar and event`, function () { + const calendar = ical({ + timezone: 'America/Buenos_Aires', + events: [ + { + start: moment(1553219772000), + end: moment(1553219772000), + recurrenceId: moment(1553219772000), + timezone: 'America/La_Paz' + } + ] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf(`${prop};TZID=America/La_Paz:20190321T215612`) > -1, str); + }); + }); + }); + + describe('Issue #210', function () { + it('should repeat/exclude with Europe/Berlin', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + timezone: 'Europe/Berlin', + events: [{ + start: moment('2020-08-13T00:00:00+01:00'), + summary: 'Example Event', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + count: 12, + exclude: moment('2020-12-13T00:00:00+01:00') + } + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('EXDATE;TZID=Europe/Berlin:20201213T000000') > -1); + }); + it('should repeat/exclude with America/New_York', function () { + const calendar = ical({ + prodId: '//superman-industries.com//ical-generator//EN', + timezone: 'America/New_York', + events: [{ + start: moment('2020-08-13T00:00:00-05:00'), + summary: 'Example Event', + repeating: { + freq: ICalEventRepeatingFreq.MONTHLY, + count: 12, + exclude: moment('2020-12-13T00:00:00-05:00') + } + }] + }); + + const str = calendar.toString(); + assert.ok(str.indexOf('EXDATE;TZID=America/New_York:20201213T000000') > -1); + }); + }); + + describe('Issue #236', function () { + it('should look like in the example', function () { + const calendar = ical({ + events: [{ + id: 'foo', + start: new Date('2020-08-13T00:00:00-05:00'), + stamp: new Date('2020-08-13T00:00:00-05:00'), + summary: 'Example Event', + location: { + title: 'Los Angeles, California, United States', + geo: { + lon: -118.24368, + lat: 34.05223, + }, + radius: 400 + } + }] + }); + + assert.strictEqual(calendar.toString(), [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//sebbo.net//ical-generator//EN', + 'BEGIN:VEVENT', + 'UID:foo', + 'SEQUENCE:0', + 'DTSTAMP:20200813T050000Z', + 'DTSTART:20200813T050000Z', + 'SUMMARY:Example Event', + 'LOCATION:Los Angeles\\, California\\, United States', + 'X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-RADIUS=400;X-TITLE=Los Angel', + ' es\\, California\\, United States:geo:34.05223,-118.24368', + 'GEO:34.05223;-118.24368', + 'END:VEVENT', + 'END:VCALENDAR' + ].join('\r\n')); + }); + }); + + describe('Issue #377', function () { + it('should not escape quotes in summary', function () { + const calendar = ical({ + events: [ + { + id: 'foo', + start: new Date('2020-08-13T00:00:00-05:00'), + stamp: new Date('2020-08-13T00:00:00-05:00'), + summary:'My "quoted" string' + } + ] + }); + + assert.strictEqual(calendar.toString(), [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//sebbo.net//ical-generator//EN', + 'BEGIN:VEVENT', + 'UID:foo', + 'SEQUENCE:0', + 'DTSTAMP:20200813T050000Z', + 'DTSTART:20200813T050000Z', + 'SUMMARY:My "quoted" string', + 'END:VEVENT', + 'END:VCALENDAR' + ].join('\r\n')); + }); + }); + + describe('Issue #442', function () { + it('should generate floating repeat until value if event is a floating event'); + it('should generate floating repeat exclusion dates if event is a floating event'); + }); + + describe('Issue #459', function () { + it('event.repeating should work with `RRULE:` prefix', function () { + const calendar = ical({ + events: [{ + id: 'foo', + start: new Date('2020-08-13T00:00:00-05:00'), + stamp: new Date('2020-08-13T00:00:00-05:00'), + summary: 'Example Event', + repeating: 'RRULE:FREQ=MONTHLY;COUNT=3;INTERVAL=1' + }] + }); + + assert.strictEqual(calendar.toString(), [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//sebbo.net//ical-generator//EN', + 'BEGIN:VEVENT', + 'UID:foo', + 'SEQUENCE:0', + 'DTSTAMP:20200813T050000Z', + 'DTSTART:20200813T050000Z', + 'RRULE:FREQ=MONTHLY;COUNT=3;INTERVAL=1', + 'SUMMARY:Example Event', + 'END:VEVENT', + 'END:VCALENDAR' + ].join('\r\n')); + }); + it('event.repeating should work without `RRULE:` prefix', function () { + const calendar = ical({ + events: [{ + id: 'foo', + start: new Date('2020-08-13T00:00:00-05:00'), + stamp: new Date('2020-08-13T00:00:00-05:00'), + summary: 'Example Event', + repeating: 'FREQ=MONTHLY;COUNT=3;INTERVAL=1' + }] + }); + + assert.strictEqual(calendar.toString(), [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//sebbo.net//ical-generator//EN', + 'BEGIN:VEVENT', + 'UID:foo', + 'SEQUENCE:0', + 'DTSTAMP:20200813T050000Z', + 'DTSTART:20200813T050000Z', + 'RRULE:FREQ=MONTHLY;COUNT=3;INTERVAL=1', + 'SUMMARY:Example Event', + 'END:VEVENT', + 'END:VCALENDAR' + ].join('\r\n')); + }); + }); + + describe('Issue #569 / 570', function () { + it('event.location should work with `geo` only', function () { + const event = ical().createEvent({ + id: '12345', + summary: 'Hello', + start: new Date('2020-06-15T00:00:00Z'), + end: new Date('2020-06-15T01:00:00Z'), + stamp: new Date('2020-06-15T00:00:00Z') + }); + + event.location({ + geo: { + lat: 52.51147570081018, + lon: 13.342200696373846 + } + }); + + assert.strictEqual(event.toString(), [ + 'BEGIN:VEVENT', + 'UID:12345', + 'SEQUENCE:0', + 'DTSTAMP:20200615T000000Z', + 'DTSTART:20200615T000000Z', + 'DTEND:20200615T010000Z', + 'SUMMARY:Hello', + 'GEO:52.51147570081018;13.342200696373846', + 'END:VEVENT', + '' + ].join('\r\n')); + }); + }); + + describe('Issue #581', function () { + it('event.start and event.end should be swappable', function () { + const calendar = ical(); + const event = calendar.createEvent({ + summary: 'Test Event', + start: '2024-02-29T17:00:00.000Z', + end: '2024-02-29T17:20:00.000Z' + }); + + event.start('2024-02-29T19:00:00.000Z'); + event.end('2024-02-29T19:20:00.000Z'); + + const start = event.start(); + assert.ok(typeof start === 'string'); + assert.strictEqual(start, '2024-02-29T19:00:00.000Z'); + + const end = event.end(); + assert.ok(typeof end === 'string'); + assert.strictEqual(end, '2024-02-29T19:20:00.000Z'); + }); + }); +}); diff --git a/test/lib/index.ts b/test/lib/index.ts deleted file mode 100644 index 6ac7aa3fd..000000000 --- a/test/lib/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -import Magic from '../../src/lib/index.js'; -import assert from 'assert'; - -describe('Example', function () { - it('should work with integers', function () { - assert.strictEqual(Magic.double(2), 4); - }); -}); diff --git a/test/results/generate_01.ics b/test/results/generate_01.ics new file mode 100755 index 000000000..19d0a4f9c --- /dev/null +++ b/test/results/generate_01.ics @@ -0,0 +1,14 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131004T231500Z +SUMMARY:Simple Event +CREATED:20131004T233453Z +LAST-MODIFIED:20131004T233453Z +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_02.ics b/test/results/generate_02.ics new file mode 100755 index 000000000..ccd953fa8 --- /dev/null +++ b/test/results/generate_02.ics @@ -0,0 +1,20 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131004T231500Z +SUMMARY:Sample Event +TRANSP:OPAQUE +LOCATION:localhost +DESCRIPTION:Lorem ipsum dolor sit amet\, consetetur sadipscing elitr\, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam era + t\, sed diam voluptua.\nbeep boop +X-ALT-DESC;FMTTYPE=text/html:

Lorem ipsum dolor sit amet\, consetetur sa + dipscing elitr\, sed diam nonumy eirmod tempor invidunt ut labore et dolor + e magna aliquyam erat\, sed diam voluptua.\nbeep boop

+END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_03.ics b/test/results/generate_03.ics new file mode 100755 index 000000000..90e9ab0b3 --- /dev/null +++ b/test/results/generate_03.ics @@ -0,0 +1,26 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +METHOD:ADD +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART;VALUE=DATE:20131004 +DTEND;VALUE=DATE:20131006 +X-MICROSOFT-CDO-ALLDAYEVENT:TRUE +X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE +SUMMARY:Sample Event +LOCATION:Apple Store Kurfürstendamm\nKurfürstendamm 26\, 10719 Berlin\, + Deutschland +X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Kurfürstendamm 26\, 10719 + Berlin\, Deutschland;X-APPLE-RADIUS=141.1751386318387;X-TITLE=Apple Store + Kurfürstendamm:geo:52.50363,13.32865 +GEO:52.50363;13.32865 +ORGANIZER;CN="Sebastian Pekarek":mailto:mail@sebbo.net +CATEGORIES:WORK +URL;VALUE=URI:http://sebbo.net/ +ATTACH:https://files.sebbo.net/calendar/attachments/foo +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_04.ics b/test/results/generate_04.ics new file mode 100755 index 000000000..5bd6e562b --- /dev/null +++ b/test/results/generate_04.ics @@ -0,0 +1,51 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VTIMEZONE +TZID:Europe/Berlin +TZURL:http://tzurl.org/zoneinfo-outlook/Europe/Berlin +X-LIC-LOCATION:Europe/Berlin +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19700329T020000 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19701025T030000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +UID:1 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131006T231500Z +RRULE:FREQ=MONTHLY +EXDATE:20131006T231500Z +SUMMARY:repeating by month +END:VEVENT +BEGIN:VEVENT +UID:2 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART;TZID=Europe/Berlin:20131004T223930 +DTEND;TZID=Europe/Berlin:20131006T231500 +RRULE:FREQ=DAILY;COUNT=2 +SUMMARY:repeating by day\, twice +END:VEVENT +BEGIN:VEVENT +UID:3 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131006T231500Z +RRULE:FREQ=WEEKLY;INTERVAL=3;UNTIL=20140101T000000Z +SUMMARY:repeating by 3 weeks\, until 2014 +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_05.ics b/test/results/generate_05.ics new file mode 100755 index 000000000..c1b17b980 --- /dev/null +++ b/test/results/generate_05.ics @@ -0,0 +1,12 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VEVENT +UID:1 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930 +DTEND:20131006T231500 +SUMMARY:floating +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_06.ics b/test/results/generate_06.ics new file mode 100755 index 000000000..580b65229 --- /dev/null +++ b/test/results/generate_06.ics @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +METHOD:PUBLISH +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART;VALUE=DATE:20131004 +X-MICROSOFT-CDO-ALLDAYEVENT:TRUE +X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE +SUMMARY:Sample Event +ORGANIZER;CN="Sebastian Pekarek":mailto:mail@sebbo.net +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;DELEGATED-FROM="matt@examp + le.com";CN="John":MAILTO:john@example.com +ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=DELEGATED;DELEGATED-TO="john@exampl + e.com";CN="Smith, Matt; (\"Sales\")":MAILTO:matt@example.com +BEGIN:VALARM +ACTION:DISPLAY +TRIGGER:-PT10M +REPEAT:2 +DURATION:PT1M +DESCRIPTION:Sample Event +END:VALARM +BEGIN:VALARM +ACTION:DISPLAY +TRIGGER:-PT1H +DESCRIPTION:I'm a reminder :) +END:VALARM +URL;VALUE=URI:http://sebbo.net/ +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_07.ics b/test/results/generate_07.ics new file mode 100755 index 000000000..8bcbf70be --- /dev/null +++ b/test/results/generate_07.ics @@ -0,0 +1,30 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VEVENT +UID:1 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131006T231500Z +RRULE:FREQ=MONTHLY;BYMONTH=1,4,7,10 +SUMMARY:repeating by month +END:VEVENT +BEGIN:VEVENT +UID:2 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +RRULE:FREQ=DAILY;COUNT=2;BYDAY=MO,WE,FR +SUMMARY:repeating on Mo/We/Fr\, twice +END:VEVENT +BEGIN:VEVENT +UID:3 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131006T231500Z +RRULE:FREQ=DAILY;INTERVAL=1;BYMONTHDAY=1,15 +SUMMARY:repeating on 1st and 15th +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_08.ics b/test/results/generate_08.ics new file mode 100755 index 000000000..5e73d7ab0 --- /dev/null +++ b/test/results/generate_08.ics @@ -0,0 +1,16 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131004T231500Z +SUMMARY:Simple Event +ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP + =TRUE:MAILTO:mail@example.com +CREATED:20131004T233453Z +LAST-MODIFIED:20131004T233453Z +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/results/generate_09.ics b/test/results/generate_09.ics new file mode 100755 index 000000000..f1adf168e --- /dev/null +++ b/test/results/generate_09.ics @@ -0,0 +1,17 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//sebbo.net//ical-generator.tests//EN +METHOD:REQUEST +BEGIN:VEVENT +UID:123 +SEQUENCE:0 +DTSTAMP:20131004T233453Z +DTSTART:20131004T223930Z +DTEND:20131004T231500Z +SUMMARY:Sample Event +ORGANIZER;CN="Sebastian Pekarek";EMAIL=mail@sebbo.net:mailto:mail2@example + 2.com +ATTENDEE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP + =TRUE:MAILTO:mail@example.com +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/test/tools.ts b/test/tools.ts new file mode 100644 index 000000000..aef8e43e9 --- /dev/null +++ b/test/tools.ts @@ -0,0 +1,370 @@ +'use strict'; + +import assert from 'assert'; +import moment from 'moment'; +import momentTz from 'moment-timezone'; +import {DateTime} from 'luxon'; +import dayjs from 'dayjs'; +import dayJsUTCPlugin from 'dayjs/plugin/utc.js'; +import dayJsTimezonePlugin from 'dayjs/plugin/timezone.js'; +import { + checkDate, + escape, + foldLines, + formatDate, + formatDateTZ, + toDate, + toDurationString +} from '../src/tools.js'; + +dayjs.extend(dayJsUTCPlugin); +dayjs.extend(dayJsTimezonePlugin); + +describe('ICalTools', function () { + describe('formatDate()', function () { + describe('Date / String', function () { + it('timezone=0 dateonly=0 floating=0', function () { + assert.strictEqual( + formatDate(null, '2018-07-05T18:24:00.052Z', false, false), + '20180705T182400Z' + ); + }); + it('timezone=0 dateonly=0 floating=1', function () { + assert.strictEqual( + formatDate(null, '2018-07-05T18:24:00.052Z', false, true), + '20180705T182400' + ); + }); + it('timezone=0 dateonly=1 floating=0', function () { + assert.strictEqual( + formatDate(null, '2018-07-05T18:24:00.052Z', true, false), + '20180705' + ); + }); + it('timezone=0 dateonly=1 floating=1', function () { + assert.strictEqual( + formatDate(null, '2018-07-05T18:24:00.052Z', true, true), + '20180705' + ); + }); + it('timezone=1 dateonly=0 floating=0', function () { + assert.strictEqual( + formatDate('Europe/Berlin', '2018-07-05T18:24:00.052', false, false), + '20180705T182400' + ); + }); + it('timezone=1 dateonly=0 floating=1', function () { + assert.strictEqual( + formatDate('Europe/Berlin', '2018-07-05T18:24:00.052', false, true), + '20180705T182400' + ); + }); + it('timezone=1 dateonly=1 floating=0', function () { + assert.strictEqual( + formatDate('Europe/Berlin', '2018-07-05T18:24:00.052', true, false), + '20180705' + ); + }); + it('timezone=1 dateonly=1 floating=1', function () { + assert.strictEqual( + formatDate('Europe/Berlin', '2018-07-05T18:24:00.052', true, true), + '20180705' + ); + }); + it('should work with / prefixed global timezones', function () { + assert.strictEqual( + formatDate('/Europe/Berlin', '2018-07-05T18:24:00.052', false, false), + '20180705T182400' + ); + }); + }); + describe('moment.js', function () { + it('should work without setting a timezone', function () { + assert.strictEqual( + formatDate(null, moment('2018-07-05T18:24:00.052Z'), false, false), + '20180705T182400Z' + ); + }); + it('should work with timezone in event / calendar (with moment-timezone)', function () { + assert.strictEqual( + formatDate('Canada/Saskatchewan', moment('2018-07-05T18:24:00.052Z'), false, false), + '20180705T122400' + ); + }); + it('should work with floating flag', function () { + assert.strictEqual( + formatDate(null, moment('2018-07-05T18:24:00.052'), false, true), + '20180705T182400' + ); + }); + }); + describe('moment-timezone.js', function () { + it('should work without setting a timezone', function () { + assert.strictEqual( + formatDate(null, momentTz('2018-07-05T18:24:00.052Z'), false, false), + '20180705T182400Z' + ); + }); + it('should work with timezone in event / calendar (with moment-timezone)', function () { + assert.strictEqual( + formatDate('Canada/Saskatchewan', momentTz('2018-07-05T18:24:00.052Z'), false, false), + '20180705T122400' + ); + }); + it('should work with floating flag', function () { + assert.strictEqual( + formatDate(null, momentTz('2018-07-05T18:24:00.052'), false, true), + '20180705T182400' + ); + }); + }); + describe('Luxon', function () { + it('should work without setting a timezone', function () { + assert.strictEqual( + formatDate(null, DateTime.fromISO('2018-07-05T18:24:00.052Z'), false, false), + '20180705T182400Z' + ); + }); + it('should work with timezone in event / calendar (with moment-timezone)', function () { + assert.strictEqual( + formatDate('Canada/Saskatchewan', DateTime.fromISO('2018-07-05T18:24:00.052Z'), false, false), + '20180705T122400' + ); + }); + it('should work with floating flag', function () { + assert.strictEqual( + formatDate(null, DateTime.fromISO('2018-07-05T18:24:00.052'), false, true), + '20180705T182400' + ); + }); + it('should work with dateonly flag', function () { + assert.strictEqual( + formatDate(null, DateTime.fromISO('2018-07-05T18:24:00.052'), true, false), + '20180705' + ); + }); + it('should work with dateonly flag, non floating, and date with timezone', function () { + assert.strictEqual( + formatDate(null, DateTime.fromISO('2024-03-17T00:00:00.000+01:00', {setZone: true}), true), + '20240317' + ); + }); + }); + describe('Day.js', function () { + it('should work without setting a timezone', function () { + assert.strictEqual( + formatDate(null, dayjs('2018-07-05T18:24:00.052Z'), false, false), + '20180705T182400Z' + ); + }); + it('should work with timezone in event / calendar (with moment-timezone)', function () { + assert.strictEqual( + formatDate('Canada/Saskatchewan', dayjs('2018-07-05T18:24:00.052Z'), false, false), + '20180705T122400' + ); + }); + it('should work with floating flag', function () { + assert.strictEqual( + formatDate(null, dayjs('2018-07-05T18:24:00.052'), false, true), + '20180705T182400' + ); + }); + it('should work with dateonly flag', function () { + assert.strictEqual( + formatDate(null, dayjs('2018-07-05T18:24:00.052'), true, false), + '20180705' + ); + }); + }); + }); + + describe('formatDateTZ()', function () { + it('should work with timezone', function () { + const ed = {timezone: 'Europe/Berlin'}; + assert.strictEqual( + formatDateTZ('Europe/Berlin', 'DSTART', moment('2018-07-02T15:48:05.000Z'), ed), + 'DSTART;TZID=Europe/Berlin:20180702T174805' + ); + }); + it('should work without timezone', function () { + assert.strictEqual( + formatDateTZ(null, 'DSTART', '2018-07-02T15:48:05.000Z', {}), + 'DSTART:20180702T154805Z' + ); + }); + it('should work without eventdata parameter', function () { + assert.strictEqual( + formatDateTZ(null, 'DSTART', '2018-07-02T15:48:05.000Z'), + 'DSTART:20180702T154805Z' + ); + }); + }); + + describe('escape()', function () { + it('should escape \\', function () { + assert.strictEqual( + escape('Lorem \\ipsum', false), + 'Lorem \\\\ipsum' + ); + }); + it('should escape ;', function () { + assert.strictEqual( + escape('Lorem ;ipsum', false), + 'Lorem \\;ipsum' + ); + }); + it('should escape ,', function () { + assert.strictEqual( + escape('Lorem, ipsum', false), + 'Lorem\\, ipsum' + ); + }); + it('should escape \\r', function () { + assert.strictEqual( + escape('Lorem \ripsum', false), + 'Lorem \\nipsum' + ); + }); + it('should escape \\n', function () { + assert.strictEqual( + escape('Lorem \nipsum', false), + 'Lorem \\nipsum' + ); + }); + it('should escape \\r\\n', function () { + assert.strictEqual( + escape('Lorem \r\nipsum', false), + 'Lorem \\nipsum' + ); + }); + it('should escape " in text when inQuotes = true', function () { + assert.strictEqual( + escape('Lorem "ipsum', true), + 'Lorem \\"ipsum' + ); + }); + it('should not escape " in text when inQuotes = false', function () { + assert.strictEqual( + escape('Lorem "ipsum', false), + 'Lorem "ipsum' + ); + }); + }); + + describe('foldLines()', function () { + it('should basically work correctly', function () { + assert.strictEqual( + foldLines('12345678ikjhgztrde546rf7g8hjiomkjnhgqfcdxerdftgzuinjhgcfvtzvzvuwcbiweciujzvguhbghbbqwxowidoi21e8981'), + '12345678ikjhgztrde546rf7g8hjiomkjnhgqfcdxerdftgzuinjhgcfvtzvzvuwcbiweciujz\r\n vguhbghbbqwxowidoi21e8981' + ); + }); + it('should not split surrogate pairs', function () { + assert.strictEqual( + foldLines('👋🏼12345678ikjhgztrde546rf7g8hjiomkjnhgqfcdxerdftgzuinjhgcfvtzvzvuwcbiweciujvguhbghbbqwxowidoi21e8981'), + '👋🏼12345678ikjhgztrde546rf7g8hjiomkjnhgqfcdxerdftgzuinjhgcfvtzvzvuwcb\r\n iweciujvguhbghbbqwxowidoi21e8981' + ); + }); + }); + + describe('checkDate()', function () { + describe('Date', function () { + it('should work with valid Date', function () { + const date = new Date(); + assert.equal(checkDate(date, 'foo'), date); + }); + it('should throw error for invalid Date', function () { + const date = new Date('foo'); + assert.throws(() => { + checkDate(date, 'foo'); + }, /`foo` has to be a valid date!/); + }); + }); + describe('String', function () { + it('should work with valid String', function () { + const date = '2021-03-28T13:15:23.587Z'; + assert.equal(checkDate(date, 'foo'), date); + }); + it('should throw error for invalid String', function () { + const date = 'foo'; + assert.throws(() => { + checkDate(date, 'foo'); + }, /`foo` has to be a valid date!/); + }); + }); + describe('Luxon', function () { + it('should work with valid Luxon', function () { + const date = DateTime.now(); + assert.equal(checkDate(date, 'foo'), date); + }); + it('should throw error for invalid Luxon', function () { + const date = DateTime.fromISO('foo'); + assert.throws(() => { + checkDate(date, 'foo'); + }, /`foo` has to be a valid date!/); + }); + }); + describe('Moment', function () { + it('should work with valid Moment', function () { + const date = moment(); + assert.equal(checkDate(date, 'foo'), date); + }); + it('should throw error for invalid Moment', function () { + const date = moment('foo', 'MM/DD/YYYY', true); + assert.throws(() => { + checkDate(date, 'foo'); + }, /`foo` has to be a valid date!/); + }); + }); + describe('Day.js', function () { + it('should work with valid Day.js', function () { + const date = dayjs(); + assert.equal(checkDate(date, 'foo'), date); + }); + it('should throw error for invalid Day.js', function () { + const date = dayjs('foo'); + assert.throws(() => { + checkDate(date, 'foo'); + }, /`foo` has to be a valid date!/); + }); + }); + }); + + describe('toDate()', function () { + it('should work with strings', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(date.toJSON()), date); + }); + it('should work with native Date', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(date), date); + }); + it('should work with moment object', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(moment(date)), date); + }); + it('should work with moment-timezone object', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(momentTz(date)), date); + }); + it('should work with Day.js object', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(dayjs(date)), date); + }); + it('should work with luxon DateTime object', function () { + const date = new Date(); + assert.deepStrictEqual(toDate(DateTime.fromJSDate(date)), date); + }); + }); + + describe('toDurationString()', function () { + it('should work', async function () { + assert.strictEqual(toDurationString(0), 'PT0S'); + assert.strictEqual(toDurationString(1), 'PT1S'); + assert.strictEqual(toDurationString(60), 'PT1M'); + assert.strictEqual(toDurationString(3600), 'PT1H'); + assert.strictEqual(toDurationString(86400), 'P1D'); + + assert.strictEqual(toDurationString(-3600), '-PT1H'); + }); + }); +}); diff --git a/test/types.ts b/test/types.ts new file mode 100644 index 000000000..1571974e5 --- /dev/null +++ b/test/types.ts @@ -0,0 +1,54 @@ +/** + * Check if stubs are working + */ + +import assert from 'assert'; +import dayjs from 'dayjs'; +import { DateTime } from 'luxon'; +import moment from 'moment'; +import momentTz from 'moment-timezone'; +import rrule from 'rrule'; + +import { + ICalAttendeeData, + ICalAttendeeJSONData, + ICalCalendarData, + ICalCalendarJSONData, + ICalCategoryData, + ICalCategoryJSONData, + ICalDayJsStub, + ICalEventJSONData, + ICalLuxonDateTimeStub, + ICalMomentStub, + ICalMomentTimezoneStub, + ICalRRuleStub +} from '../src/index.js'; + +const dayJsTest = dayjs() satisfies ICalDayJsStub; +const luxonTest = DateTime.now() satisfies ICalLuxonDateTimeStub; +const momentTest = moment() satisfies ICalMomentStub; +const momentTimezoneTest = momentTz() satisfies ICalMomentTimezoneStub; + +const RRule = rrule.RRule; +const rruleTest = new RRule({ freq: RRule.WEEKLY, dtstart: new Date() }) satisfies ICalRRuleStub; + +const attendeeJson = {} as ICalAttendeeJSONData satisfies ICalAttendeeData; +const calendarJson = {} as ICalCalendarJSONData satisfies ICalCalendarData; +const categoryJson = {} as ICalCategoryJSONData satisfies ICalCategoryData; +const eventJson = {} as ICalEventJSONData satisfies ICalEventJSONData; + +describe('ical-generator Types', function () { + it('stubs should be compatible with third party libraries', function () { + assert.ok(dayJsTest, 'day.js stub should be compatible'); + assert.ok(luxonTest, 'luxon stub should be compatible'); + assert.ok(momentTest, 'moment stub should be compatible'); + assert.ok(momentTimezoneTest, 'moment-timezone stub should be compatible'); + assert.ok(rruleTest, 'rrule stub should be compatible'); + }); + it('calendar data should be compatible with calendar json data', function () { + assert.ok(attendeeJson, 'attendee json data should be compatible'); + assert.ok(calendarJson, 'calendar json data should be compatible'); + assert.ok(categoryJson, 'category json data should be compatible'); + assert.ok(eventJson, 'event json data should be compatible'); + }); +}); diff --git a/tsup.config.ts b/tsup.config.ts index 5343aa217..33e4d45aa 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -3,9 +3,7 @@ import { defineConfig } from 'tsup'; export default defineConfig({ clean: true, entry: [ - 'src/lib/index.ts', - 'src/bin/cli.ts', - 'src/bin/start.ts' + 'src/index.ts' ], format: ['esm', 'cjs'], dts: true, diff --git a/typedoc.json b/typedoc.json index f8625ec49..af67f146f 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,11 +1,11 @@ { - "entryPoints": ["./src/lib/index.ts"], + "entryPoints": ["./src/index.ts"], "exclude": [], "excludeInternal": true, "excludePrivate": true, "excludeProtected": true, "includeVersion": true, - "name": "", + "name": "ical-generator", "out": "./docs/reference", "plugin": [], "readme": "README.md",